Accueil / Tutoriels / Les commandes / [Tutoriel] La commande /stats

[Tutoriel] La commande /stats

[Tutoriel] La commande /stats
5(100%) 5 votes

Malgré sa très grande utilité, la commande /stats est l’une des commandes les moins utilisées, principalement à cause de sa complexité. Aussi, ce tutoriel vise à éclairer les joueurs à son sujet, à vous apprendre toutes ses subtilités pour que vous puissiez l’exploiter à son maximum. Car bien utilisée, cette commande vous permettra de créer de nouvelles gamerules, détecter lorsqu’un joueur utilise une commande ou encore savoir le nombre de minerais de diamants à proximité ! Ces quelques exemples seront illustrés tout au long du tutoriel, mais sachez que les possibilités sont très vastes, et que même moi, au moment où j’écris cet article, n’ai pu en explorer qu’une infime partie. Bref, autant vous dire qu’en lisant ce tutoriel, vous apprendrez à utiliser les commandes d’une manière très différente !

Avant de commencer, notez que si vous ne savez pas ce qu’est un scoreboard, ou que vous ne savez pas à quoi sert la commande /execute, vous risquez d’avoir du mal à suivre de tutoriel. Ainsi, je vous conseille de vous renseigner préalablement (notamment via ce tutoriel pour le scoreboard et celui-ci pour le /execute), car la commande /stats est directement liée aux scoreboards !

dividerminecraftfrance

Les bases

A quoi sert cette commande?

Avant de s’attaquer directement à la commande, il faut déjà savoir à quoi elle sert. La commande /stats permet de connaitre le résultat d’une commande exécutée par un bloc ou entité. Par exemple, on pourra savoir combien de blocs ont été posés par une commande /fill, le nombre d’items enlevés à un joueur par un /clear ou encore si une commande a échoué ou réussi … Ce nombre est ensuite enregistré dans le scoreboard indiqué dans les paramètres de la commande. On peut donc voir le /stats comme une sorte de lien entre un scoreboard et une entité ou un block…

Mais quand l’utiliser ?

Cette commande est surtout utilisée en optimisation de systèmes, pour utiliser moins de command blocks (ou blocs de commande). On l’utilise également beaucoup pour débloquer des problèmes complexes. Mais avant de l’utiliser, réfléchissez bien : n’y a-t-il pas d’autre moyen ? Parfois, un simple comparateur ou command block en mode “conditionnel” suffit. Quoi qu’il en soit, cette commande peut être utilisée partout, et c’est ce qui fait toute sa puissance !

La syntaxe du /stats

Tout d’abord, il faut savoir que la cible de la commande /stats peut être soit un bloc (command block), soit une entité (comme un joueur). Il faudra donc le préciser au début de la commande, suivit par le block ou l’entité en question :

/stats block <x> <y> <z> ...

ou

/stats entity <joueur> ...

Mais la commande n’est pas terminée. Il faut ensuite indiquer si l’on veut créer ou supprimer le lien entre le bloc ou l’entité et le scoreboard. On utilisera respectivement les arguments “set” ou “clear”.

Vient ensuite la partie la plus importante : le type d’information qui sera envoyé au scoreboard. En voici donc la liste :

  • SuccessCount : “0” si la commande a échoué, “1” si elle a réussi
  • AffectedBlocks : le nombre de blocs affectés (ex : le nombre de blocs posés par une commande /fill)
  • AffectedEntities : le nombre d’entités affectées (ex : le nombre d’entités détectées pas un /testfor)
  • AffectedItems : de même, le nombre d’items affectés (ex : le nombre d’items enlevés par un /clear)
  • QueryResult : le plus intéressant, il permet de mettre dans le scoreboard ce qu’a retourné une commande de type “query”, c’est à dire une commande qui demande une information. (ex : /seed, ou /time query daytime)

Enfin, viennent le nom de l’entité dont le scoreboard, indiqué ensuite, prendra la valeur voulue.

Il faut que le scoreboard du joueur ait déjà une valeur ! Il suffit donc de faire : /scoreboard players set <player> <nom du scoreboard> 0, par exemple.

On a donc une syntaxe ressemblant à ceci :

/stats block <x> <y> <z> <type d'information> <joueur> <nom du score du joueur>

ou

/stats entity <joueur> <type d'information> <joueur> <nom du score du joueur>

Les différentes parties de la commande ont été colorées afin de la rendre plus simple à comprendre. Et si ce n’est pas très clair pour vous, ne vous en faites pas, quelques exemples d’utilisation suivent.

