Choisir la couleur de votre armure par commande (convertisseur de la base 16 à la base 10)

Comment trouvez-vous ce tutoriel ?

  • Excellent !!!

    Votes: 0 0.0%
  • Bien :).

    Votes: 0 0.0%
  • Pas mal...

    Votes: 0 0.0%
  • Nul...

    Votes: 0 0.0%

  • Total voters
    1

Kococraft

Architecte en herbe
25 Août 2014
37
9
69
28
01440 Viriat
Bonjour à tous et joyeux anniversaire :cake: pour ceux qu'ils l'ont eux cette année... :confused:

Et aujourd'hui, je vous propose un système créé par commande (par choix : commande_block ou function.mcfunction) permettant de choisir précisément la couleur de votre armure en cuir que VOUS voudrez. Par contre, je pense qu'il vous faudra un bon ordinateur car il va falloir faire des calculs et via minecraft je pense que ça pourrait laguer pour certain.

Sur ce, commençons :

Choix des couleurs par commandes (1.13)
et conversion du code hexadécimal à décimal.
D'abord, je vais vous décrire mes questions qui vont correspondre à différentes partie dans un ordre logique évidemment :

Partie I : Quel commande(s) utiliser ?

Partie II : Qu'est-ce que la couleur et quel est sa valeur limite maximum et minimum ?

Partie III : Comment convertir la valeur de la couleur pour être sur de notre choix ?

Partie IV : Quel scoreboard auront-nous besoin ?

Partie V : Comment finir ce système ?




Partie I : Quel commande(s) utiliser ?

Pour cela il faudrait savoir si on peut prendre la donnée color dans les items : leather_helmet, leather_chestplate, leather_leggings, leather_boots.
On connait une commande pour voir les données d'une entité : /data get entity <target> [path]

Faisons dans l'ordre des choses tout en testant en commençant se donner l'item : leather_boots :
/give @s leather_boots{display:{color:0}} ATTENTION : Si vous ne mettez pas ce NBT alors l'armure donnée sera par défaut, certes il y a une couleur (le marron) mais il n'aura pas le NBT color donc il sera indétectable.

Maintenant qu'on l'a dans notre inventaire, on va écrire :
/data get entity @s

Puis on va remarquer qu'une donnée nous intéresse, la donnée Inventory. Donc par la suite on tape son petit frère... euh non, sur le clavier :

/data get entity @s Inventory[0] -> [0] étant le premier item dans votre inventaire qui est leather_boots si et seulement si votre inventaire est vide à part l'armure équipé. Parmi les quatre armures les bottes sont les premiers à être sélectionné.

Et petit à petit, on va savoir quel commande nous permettra de prendre la valeur de la couleur :
/data get entity @s Inventory[0].tag.display.color

Et si tout va bien alors la donnée obtenu afficher, soit dans le tchat soit dans le command_block, sera 0.

Et en dernier, comment réaliser un échange de donnée ? On va pas faire par étape de découverte sinon cela va être très long :
/execute result store score|entity <target> Objectif.Score|Data.NBT run data get entity @s Inventory[0].tag.display.color

Cette commande vous permettre de transférer la donnée color de vos bottes à un score ou à la donnée color d'une autre entité.


Partie II : Qu'est-ce que la couleur et quel est sa valeur limite maximum et minimum ?

Il faut savoir que la couleur utilisé dans minecraft sur les armures en cuir est un ensemble de 3 couleurs :
rouge, vert et bleu.

Dont la valeur numérique maximal est ceci : FFFFFF

Mais qu'est-ce que ça veut dire ? Je ne vois aucun chiffre mais que des F.

Et bien pour expliquer cela je vais vous dire que vous compter en décimal et vous connaissez donc 10 chiffres : de 0 à 9.
Et dans cette valeur numérique qu'est FFFFFF est un code hexadécimal contenant 16 chiffres : de 0 à F.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F dont A=10, B=11, C=12, D=13, E=14, F=15.

Donc la valeur maximum et minimum sont : FFFFFF et 000000
Dont les 2 premiers chiffres correspondent au BLEU.
Dont les 2 chiffres du milieu correspondent au VERT.
Dont les 2 derniers chiffres correspondent au ROUGE.


Partie III : Comment convertir la valeur de la couleur pour être sur de notre choix ?

