/attribute: wartość bazowa kontra modyfikatory — i dlaczego twoja ciągle się resetuje
Ustawienie wartości bazowej jest trwałe, a ustawienie modyfikatora nie — chyba że wybierzesz złą operację. Trzy operacje, kolejność nakładania i pułapka slotów.
/attribute wygląda jak jedna komenda z trzema podkomendami. W rzeczywistości to dwa różne systemy, które przypadkiem dzielą nazwę — i mieszanie ich jest powodem, dla którego wartości ciągle wracają do poprzedniego stanu.
wartość bazowa kontra modyfikator
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setnadpisuje własną wartość encji. Jest trwałe przez przeładowania i nie usuwa go nic poza kolejnymbase set.modifier addnakłada nazwaną korektę na wierzch. Jest zapisywany razem z encją tak samo jak wartość bazowa, ma własne id i można go usunąć po tym id.
Jeśli twoja zmiana nie chce zniknąć, to albo użyłeś base set i potrzebujesz base reset, albo dodałeś modyfikator, który wymaga modifier remove <id>.
Trzy operacje i kolejność ich stosowania
| Operacja | Działanie | Stosowana |
|---|---|---|
add_value | wartość + n | pierwsza |
add_multiplied_base | wartość + (baza × n) | druga |
add_multiplied_total | suma bieżąca × (1 + n) | ostatnia |
Kolejność jest stała i ma znaczenie. Zaczynając od bazy 20, potem add_value 10 i add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base mnoży bazę po dodaniu modyfikatorów add_value — a nie sumę bieżącą — dlatego dwa takie modyfikatory sumują się addytywnie, a nie składają procentowo.
Id modyfikatorów mają teraz przestrzeń nazw
Starsze wersje używały UUID. Współczesne wersje używają id z przestrzenią nazw:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Dodanie drugiego modyfikatora o tym samym id kończy się niepowodzeniem z komunikatem „Modifier … is already present", zamiast go nałożyć lub zastąpić. Aby odświeżyć efekt, najpierw go modifier remove.
Modyfikatory ekwipunku siedzą na przedmiocie, nie na encji
Premia do obrażeń miecza to komponent przedmiotu attribute_modifiers i działa tylko wtedy, gdy przedmiot znajduje się w odpowiednim slocie:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
Pominięcie slot to najczęstszy błąd. Domyślnie przyjmuje wartość any, więc modyfikator działa w każdym slocie ekwipunku — miecz wzmacnia cię z offhandu albo ze slotu zbroi, nie tylko z głównej ręki.
Prawidłowe sloty: mainhand, offhand, hand, head, chest, legs, feet, armor, body, saddle, any.
Odczyt wartości z powrotem
/attribute @s minecraft:max_health get
zwraca efektywną sumę, wraz z modyfikatorami. /attribute @s minecraft:max_health base get zwraca samą wartość bazową.
Zbuduj dowolny z tych elementów — w tym formę komponentu przedmiotu z ustawionym slotem — w Kreatorze komend do encji i walki.