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

Des gestions d'événement sur les blocs de commande ?

Discussion dans 'Commands blocks & Redstone' créé par OtakuSan76, 22 Fev 2015.

  1. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    Bonjour.

    Je suis sur le point de débuter l'apprentissage de l'utilisation des blocs de commande.
    J'ai besoin qu'un bloc de commande exécute un programme lorsque je passe sur une plaque de pression (activer un bloc de redstone lumineux qui se situe ailleurs), puis l'éteigne lorsque je quitte cette même plaque de pression.

    J'ai une contrainte matérielle, un seul bloc de commande sous la plaque de pression, sinon, j'aurai utilisé un système d'inverseur et basta, mais ça prend trop de place, je n'ai de place que pour un seul bloc horizontalement. Sauf si vous avez un moyen pour créer un système complet vertical et descendant, dans ce cas là je suis preneur ^^.

    Autrement je me demandais, y a t'il un moyen de spécifier une action à un bloc de commande lors de son activation, puis une autre action lors de son inactivation ? comme avec un langage de programmation quelconque (par exemple c# ou autre avec lesquels on a des événements genre MouseDown et MouseUp pour la souris).

    J'espère avoir réussi à m'être fait comprendre.
    J'attends vos conseils.
    Merci bien :)
     
  2. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 593
    Points:
    229
    Tu peux tout simplement utiliser un bloc de commande avec une commande /setblock qui place un bloc de redstone a un autre endroit où tu as de la place (voir même au world spawn si tu veux que la zone soit chargée en permanence).

    Pour un "enchainement" comme un programme tu ne peux utiliser que la redstone.
    Dans ton cas si j'ai bien compris tu voudrais aussi une action lorsque le joueur quitte la plaque de pression.

    Ça ne tient malheureusement pas dans un espace de 1x1 mais tu peux toujours comme je t'ai dit plus haut mettre le système à un autre endroit et utiliser un /testfor vérifiant si le joueur se trouve à un emplacement et donc sur la plaque.
    Si tu fais ça tu pourras utiliser tes inverseurs habituels.

    Si je t'ai mal compris, merci de mettre quelques screenshots pour que je comprenne mieux.
     
  3. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    Ok, voilà quelques screenshot ! :D

    Image n°1
    Voici une imagine de mon labyrinthe. Le bloc avec l'icone d'Apple ce sont des blocs de commande.

    Image n°2
    Voici un futur écran géant. Vous voyez déjà des blocs de redstone qui vont activer des blocs lumineux de redstone.

    Lorsqu'un joueur marchera sur une dalle de pression disposée au-dessus d'un bloc de commande, cela placera un bloc de redstone temporairement sur la version écran géant du labyrinthe. Ainsi, d'autres joueurs pourront observer l'évolution d'un joueur dans le labyrinthe en temps réel depuis l'extérieur.
     
  4. Mlakuss

    Mlakuss Rédacteur

    Inscrit:
    7 Sept 2013
    Messages:
    1 694
    Points:
    180
    Sexe:
    Homme
    Think different with Redstone.

    Tu cherches en fait à savoir où se trouve exactement le joueur dans ton labyrinthe si je comprend bien.
    Si ton écran est une exacte réplique (1:1) de ton labyrinthe: un /execute sur le joueur dans le labyrinthe lui permettra de placer le bloc directement au bon endroit (il faudra juste trouver un moyen pour retirer le bloc d'avant, mais c'est jouable). Du coup, pas besoin de plaque de pression et ça allège considérablement le travail.
    Code (cpp):
    /execute @a ~ ~ ~ setblock ~X Y ~Z wool 11 keep
    /execute @a ~ ~ ~ fill ~(X-1) Y ~(Z-2) ~(X-3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X+1) Y ~(Z-2) ~(X+3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z-1) ~(X+2) Y ~(Z-3) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z+1) ~(X+2) Y ~(Z+3) air 0 replace wool
    Avec X et Z: les coordonnées d'un coin de ton laby moins les coordonnées du même coin sur l'écran et Y, la cote de l'écran sur l'axe Y.

    Si tu n'as pas une réplique exacte, ça commence à devenir plus délicat. Mais dans ce cas, tu dois pouvoir faire en sorte d'avoir plus d'un de large sous ton labyrinthe. Juste avec deux, tu peux placer un piston collant avec un bloc de redstone orienté vers le bas: en marchant sur la plaque, le piston s'étend et active un bloc en dessous et en remontant, il peut activer un second bloc.
     
    #4 Mlakuss, 22 Fev 2015
    Dernière édition: 22 Fev 2015
  5. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 593
    Points:
    229
    On comprends un peu mieux, merci pour les screenshots ^^

    Comme l'a dit Mlakuss, si tu joue en 1.8 le mieux est de passer par un execute avec des coordonnées relatives par rapport au joueur bien que personnellement je chercherais plutôt à téléporter un ArmorStand sur l'écran que modifier des blocs.
     
  6. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    En effet je travaille en 1.8, et avec un écran de la taille exacte de mon labyrinhe.

    Mlakuss
    Hola... c'est compliqué ça, j'avoue que je ne connais pas encore les différentes commandes, je vais étudier les différentes lignes du dessus.
    En revenche, je croyais qu'on ne pouvait mettre qu'une seule ligne dans un bloc de commande.

    Code (cpp):
    /execute @a ~ ~ ~ setblock ~X Y ~Z wool 11 keep
    /execute @a ~ ~ ~ fill ~(X-1) Y ~(Z-2) ~(X-3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X+1) Y ~(Z-2) ~(X+3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z-1) ~(X+2) Y ~(Z-3) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z+1) ~(X+2) Y ~(Z+3) air 0 replace wool
    J'avoue ne pas très bien comprendre la synthaxe.

    Malheureusement, si plusieurs pistons sont côte à côte, il y aura un conflit avec les blocs de redstone. le bloc de redstone de l'un, activera le piston d'à coté :/. Mais bon, de toute façon j'ai une réplique exacte de mon labyrinthe...

    Calambiel
    Ta solution n'est pas mal non plus, je vais voir laquelle est la plus adaptée !!
     
  7. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 593
    Points:
    229
    Je vais essayer de t'expliquer le fonctionnement de cette commande ^^

    La commande /execute est une nouvelle commande de la 1.8 qui permet de réaliser des commandes habituelles mais depuis la position d'un joueur ou d'une entité. Son écriture est la suivante :
    Code (cpp):
    /execute <entité> <X> <Y> <Z> <Commande>
    Pour choisir l'entité on utilise les sélecteurs habituels : @p pour le joueur le plus proche (du bloc de commande), @r pour un joueur au hasard, @a pour tous les joueurs, @e pour les entités. Tu peux ensuite rajouter des sélecteurs entre crochets (type "[score_Test_min=1]").

    Par la suite il a utilisé des coordonnées relatives en utilisant le caractère "~" ce qui permet de sélectionner un emplacement depuis les coordonnées d'exécution de la commande (donc avec le /execute depuis le joueur)
    Par exemple :
    Code (cpp):
    /setblock ~ ~1 ~ minecraft:wool
    Cette commande va placer un bloc de laine à une distance de 1 sur Y par rapport à l'endroit d'exécution soit un bloc au dessus. Tu peux faire la même chose pour X Y et Z et tu peux utiliser des nombres négatifs pour réduire la coordonnée (avec "~-1" je placerais le bloc en dessous)

    Les commandes qu'il fait s'exécutent donc depuis le joueur et les "~" repèrent l'exécution par rapport à lui. Donc par exemple si tes deux labyrinthes sont distant de 50 blocs sur l'axe des X tu écrirais :
    Code (cpp):
    /setblock ~50 ~ ~ minecraft:wool
    S'ils sont distants de 50 blocs sur X, de -20 sur Z et 2 blocs plus haut (exemple au pif) tu écrirais :
    Code (cpp):
    /setblock ~50 ~2 ~-20 minecraft:wool
    Ça c'est pour sa première commande, les autres permettent de remplacer les blocs autour de lui par le bloc de base pour "effacer l'ancienne position".
    J'espère avoir été clair.
     
    #7 Calambiel, 22 Fev 2015
    Dernière édition: 22 Fev 2015
  8. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    Merci d'avoir pris le temps de m'expliquer tout ça.
    Ok maintenant je sais placer un bloc au bon endroit, c'est impec !! J'ai donc compris le code.
    Cependant il entraîne un bug potentiel. S'il y a plus d'un joueur dans le labyrinthe et qu'ils sont à un instant T proche les uns des autres, les commandes de "néttoyage" vont se faire concurrence. Je vais donc continuer à chercher une solution de substitution pour cette partie là.
    Code (cpp):
    /execute @a ~ ~ ~ fill ~(X-1) Y ~(Z-2) ~(X-3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X+1) Y ~(Z-2) ~(X+3) Y ~(Z+2) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z-1) ~(X+2) Y ~(Z-3) air 0 replace wool
    /execute @a ~ ~ ~ fill ~(X-2) Y ~(Z+1) ~(X+2) Y ~(Z+3) air 0 replace wool
    Un truc que j'ai remarqué, c'est que les développeurs de minecraft ont confondus Y et Z... Bon, passons, ce n'est pas grave.
     
  9. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 593
    Points:
    229
    Oui les axes sont inversés x)

    Pour le nettoyage ça peux ne pas géner. En effet les commandes sont toujours exécutées dans le même ordre si on ne change pas la disposition. Il suffit donc de changer la place des blocs de commande jusqu'à être sur qu'on a d'abord le nettoyage puis le placement des blocs à chaque boucle.
     
  10. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    D'accord je vais essayer cette solution dans un jeu d'essai. Merci.
    Je suis allé sur cette page, et je ne trouve aucune information sur la syntaxe à adopter pour entrer plusieurs commandes sur une seule ligne.
    Y aurait-il un tuto sur ce site ? Je cherche sur minecraf-france, mais il y en a pas mal des tutos lol.
    Ce serait sympa si j'arrive créer un système fiable ! :)
     
  11. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 593
    Points:
    229
    Il faut utiliser plusieurs blocs de commandes qu'on relie à une clock :)
    Il est possible de mettre plusieurs commandes en une mais ça reste très complexe et dans ton cas c'est se compliquer la tâche.

    Ici tu n'as pas besoin que le joueur active le bloc de commande en permanence, tu n'as même pas besoin de plaques de pression. Tu dois juste mettre ton système sous le labyrinthe ou dans les spawns chuncks (qui sont toujours chargés) avec une clock envoyant une impulsion de redstone régulièrement et le système fonctionnera pour toutes les positions du joueur (vu qu'on utilise des coordonnées relatives).
     
  12. Mlakuss

    Mlakuss Rédacteur

    Inscrit:
    7 Sept 2013
    Messages:
    1 694
    Points:
    180
    Sexe:
    Homme
    Le système que je propose permet de ne pas avoir de plaque de pression et de n'avoir que les 5 blocs de commande tournant en permanence à un endroit quelconque.
    Si tu as plusieurs joueurs, une solution simple serait effectivement de passer par des entités à téléporter (en leur collant un bloc sur la tête).

    Et pour information, même si les axes n'ont pas la notation à laquelle vous êtes habitués, on a un toujours un repère direct (d'un point de vue mathématique, le jeu a été bien pensé).
     
  13. OtakuSan76

    OtakuSan76 Enter the World

    Inscrit:
    22 Fev 2015
    Messages:
    23
    Points:
    11
    Sexe:
    Homme
    Bon j'ai fais un jeu d'essai et j'ai fais une observation. Un bloc de commande est capable à lui tout seul de percevoir mes déplacements plusieurs mètres autour de lui. Donc je peux mettre moins de blocs de commande sur le sol pour retranscrire mes actions sur écran géant.
    J'aimerais savoir à quelle distance les différents blocs de commande doivent-ils être disposés les uns des autres pour faire mon système. ainsi j'aurai plus de place.

    Après, je me demande si je pourrais faire un système centralisé (en externe) dont le rôle serait de faire allumer les bloc de redstone lumineux, et des blocs de commande dans le labyrinthe donc le rôle serait de capturer les valeurs x y et z des joueurs et d'envoyer ces valeurs en paramètre pour le système centralisé précédemment cité. Ce serait en quelque sorte la création de méthode de classe (pour ceux qui connaissent la programmation) et des appels de ces méthodes depuis le labyrinthe.

    Je sais que tout le monde n'est pas développeur, alors si je parle chinois, dites-le XD
     

Partager cette page