CommandBlock /stats : Une commande. Plein de possibilités.

Syst3ms

Geek à plein temps
8 Juin 2016
56
16
28
Et salut tout le monde !

Aujourd'hui je continue dans ma lancée ! Après mon précédent tutoriel que je vous incite à aller regarder, en voici un autre.

"Mec, t'as une vie ?"
*s'éclaircit la gorge*

Peu importe, on est ici pour parler de lampadaires. Ah non c'est le /stats.

Les néophytes ou les débutants se posent l'éternelle question :

"Mais à quoi ça sert ?"
C'est pourquoi je vais vous apprendre une chose : chaque commande a une utilité que vous ne soupçonnez pas.
Donc, au lieu de demander à quoi ça sert, demandez "qu'est-ce qu'on peut faire avec ?".

Après cette introduction 10 fois trop longue, le sommaire

Partie I : Présentation
Partie II : Syntaxe
Partie III : Applications
Partie Bonus : le QueryResult !

Revenons à nos moutons cubiques.

Partie I : Présentation

Le /stats vas permettre de stocker des statistiques (merci captain obvious) à propos d'entités ou de blocks dans un scoreboard. Je donne une définition large, floue et obscure car il est quasi-impossible de résumer une commande en une seule phrase. Certains me diront :

"La différence avec un scoreboard ?"
Le /stats stocke des données beaucoup plus générales qu'un scoreboard. Vous allez comprendre tout de suite.

On aborde tout de suite un example où le /stats nous est utile.
On veut compter les joueurs présents : c'est devenu très "simple" avec l'arrivée du /stats (1.8) !

Maintenant, passons à la partie qui fâche...

Partie II/III : Syntaxe et Applications
Il y a deux "branches" majeures dans le /stats : block et entity

Petit code utilisé dans les commandes :
entre accolades {} signifie "obligatoire"
entre crochets [] signifie "facultatif"
ce symbole ( | ) signifie "ou"


Code:
/stats {block|entity}

Avec block, on stockera les stats d'un block (sans blague) capable d'exécuter des commandes (donc un command block).

Avec entity, on stockera les stats d'une entité exécutant des commandes (soit si c'est un joueur, soit via le /execute)

Nous allons commencer avec entity. Comme entité de test, nous allons utiliser un armorstand nommé "AS" que nous allons invoquer grâce à cette commande :
Code:
/summon ArmorStand ~ ~ ~ {CustomName:"AS",CustomNameVisible:1b}

Après entity, nous devons mettre un sélecteur
Code:
/stats entity @e[name=AS] {set|clear|list}

Sur AS, nous pouvons :
  1. Ajouter une stat (set)
  2. En enlever une (clear)
  3. Les lister (list)
Nous allons suivre l'exemple du compteur de joueurs.
Après set, il faut spécifier un mode. Modes que je vais lister :
  • SuccessCount : compte le nombre de fois où l'entité réussit une commande
  • AffectedBlocks : compte le nombre de blocks affectés par les commandes de l'entité. Exemples : /fill, /clone
  • AffectedEntities : compte le nombre d'entités (ou joueurs) affecté par les commandes de l'entité (je dirais simplement "ses commandes" dorénavant). Exemples : /kill mais aussi /testfor
  • AffectedItems : compte le nombre d'items affectés par ses commandes. Exemple : /clear
  • QueryResult : pour en savoir plus, allez voir la partie bonus !
J'ai dit que AffectedEntities marchait avec un testfor. Donc en faisant /testfor via notre ArmorStand, on peut compter les joueurs ! Mais ça ne s'arrête pas là. Ces nombres, il faut bien les stocker quelquepart. Ce quelquepart est, vous vous en doutez, un scoreboard. Nous allons donc créer un objectif "jeu" :
Code:
/scoreboard objectives add jeu dummy Jeu

Après le mode, vous avez encore 2 arguments :
  • un autre sélecteur
  • un nom d'objectif
Vous allez me dire :

"Pourquoi mettre un 2nd sélecteur alors qu'on en a déjà indiqué 1 ?"
C'est simplement pour utiliser les faux joueurs. Allez voir l'excellent tutoriel d'@Oromis pour comprendre !

Donc, voici notre commande finale :

Code:
/stats entity @e[name=AS] set AffectedEntities Joueurs jeu

Je résume en 1 phrase cette commande.
"On stocke le nombre d'entités affectées par AS dans le faux joueur "Joueurs" de l'objectif jeu."

Concrètement, si on fait cette commande :

Code:
/execute @e[name=AS] ~ ~ ~ testfor @a

et qu'il y a 5 joueurs, alors le /stats va faire en sorte que le nombre de joueurs soit stocké dans "Joueurs" lui-même dans "jeu".

Et voilà, nous avons fait un compteur de joueurs fonctionnel ! Plus qu'à le mettre dans un command block "repeat" !

La commande suivante sert à l'afficher :

Code:
/scoreboard objectives setdiplay sidebar jeu

Et voilà !

Partie Bonus : le QueryResult (introduction)
Vous avez sans doute vu ce mode bizarre. Certaines commandes n'ont pas d'effet, mais elles renvoient une valeur.
Exemples :

  • /gamerule nomDeLaGamerule : sans rien derrière, cela vous renvoie l'état de la gamerule. Une valeur transcrite en 0 ou 1 en utilisant QueryResult.
  • /time query : vous renvoie l'heure (en ticks) actuelle.
  • /worldborder get : vous renvoie la taille de la bordure du monde !
Vous allez me dire que c'est inutile ! Loin de là ! On peut même créer des gamerules personnalisées avec ça ! Mais ce sera l'objet d'un autre tutoriel qui devrait sortir demain ou après-demain !

N'hésitez pas à apprécier ce post et à me rapporter une quelconque erreur !

J'espère vous avoir aidé !






 

Syst3ms

Geek à plein temps
8 Juin 2016
56
16
28
C'est la question que je te pose : comment s'applique /stat avec ce wagon ?
Code:
/stats entity @e[tag=(un tag ici)] set SuccessCount (sélecteur/faux joueur) (objectif)

Si le minecart command block exécute la commande avec succès, le score du joueur (sélecteur/faux joueur) dans l'objectif (objectif) sera augmenté de 1.
 
  • J'aime
Reactions: Clen23

Exstinctor

Un problème? Des solutions.
29 Septembre 2012
69
29
108
37
J'ai testé l'exemple donné dans le tutoriel et il s'est avéré que cela ne marchait pas.
Je me suis un peu trituré l'esprit et fais de multiples tests et j'ai remarqué qu'il fallait affecter une valeur de départ à l'objectif pour le faux-joueur.
Sinon, il ne s'affiche pas.

Donc dans l'ordre, on a:
Code:
/summon ~ ~ ~ armor_stand
Code:
/scoreboard objectives add jeu dummy Jeu
Code:
/scoreboard players set Joueurs jeu 0

Et dans des command block repeat (block de commande violet pour Clen), on peut mettre:
Code:
/execute @e[type=armor_stand] ~ ~ ~ /testfor @a
Code:
/stats entity @e[type=armor_stand] set AffectedEntities Joueurs jeu

Sans oublier de l'afficher:
Code:
/scoreboard objectives setdisplay sidebar jeu

Voili Voilou!
 
Dernière édition: