CommandBlock Résolu [1.12.2] Comment TP un nouveau joueur + Titre de bienvenue (Skyfactory)

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
Bonjour,

Après avoir chercher sans succès me voici ici pour vous demander de l'aide.

Le contexte :
  • Nous sommes sur Skyfactory 4
  • J'ai un spawn importé via worldedit avec le spawn-protection actif
  • Dans ce spawn je souhaiterai un bouton qui lorsque qu'un nouveau joueur se connecte et appuie dessus, celui-ci, le TP à sa base ( commande de Skyfactory qui permet ceci en tapant directement dans le tchat : /topography island home <player> )

Où j'en suis :
  • J'ai utilisé les commandes blocs
  • Mes commandes fonctionnent pour moi (OP) lorsque j'appuie sur le bouton mais pas pour le nouveau joueur.

Voici les commandes que j'ai utilisé, celles-ci fonctionnent pour les Opérateurs mais pas pour les joueurs lambdas.
  • Commande 01 (Option commande bloc : par impulsion, inconditionnel, par la redstone) :
    • Code:
      /title @a title ["",{"text":"Bienvenue à"},{"selector":"@p","bold":true}]

  • Commande 02 (Option commande bloc : chaine, inconditionnel, toujours actif) :
    • Code:
      /title @a subttitle {"text":"qui vient d'arriver sur son arbre !"}

  • Commande 03 (Option commande bloc : chaine, inconditionnel, toujours actif) :
    • Code:
      /topography island home @p

Voilà, j'aimerai comprendre ce que je ne fais pas correctement.
Merci d'avance pour votre aide.

Seth.
 

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
J'ai un semblant de réponse que je partage.

J'ai désactivé la protection du spawn ce qui a permit à un joueur non OP de pouvoir activer la commande via un bouton.

Ceci en revanche m'amène à poser une nouvelle question.

Comment protéger son spawn tout en laissant la possibilité aux joueurs non OP d'activer des commandes ?

Merci
 

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
J'ai résolu mon problème "en partie" sans mods mais pas sans questions....

Contexte et but recherché :

Serveur 1.12.2 avec Skyfactory 4 (mode par défaut)
Connexion des nouveaux joueurs sur un spawn incassable.
Tp des nouveaux joueurs vers leur base

Solution :

Le serveur doit être par défaut en mode Aventure. De ce fait le spawn devient incassable.
Les nouveaux joueurs une fois arrivés sur le spawn en mode aventure, devront appuyer sur un bouton qui via les commandes blocs effectuera ces actions :
  1. Test si un joueur se trouve juste devant le bouton (je n'ai pas encore cette commande et ne sais pas si c'est réalisable)
  2. Affichage d'un titlte et d'un subtitle ( texte qui pop à l'écran).
  3. Création et Téléportation du joueur sur sa base via la commande propre à SkyFactory.
  4. Changement du mode de jeu en survie.

Voici les commandes que j'ai utilisé :

Commande block n°1 :

Mode : Impulse, Unconditional, Needs Redstone

Commande qui permet de tester si un joueur est devant le bouton qui si ce n'est pas le cas ne déclenchera pas la suite des évènements :

"Je n'ai pas cette commande et ne sait pas si cela est possible, pour le moment j'utilise un msg dans le tchat"

Code:
say @p dit Bonjour à @a


Commande block n°2 :

Mode : Chain, Unconditional, Always Active

Commande qui permet de temporiser l'affichage du titre :

Code:
Title @a times 20 100 20


Commande block n°3 :

Mode : Chain, Unconditional, Always Active

Commande qui permet d'afficher le titre avec la couleur gold :

Code:
title @a title {"text":"Bienvenue !","color":"gold"}


Commande block n°4 :

Mode : Chain, Unconditional, Always Active

Commande qui permet d'afficher le sous-titre avec la couleur gold et le nom du joueur le plus proche en couleur dark red :

Code:
title @a subtitle ["",{"selector":"@p","color":dark_red"},{"text":"blablabla !","color":"gold"}]


Commande block n°5 :

Mode : Chain, Unconditional, Always Active

Commande qui permet de téléporter le joueur sur son arbre (commande propre à SkyFactory 4) :

Code:
topography island home @p


Commande block n°6 :

Mode : Chain, Unconditional, Always Active

Commande qui permet de modiier le mode de jeu du joueur le plus proche :

Code:
gamemode 0 @p


Question :

Est t'il possible de tester si un joueur se trouve juste devant le bouton et de faire en sorte que si ce n'est pas le cas les commandes ne se déclenchent pas ?


Voilà...je réponds à mes propres questions ce qui j'espère aidera peut-être de novices comme moi. Maintenant si quelqu'un qui a plus de notion pouvait s'intéresser un peu à mon sujet ça serait cool ^^

Seth.
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Hey !

Ton post a été déplacé ici semble-t-il, je n'ai donc pas été notifié de son post dans cette section :/
Du coup :
Est t'il possible de tester si un joueur se trouve juste devant le bouton et de faire en sorte que si ce n'est pas le cas les commandes ne se déclenchent pas ?
Yep, c'est possible !
Si tu veux que le joueur se trouve à des coordonnées précises, tu peux utiliser les arguments des sélecteurs !
Pour cela, il faut faire deux choses :
  • Déplacer le point de recherche (du sélecteur) sur les coordonnées que tu veux
  • Restreindre à une certaine zone autour de ce point

Pour le premier point, on va passer par les arguments x, y et z, qui définissent donc le point initial de recherche du sélecteur. Exemple d'utilisation :
Code:
testfor @p[x=5,y=5,z=5]
Va chercher le joueur le plus proche du point (5; 5; 5) (sans limite de recherche).
Dans ton cas à toi, tu veux en effet chercher à partir d'un certain point, mais aussi faire en sorte que la recherche se limite à une zone, pour cela il y a deux possibilités :
Soit tu passes par l'argument r qui permet de définir un rayon (une zone de recherche sphérique de rayon spécifié et dont le centre est soit le point d'exécution de la commande, soit le point de recherche si x, y et z sont spécifiés), soit tu passes par les arguments dx, dy et dz qui te permettent de définir une zone de recherche en forme de pavé.
Je vais donc détailler un peu plus les deux en reprenant la commande du dessus :
Code:
testfor @p[x=5,y=5,z=5,r=3]
Si tu essayes cette commande, ça affichera la personne la plus proche du point de coordonnées (5; 5; 5) et dans un rayon de 3 blocs autour de ce dernier !
Maintenant la deuxième possibilité :
Code:
testfor @p[x=5,y=5,z=5,dx=1,dy=1,dz=1]
Je vais d'abord détailler un peux comment fonctionne ces trois nouveaux paramètres :
Ils permettent de définir une prolongation sur leur axe respectif (dx défini une prolongation en X etc), donc si l'on met dx = 1, alors la recheche se cantonnera à x = le point d'exécution (et de recherche) et x = le point d'exécution (ou de recherche) + 1.
Dans notre commande ci-dessus, celle-ci va donc chercher le joueur le plus proche du point de coordonnées (5; 5; 5) étant dans une zone de forme pavé de prolongation 1 sur chaque axe, il va donc chercher sur ces blocs là :
  • (5; 5; 5)
  • (6; 5; 5)
  • (5; 6; 5)
  • (5; 5; 6)
  • (6; 6; 5)
  • (5; 6; 6)
  • (6; 5; 6)
  • (6; 6; 6)
Il faut savoir qu'il n'est pas possible de faire une prolongation négative ! Donc le point spécifié par x, y et z est nécessairement le point ayant les coordonnées les plus négatives (ici, il n'y a pas de points plus négatifs que (5; 5; 5)).
Par contre, les prolongations peuvent être nulles (vallant 0), dans ce cas, la recherche ne se fera que sur la coordonnées correspondant à l'axe spécifié.
Donc si j'avais mis les trois d[axe] à 0, alors seul le point (5; 5; 5) aurait été cherché.

Dernier point, qui vaut pour tous les modes de recherche :
La position du joueur est défini par la position de ses pieds : si les pieds sont donc dans la zone de recherche mais pas la tête, alors il sera tout de même détecté !

Voilà, en espérant que cela t'aide à résoudre ton soucis ;)
 

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
Salut :) Et merci pour ta réponse.

Dès que j'ai un moment, j'essaie tout ça.

P.S. C'est moi qui ait déplacé/refait mon post estiment qu'il était mieux ici que dans l'autre canal plus général :/
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Ah okay, étonnant que je n'ai pas été notifié de son post ici :/
 

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
Salut, Me revoilà :)

@Oromis

Alors j'ai testé ta solution et ça fonctionne. Maintenant, l'idée est de tester si un joueur se trouve sur telle case et lorsqu'il appuie sur le bouton ça déclenche la commande, s'il n'est pas sur la case, il aura beau appuyer ça ne déclenche pas la commande.

Voici où j'en suis :

Un commande bloc avec ta commande suivi d'un comparateur.
Code:
testfor @p[x=43,y=63,z=43,dx=0,dy=0,dz=0]

Un commande bloc qui teste le bouton lorsque qu'on appuie dessus.
Code:
/testforblock 43 65 43 minecraft:stone_button 8

Mais pour associer les deux je ne trouve pas.

Edit :

J'ai avancé :

commande bloc (Repeat - Unconditional - Always active)
Test si le bouton est activé -->
Code:
/testforblock 43 65 43 minecraft:stone_button 8
Suivi d'un comparateur
Commande bloc (Repeat - Unconditional - Need Redstone)
Test si le joueur est sur le bloc -->
Code:
testfor @p[x=43,y=63,z=43,dx=0,dy=0,dz=0]
Suivi d'un comparateur

Les tests fonctionnent mais le derniers comparateur reste allumé lorsque le test est vrai. Cependant il semblerait que la commande finale se lance qu'une seule fois et si je tp le joueur le comparateur ne reste pas figé. Donc....ça l'air ok...Je teste.
 
Dernière édition:

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Oh grand jamais de comparateur en post 1.8 ! C'est un Sacrilège ! ^^
Tu peux faire sans ! Tu mets le premier command-block en repeat - Unconditional - Always Active et qui pointe vers le haut. Le second, tu le mets au-dessus, en Chain - Conditional - Always Active.
Tu peux avec les commandes blocs créer des chaînes comme on l'a fait ici. Dans l'idée, le command-block qui lance la chaîne (soit un repeat, soit un impulse) propage dans le sens de sa flèche l'information "J'ai été exécuté". Si les éléments de la chaîne (outre le premier donc) sont des "chain command-block", alors ils propageront l'information dans le sens de la flèche.
Il y a de plus l'option "Conditional" qui rajoute une condition sur l'exécution du command-block courant. Celui-ci ne s'exécutera plus à l'information "J'ai été exécuté" venant du command-block précédent mais à l'information "J'ai été exécuté, et j'ai réussi a exécuté ma commande". Donc dans l'idée, si ton premier command-block ne détecte pas de joueurs, il renvoie une information "échec" qui est reçu par le second command-block qui ne s'exécutera donc pas ;)
 

GhostSeth

Aventurier
21 Mars 2020
8
1
3
41
Haha je ne sais pas que j'ai insulté le dieu Minecraft lol je vais les retirer de ce pas et faire une offrande !!

Ok...pour tout ce que tu dis...sur le principe j'ai déjà les notions...je pense, ce qu'il me manque encore c'est la logique et la bonne assimilation de tout ça. J'y retourne ;) Merci.