Si vous voulez supprimer le lien entre le bloc ou le joueur et le scoreboard, il vous suffit d’écrire ceci :

/stats block <x> <y> <z> clear <type d'information>

ou

/stats entity <joueur> clear <type d'information>

En résumé

la commande /stats

dividerminecraftfrance

Exemples d’utilisation

Afin de vous faire comprendre l’intérêt de la commande /stats, quoi de mieux que quelques exemples ? Voici donc quelques systèmes sympathiques à réaliser avec cette commande !

Créer de nouvelles gamerules

Créer de nouvelles gamerules

Créer de nouvelles gamerules

Comme on l’a vu dans l’introduction, la commande /stats permet de créer facilement de nouvelles gamerules. Seul défaut, sa valeur ne peut être que des chiffres (pas de texte comme “true” ou “false”)… Il faut savoir que lorsqu’un joueur change une gamerule qui n’existe pas, celle-ci est créée automatiquement ! De plus, faire la commande /gamerule <nom de la gamerule>, sans préciser de valeur renvoie sa valeur actuelle. Il suffit donc de récupérer cette valeur dans un scoreboard à l’aide d’un /stats ! Au boulot !

On commence par créer un scoreboard appelé “stats” et de type “dummy”, donc modifiable avec des commandes, et l’afficher :

/scoreboard objectives add stats dummy
/scoreboard objectives setdisplay sidebar stats

On place ensuite un command block, que l’on met en mode “répétition” et “toujours actif”. On va le lier avec le scoreboard (à vous d’adapter les coordonnées et le pseudo pour vous) :

/stats block -832 56 -1134 set QueryResult Erywarn stats
Vous pouvez mettre aussi le nom d’un joueur qui n’existe pas ! Ainsi, en créant ce score : /stats block -832 56 -1134 set QueryResult joueurInconnu stats, le score sera attribué au joueur “joueurInconnu” et affiché à droite de l’écran.

Puis on va écrire dans le command block la commande qui nous donnera la valeur de la gamerule :

/gamerule nouvelleGamerule

Mais ce n’est pas encore fini ! Pour l’instant, la nouvelle gamerule n’existe pas car elle n’a pas de valeur, nous allons donc la mettre à 0, et la créer :

/gamerule nouvelleGamerule 0

Reste à mettre le scoreboard du joueur “Erywarn” (moi) à 0 pour que le /stats marche :

/scoreboard players set Erywarn stats 0

Voilà, c’est tout ! A partir de maintenant, dès que la gamerule changera de valeur, le score du joueur Erywarn dans le scoreboard “stats” prendra sa valeur ! Vous pouvez tester en changeant la valeur de la gamerule :

/gamerule nouvelleGamerule 666

Le score à droite de l’écran prendra cette valeur !

Anticheat : détecter les joueurs utilisant des commandes

Anticheat : détecter les joueurs utilisant des commandes

Anticheat : détecter les joueurs utilisant des commandes

Tous les mapmakers sont confrontés à ce problème : la triche. En effet, il est relativement facile pour les joueurs d’utiliser des commandes. Le /stats offre une bonne solution : détecter les joueurs utilisant des commandes pour les punir… Il suffit de mettre le score de chaque joueur à un nombre comme 2, et de lier leur scoreboard à eux même avec un /stats de type “SuccessCount”. Du coup, dès que le joueur utilisera une commande, son score passera à 0 (si la commande échoue) ou 1 (si elle réussi).

Le réel problème va être de faire un système compatible avec le multijoueur. En effet, on a vu que le /stats liait une entité fixe à un scoreboard fixe. Mais dans notre cas, chaque joueur doit être lié à lui-même. On devra donc passer par un /execute. Mais une fois qu’il aura exécuté le /stats, il ne servira à rien de répéter cette action à l’infini. On le marquera donc avec un tag qu’on appellera “stats”.

On commence par la création et l’affichage du scoreboard :

/scoreboard objectives add antiCheat dummy
/scoreboard objectives setdisplay sidebar antiCheat

Puis on place 4 command block à la suite. Le premier doit être en mode “répétition” et “toujours actif” tandis que les autres doivent être en mode “chaîne”. Voici les commandes expliquées à renter dans l’ordre :

/say @a[score_antiCheat_min=0,score_antiCheat=1]

Si le joueur a exécuté une commande, son score antiCheat sera à 0 ou 1. Vous pouvez changer la commande en /kill par exemple, selon vos désirs.

/execute @a[tag=!stats] ~ ~ ~ /stats entity @p set SuccessCount @p antiCheat

