Cet article fait partie d’une série servant à enseigner l’art du développement sur Minecraft. Vous pourrez retrouver l’introduction et le sommaire en cliquant ici.
Nous avons vu dernièrement comment fonctionnaient les scores, les tags et les teams. Ca peut paraître pas grand chose mais c’est en réalité essentiel à l’immense majorité des systèmes. Nous allons donc ici faire quelques exercices qui consolideront vos connaissances et vous laisseront entrevoir les possibilités qu’apporte la maîtrise des nombres et des groupes. Pour rappel, à chaque entraînement, vous disposerez de 3 niveaux:
- Débutant : si vous… débutez, les exercices sont très simples et très guidés, n’admettent généralement qu’une seule solution qui est clairement explicitée. Ils font d’avantage appel aux connaissances qu’à la réflexion.
- Intermédiaire : si vous trouvez le premier trop simple, vous pouvez vous attaquer à ce niveau, qui vous demande de raisonner un peu plus en utilisant ce que vous connaissez. Vous disposerez également d’une ou plusieurs aides, mais pas de correction car les problèmes de ce niveau commencent à avoir une multitude de solutions. Vous donner une correction impliquerait de vous conseiller une façon de penser, ce qui n’est pas l’objectif. Si vous souhaitez faire valider votre système, envoyez le via un lien dans l’espace commentaire ou partagez-le nous sur notre Discord.
- Expert : si vous êtes déjà Mapmaker, nous vous proposons quelques exercices qui peuvent mettre votre cerveau à ébullition. Vous devrez exploiter certaines mécaniques particulière des commandes, demandant ainsi de raisonner en profondeur avec une parfaite maîtrise des commandes. Pour certains des problèmes, vous aurez la possibilité de vous aider (lorsque ce sera indiqué) de la Gunivers-Lib, qui résoudra une partie du problème. Vous n’aurez pas d’aide supplémentaire ni de correction. Si vous souhaitez vraiment montrer que vous êtes le patron, vous devrez vous débrouiller pour recréer les outils que cette Lib vous offre ;)
Débutant : radar amélioré
La dernière fois, nous avions créé un radar simple qui permettait de détecter les ennemis dans un rayon de 30 blocs en mettant toutes les entités autre que vous en surbrillance. Cette fois-ci, nous allons perfectionner un peu ça, en autorisant d’autres personnes ou créatures que vous à aller sous le radar sans se faire repérer. Nous allons aussi faire en sorte de ne plus avoir de système de redstone. Les commandes se suffisent largement à elles seules, le mélange n’est plus vraiment d’actualité ;)
Objectif
- Créer un radar lorsque un lingot de fer, une poudre de redstone, un torche de redstone et un note block sont jetés par terre au même endroit.
- Lorsque le radar sera créé, il récupérera le score « Radar » du joueur le plus proche.
- Le radar ne détectera alors plus aucune entités ayant le score « Radar » égal au sien.
- Le radar devra fonctionner sans aucune redstone.
- Le radar ne devra pas detecter les autres radars, peu importe leur score « Radar »
Comme la dernière fois, essayez dès maintenant de réaliser ce système. Vous avez le droit d’utiliser le site minecraft-fr.gamepedia pour obtenir toutes les informations dont vous aurez besoin. Si vous n’y parvenez pas, continuez à lire, nous n’allons pas vous abandonner, pas d’inquiétude !
Voici à quoi ressemblera votre système final (déjà plus imposant n’est-ce pas ?) :
Aide
Nous n’avons pas encore vu les NBT (qui fera l’objet du prochain cours), mais ici nous allons en avoir légèrement besoin. En effet, la première partie du système va consister à detecter que les bons items soient tous les uns à coté des autres. Pour celà, il faudra utiliser un sélecteur du type:
@e[type=item,nbt={Item:{id:"minecraft:iron_ingot"}}]
Ce sélecteur vous permettra de détecter ici un item de lingot de fer.
Lorsque le radar est créé, pour récupérer le score radar du joueur, vous devrez passer par un scoreboard players operation avec l’opérateur « = ».
Vous pouvez créer un score « Timer » auquel vous ajoutez 1 à chaque tick, puis vous le remettez à 0 quand il arrive à 20. Grâce à ça, vous aurez un score qui se répètera toutes les secondes (20 ticks).
Vous devrez faire en sorte que chaque radar ai un moyen d’identifier les autres radars pour ne pas les prendre en compte. Pour cela, le mieux est de passer par un tag.
Correction
Voici donc la correction. Si vous n’avez pas réussi à faire le système: réessayez !
execute at @e[type=item,nbt={Item:{id: »minecraft:iron_ingot »}}] if entity @e[type=item,nbt={Item:{id: »minecraft:redstone »}},distance=..0.5] if entity @e[type=item,nbt={Item:{id: »minecraft:redstone_torch »}},distance=..0.5] if entity @e[type=item,nbt={Item:{id: »minecraft:note_block »}},distance=..0.5] run summon armor_stand ~ ~ ~ {Tags: »[Radar] »} |
Détecte la présence des différents items à un endroite donné et palce une armor_stand dessus ayant le tag « Radar » |
execute at @e[tag=Radar,tag=!Old] run kill @e[type=item,nbt={Item:{id: »minecraft:note_block »}},distance=..1,limit=1] | Supprime les items ayant été utilisé pour créer le Radar. Attention, si un item à été utilisé en étant stacké (+ de 1 exemplaire de l’item regroupé en une seule entité), l’item sera détruit. Le joueur doit donc faire attention à n’envoyer qu’un seul exemplaire de chaque item. La suite du guide vous apprendre à ne supprimer qu’un seul item au sein d’un stack. |
execute at @e[tag=Radar,tag=!Old] run kill @e[type=item,nbt={Item:{id: »minecraft:redstone »}},distance=..1,limit=1] | |
execute at @e[tag=Radar,tag=!Old] run kill @e[type=item,nbt={Item:{id: »minecraft:redstone_torch »}},distance=..1,limit=1] | |
execute at @e[tag=Radar,tag=!Old] run kill @e[type=item,nbt={Item:{id: »minecraft:iron_ingot »}},distance=..1,limit=1] | |
execute at @e[tag=Radar,tag=!Old] run particle smoke ~ ~1 ~ 0.2 0.5 0.2 0 100 force | Créer un effet visuel et sonor lors de la création du radar. Ce n’est pas utile, mais c’est joli :) |
execute as @e[tag=Radar,tag=!Old] run playsound minecraft:block.anvil.place master @a[distance=..30] | |
execute as @e[tag=Radar,tag=!Old] at @s run scoreboard players operation @s Radar = @p Radar | Permet de récupérer le score Radar du joueur le plus proche. |
execute as @e[tag=Radar] run tag @s add Old | Ajoute un tag à l’armor_stand afin qu’elle ne continue pas à détruire les items et à faire l’animation de création du Radar. |
execute as @e[tag=Radar] at @s run tp @s ~ ~ ~ ~5 ~ | Met le radar en rotation. |
execute at @e[tag=Radar] as @e[distance=..30,tag=!Radar] unless score @s Radar = @e[tag=Radar,limit=1,sort=nearest] Radar run effect give @s glowing 1 1 true | Donne l’affet de glowing aux entités ne partageant pas le même score Radar dans un rayon de 30 blocs. |
execute at @e[tag=Radar,scores={Timer=1}] as @e[distance=..30,tag=!Radar] unless score @s Radar = @e[tag=Radar,limit=1,sort=nearest] Radar run playsound minecraft:block.note_block.chime block @a[distance=..30] ~ ~ ~ 2 1 1 | Si une entité est repérée, le radar sonne. |
scoreboard players add @e[tag=Radar] Timer 1 | Ces deux commandes permettent de faire un « timer ». Il s’agit d’un score qui va tourner en boucle en se répétant, ici tous les 40 ticks (= 2 secondes). Sur la commande précédente, on a donc indiqué qu’on ne voulait faire le playsound qu’à une valeur précise de ce score, permettant de faire sonner qu’une fois toutes les 2 secondes. |
scoreboard players set @e[tag=Radar,scores={Timer=40..}] Timer 0 |
Si vous n’avez pas réussi, pas d’inquiétude ! Relisez tranquillement les chapitres qui vous ont un peu fait défaut lors de ce petit exercice.
Intermédiaire : piège synchronisé
Objectif
- Créer un petit radar dissimulable ayant une faible portée (identique à l’exercice Débutant, mais sans bruit ni effet de glowing et en réduisant la portée)
- Créer des explosifs dissimulables qui peuvent se connecter, en utilisant des scores, tags ou teams à un radar
- Faire en sorte que lorsqu’un ennemi s’approche du radar, celui ci déclenche un compte à rebours qui fera exploser toutes les charges connectées au radar
- Permettre au joueur de configurer le temps de compte à rebours
- Si le radar est trouvé, permettre au joueur de désamorcer le système en lançant une torche de redstone dessus*
Aide
Nous n’avons pas encore vu les NBT, mais rapidement, ils consistent à donner certaines propriétés aux entités et blocs. Ici, si on veut faire un armor_stand facile à dissimuler, il faudrait qu’elle soit petit, on peut donc lui ajouter le NBT « Small:1 » à sa création:
/summon armor_stand ~ ~ ~ {Small:1}
Pour connecter les explosifs au radar, la solution la plus basique et la plus complète est de passer par un score. Ainsi, un explosif qui partage le même score qu’un radar sera considéré comme lié à ce dernier.
Pour permettre au joueur de configurer le temps du radar, vous devrez trouver un moyen d’interagir avec l’armor-stand de sorte à lui faire augmenter ou diminuer un score qui servira de temps de base pour le compte à rebours. Il existe autant de moyen qu’on peut imaginer, soyez inventifs…
Expert : arme à balles rebondissantes
Objectif
- Créer une arme à feu que le joueur peut crafter puis utiliser
- La vitesse du projectile doit être configurable via un score
- Faire en sorte que les balles puissent ricocher 2 à 3 fois avant de s’arrêter
- Faire en sorte que la balle soit soumise à la gravité et que chaque rebond lui fasse perdre en vélocité
Indication
Vous devrez passer par un système de vecteur, soit un score représentant une distance sur chacun des axes X,Y et Z. Il faudra alors déterminer quel est ce vecteur puis mettre le projectile en mouvement en utilisant ce dernier.
Si vous ne connaissez pas encore les NBT (qui arriveront dans le prochain article, voici une commande qui vous sera sans doute très utile :
/execute as @a store result score @s X run data get entity @s Pos[0] 1000
Permet de stocker la position en X des joueurs dans le score « X ». Cette position est stockée avec un facteur 10^3 pour permettre de conserver les 3 premiers chiffres après la virgule (car les scoreboard ne manipulent que des nombres entiers).
Il est interdit d’utiliser les fonctions « Vectors » et « Move » de la Gunivers-Lib étant donné que le but ici est de créer des fonctions similaires (sinon, seules 2 commandes suffisent à faire tout ça… ce serait trop facile). Vous avez en revanche le droite d’utiliser les fonctions « Math ».
Merci à Gunivers de faire ce tutoriel !