Tout d'abord, vous pouvez facilement donner une épée avec une durabilité personnalisée. Utilisez la balise Dommage
, qui représente les dégâts subis par l'objet. Puisqu'une épée en diamant a une durabilité de 1562, un Dommage
de 1561 ne laissera plus qu'une durabilité. Le Dommage
peut être trouvé sur ce site web dans la première ligne du tableau. Consultez le bas de cette réponse pour en savoir plus sur les balises NBT.
Deuxièmement, vous pouvez faire en sorte que les armes infligent des effets de statut, mais c'est un peu difficile. Vous devez d'abord mettre en place un scoreboard qui suit les utilisations d'une arme particulière (disons que votre épée empoisonnée est une épée en diamant nommée "Epée empoisonnée" avec un nom vert foncé, donnée avec /give @s minecraft:diamond_sword{display:{Name:"{\"text\":\"Epée empoisonnée\",\"color\":\"dark_green\"}"}}
) donc dans ce cas une épée en diamant. En utilisant le wiki lié, nous utiliserions /scoreboard objectives add swordUsed minecraft.used:minecraft.diamond_sword
. Ensuite, dans une fonction de tick dans un datapack (nous avons besoin du datapack afin de pouvoir faire des raycast), nous devons vérifier pour tout joueur ayant utilisé son épée et exécuter une fonction qui fait un raycast depuis eux :
execute as @a[scores={swordUsed=1..},nbt={SelectedItem:{tag:{display:{Name:"{\"text\":\"Epée empoisonnée\",\"color\":\"dark_green\"}"}}}}] at @s anchored eyes positioned ^ ^ ^0.1 run function namespace:raycasting_function
La fonction de raycasting qui est exécutée devra faire deux choses : compter le nombre de blocs qu'elle avance (pour ne pas avancer indéfiniment), et donner à la première entité rencontrée l'effet de poison. Voici un exemple de fonction :
#utilisez le scoreboard swordUsed pour suivre les itérations de la fonction :
scoreboard players add @s swordUsed 1
#s'il n'y a pas d'entité et que le bloc est de l'air, de l'eau ou de la lave, exécutez la fonction mais positionnée à 0,1 bloc devant où elle a été exécutée cette fois
#de cette façon, elle avancera de 0,1 bloc à chaque répétition, jusqu'à ce qu'elle heurte un bloc ou une entité, ou ait parcouru 5 blocs (0,1 blocs multipliés par 50 répétitions max = 5 blocs)
execute if score @s swordUsed matches ..50 if block ~ ~ ~ minecraft:air unless entity @e[dx=0.1,dy=0.1,dz=0.1] positioned ^ ^ ^0.1 run function namespace:raycasting_function
execute if score @s swordUsed matches ..50 if block ~ ~ ~ minecraft:water unless entity @e[dx=0.1,dy=0.1,dz=0.1] positioned ^ ^ ^0.1 run function namespace:raycasting_function
execute if score @s swordUsed matches ..50 if block ~ ~ ~ minecraft:lava unless entity @e[dx=0.1,dy=0.1,dz=0.1] positioned ^ ^ ^0.1 run function namespace:raycasting_function
#s'il y a une entité là où se trouve la fonction, donnez-lui un effet
execute as entity @e[dx=0.1,dy=0.1,dz=0.1] run effect give @s minecraft:poison [] [] []
#réinitialiser le scoreboard s'il y a une entité
execute if entity @e[dx=0.1,dy=0.1,dz=0.1] run scoreboard players set @s swordUsed 0
La raison pour laquelle nous utilisons dx=
, dy=
et dz=
plutôt que distance=
lors de la vérification des entités est à cause de ce post, où j'ai appris que distance ne sélectionne que la position des coordonnées de l'entité tandis que dx
, dy
et dz
sélectionnent leur hitbox.
Je n'ai pas encore testé cela, mais j'ai l'intention de le faire dans la semaine à venir. Ceci est une très bonne ressource sur l'écriture de datapacks. J'espère que cela vous sera utile.
0 votes
Pourquoi les votes négatifs? Cela semble être une question valide.
1 votes
@SlayerDiAngelo C'est le cas, mais sur Arqade, il est généralement déconseillé de poser une question avec l'ouverture de "Est-il possible de faire cette chose" car s'il implique des commandes alors il semble que vous demandiez à quelqu'un d'écrire des commandes pour vous, ce qui est fortement déconseillé. Bien sûr, dans ce cas, la réponse n'est pas évidente et assez compliquée, en plus de la question étant une question à laquelle de nombreuses personnes peuvent se rapporter, ce qui la rend acceptable.
0 votes
De plus, cette question, cette question, et cette question sont également ouvertes, mais elles conviennent au site car elles ne sont pas facilement résolues et ont des solutions intéressantes et utiles.