/attribute : valeur de base vs modificateurs, et pourquoi la vôtre se réinitialise sans cesse
Définir une valeur de base est permanent, mais définir un modificateur ne l'est pas — à moins de choisir la mauvaise opération. Les trois opérations, l'ordre d'empilement et le piège de l'emplacement.
/attribute ressemble à une seule commande avec trois sous-commandes. Il s'agit en réalité de deux systèmes différents qui partagent le même nom, et c'est en les mélangeant que les valeurs reviennent sans cesse à leur état initial.
Base vs modificateur
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setréécrit la valeur propre de l'entité. Elle persiste après les rechargements et n'est supprimée par rien d'autre qu'un autrebase set.modifier addajoute un ajustement temporaire par-dessus. Il possède un identifiant et peut être supprimé par cet identifiant.
Si votre modification disparaît après une reconnexion, vous avez utilisé un modificateur et quelque chose l'a effacé. Si votre modification ne disparaît pas, vous avez utilisé base set et avez besoin de base reset.
Les trois opérations et leur ordre d'application
| Opération | Action | Application |
|---|---|---|
add_value | valeur + n | en premier |
add_multiplied_base | valeur + (base × n) | en second |
add_multiplied_total | total courant × (1 + n) | en dernier |
L'ordre est fixe et important. En partant d'une base de 20, puis add_value 10 et add_multiplied_total 0.5 :
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base multiplie toujours la base originale, et non le total courant — c'est pourquoi deux d'entre eux s'empilent de manière additive plutôt que de se composer.
Les identifiants de modificateurs sont désormais des identifiants avec espace de noms
Les anciennes versions utilisaient un UUID. Les versions modernes utilisent un identifiant avec espace de noms (namespaced id) :
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Ajouter un second modificateur avec le même identifiant remplace le premier plutôt que de l'empiler. C'est la manière prévue de rafraîchir un buff — vous n'avez pas besoin de le supprimer d'abord.
Les modificateurs d'équipement résident sur l'objet, pas sur l'entité
Le bonus de dégâts d'une épée enchantée est un composant d'objet (item component) attribute_modifiers, et il ne s'applique que lorsque l'objet est dans le bon emplacement :
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot est obligatoire et constitue l'erreur habituelle. Omettez-le et le modificateur s'appliquera dans chaque emplacement, de sorte qu'une épée dans votre inventaire vous buffera pendant qu'elle y est.
Emplacements valides : mainhand, offhand, head, chest, legs, feet, armor, body, any.
Lire une valeur
/attribute @s minecraft:max_health get
renvoie la base, pas le total effectif. Pour obtenir le total incluant les modificateurs, utilisez execute store result sur un tableau de score et lisez-le.
Construisez n'importe laquelle de ces formes — y compris la forme de composant d'objet avec l'emplacement défini — dans le Générateur de commandes d'entité et de combat.