Quand un joueur se connecte, il n’a pas le tag “stats” et se liera donc à lui même avec le /stats.

/scoreboard players tag @a[tag=!stats] add stats

Les joueurs connectés (donc liés par le /stats) sont marqués pour qu’ils ne répètent pas la commande précédente.

/scoreboard players set @a antiCheat 2

Enfin, les scores de tous les joueurs sont remis à 2.

Ainsi, dès qu’un joueur exécutera une commande, il sera détecté par le système !

Détecteur de minerais de diamants

Détecteur de minerais de diamants

Détecteur de minerais de diamants

Voici une utilisation très simple de la commande /stats. En effet, le mode “AffectedBlocks” permet de savoir le nombre de blocs posés par une commande /fill. Et cette dernière peut ne remplacer que les minerais de diamants. On peut donc détecter les diamants dans une zone !

Vous devez avoir l’habitude maintenant, on crée un scoreboard, on l’affiche à droite et on met son score à 0 :

/scoreboard objectives add diamants dummy
/scoreboard objectives setdisplay sidebar diamants
/scoreboard players set @p diamants 0

Comme dans l’exemple précédent, on va faire un système compatible au multijoueur. Voici donc les premières commandes à entrer dans les command blocks pour que le score de chaque joueur soit associé à lui-même. Ce sont les mêmes que pour l’anti cheat créé ci-dessus :

/execute @a[tag=!stats] ~ ~ ~ /stats entity @p set AffectedBlocks @p diamants
/scoreboard players tag @a[tag=!stats] add stats

Problème : chaque joueur doit avoir un score pour que le /stats fonctionne. Il faut donc en donner un à tous ceux qui se connectent. Mais cela doit être fait en premier, il faut donc que cette commande soit dans le premier command block :

/scoreboard players set @a[tag=!stats] diamants 0

Le but va être d’utiliser le /fill pour remplacer les minerais de diamant par un bloc, puis de replacer les minerais. Ainsi, la commande retournera le nombre de diamants, et rien n’aura été détruit. J’ai choisi le bloc de champignon entièrement rouge, car il ne peut pas être trouvé dans la nature :

/execute @a ~ ~ ~ /fill ~ ~-10 ~ ~ ~ ~ red_mushroom_block 0 replace diamond_ore
/execute @a ~ ~ ~ /fill ~ ~-10 ~ ~ ~ ~ diamond_ore 0 replace red_mushroom_block 0

Et là, si tout se passe bien, lorsque vous marchez au dessus d’un minerais de diamant, votre score est égal au nombre de diamants sous vos pieds !

dividerminecraftfrance

Et voilà ! Vous savez tout ce qu’il faut savoir sur la commande /stats, à vous d’en faire bon usage ! Si elle vous semble encore un peu floue (c’est normal), n’oubliez pas que la pratique est le meilleur moyen d’apprendre. Cette commande est très polyvalente, mais attention à ne pas trop l’utiliser, car elle peut compliquer grandement certains systèmes…

Bref, que vous ayez à peine compris à quoi elle servait ou que vous soyez un génie, le plus important est que vous connaissiez l’existence de la commande /stats. Ce nouvel outil, certes complexe mais aussi très utile quand on sait bien l’utiliser, vous permettra de réaliser des choses impossibles autrement ! Je vous l’ai dit, et vous le répète : cette commande est sans doute la plus puissante de Minecraft !

A propos de Erywarn

Command blocks, mapmaking et redstone : voilà ce qui expliquerais le mieux pourquoi je passe des heures sur Minecraft. Je suis un peu touche-à-tout, et j'adore tout ce qui fait tourner le cerveau à 200 %. Je peux d'ailleurs vous aider si vous rencontrez des problèmes pour réaliser des maps, puisque j'en fais aussi.

Ceci vous intéresse peut être

Installer un serveur Minecraft sur un VPS Debian

Apprenez comment installer un serveur Minecraft, Vanilla, Spigot ou Forge, sur un VPS utilisant Debian !

Rédiger une réponse

4 Commentaires sur "[Tutoriel] La commande /stats"

Prévenez moi :
avatar
 
Trier par:   Commentaires récents | Commentaires ancients | Les mieux notés
le chatocrate
Invité

wow ! gg aux gars qui se sont penchés là dessus ça a pas du être facile X)

Yodi
Membre

très bien expliqué, bravo ! :)

Membre

Merci pour ce tuto super utile !

DrTydefe
Membre

Super article ! On voit que vous vous êtes sérieusement penchés sur le sujet !

wpDiscuz