1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

J'aimerai qu'on m'aide sur les commandes de bases pour les command block

Discussion dans 'Commands blocks & Redstone' créé par XxSixter633xX, 10 Déc 2014.

  1. XxSixter633xX

    XxSixter633xX Explorateur

    Inscrit:
    6 Nov 2012
    Messages:
    63
    Points:
    67
    Sexe:
    Homme
    Salut !
    Aidant Zochal sur sa map LoL, je me suis mis au command Block, mais j'y connais pas grand chose... Quelqu'un pourrai m'apprendre quelques trucs de base ? Genre @Mlakuss ou autre, j'aurais besoin de précision sur les commandes /execute, les tags, et surtout comment les utiliser et dans quel contexte ! Car pour vous préciser j'essaie que lorsqu'une boule de neige ou une flèche touche quelqu'un, le jouer lanceur soit tp sur le joueur touché, etc... Enfin des trucs qui pourrait me servir pas seulement pour cette map, mais plutôt des trucs généraux de base ^^

    Cordialement,

    Sixter
     
    #1 XxSixter633xX, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  2. Mlakuss

    Mlakuss Rédacteur

    Inscrit:
    7 Sept 2013
    Messages:
    1 694
    Points:
    180
    Sexe:
    Homme
    Les commandes, c'est pas sorcier. C'est surtout une histoire de réflexion et de logique.
    Tu peux regarder dans ma signature, j'ai un petit post qui regroupe presque tout sur les commandes.

    Si tu débutes vraiment, le plus simple, c'est d'expérimenter.
    Le /execute te permet de te mettre dans la peau d'une entité en particulier et de faire comme si c'était elle qui lançait la commande.
    Pour commencer, essaye de décrire le plus précisément possible ce que tu souhaites obtenir en découpant le tout en actions "élémentaires". Une bonne connaissance des commandes de base est requise. Dès que tu auras besoin d'un tag spécifique, tu le sauras et tu auras juste à jeter un peil au wiki (Minecraft Chunk Format)
    Ensuite, il faut tout hiérarchiser (pour savoir dans quel ordre il faut faire quoi) et enfin tu peux créer le système.

    Je prend le cas de ta boule de neige qui tp.

    Décomposition
    Je lance la boule de neige - il me faut une détection
    La boule de neige est en l'air
    La boule de neige touche le sol - j'ai besoin de traquer sa position
    Le joueur est téléporté

    Outils
    Pour déctecter le lancement d'une boule de neige, il y a les objectifs de type stat.useItem.minecraft.snowball
    Utiliser cette commande une fois seulement pour créer l'objectif.
    Code (cpp):
    /scoreboard objectives add bouleDeNeige stat.useItem.minecraft.snowball
    Je souhaite traquer la position d'une entité juste avant sa disparition: cas des boules de neiges
    Il n'y a pas 50 méthodes, il faut téléporter une autre entité à la boule de neige et dès que celle-ci ne bougera plus, alors cela signifiera que la boule de neige est arrivée.
    Solution proposée:
    Code (cpp):
    /summon ArmorStand ~ ~ ~ {Marker:true,CustomName:"bouleDeNeige",NoGravity:true}
    /tp @e[name=bouleDeNeige] @e[type=Snowball,c=-1]
    Ces commandes vont être réinjectées dans notre horloge "finale".
    Pour les flèches, c'est beaucoup plus simple puisqu'on peut détecter quand elles sont dans le sol (inGround:true)

    Exécution
    Ton exemple est loin d'être un cas simple.
    Les commande suivantes sont éxécutées dans une horloge, peu importe l'ordre.
    Code (cpp):
    /scoreboard players add @a[score_bouleDeNeige_min=1,score_bouleDeNeige=20] bouleDeNeige 1
    /execute @a[score_bouleDeNeige=2,score_bouleDeNeige_min=2] ~ ~ ~ summon ArmorStand ~ ~ ~ {Marker:true,CustomName:"bouleDeNeige",NoGravity:true}
    /scoreboard players add @e[name=bouleDeNeige] bouleDeNeige 1
    /execute @e[type=Snowball] ~ ~ ~ scoreboard players reset @e[name=bouleDeNeige,r=3] bouleDeNeige
    /tp @e[name=bouleDeNeige] @e[type=Snowball,c=-1]
    /execute @e[name=bouleDeNeige,score_bouleDeNeige_min=20] ~ ~ ~ tp @p[score_bouleDeNeige_min=19] @e[name=bouleDeNeige,score_bouleDeNeige_min=20,r=1]
    /execute @e[name=bouleDeNeige,score_bouleDeNeige_min=20] ~ ~ ~ scoreboard players reset @a[r=1] bouleDeNeige
    /kill @e[name=bouleDeNeige,score_bouleDeNeige_min=25]
    Explications
    - Dès que je lance une boule de neige, mon score bouleDeNeige passe à 1 (critère stat.useItem.minecraft.snowball)
    - Dès que mon score est à 1 ou plus, je l'augmente régulièrement de 1 jusqu'à atteindre 20 (commande 1)
    J'utilise ce score pour temporiser toutes les actions
    - Dès que mon score est à 2, j'invoque un ArmorStand (commande 2)
    - J'augmente constamment le score bouleDeNeige de mon ArmorStand de 1 (commande 3)
    - Les boules de neiges situées à proximité des ArmorStand réinitialisent leur score bouleDeNeige (commande 4)
    - Mon ArmorStand est téléporté à la dernière boule de neige créée (commande 5)
    On note déjà une faille ici: on est pas sûr que la dernière créée soit la bonne. Correction possible: ajouter un r=5 dans la deuxième partie du /tp.
    - Quand mon ArmorStand atteint 20 dans sa valeur bouleDeNeige, je téléporte le joueur. Cette condition n'est possible que si l'ArmorStand n'a pas vu son score réinitialisé par une boule de neige. Comme il est constamment téléporté à côté d'une boule de neige, ce cas n'est possible que lorsqu'il n'y a plus de boule de neige. Mon ArmorStand est donc au point de destination, je peux téléporter le joueur (qui aura lui aussi un score de 20 à bouleDeNeige)
    - Le joueur a été téléporté, je peux réinitialiser son score (commande 6)
    - L'action est terminée, je peux détruire mon entité en trop (commande 7)

    La valeur de "20" comme score max n'est pas choisie par hasard: dans une /fill clock, ça correspond à 1 seconde. En utilisant des horloges plus lentes, il faudrait diminuer cette valeur.

    Je le répète: ce n'est pas un exemple facile, mais l'idée est là.

    Je compare souvent les commandes à de la programation grafcet qui se base en fait sur des dessins avec des arbres (d'où ma manie d'utiliser un score pour ordonner toutes les actions).
     
    • Utile Utile x 1
    #2 Mlakuss, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  3. vanlong [Fukushimiste]

    vanlong [Fukushimiste] Mineur de Redstone

    Inscrit:
    21 Mai 2013
    Messages:
    1 870
    Points:
    150
    Sexe:
    Homme
    Et surtout une phase d'apprentissage et de recherche pour savoir les commandes car au fond ^^ C'est de "la semi-programmation" :P
     
  4. XxSixter633xX

    XxSixter633xX Explorateur

    Inscrit:
    6 Nov 2012
    Messages:
    63
    Points:
    67
    Sexe:
    Homme
    Franchement vous êtes trop sympas les gens, la je suis sur LoL donc je regarderai le pavé que tu as mis @Mlakuss après la game, sinon @vanlong [Fukushimiste] je sait ca et c'est ce qui me botte vu que je veux finir game designer ^^ ( je suis en 1ère ^^)
    Je l'ai lu, franchement t'est trop bon ! Et j'ai rajouter l'invisible a l'armor stand pour le design ;)
     
    #4 XxSixter633xX, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  5. WTCYoStunt

    WTCYoStunt Bûcheron

    Inscrit:
    31 Jan 2014
    Messages:
    174
    Points:
    56
    Sexe:
    Homme
    Après quelques semaines d'apprentissage; les commands blocks et la redstone devient tout de suite très simple ;)

    Si tu veux vraiment vite tout apprendre sur les commandes, va faire un tour sur le wiki anglais : http://minecraft.gamepedia.com/Commands
     
    #5 WTCYoStunt, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  6. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Vraiment faut se faire la main en pratiquant. On débute en regardant des exemples de commandes faites par d'autres personnes, puis pour des besoins on commence à bidouiller les commandes et à voir les changements opérés.
    Enfin on commence à créer nos propres commandes selon les besoins, parfois ça marche et parfois pas, c'est de chercher comment réaliser la chose qui est intéressant (c'est pourquoi certains youtubers dont je ne citerais pas le nom préfèrent ne pas donner des systèmes tout fait).
    C'est très bien de commencer en faisant une map, c'est comme ça que beaucoup apprennent. Si tu te débrouille également en algorithmie (sur calculatrice) ça peut t'aider au début pour bien enchainer tes commandes.

    Je te conseille de commencer par lire cette page : http://minecraft.gamepedia.com/Commands
    C'est vraiment la base des commandes (tu connais peut être la majorité de tout ça, mais il y a toujours des choses supplémentaires à apprendre) quels arguments sont indispensables/optionnels, la syntaxe de la plupart des commandes etc....
    Attaques toi ensuite comme dit plus haut au scoreboard (surtout), c'est tout simplement indispensable et pas très compliqué.
    Les NBT tags te permettront de faire des choses beaucoup plus poussées en modifiant les mobs ou en détectant des caractéristiques non traités par les objectifs.
    Le JSON est également très sympathique mais ce n'est pas une priorité, il sert surtout à "bien présenter" avec des textes interactifs et formatés (en couleur ou soulignés). Cependant je te déconseille fortement d'utiliser les générateurs de JSON, il te donnent des commandes très compliquées qui peuvent être largement simplifiées et même des fois ne fonctionneront pas dans tout les cas (exemple : pour les pancartes dont le texte est composé en JSON ces commandes ne marchent parfois pas), apprends le quand tu en auras l'envie (le tuto de Mlakuss est très complet la dessus).

    Pour le reste et les possibilités tu les découvriras par toi même avec le temps, parfois on découvre un truc en faisant un peu des tests au pif puis on imagine tout un tas de systèmes pouvant utiliser cela.
    En tout cas bonne chance et n'hésites pas on est là pour t'aider.
     
    • J'approuve J'approuve x 1
  7. XxSixter633xX

    XxSixter633xX Explorateur

    Inscrit:
    6 Nov 2012
    Messages:
    63
    Points:
    67
    Sexe:
    Homme
    En tout cas merci les bro's, je vais potasser tout ca en faisant cuir ma pizza ^^
    Edit : je vien de le refaire IG en solo, ce que je comprend pas c'est que quand je lance la boule de neige elle s'arrête au bout de 2-3 cube, même en l'air, et je suis tp a l'endroit depuis lequel j'ai lancé la boule, c'est normal ?
     
    #7 XxSixter633xX, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  8. Mlakuss

    Mlakuss Rédacteur

    Inscrit:
    7 Sept 2013
    Messages:
    1 694
    Points:
    180
    Sexe:
    Homme
    Je n'en sais rien, j'ai écrit le tout sans faire aucun test. Sur le papier, ça marche, en pratique, si ça ne marche pas, il faut essayer de trouver où est le problème.
    Essaye d'afficher le score, regarde si les valeurs évoluent comme on s'y attend.
    Essaye de rendre l'ArmorStand visible et regarde s'il se déplace comme prévu (ce qui n'a pas l'air d'être le cas).
    Et si on ne trouve pas, il faut penser à une autre solution (remplacer le tp de l'armor stand à la boule par un /spreadplayer à très courte portée autours de la boule de neige par exemple)
     
  9. XxSixter633xX

    XxSixter633xX Explorateur

    Inscrit:
    6 Nov 2012
    Messages:
    63
    Points:
    67
    Sexe:
    Homme
    Ok gracias, en ce moment même j'essaie de trouver le bon data value pour la commande /testfor @e[type=Arrow] {inGround=true} en vue de faire ce système avec un arc
    Edit : trouvé, c'est {inGround:1b}
     
    #9 XxSixter633xX, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  10. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    J'espère ne pas me tromper mais il me semble que ce data tag est un byte et pas un true/false donc tu dois lui donner des valeurs en chiffres, remplace ton true par 1 ou 1b (je ne sais plus pourquoi b mais ça marche).
    Et aussi pour les NBT tag on n'utilise pas de "=" (du moins pas pour ce tag) mais des ":" donc tag devrait être {inGround:1b}
    De plus pourquoi as-tu besoin d'un testfor ? Si tu dois différencier la flèche tu peux directement faire un /scoreboard en ajoutant après la valeur un NBT tag qui sélectionnent les entités concernées.
    Code (cpp):
    /scoreboard players <set/add/remove> <Joueur/entité> <Objectif> <Valeur> [NBT tag optionnel]
    EDIT : Merci à @Mlakuss pour l'info donc true/false marche, néanmoins le reste est toujours valable ;)
     
    #10 Calambiel, 10 Déc 2014
    Dernière édition: 10 Déc 2014
  11. Mlakuss

    Mlakuss Rédacteur

    Inscrit:
    7 Sept 2013
    Messages:
    1 694
    Points:
    180
    Sexe:
    Homme
    C'est pour byte, le format de la variable. "true/false" fonctionnent aussi dans le cas où les bytes ne peuvent prendre que deux valeurs.
    Ce sont les lettres que tu peux lire sur la page wikipedia généralement (seul le 'n' n'a jamais besoin d'être précisé).
    Certains testfor/summon ne fonctionnent pas si tu ne précises pas certains formats de variables (en particulier les floats).
     
    • Informatif Informatif x 1
  12. zochalbak

    zochalbak Explorateur

    Inscrit:
    22 Sept 2014
    Messages:
    59
    Points:
    20
    Yop, est ce que le InGround:1B a un équivalent quand on touche un adversaire (ou il faut passer par un @p[r=1]) ?
    En plus on a essayer de contourner le système, en faisant un
    Code (cpp):
    execute @e[type=Arrow] ~~~ execute @p[r=2] ~ ~ ~ tp @p[name=Xxsixter633xX] @p
    et après ça TP sixter sur lui même (et je suis à plus de 4 block de lui, donc le @p à la hauteur de la boule devrait être moi! Et la commande fonctionne par ce que si je met ~ ~5000 ~ à la place du @p on l'entends râler 5000 block plus haut après qu'il m'ai lancé une flèche. (et pour le futur, on compte mettre tester une snowball avec une modification de son UUID à son pop, ou juste un score)

    Et au passage merci pour votre précieuse aide!
     
  13. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    A ma connaissance l'entité flèche disparait en touchant un joueur, mais de toute manière le tag inGround n'est plus respecté, il faudra probablement passer par le même système que ce que Mlakuss a mis plus haut pour les boules de neige, en utilisant une entité marqueur.

    Ensuite tes @p fonctionnent toujours depuis l'entité visée par le execute, donc si tu met deux fois le même sélecteur cela affectera le même joueur (il est donc normal qu'il se tp à lui-même). Tu peux utiliser un sélecteur @p[rm=1] qui affecte le joueur le plus proche sauf les joueurs à moins de un bloc (donc sauf le joueur faisant l'execute), cependant tu n'est pas sur que cela affecte le joueur touché par la flèche il faut donc définir un objectif pour les joueurs touchés, par exemple en faisant un execute permanent sur les flèches attribuant un score.
    Code (cpp):
    execute @e[type=Arrow] ~ ~ ~ scoreboard players set @a[r=0] Flèche 1
    execute @a[score_Classe_min=1,score_Skill_min=1] ~ ~ ~ tp @p[r=0] @p[rm=1,score_Flèche_min=X]
    execute @a[score_Flèche_min=1] ~ ~ ~ scoreboard players set @a[r=1] Skill 0
    scoreboard players set @a Flèche 0
    Le score Classe est juste là pour identifier les joueurs ayant la compétence alors que le score Skill sert à identifier les joueurs utilisant cette compétence grâce à l'objectif "stat.useItem.minecraft.bow" qui détecte quand un arc est utilisé et donc quand une flèche est tirée. Ici le joueur qui lance la flèche reçoit un score mais ne peut pas faire l'execute car il n'y a pas de joueur cible, dés lors qu'un joueur est touché, le tireur est téléporté et les scores sont reset.

    Cependant si plusieurs joueurs sont touchés ou si plusieurs personnes utilisent la compétence cela peut créer des problèmes car ils seraient tous tp sur le même joueur touché.

    Le problème d'utiliser les UUID c'est qu'il ne peut y avoir qu'une seule entité par identifiant, donc si plusieurs personnes prennent la même classe cela causera des soucis s'ils veulent lancer le sort en même temps.

    Astuce si tu préfère utiliser la technique des ArmorStand (plus compliquée mais probablement plus propre et évitant des bugs grâce au fameux timer qu'a évoqué Mlakuss permettant de savoir quel joueur téléporter), vu que tu veux l'utiliser pour des flèches et des boules de neiges (possiblement pour des compétences différentes) tu peux utiliser deux fois des ArmorsStand tout en pouvant les différencier car les NBT tag {Marker:tue} et {Invisible:true,DisabledSlots:1} ont quasiment les mêmes effets (le marker réduit juste en plus la hitbox des Stand mais vu qu'ils sont kill rapidement c'est moins gênant).
    Tu peux même pour chacun de ces tags ajouter "Small:true" ce qui te laisse donc 4 possibilités de skills utilisant ces systèmes.
    Evidement pour cela tu utilises une commande /scoreboard testant un tag comme déjà dit plus haut.
     
  14. WTCYoStunt

    WTCYoStunt Bûcheron

    Inscrit:
    31 Jan 2014
    Messages:
    174
    Points:
    56
    Sexe:
    Homme
    En fait ta commande fait ça :
    Exécute sur la flèche la commande exécute sur le joueur le plus proche dans un rayon de 2 la commande téléporte le joueur sixter sur le joueur le plus proche (en l'occurrence lui même.

    Si tu veux le tp à la boule il faut mettre @e[type=Snowball] à la place du dernier @p
     
  15. XxSixter633xX

    XxSixter633xX Explorateur

    Inscrit:
    6 Nov 2012
    Messages:
    63
    Points:
    67
    Sexe:
    Homme
    J'ai pas tout compris perso, mais j'essaierai de décortiquer tout ca en solo pour en apprendre plus sur les tags avec les scoreboard ^^ Merci les bro's, vous êtes trop sympas :D Enfaite j'ai surtout pas compris l'histoire de différencier les flèches avec les scoreboards :/
    EDIT : en étudiant un peu les commandes j'ai compris le système des scoreboard, genre /scoreboard players set @p Classe 1 , c'est un petit pas pour l'homme, mais un grand pas pour moi :P*
    EDIT 2 : par contre j'ai un problème : ma clockfill fonctionne pour le premier command block, mais celui ci ne rejette pas du courant comme une clockfill, il envoie un courant constant, comment je peut faire ? En gros la clockfill marche sur le 1er mais pas le 2ème command block
     
    #15 XxSixter633xX, 11 Déc 2014
    Dernière édition: 11 Déc 2014

Partager cette page