Bonjour, bonsoir et joyeuses pâques en fonction de quand, où et dans quel espace-temps vous lisez ceci.
Vous lisez actuellement un tutoriel sur la commande /stats, une commande méconnue mais dont le potentiel n'attend que d'être dévoilé.
Veuillez m'excuser par avance, mais il s'agit d'une commande difficile à visualiser car proche des maths (pas de screenshot possible). Le plus simple pour vous est de tester les commandes et de constater le résultat par vous même.
* À quoi ça sert ?
Parmi toutes les commandes à votre disposition, de nombreuses vont modifier un certain nombre de bloc, d'objet ou d'entité... Le /stats va vous permettre de savoir exactement combien ! Et quand je dis exactement, c'est que vous allez pouvoir récupérer ces informations pour pouvoir réaliser des tests ou des opérations (Maths Everywhere).
* Plus précisément, qu'est-ce que vous pouvez connaître ?
La commande stats permet de récupérer plusieurs critères:
- Le nombre d'objet affecté par une commande (/clear)
- Le nombre de bloc affecté par une commande (/fill)
- Le nombre de joueurs/monstres/entités affectés par une commande (/testfor - Regardez l'application, /kill)
- Le nombre d'itération d'une commande
- Le résultat d'une demande (/time query <daytime/gametime>)
* Chouette, mais ça fonctionne comment alors ?
Syntaxe de la commande /stats
Code (cpp):
/stats block x y z set type joueur objectif
OU
Code (cpp):
/stats entity @sélecteur set type joueur objectif
x, y et z doivent être les coordonnées d'un bloc de commande contenant la commande dont on veut connaître le résultat ou @sélecteur doit ciblé un joueur dont on veut connaître le résultat des commandes qu'il utilise (*wink* pratique pour détecter de la triche *wink*)
type correspond au type d'information que l'on veut récupérer.
SuccessCount - Compte le nombre de fois où la commande est exécutée
AffectedBlocks - Compte le nombre de blocs modifiés par la commande
AffectedEntities - Compte le nombre d'entités touchées par la commande
AffectedItems - Compte le nombre d'objets touchés par la commande
QueryResult - Renvoi le résultat de la requête
joueur correspond au nom du joueur à utiliser
objectif nom de l'objectif à utiliser (Vous devez créer l'objectif au préalable)
Si tout se passe bien, vous êtes largués.
* Mise en pratique - Premiers pas
Minecraft n'a pas de système de variable à proprement parler, on est donc obligé de bidouiller avec les objectifs et les joueurs.
Si vous avez un peu de mal à comprendre, essayez de faire simple en créant un objectif statsResult de type dummy et en l'affichant, histoire de voir ce que vous faites.
Code (cpp):
/scoreboard objectives add statsResult dummy Résultat
/scoreboard objectives setdisplay sidebar statsResult
Et raisonnez de la manière suivante: un joueur = une variable quand on parle de l'objectif statsResult.
Voici 3 exemples pour vous faire la main avec cette commande. Si vous voulez rester dans la théorie, foncez à la partie suivante. Pour les 3 exemples, vous devez avoir créé l'objectif statsResult indiqué ci-dessus.
Si vous avez regardé comment je compte les joueurs dans mon tutoriel sur le testfor, vous avez certainement vu une commande un peu étrange. Voici comment le reproduire:
- On veut compter un nombre de joueur, qui sont des entités. On utilisera donc le AffectedEntities en type.
- On a besoin d'une commande affectant les joueurs. La commande la plus simple est le testfor puisqu'elle ne fait strictement rien outre compter les joueurs.
On va donc placer un bloc de commande et mettre dedans la commande suivante:
Maintenant, il est temps d'utiliser le /stats
Dans votre barre de chat, entrez la commande suivante en remplaçant x, y et z par les coordonnées du bloc de commande.
Code (cpp):
/stats block x y z set AffectedEntities Joueurs statsResult
Pour que Joueurs apparaisse dans votre sidebar, vous devez au préalable lui assigner une valeur:
Code (cpp):
/scoreboard players add Joueurs statsResult 0
Et.. voilà. Si vous activez le bloc de commande, vous pourrez voir sur votre droite "Joueurs 1" (sauf si vous êtes en multi).
Vous pouvez changer la commande dans le bloc avec la suivante pour tester autre chose que les joueurs:
Code (cpp):
/testfor @e[type=Villager]
Faites spawner quelques villageois à côté de vous puis appuyez sur le bouton. Le nombre devrait alors être égal au nombre de villageois (pour changer le "Joueur", refaites un /stats en changeant Joueurs par Villageois).
Cet exemple est là pour l'utilisation du query (qui fonctionne avec le /worldborder aussi)
Première étape, poser le bloc de commande dont on va récupérer le résultat et mettre ceci dedans:
Code (cpp):
/time query daytime
query signifie que l'on va demander une valeur
daytime signifie que l'on va récupérer l'heure actuelle (gametime permet d'avoir le temps de jeu total sur le monde)
Ensuite, le /stats
Code (cpp):
/stats block x y z set QueryResult Ticks statsResult
Lorsque vous activez le bloc, vous devriez obtenir alors une valeur entre 0 et 24000 dans votre sidebar.
Maintenant, avec un peu de maths, on peut arriver à obtenir l'heure "réelle".
On va pour ça créer des constantes permettant de convertir les ticks en heure (en jeu)
Code (cpp):
/scoreboard players set #offset statsResult 6000
/scoreboard players set #tickHeure statsResult 1000
Et maintenant, place au calcul.
6000 ticks corresponds à midi en jeu, on va donc ajouter 6000 puis diviser par 1000
On réalise donc les opérations suivantes dans l'ordre donné.
Code (cpp):
/scoreboard players operation Heure statsResult = Ticks statsResult
/scoreboard players operation Heure statsResult =+ #offset statsResult
/scoreboard players operation Heure statsResult =/ #tickHeure statsResult
Il reste juste un cas à gérer: entre minuit (0:00) et 6:00. On va donc tester quand le score Heure est supérieur à 24 et, si c'est le cas, retirer 24.
Code (cpp):
/scoreboard players test Heure statsResult 24 30
Si vrai (comparateur)
/scoreboard players remove Heure statsResult 24
* Donc, j'affiche des nombres, et maintenant ?
Et bien vous allez pouvoir les réutiliser !
Les habitués vous diront qu'en fait, il fallait utiliser une entité lambda servant à stocker les scores (dont le sélecteur aurait été mis à la place de "Joueurs/Objets/Ticks" dans les exemples) et il aurait juste suffit de faire un execute dessus. On aurait même fais un /stats sur l'entité pour vérifier que tout marche. Mais on va partir du principe que vous pouvez vous servir de comparateurs, que vous ne cherchez pas à réduire à tout prix la taille d'un circuit et donc, la commande la plus simple pour vous est la suivante:
Code (cpp):
/scoreboard players test Joueurs statsResult min max
Où min et max sont les bornes inférieures et supérieures du test.
Et en partant de là, vous pouvez faire ce que vous voulez en fonction des résultats du test.
Je vous laisse une sauvegarde ici avec des exemples rapides, c'est toujours pratique.
Télécharger la sauvegarde
Y a tout un tas de pancarte que vous pouvez cliquer pour faire changer les valeurs.
Le /stats n'est pas très compliqué, mais comme les effets ne sont pas/peu visibles, on a du mal à le comprendre. N'hésitez pas à poser des questions.