À première vue, un système permettant de détecter des entités au sol ne semble pas particulièrement utile. Pourtant, il trouve un intérêt tout particulier pour le mapmaking, notamment pour donner des effets à des projectiles ou pour conférer certaines propriétés à des mobs. Et si des méthodes existent déjà pour parvenir à ce résultat, TheRedEngineer est parvenu à une solution moins gourmande, plus compacte, et surtout plus élégante, en utilisant les propriétés du feu. En effet, le feu ne pouvant être placé que sur le sol, il remplit parfaitement cet office de détecteur. Voici comment fonctionne ce système dans le détail.
Détecter un item
Pour détecter un item, les choses sont rendues plus faciles par l’existence d’un tag indiquant si l’item est au sol ou non. Aussi, avec un premier command block, créez un scoreboard pour mettre en place votre mécanisme :
scoreboard objectives add ITEM dummy
Ce command block doit être réglé en « Repeat », « Unconditional » et « Always Active » et orienté vers le haut. Vous pouvez remplacer « ITEM » par tout autre nom que vous souhaitez donner à votre scoreboard. Ensuite, posez dessus un second command block « Chain » avec les paramètres « Unconditional » et « Always Active ». Écrivez-y la commande suivante :
scoreboard players set @e[type=item] ITEM 1 {OnGround:1b,Item:{id: »id de l’item que vous souhaitez détecter« ,Count:1b}}
Si vous lancez l’item souhaité au sol, le scoreboard indiquera alors 1. À partir de là, vous pouvez commencer à bâtir des mécanismes plus complexes à partir de cette détection.
Notez que ce système marche pour les mêmes items, peu importe leur localisation. Si vous souhaitez détecter la présence de plusieurs items différents au sol, construisez autant de systèmes que de types d’items.
Détecter un projectile ou un mob
Pour les projectiles ou les mobs, impossible de passer par un tel tag. D’où l’intérêt du feu, pour la propriété susmentionnée : avec la commande /execute, il est possible d’invoquer du feu à partir des coordonnées relatives d’un projectile donné. Ici, on va faire en sorte que chaque boule de neige tombant au sol invoque un creeper qui explose à son point d’impact. On va donc faire en sorte que sous toutes nos boules de neige soit généré du feu qui remplace l’air qui s’y trouve. Pour cela, on pose un command block réglé sur « Repeat », « Unconditional » et « Always Active » avec la commande suivante.
/execute @e[type=snowball] ~ ~ ~ fill ~ ~ ~ ~ ~ ~ fire 0 replace air
Si jamais le projectile est dans l’air, la commande sera exécutée correctement mais le feu ne sera pas généré, puisqu’il a besoin d’un bloc solide sur lequel se fixer. Si jamais le projectile est au sol, toutefois, le feu pourra être généré. Avec la commande ci-dessous, on va donc détecter la présence de feu sous une boule de neige et, le cas échéant, attribuer un tag spécial (appelé ici GROUND) à toute boule de neige qui remplit cette condition. Collez la commande dans un command block placé au-dessus du premier, avec les paramètres « Chain », « Unconditional » et « Always Active ».
/execute @e[type=snowball] ~ ~ ~ detect ~ ~ ~ fire -1 scoreboard players tag @e[type=snowball,c=1] add GROUND
Maintenant que le tag est attribué, il est temps de déclencher l’effet. Ici, c’est une explosion de creeper, mais vous pouvez choisir n’importe quel autre effet d’impact ou simplement vous servir de scoreboards pour déclencher des effets plus complexes. Placez donc un command block au-dessus du précédent, avec les mêmes paramètres que celui-ci, et collez-y la commande suivante :
/execute @e[type=snowball,tag=GROUND] ~ ~ ~ summon creeper ~ ~ ~ {ExplosionRadius:0,Fuse:0}
Il ne vous reste plus qu’à éteindre le feu. Pour cela, placez un command block au-dessus du précédent, toujours avec les mêmes paramètres, et collez-y la commande suivante :
/execute @e[type=snowball,tag=GROUND] ~ ~ ~ fill ~ ~ ~ ~ ~ ~ air 0 replace fire
Pour finir, détruisez les boules de neige étant effectivement tombées au sol pour qu’elles disparaissent du système. Pour cela, placez un command block au-dessus du précédent, toujours avec les mêmes paramètres, et collez-y la commande suivante :
/kill @e[type=snowball,tag=GROUND]
Un aperçu de la structure.
Vous avez désormais toutes les cartes en main pour détecter facilement des entités au sol. Quelles applications imaginez-vous à un tel système ? Connaissez-vous d’autres utilisations à cette propriété du feu ? Dites-le nous dans les commentaires !
Image de Une réalisée par Biboush.
Merci pour ce genre de tuto !
Il y a aussi une autre méthode que consiste en appliquant un tag a un item au lieu de mettre un un objectif. Cependant, cette méthode est effectivement hyper pratique ^^
La logique : la méthode en question s’applique essentiellement aux mobs, items et projectiles. Pour les joueurs, c’est effectivement beaucoup plus simple.
Un truc comme l’épreuve de Fort Boyard où on doit aller attraper un truc sans toucher le sol, si on le touche on meurs! Je suis sûr qu’il y a beaucoup d’utilisations possibles à ce système!
Merci 👍
Si non il y as plus simple , on as juste as dectet quand un player n’est pas en lair . Donc quil n’as pas d’air sous ses pied :
/execute @e ~~~~ dectec ~ ~-1 ~ minecraft air 0 /scorbord player set @e[c=1] monscore 1
/execute @e[score_monscore_min=1] ~ ~ ~ /ma command
/scorebord player set @e[score_monscore_min=1] monscore 0
merci
Ouiii