Les deux questions (autour du même principe) :
Est-il possible d'indexer la commande JSON brute nouvellement introduite dans la version 1.14 de NBT et Entity (par ex. /tellraw @s {"nbt":"Attributes[0].Base","entity":"@e[type=horse,sort=nearest]"}
) de sorte que lorsqu'il renvoie les résultats pour plusieurs entités, vous pouvez formater les résultats ?
Si ce qui précède n'est pas possible, est-il au moins possible de combler le fossé entre le retour de toutes les données d'une entité ( Attributes[].Base
) et seulement une partie des données de l'entité ( Attributes[0].Base
) ? c'est-à-dire Attributes[0,2,7].Base
- cela ne fonctionne pas, mais existe-t-il quelque chose de similaire ?
Détails :
Comme beaucoup de vieux mods d'attributs de chevaux n'ont pas été mis à jour dans la version 1.14, j'ai décidé d'essayer de créer une version en jeu par le biais de commandes. Heureusement, la 1.14 a ajouté une fonctionnalité vraiment cool qui vous permet de scanner efficacement les données NBT d'un tas d'entités locales avec la commande /tellraw et du texte JSON brut (merci à Fabian Röling pour avoir fourni les détails aquí y aquí ).
Un exemple de la façon dont vous pouvez utiliser cette commande pour analyser des chevaux est l'utilisation de cette commande :
/tellraw @s {"nbt":"Attributes[0].Base","entity":"@e[type=horse,sort=nearest]"}
Ce qui renvoie une liste des statistiques de santé de tous les chevaux individuels, du plus proche au plus éloigné :
19.0d, 23.0d, 20.0d, 22.0d, 20.0d, 20.0d, 19.0d, 22.0d, 22.0d, 21.0d, 23.0d, 27.0d, 21.0d, 17.0d, 17.0d, 19.0d
C'est très bien, mais il y a deux autres statistiques qui nous intéressent pour les chevaux, la vitesse et la hauteur de saut. Nous pouvons ajouter la vitesse à cette ligne ainsi qu'un texte de saveur avec la commande :
/tellraw @s [{"nbt":"Attributes[0].Base","entity":"@e[type=horse,sort=nearest]"}, " Health ",{"nbt":"Attributes[2].Base 100","entity":"@e[type=horse,sort=nearest]"}, " Speed "]
Mais les résultats ne sont pas brillants :
19.0d, 23.0d, 20.0d, 22.0d, 20.0d, 20.0d, 19.0d, 22.0d, 22.0d, 21.0d, 23.0d, 27.0d, 21.0d, 17.0d, 17.0d, 19.0d Health 0.27321843060292755d, 0.21480220332502717d, 0.17749702015266722d, 0.28170043791890875d, 0.24102104888670942d, 0.20762532646388024d, 0.1808260524268614d, 0.2572008833733531d, 0.19745627778622357d, 0.19073958560813306d, 0.21073516590775235d, 0.21222213167329812d, 0.16440016044525307d, 0.2815179975462115d, 0.19912091795196668d, 0.1991595317469814d Speed
Il énumère la santé de tous les chevaux, suivie de la vitesse de tous les chevaux. C'est logique, mais l'idéal serait que le résultat nous donne la santé et la vitesse du premier cheval, puis la santé et la vitesse du deuxième, et ainsi de suite, pour faciliter la comparaison des chevaux.
Il est à noter que les deux listes renvoient les chevaux dans le même ordre ; le cheval avec 19,0 points de santé est aussi celui avec 0,273218 de vitesse. Donc, si vous étiez capable d'indexer et de formater les tableaux (ou les listes, ou vraiment les chaînes), vous pourriez facilement rassembler les données correctes. Cependant, il semble que les commandes NBT et Entity renvoient leurs données de sortie sous forme de chaîne, et je n'ai pas réussi à trouver comment les formater (et encore moins à transformer ces doubles en ints).
Existe-t-il un moyen d'indexer et de formater la sortie des commandes NBT et Entity comme un tableau ?
La deuxième partie de cette question est un dérivé de la première. Idéalement, il serait préférable de pouvoir formater la sortie, car nous pourrions alors la rendre jolie et exactement comme nous le souhaitons. Cependant, il existe une autre façon de récupérer les données NBT qui conserve les données individuelles des chevaux. Vous pouvez simplement utiliser la fonction Attributes[0].Base
mais sans mettre un numéro dans l'index : Attributes[].Base
. Le problème est que cela renvoie toutes les données de la base NBT concernant un cheval, ce qui entraîne un désordre. Nous ne sommes vraiment intéressés que par la santé (0), la vitesse (2) et la hauteur de saut (7) du cheval. J'ai essayé de faire Attributes[0,2,7].Base
mais cela n'a évidemment pas fonctionné, mais cela m'a fait envisager d'autres méthodes. J'ai vu qu'il y avait un moyen de mettre des composés NBT spécifiques dans l'index, mais je n'ai pas trouvé de bonne documentation ou d'exemples à ce sujet.
Existe-t-il un moyen de référencer plusieurs attributs dans un seul index d'attributs, par exemple comme suit Attributes[0,2,7].Base
mais ça marche ?
Edit : Goal
J'ai ajouté ceci car je me suis dit que je devais inclure ce qu'est mon objectif idéal. Voici comment je voudrais que le texte soit dans le meilleur des cas :
19 Health 273 Speed 62 Jump
23 Health 214 Speed 73 Jump
20 Health 177 Speed 53 Jump
....
C'est à cela que j'essaie de faire ressembler le texte, chaque ligne étant un cheval différent. C'est le sujet de la première question et ce que je veux dire quand je parle de formatage. La deuxième question part du principe que ce qui précède n'est pas possible, et tente de trouver un compromis.
Autre remarque, je fais cela avec des fichiers de fonctions, et non des blocs de commandes, bien que j'imagine que cela ne devrait pas avoir d'importance.