C'est bien beau tout ça mais comment convertir ?
Et bien pour commencer simplement on va prendre la base décimal (base 10) et on va prendre la valeur 3509

Et à chacun des chiffres de ce nombre appartient un rang :
- 9 <=> rang : 0
- 0 <=> rang : 1
- 5 <=> rang : 2
- 3 <=> rang : 3

rangs : 3-2-1-0
chiffres : 3-5-0-9

Ensuite pour retrouver notre nombre on va réaliser la somme des chiffres étant chacun multiplier par 10 étant élevé à la puissance correspondant à leur rangs :

3509 = 3*10^3 + 5*10^2 + 0*10^1 + 9*10^0
= 3*1000 + 5*100 + 0*10 + 9*1
= 3000+500+9
= 3509

Maintenant qu'on a compris le principe pour la base 10, sachez que cette méthode marche pour n'importe quel base pour convertir en décimal. Voici maintenant une valeur en base 16 : 0004EA

Voici le calcul :
On sait que E = 14 et A = 10 et qu'on ait en base 16 ainsi que A est dans le rang 0, E dans le rang 1 et 4 dans le rang 2. Alors, en reprenant la phrase de la base 10 :

Pour retrouver notre nombre on va réaliser la somme des chiffres étant chacun multiplier par 16 étant élevé à la puissance correspondant à leur rangs :

4EA = 4*16^2 + 14*16^1 + 10*16^0
= 4*256 + 14*16 + 10*1
= 1024 + 224 + 10
= 1258



Nous obtenons donc une couleur Bleu ce qui est logique vu qu'on est dans les 2 premiers chiffres.

Donc la valeur décimal de 0004EA est 1258.
Voici quelques couleurs en base 16 que je vous laisse calculer et vérifier par commande :
Rouge : FF0000
Jaune : FFFF00
Vert : 00FF00
Cyan : 00FFFF
Bleu : 0000FF
Magenta : FF00FF


Partie IV : Quel scoreboard auront-nous besoin ?

Maintenant qu'on sait comment convertir et qu'on connait les principals commandes alors maintenant il faut créé des variables et des constantes à l'aide de scoreboard et nous aurons besoin aussi de réaliser des opérations.

Tout d'abord retenons nos constantes mais avant ça, on peut simplifier la base hexadécimal en une notre base pour au final au lieu d'avoir 6 chiffres en avoir 3 : FFFFFF. On sait que tout les 2 chiffres correspondent à une couleur. Soit une couleur FF vaut [100(16) - 1] = 16^2 - 1 = 256 - 1 = 255.

On peut donc réduire 2 chiffres en 1 seul chiffre soit de la base 16 à la base 256 (de 0 à 255)

Par exemple : 00FF00 <=> (0)(255)(0); 000A00 <=> (0)(10)(0); EAF52C <=> (234)(245)(44)

Le calcul de (234)(245)(44) en base 256 se fera donc :
= 234*256^2 + 245*256^1 + 44*256^0
= 234*65536 + 245*256 + 44*1
= 15335424 + 62720 + 44
= 15398188 en base 10

Le fait de passer de la base 16 à la base 256 réduira le nombre de commande à réaliser.

On créé un scoreboard qui prendra tout l'ensemble des calculs :

/scoreboard objectives add hexa_color dummy

Enfin on réalise nos constantes (valeurs restantes inchangés) :

  • Les puissances :
  1. puissance 0 (256^0) : /scoreboard players set puissance0 hexa_color 1
  2. puissance 1 (256^1) : /scoreboard players set puissance1 hexa_color 256
  3. puissance 2 (256^2) : /scoreboard players set puissance2 hexa_color 65536
Puissance0, Puissance1 et Puissance2 sont des joueurs imaginaires.

Puis nos variables :

  • Les rangs :
  1. rangs0 (Bleu) : /scoreboard players set rangs0 hexa_color 0
  2. rangs1 (Vert) : /scoreboard players set rangs1 hexa_color 0
  3. rangs2 (Rouge) : /scoreboard players set rangs2 hexa_color 0
Rangs0, Rangs1, Rangs2 sont des joueurs imaginaires.
  • Les retenues :
  1. result0 (=rangs0) : /scoreboard players set result0 hexa_color 0
  2. result1 (=rangs1) : /scoreboard players set result1 hexa_color 0
  3. result2 (=rangs2) : /scoreboard players set result2 hexa_color 0
  4. total_color (=result0+result1+result2) : /scoreboard players set total_color hexa_color 0
