6 votes

Comment modifier un objet lorsqu'il se trouve dans l'inventaire du joueur ?

Je me demande s'il est possible de modifier une partie d'un NBT ou d'ajouter un NBT à un objet tenu par un joueur. Mon but est de créer des enchantements personnalisés. Par exemple, lorsqu'un joueur utilise un objet pour enchanter une épée, il obtient le score "EnchantMight" 5, ce qui ferait que la prochaine arme qu'il tient obtiendrait "Might V". En réalité, il s'agirait simplement d'un bonus de +5 pour les dégâts dans le NBT. Je sais que /replaceitem serait une option, mais cela ne fonctionne que si le nouvel objet est prédéterminé.

J'ai espéré

/data modify entity @p {SelectedItem:[{AttributeModifiers:[{AttributeName:"generic.attack_damage",Amount:5,Operation:0,UUID:[I;-120919,1237,151734,-2474],Name:"generic.attack_damage"}]}]} insert/append/merge

fonctionnerait, mais ce n'est manifestement pas le cas.

Si quelqu'un a ne serait-ce qu'une idée à me soumettre, cela m'aiderait. Si vous donnez une réponse en rapport avec le datapack, merci d'expliquer clairement car je n'y connais pas grand chose.

4voto

Richie Frame Points 1800

Mise à jour 1.17

Depuis la version 1.17, une table de butin n'est plus nécessaire, mais la boîte du shulker l'est toujours.

Préparation

Vous devez d'abord poser une boîte de shulker jaune et placer un objet temporaire (comme un morceau de terre) dans l'emplacement 0 (coin supérieur gauche).

Important : veillez à ce que la boîte de Shulker soit vide et écrivez-y toujours avec le chemin NBT. Items[0] .

L'emplacement standard de cette boîte est (-30000000, 0, 1602).

Commandes

Avec la version 1.17, vous pouvez utiliser /item pour copier l'élément dans la boîte de Shulker.

item replace block -30000000 0 1602 container.0 from entity @s weapon.mainhand

Ensuite, vous pouvez modifier votre objet autant que vous le souhaitez à l'intérieur de la boîte de shulker en utilisant les commandes de votre choix. Par exemple :

data modify block (x) (y) (z) Items[0] merge value {tag:{Enchantments:[{id:"minecraft:sharpness", lvl:1s}]}}
execute store result block (x) (y) (z) Items[0].tag.Enchantments[0].lvl short 1.0 run scoreboard players get FakePlayer myObjective

Enfin, remplacez l'article par /item :

item replace entity @s weapon.mainhand from block -30000000 0 1602 container.0

3voto

DidThis Points 111

1.16

Une solution intéressante pour modifier le NBT d'un objet personnalisé est de le copier dans un coffre, de le modifier dans le coffre (où il peut être modifié) et d'utiliser ensuite la fonction /loot en replace pour remplacer l'emplacement de l'élément.

Remarque : Lorsque la version 1.17 sera entièrement disponible, vous pourrez remplacer cette méthode par la méthode /item commandement.

Préparation extérieure

Pour ce faire, vous aurez besoin d'une table de butin spéciale. Cliquez sur ce lien pour accéder à un pack de données contenant la table de loot dont vous aurez besoin.

Cette table de butin fera en sorte qu'une boîte de shulker jaune laissera tomber son contenu au lieu d'elle-même lorsqu'elle sera brisée à l'aide d'un outil portant la balise personnalisée. {drop_contents:1b} .

Préparation à Minecraft

Vous devez d'abord poser une boîte de shulker jaune et placer un objet temporaire (comme un morceau de terre) dans l'emplacement 0 (coin supérieur gauche).

Important : Veillez à ce que la boîte de Shulker soit vide et écrivez-y toujours avec le chemin NBT. Items[0] .

L'emplacement standard de cette boîte est (-30000000, 0, 1602).

Commandes

La première étape consiste à copier l'élément dans la boîte de Shulker :

data modify block (x) (y) (z) Items[0] merge from entity (selector) SelectedItem

(Note : si votre source de copie inclut le Slot vous devrez utiliser trois commandes distinctes pour copier la balise ID , Count y tag séparément.)

La deuxième étape consiste à modifier cet élément, en utilisant les commandes de votre choix pour faire référence à la boîte de Shulker. Voici quelques exemples de commandes. Essayez-les pour votre premier essai. Ces commandes règleront le niveau d'enchantement Sharpness sur la valeur du scoreboard que vous aurez spécifiée.

data modify block (x) (y) (z) Items[0] merge value {tag:{Enchantments:[{id:"minecraft:sharpness", lvl:1s}]}}
execute store result block (x) (y) (z) Items[0].tag.Enchantments[0].lvl short 1.0 run scoreboard players get FakePlayer myObjective

Une fois la modification terminée, voici la magie : utilisez /loot pour remplacer l'élément dans l'emplacement spécifié.

loot replace entity (selector) weapon.mainhand 1 mine block (x) (y) (z) minecraft:air{drop_contents:1b}

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X