Victoire !!

Voici donc la solution finale :
Minecraft v1.12.2

Test_Joueur_Bouton_TP.jpg


  1. Ce bloc de commande s'activera lorsque que le bouton sera activé
    • Mode du bloc :
      • Repeat - Unconditional - Always active
    • Code :
      • Code:
        /testforblock 43 65 43 minecraft:stone_button 8
  2. Ce bloc de commande teste si un joueur se trouve sur la position x=43 y=63 z=43 et seulement sur un bloc grâce à dx, dy, dz comme expliqué plus haut par @Oromis
    [...]Ils permettent de définir une prolongation sur leur axe respectif (dx défini une prolongation en X etc), donc si l'on met dx = 1, alors la recheche se cantonnera à x = le point d'exécution (et de recherche) et x = le point d'exécution (ou de recherche) + 1.[...]
    • Mode du bloc :
      • Chain - Conditional - Always active
    • Code :
      • Code:
        testfor @p[x=43,y=63,z=43,dx=0,dy=0,dz=0]
  3. Ce bloc de commande temporise le title qui va suivre
    • Mode du bloc :
      • Chain - Conditional - Always active
    • Code :
      • Code:
        /title @a times 20 100 20
  4. Ce bloc de commande affiche le titre
    • Mode du bloc :
      • Chain - Conditional - Always active
    • Code :
      • Code:
        title @a title {"text":"Bienvenue !","color":"gold"}
  5. Ce bloc de commande affiche le sous titre
    • Mode du bloc :
      • Chain - Conditional - Always active
    • Code :
      • Code:
        /title @a subtitle ["",{"text":"à "},{"color":"gold","selector":"@p[x=43,y=63,z=43,dx=0,dy=0,dz=0]"}]
  6. Ce bloc de commande téléporte le joueur se trouvant à la position X=43 Y=63 Z=43
    • Mode du bloc :
      • Chain - Conditional - Always active
    • Code :
      • Code:
        tp @e[x=43,y=63,z=43,dx=0,dy=0,dz=0] 40 63 43
Merci à toi @Oromis

Si tu vois d'autres détails à ajouter ou modifier n'hésite pas.
 
Dernière édition:
  • J'aime
Reactions: Oromis

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Outre la dernière commande qui est syntaxiquement faux (mais sans doute une erreur dans tes balises [code ]), rien à redire ;)
Je passe donc la discussion en résolu ! ^^[/code]