Result0, Result1, Result2, Total_color sont des joueurs imaginaires.

Et enfin les opérations :

  • ATTENTION les rangsN doivent être compris entre 0 et 255 :
  1. execute if score rangs0 hexa_color >= puissance1 hexa_color run scoreboard players set rangs0 hexa_color 0
  2. execute if score rangs1 hexa_color >= puissance1 hexa_color run scoreboard players set rangs1 hexa_color 0
  3. execute if score rangs2 hexa_color >= puissance1 hexa_color run scoreboard players set rangs2 hexa_color 0
  4. execute if score rangs0 hexa_color < puissance0 hexa_color run scoreboard players set rangs0 hexa_color 0
  5. execute if score rangs1 hexa_color < puissance0 hexa_color run scoreboard players set rangs1 hexa_color 0
  6. execute if score rangs2 hexa_color < puissance0 hexa_color run scoreboard players set rangs2 hexa_color 0
  • Retenir la valeurs des rangsN :
  1. /scoreboard players operation hexa_color result0 = hexa_color rangs0
  2. /scoreboard players operation hexa_color result1 = hexa_color rangs1
  3. /scoreboard players operation hexa_color result2 = hexa_color rangs2
  • Multiplier le résultat des rangsN par PuissanceN :
  1. /scoreboard players operation hexa_color result0 *= hexa_color puissance0
  2. /scoreboard players operation hexa_color result1 *= hexa_color puissance1
  3. /scoreboard players operation hexa_color result2 *= hexa_color puissance2
  • Enfin, réaliser la somme des résultats dans total_color :
  1. /scoreboard players set total_color hexa_color 0 (important sinon il continuera à additionner)
  2. /scoreboard players operation hexa_color total_color += hexa_color result0
  3. /scoreboard players operation hexa_color total_color += hexa_color result1
  4. /scoreboard players operation hexa_color total_color += hexa_color result2
Exemple pour une couleur de base 16 : 12A4F9

Convertir en base 256 :
12 <=> 16+2 <=> (18) en base 256;
A4 <=> 160+4 <=> (164) en base 256;
F9 <=> 240+9 <=> (249) en base256.

Donner la valeur au rangs puis au result :
rangs0 = 249 = result0
rangs1 = 164 = result1
rangs2 = 18 = result2

Effectuer la puissance de chacun d'entre eux :
result0 *= puissance0 <=> 249 * 1 <=> result0 = 249
result1 *= puissance1 <=> 164 * 256 <=> result1 = 41984
result2 *= puissance2 <=> 18 * 65536 <=> result2 = 1179648

Enfin, Calculez la somme des résultats précédents :
total_color = 0
total_color += result0 <=> 0 + 249 = 249
total_color += result1 <=> 249 + 41984 = 42233
total_color += result2 <=> 42233 + 1179648 = 1221881

1221881 est la valeur décimal de la valeur hexadécimal de 12A4F9.

Partie V : Comment finir ce système ?

Maintenant que vous savez le fonctionnement du système, je voudrais d'abord vous remerciez d'avoir lu jusqu'ici. Et je suis désolé mais je ne vais pas vous donner la solution général de tout ce système. Si vous avez compris le fonctionnement alors vous devrez être capable de le faire vous-même. Et pour cela je vous donne quelques idées.

Vous pouvez faire en sorte d'augmenter la valeur de vos score rangsN en détectant un bloc en-dessous du joueur : /execute as @s at @s if block ~ ~-1 ~ pink_terracotta run scoreboard players add rangs2 hexa_color 1. Par exemple.

Vous pouvez très bien créer un support pour visualiser votre résultat sur une armor_stand en faisant l'échange de donnée du score total_color sur ses armures en cuir.

Vous pouvez également créer un score permettant de sélectionner soit le casque, soit le plastron, soit les jambières ou soit les bottes.

Vous pouvez créer aussi un système de sauvegarde en enregistrant des entités dans hexa_color et ainsi sauvegarder les couleurs vous intéressant.




Pour cette fin de tutoriel, je n'ai pas grand chose à dire.

Faites le moi savoir si il vous a plu, en votant. Un problème ou une question posez-la.
Et merci :merci d'avoir lu jusqu'au bout et bonne chance à vous.
 
Dernière édition: