/attribute: wartość bazowa kontra modyfikatory i dlaczego ciągle się resetują
Ustawienie wartości bazowej jest trwałe, a modyfikatora nie – chyba że wybierzesz niewłaściwą operację. Trzy operacje, kolejność nakładania i pułapka slotów.
/attribute wygląda jak jedno polecenie z trzema podpoleceniami. W rzeczywistości są to dwa różne systemy, które akurat mają tę samą nazwę, a ich pomieszanie 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ść jednostki. Utrzymuje się po ponownym załadowaniu i nie jest usuwana przez nic poza innymbase set.modifier addnakłada tymczasową korektę. Ma identyfikator i można ją usunąć za pomocą tego identyfikatora.
Jeśli Twoja zmiana znika po ponownym zalogowaniu, użyłeś modyfikatora i coś go usunęło. Jeśli Twoja zmiana nie chce zniknąć, użyłeś base set i potrzebujesz base reset.
Trzy operacje i kolejność ich stosowania
| Operacja | Działanie | Stosowana |
|---|---|---|
add_value | wartość + n | jako pierwsza |
add_multiplied_base | wartość + (wartość bazowa × n) | jako druga |
add_multiplied_total | suma bieżąca × (1 + n) | jako ostatnia |
Kolejność jest stała i ma znaczenie. Zaczynając od wartości bazowej 20, następnie add_value 10 i add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base zawsze mnoży oryginalną wartość bazową, a nie sumę bieżącą — dlatego dwie z nich sumują się addytywnie, a nie składają.
Identyfikatory modyfikatorów są teraz przestrzeniami nazw
Starsze wersje używały UUID. Nowoczesne wersje używają identyfikatora z przestrzenią nazw:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Dodanie drugiego modyfikatora z tym samym identyfikatorem zastępuje pierwszy, zamiast go sumować. Jest to zamierzony sposób odświeżania wzmocnienia — nie musisz go najpierw usuwać.
Modyfikatory ekwipunku znajdują się na przedmiocie, a nie na jednostce
Bonus do obrażeń zaczarowanego 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"}]]
slot jest wymagane i jest częstym błędem. Pominięcie go sprawia, że modyfikator działa we wszystkich slotach, więc miecz w ekwipunku wzmacnia Cię, gdy tam leży.
Prawidłowe sloty: mainhand, offhand, head, chest, legs, feet, armor, body, any.
Odczytywanie wartości
/attribute @s minecraft:max_health get
zwraca wartość bazową, a nie efektywną sumę. Aby uzyskać sumę wraz z modyfikatorami, użyj execute store result na tablicy wyników i odczytaj ją.
Zbuduj dowolny z tych elementów — w tym formę komponentu przedmiotu z ustawionym slotem — w Kreatorze Komend Jednostek i Walki.