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.
Scores, tags, team ? Récursivité, dichotomie, trigonométrie… ce tutoriel touche à sa fin ! Et comme toujours, les exercices se présentent en trois niveaux immuables :
- 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 davantage 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 en ébullition. Vous devrez exploiter certaines mécaniques particulières des commandes, demandant ainsi de raisonner en profondeur avec une parfaite maîtrise de celles-ci. Pour certains 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 : Minecart + Pistolet = …
Objectif
- Vous souvenez vous de l’exercice précédent ? Spécifiquement, la sommation ?
Voici un petit rappel: Envoyer une sommation avec un avertissement que sa présence est considérée comme une attaque à laquelle vous allez répondre et ajoutez-y un timer de 10 secondes. Si vous avez fait l’exercice niveau Expert de l’entraînement #1, vous pourrez également déclencher l’activation des tourelles automatiques à la fin de ce timer. Sinon, on se contentera de donner un effet de poison.
Votre mission, si vous l’acceptez, est de remplacer ce poison bien trop simple par un railgun ! - La tourelle doit tirer instantanément sur l’ennemi, lui infligeant des dégâts et le repoussant d’un block par rapport à son [la tourelle] orientation jusqu’à ce qu’il sorte de la zone d’influence du radar.
- La balle doit tracer une trajectoire rectiligne uniforme visible dans l’air jusqu’à l’ennemi attaqué.
[ Insérer une image du système de la correction, au moment où la tourelle tire ]
Aide
Résumé de l’exercice 3 : L’armor stand représentant le radar porte le tag “Radar” et réagit aux entités trouvées selon une action demandée à son possesseur.
Pour cet exercice, nous vous recommandons de vous renseigner sur la commande /particle ainsi que de relire attentivement le cours sur la récursivité, s’il n’est pas bien maîtrisé.
Correction
Contenu de la fonction system.mcfunction (à exécuter à chaque tick)
La correction présente quelques défauts pour des soucis de simplicité, notamment l’absence de gestion de plusieurs ennemis à la fois. À vous de l’améliorer si vous le souhaitez !
[PS : les fonctions sont bien meilleures que les chaînes de command blocks]
# Incrémente le score
scoreboard players add @e[tag=!Radar,tag=Target, tag=Repelling, tag=!Authorized, scores={Timer=1..}] Timer 1
# Summon chaque seconde l'area si quelqu'un apres 10s reste dans la zone
execute at @e[tag=Radar,type=minecraft:armor_stand] if entity @e[tag=!Radar, tag=Target, tag=!Authorized, tag=Repelling, scores={Timer=202..}] run summon minecraft:area_effect_cloud ~ ~1.5 ~ {Duration:1,Tags:["Bullet","Authorized"]}
# Remet le timer à 182 [-40 tick <-> -2 seconde]
scoreboard players set @e[tag=!Radar, tag=Target, tag=Repelling, tag=!Authorized, scores={Timer=202..}] Timer 162
# Donne le score du Radar a l'area
execute as @e[tag=Radar,type=minecraft:armor_stand] at @s run scoreboard players operation @e[type=minecraft:area_effect_cloud,distance=..1,nbt={Age:0}] Radar = @s Radar
# Tourne l'area vers le joueur le plus proche
execute as @e[tag=Bullet,type=minecraft:area_effect_cloud] at @s run tp @s ~ ~ ~ facing entity @e[tag=!Radar, tag=Target, tag=!Authorized, tag=Repelling,limit=1,sort=nearest] eyes
# Lance la récursivité
execute as @e[tag=Bullet,type=minecraft:area_effect_cloud] at @s run function radar:raycast
Contenu de la fonction raycast.mcfunction (exécutée via la fonction ci-dessus)
# Tp l'aec de 0.5 block en avant
tp @s ^ ^ ^0.50
# Effet de particule pour voir le trajet
particle minecraft:end_rod ~ ~ ~ 0 0 0 0 1 force
# Continue la récursivité tant que l'aec n'a pas atteint le joueur (test au niveaux des pieds)
execute at @s unless entity @e[tag=!Radar, tag=Target, tag=!Authorized, tag=Repelling,distance=..1.8] run function radar:raycast
# Fait des dégâts au joueur execute at @s positioned ~ ~-1 ~ run effect give @e[tag=!Radar, tag=Target, tag=!Authorized, tag=Repelling,distance=..1.8] minecraft:wither 1 10
# Nettoie l'aec
kill @s
Intermédiaire : Le phénomène de Brutalisation
Objectif
- Faire en sorte que la tourelle se déplace pour attaquer physiquement l’ennemi.
- Elle se déplace à la vitesse d’un zombie environ.
- Elle ne passe pas à travers les blocs, ni ne vole.
- Si elle atteint l’ennemi, elle lui inflige des dégâts et le repousse d’un bloc
- Après avoir attaqué l’ennemi, la tourelle subit ½ seconde de cooldown
- Au bout de 20 secondes, la tourelle revient à sa position initiale [là où elle a été posée], et retourne en mode railgun comme dans l’exercice débutant.
[ Insérer image d’armor stand repoussant un ennemi ]
Aide
Pour obtenir le chemin de la tourelle jusqu’au joueur sans contrevenir aux lois de la physique [elles sont assez bafouées comme ça les pauvres :’c], nous vous invitons à utiliser le module de pathfinding de la Gunivers-Lib, qui implémente l’algorithme A*.
Il vous faudra recourir à la récursivité pour gérer la vitesse de la tourelle. D’ailleurs, si vous vous sentez vraiment bien vous pouvez l’animer ! [Appliquez les nbts `NoBasePlate: 1b` ainsi que `ShowArms: 1b` pour invoquer un armor stand présentant des bras et sans plaque au niveau des pieds].
La tourelle possédant beaucoup de phases, nous vous conseillons vivement d’employer les scoreboards tags à outrance afin de lui permettre de s’y retrouver ;)
PS : N’oubliez pas que 20 ticks forment 1 seconde.
Expert : Ça fait bim, bam, boum !
Objectif
- Créer un pistolet à balles rebondissantes
- Utilise les coordonnées locales
- La vitesse des balles est supérieure à 1 block / tick
Indication
Haha, si vous vous attaquez à cet exercice vous aurez plus besoin de maths qu’autre chose… Et un peu de récursivité aussi ;)
Ce sera tout pour cette fois…
Bons exercices ! Et au boulot, on ne traîne pas !
Merci pour avoir fait un guide, il y en a tellement peu sur internet.