Commandes répétées : exemple des portails

Il peut être utile de mettre en place des commandes s’exécutant à chaque tick. Exemple avec des portails.

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 :

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.

Portails Minecraft

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 en 1.13 (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_honey (1.15)
dripping_lava [dripLava]
dripping_obsidian_tear (1.16)
dripping_water [dripWater]
dust [reddust]
effect [spell]
elder_guardian [mobappearance]
enchant [enchantmenttable]
enchanted_hit [magicCrit]
end_rod [endRod]
entity_effect[mobSpell]
explosion [largeexplosion]
explosion_emitter [hugeexplosion]
falling_dust [fallingdust]
falling_honey (1.15)
falling_nectar (1.15)
falling_obsidian_tear (1.16)
firework [fireworksSpark]
fishing [wake]
flame
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)
soul (1.16)
soul_fire_flame (1.16)
spit
splash
squid_ink
sweep_attack [sweepAttack]
totem_of_undying [totem]
underwater [suspended]
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.

Sommaire

Partager

Partager sur facebook
Facebook
Partager sur twitter
Twitter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.