Avant-propos
Depuis des années, nous avons pris l’habitude d’utiliser des blocs de commande pour générer des particules, détecter des joueurs ou passer la nuit.
Avec l’arrivée des tags et fonctions, il est désormais plus simple de mettre en place ces fonctionnalités. Dans cet article, nous allons voir comment mettre en place des commandes répétées, avec pour exemple des effets de particules pour une salle de portails.
Tag tick
Comme nous l’avons vu dans l’article précédent, les tags permettent de lister des choses afin de simplifier leur appel. Nous allons cette fois utiliser un tag de fonction.
Dans ton datapack, créé le fichier suivant : data/minecraft/tags/functions/tick.json. Ce fichier listera toutes les fonctions à exécuter à chaque tick. Attention à ne pas en mettre trop, cela risque de ralentir de serveur. Pour le moment, nous allons en mettre une seule :
{"replace":false,"values":["mangarmor:loop\/portals"]}
Nous définissons replace à false afin d’ajouter la fonction à la liste des fonctions à exécuter à chaque tick au lieu de remplacer la liste.
Il nous reste encore à créer la fonction à cet emplacement : data/mangarmor/functions/loop/portals.mcfunction
Tu noteras que les fonctions n’ont pas l’extension .json mais .mcfunction. Il s’agit en fait de fichiers texte listant des commandes Minecraft. Ouvre donc ce fichier avec un éditeur de texte.
Notre serveur compte trois portails principaux. À gauche, le portail du nether aux coordonnées 7 42 106. À droite, le portail de l’end aux coordonnées 7 42 70. En face, un portail vers une salle dans l’overworld, aux coordonnées -11 42 88. Pour cet exemple, les trois portails mèneront au centre de la salle, en 7 42 88 -90 0.
Particules
Commençons par le portail du nether à gauche. Nous allons lui ajouter les particules de portail portal. Pour cela, la première ligne de la fonction sera :
particle minecraft:portal 7 44 105 1 2 0 0 20
Tu noteras que dans les fonctions, on ne met pas le “/” devant les commandes. particule est la commande pour émettre des particules. portal le type de particule. 7 44 105 correspond aux coordonnées du centre du générateur de particules. J’ai choisi de le mettre à un bloc devant le portail vers son centre. 1 2 0 sont les dimensions du générateur. Il faut multiplier par environ 8 pour connaître les dimensions. Ici, on aura une zone d’environ 8 de largeur, 16 de hauteur et 1 de profondeur. Le 0 correspond à la vitesse et le 20 final au nombre de particules générées.
Voici les noms des particules (depthsuspend, footstep et take ne sont plus disponibles) :
ambient_entity_effect [mobSpellAmbient]
angry_villager [angryVillager]
ash (1.16)
barrier
block [blockcrack et blockdust]
bubble
bubble_column_up
bubble_pop
campfire_cosy_smoke (1.14)
campfire_signal_smoke (1.14)
cloud
crimson_spore (1.16)
crit
current_down
damage_indicator [damageIndicator]
dragon_breath [dragonbreath]
dripping_dripstone_lava (1.17)
dripping_dripstone_water (1.17)
dripping_honey (1.15)
dripping_lava [dripLava]
dripping_obsidian_tear (1.16)
dripping_water [dripWater]
dust [reddust]
dust_color_transition (1.17)
effect [spell]
elder_guardian [mobappearance]
enchant [enchantmenttable]
enchanted_hit [magicCrit]
end_rod [endRod]
entity_effect[mobSpell]
explosion [largeexplosion]
explosion_emitter [hugeexplosion]
falling_dripstone_lava (1.17)
falling_dripstone_water (1.17)
falling_dust [fallingdust]
falling_honey (1.15)
falling_nectar (1.15)
falling_obsidian_tear (1.16)
falling_spore_blossom (1.17)
firework [fireworksSpark]
fishing [wake]
flame
glow (1.17)
glow_squid_ink (1.17)
happy_villager [happyVillager]
heart
ink
instant_effect [instantSpell]
item [iconcrack]
item_slime [slime]
item_snowball [snowballpoof]
landing_honey (1.15)
landing_obsidian_tear (1.16)
large_smoke [largesmoke]
lava
mycelium [townaura]
nautilus
note
poof [explode et snowshovel]
portal
rain [droplet]
smoke
sneeze (1.14)
snowflake (1.17)
soul (1.16)
soul_fire_flame (1.16)
spit
splash
spore_blossom_air (1.17)
squid_ink
sweep_attack [sweepAttack]
totem_of_undying [totem]
underwater [suspended]
vibration (1.17)
warped_spore (1.16)
witch [witchMagic]
Téléportation
Maintenant, nous allons ajouter une commande pour téléporter les joueurs quand ils passent le portail. Pour cela, nous allons utiliser la fonction teleport documentée sur le Github de Dinnerbone ainsi : teleport <targets> <destination>
Dans cet exemple, nous souhaitons cibler toutes les entités présentes près du portail, dans un rayon de 2 blocs. Nous écrivons donc :
teleport @e[x=7,y=42,z=106,distance=..2] 7 42 88
distance=..2 permet de cibler les entités entre 0 et 2 blocs. Voici le contenu complet de la fonction portals.mcfunction :
particle minecraft:smoke 7 44 71 1 2 0 0 10
teleport @e[x=7,y=42,z=70,distance=..2] 7 42 88
particle minecraft:portal 7 44 105 1 2 0 0 20
teleport @e[x=7,y=42,z=106,distance=..2] 7 42 88
particle minecraft:enchant -10 44 88 0 2 1 0 20
teleport @e[x=-11,y=42,z=88,distance=..2] 7 42 88
Il ne te reste plus qu’à sauvegarder et à utiliser la commande /reload si tu es déjà en jeu. Les particules peuvent mettre quelques secondes avant d’apparaître.
Nous verrons dans un prochain article comment téléporter les entités dans d’autres dimensions et comment prévoir leur retour.