Voici aujourd'hui une manière de créer des "Flèches EnderPearl", avec un système basique faisable en solo et un autre système plus complexe qui gère aussi le multijoueur, le tout en 1.13 !
On rappelle dès le début la commande à entrer dans le tchat pour obtenir un :
/give @s command_block
1. Premier système, solo uniquement
Dans un premiers temps, disposez deux blocs de commande comme cela : un en mode et un autre en mode , à la suite du premier.
Ensuite inscrivez-y les deux commandes suivantes, dans l'ordre :
execute as @e[nbt={inGround:1b},type=arrow] run tp @p @s
kill @e[nbt={inGround:1b},type=arrow]
La première sert à un sur toutes les flèches (type=arrow) qui sont plantées dans le sol (nbt={inGround:1b}). Le @p vise le joueur le plus proche de la flèche, pour la "victime" du tp, et le @s représente la flèche, pour la destination.
Quant au , il est juste là pour enlever la flèche. Si vous souhaitez pouvoir la récupérer en vous téléportant, il suffit de l'enlever.
Mais vous voyez que ce système téléporte le joueur le plus proche, donc il n'est pas compatible au multijoueur puisque l'archer ne sera pas forcément téléporté. Voici donc une autre méthode, plus lourde, qui va donner un identifiant unique à l'archer pour ne pas le confondre avec les autres joueurs.
2. Deuxième système, tout mode de jeu
Pour celui-ci il faudra quatre commandes qui initialiseront le système en créant les quatre nécessaires. Après cela vont s'ajouter neuf commandes en répétition, pour le système en lui-même.
Les quatre commandes d'initialisation, à n'exécuter qu'une seule fois (dans le tchat par exemple), sont les suivantes :
-
Crée un score enderArrow modifiable par commande, qui servira à détecter un joueur ayant un arc en main
/scoreboard objectives add enderArrow dummy
-
Crée un score useBow automatiquement incrémenté par le jeu lorsqu'un joueur utilise un arc
/scoreboard objectives add useBow minecraft.used:minecraft.bow
-
Crée un score Id modifiable par commande, qui servira à appliquer un identifiant au joueur)
/scoreboard objectives add Id dummy
-
Crée un autre score, qui générera un identifiant
/scoreboard objectives add Data dummy
Puis viennent les neuf commandes du système:
-
On met le score enderArrow à 1 pour tous les joueurs ayant un arc dans la main
scoreboard players set @e[nbt={SelectedItem:{id:"minecraft:bow"}}] enderArrow 1
-
On incrémente de 1 le score Data pour le faux joueur SUID
execute as @e[scores={enderArrow=1, useBow=1..}] run scoreboard players add SUID Data 1
-
La valeur du score Data est appliquée à celle du score Id pour le joueur
execute as @e[scores={enderArrow=1, useBow=1..}] run scoreboard players operation @s Id = SUID Data
-
Puis ce score est appliqué à la flèche
execute as @e[scores={enderArrow=1, useBow=1..}] at @s run scoreboard players operation @e[type=arrow,distance=..2] Id = @s Id
-
On applique un tag à tous les joueurs dont l'ID correspond à celui de la flèche
execute as @a if score @s Id = @e[sort=random,scores={Id=1..},type=arrow,nbt={inGround:1b},limit=1] Id run tag @s add tp_to_enderArrow
-
Enfin on téléporte le joueur possédant le tag à la flèche, si le score correspond
execute as @e[type=arrow,nbt={inGround:1b}] at @s if score @s Id matches 1.. run tp @e[tag=tp_to_enderArrow] ~ ~ ~
-
Pour finir on reset les scores...
scoreboard players set @e[scores={useBow=1..}] useBow 0
scoreboard players set @e[scores={enderArrow=1}] enderArrow 0
tag @e[tag=tp_to_enderArrow] remove tp_to_enderArrow
Voilà pour cette astuce assez complète, en espérant qu'elle ait été la plus instructive possible. Merci à
timeolux pour la base de l'astuce et à la team Gunivers pour le système d'ID (disponible dans leur
datapack)
EnderFlèches (solo et multi) :