Comment obtenir et stocker le nom du joueur?

J'ai un ensemble de blocs de commandes qui font ce qui suit:

  1. Testez que tous les joueurs ont un crâne dans leur inventaire
  2. Sinon, donner à tous les joueurs un crâne
  3. Tuer tous les joueurs

De manière simple, si quelqu'un dépose le crâne, on lui donne un autre et ensuite on le tue. (Une façon de revenir à leur point de propagation).

Évidemment, en mode multicouches, cela pose des problèmes.

  1. Si un joueur n'a pas le crâne, le test est positif même si d'autres l'ont.
  2. Tous les joueurs reçoivent alors un autre crâne, laissant ceux qui ne l'ont pas laissé tomber avec plus d'un.
  3. Tous les joueurs sont alors tués.

Y a-t-il un moyen d'enregistrer le nom du joueur qui a laissé tomber le crâne, alors ne prenez-vous que les actions suivantes?

De façon simple, je veux pouvoir remplacer dynamiquement @a par un nom de joueur.

Aussi, existe-t-il un moyen de détecter si un joueur a fait un clic droit sur l'élément dans son hot-bar plutôt que s'ils l'ont laissé tomber?

Le contexte:

Dans le Minecraft 14w08a, un instantané entre 1.8 et 1.7, vous pouvez maintenant tester un élément dans l'inventaire d'un joueur en effaçant 0 éléments de ce type, comme dans l'instantané, il a ajouté la possibilité de spécifier le nombre d'éléments à supprimer.

 /clear [Player] [Item] [Data] [Count] [NBT Tags] 

Sauf, cela signifie que nous devons identifier la personne et qu'il n'y a aucun moyen de capturer la personne. Donc, nous devons donner au joueur un identifiant.


Comment faisons-nous ça?

Entrez la description de l'image ici
C'est un module. Répétez cette opération autant de fois que le nombre de joueurs que vous souhaitez suivre. Ainsi, 50 joueurs signifient le faire 50 fois, mais en remplaçant l'ID du joueur par un nombre différent, de préférence plus un au précédent.

Étape 1: Créez un identifiant.
En utilisant les blocs de commandes, vous devrez attribuer à chaque joueur que vous souhaitez tester une valeur dans un score factice. Faisons un score appelé playerID qui est une valeur fictive.

 /scoreboard objectives add playerID dummy playerID 

Donc, chaque fois que vous voulez tester un joueur (s'il s'agit d'une carte associée au bloc PvP / commande, tous les joueurs doivent être affectés d'un numéro lorsque vous vous connectez / rejoignez le jeu, pas de spectacle).

Étape 1b.

Créer une porte. Tous les joueurs doivent y participer lorsque le jeu commence. Lorsque le premier joueur passe dessus, on lui attribue une valeur de tableau de bord dans l'objectif "ID du joueur". C'est ce que nous allons utiliser pour identifier chaque joueur.

 /scoreboard players set @p playerID 1 

Maintenant, le prochain joueur devrait soit avoir à aller sur une autre plaque de pression, soit vous pouvez faire que cette même plaque de pression donne un nombre différent (plus compliqué, ne va pas dire comment).
Sur la base de vos commentaires, créez une deuxième porte pour le deuxième joueur et ainsi de suite.

Cette porte devrait avoir /scoreboard players set @p playerID 2 et ainsi de suite.

Étape 2: Maintenant, nous aurons à /testfor pour chaque joueur.

Placez une horloge rapide (environ 10 Hz, allume 10 fois par seconde). Vous pouvez aller plus vite – Mais cela ne fonctionnera pas avec les répéteurs / comparateurs, etc. Cette impulsion va dans un bloc de commande avec cette commande:

 /clear @p[score_playerID=1,score_playerID_min=1] minecraft:Skull 0 0 

Cela effacera le joueur avec le score playerID de 1 zéro Skulls.
Si le joueur a un crâne dans son inventaire, il n'en effacera rien et affichera "vrai".
Si le joueur n'a pas de crâne dans son inventaire … (Bien qu'il essaye de ne pas effacer des crânes, il vérifie s'il y a des crânes. /clear commandes de /clear false si l'élément n'est pas trouvé, sans préjugé de combien il faut. Supprimé).

Donc, placez un comparateur en face de ce bloc de commande /clear [blah blah blah] sorté en sortie vers un autre bloc de commande. Maintenant, mettons le "Oh, ce gars s'adapte à cette citeria".

 /scoreboard objectives create hasSkull dummy hasSkull /scoreboard players set @p[score_playerID=1,score_playerID_min=1] hasSkull 1 

Si vous voulez que le score revienne automatiquement à 0 lorsque le joueur perd le crâne, il suffit de faire une porte à bascule (une sortie vers la gauche si l'entrée est activée et à droite si l'entrée est désactivée, etc.) Lorsque l'entrée est fausse, elle produit un signal vers un bloc de commande qui:

 /scoreboard players set @p[score_playerID=1,score_playerID_min=1] hasSkull 0 

Étape 3: Le morceau ennuyant.
Maintenant, répétez autant de modules que vous avez besoin pour les joueurs. Cette fois, modifiez le score que vous testez, par exemple: /clear @p[score_playerID=2,score_playerID_min=2] minecraft:Skull 0 0 au lieu de /clear @p[score_playerID=1,score_playerID_min=1] minecraft:Skull 0 0 etcra.

Étape 4: faire quelque chose avec eux.
Maintenant que vous avez un objectif qui donne un score de «1» à quiconque possède un crâne dans son inventaire … Ou «0» à ceux qui n'en ont pas, vous pouvez simplement créer un bloc de commande qui fait des choses aux joueurs avec le score De 1.

Créez un bloc de commande qui teste pour cela, sur une horloge de 20Hz (actualise 20 fois par seconde, l'horloge la plus rapide possible) … ou plus lent si vous le souhaitez.

 /[something] @p[score_hasSkull=1,score_hasSkull_min=1] [more parameters] 

Par exemple: /kill @a[score_hasSkull=1,score_hasSkull_min=1] (Tue tous ceux qui ont un crâne)

Dans cet instantané, vous ne pouviez probablement pas le faire, mais maintenant, la commande / exécute contribue vraiment;)

/execute @p ~ ~ ~ clear @p minecraft::Skull 0 0 pour vérifier s'il a un crâne (comme l'a dit @aytimothy)

Câblé à un comparateur et répéteur redstone à un bloc de commande suivant:

/execute @p ~ ~ ~ give @p minecraft:skull 1

De cette façon, vous n'avez pas besoin de dépendre de la création d'UID pour chaque joueur.

Cette réponse est basée sur la réponse ci-dessus.

Vous pouvez donner des identifiants avec une seule plaque de pression en procédant comme suit:

  • Mettez un comparateur sur le bloc de commande avec tp , où vous attachez un bloc de commande qui place un bloc de commande avec la prochaine commande définie exactement où se trouvait le bloc de commande précédent (avec un répéteur si nécessaire pour que vous ayez suffisamment de retard pour le nouveau bloc de commande non Pour déclencher immédiatement).
  • De la même manière, vous pouvez remplacer la commande du second bloc de commande par un qui le fait remplacer la première commande par une donnant l'ID 3.
  • En chaînant des blocs de commandes de cette façon (peut être ennuyeux selon le nombre de joueurs que vous souhaitez autoriser), vous pouvez faire en sorte que les blocs de commande mettent à jour leurs commandes avec chaque identifiant.
  • À la fin de la chaîne, vous créez un bloc de commande qui définit une commande qui définit une commande qui définit une commande … et ainsi de suite, cela change la première commande en donnant le mode de spectateur de joueur.

Et bien sûr, vous attachez le bloc de commande tp bloc de commande de configuration ID et maintenez-le inchangé tout le temps.

Pour illustrer ce qui se passe lorsque cela fonctionne, j'ai écrit les commandes pour une chaîne de trois blocs de commandes.

Hypothèses (il devrait être clair ce qu'il faut modifier en fonction de la situation actuelle, sinon quelqu'un pourrait-il clarifier les commentaires, je suis trop fatigué maintenant):

  • Le premier bloc de commande est sur les coords 0, 10, 0.
  • La chaîne est orientée vers X.
  • Il y a exactement un répéteur après chaque comparateur.
  • Le génome du jeu lui-même est à 100, 100, 100.

Commandes:

 scoreboard players set @p playerID 1 tp @p 100 100 100 setblock 0 10 0 minecraft:command_block 0 replace {Command:scoreboard players set @p playerID 2,TrackOutput:0} setblock 3 10 0 minecraft:command_block 0 replace {Command:setblock 0 10 0 minecraft:command_block 0 replace {Command:scoreboard players set @p playerID 3,TrackOutput:0},TrackOutput:0} setblock 6 10 0 minecraft:command_block 0 replace {Command:setblock 3 10 0 minecraft:command_block 0 replace {Command:setblock 0 10 0 minecraft:command_block 0 replace {Command:gamemode 3 @p,TrackOutput:0},TrackOutput:0},TrackOutput:0} 

Remarques:

  • Les commandes sont générées avec MCStacker.
  • Il se peut que le paramètre TrackOutput soit supprimé, car il est probablement possible de spécifier 1.9.
  • Cette chaîne n'est pas testée, car je ne peux pas travailler sur un multijoueur.

Que se passerait-il?

  • Le premier joueur passe sur la plaque de pression.
  • Le joueur obtient l'ID 1.
  • Le joueur est téléporté vers le jeu engendré.
  • Les scoreboard players set @p playerID 2 commande scoreboard players set @p playerID 2 pour le premier bloc de commande.
  • Le setblock 0 10 0 minecraft:command_block 0 replace {Command:scoreboard players set @p playerID 3,TrackOutput:0} commande setblock 0 10 0 minecraft:command_block 0 replace {Command:scoreboard players set @p playerID 3,TrackOutput:0} est défini pour le deuxième bloc de commande (ou le troisième, si vous comptez le bloc de commande tp ).
  • La commande setblock 3 10 0 minecraft:command_block 0 replace {Command:setblock 0 10 0 minecraft:command_block 0 replace {Command:gamemode 3 @p,TrackOutput:0},TrackOutput:0} est défini pour le troisième bloc de commande.
  • Le deuxième joueur passe sur la plaque de pression.
  • Le joueur obtient l'ID 2.
  • Le joueur est téléporté.
  • Le premier bloc de commande permet aux scoreboard players set @p playerID 3 .
  • Le deuxième bloc de commande obtient le bloc- setblock 0 10 0 minecraft:command_block 0 replace {Command:gamemode 3 @p,TrackOutput:0} .
  • Le troisième bloc de commande obtient ce qu'il possède.
  • Le troisième joueur obtient l'ID 3 et est téléporté.
  • Le premier bloc de commande obtient gamemode 3 @p .
  • Deuxième et troisième blocs de commandes obtiennent ce qu'ils ont.
  • Tout futur joueur passe en mode Spectator, se téléporte, et tous les blocs de commandes obtiennent les commandes qu'ils ont déjà.

Ce schéma peut être étendu. Si quelqu'un l'aime et est bon pour le codage webapp, n'hésitez pas à écrire un générateur.

En outre, dans les nouveaux instantanés pour 1.9, les choses deviennent beaucoup plus faciles: vous pouvez vérifier directement si les joueurs tombent des crânes à l'aide du scoreboard .