Salut les gens!
Je bossais sur un pack de manipulation de coffres, et je bidouillais les blockstates lorsque je me suis rendu compte d'un truc, que je vous montrerai en commençant avec une devinette :
Sur l'image ci-dessous : Il y a trois coffres. où sont-ils?
HA HA HA! T'AVAIS TOUT FAUX! FAUT VRAIMENT PAS ÊTRE INTELLIGENT POUR SE TROMPER, PAUVRE LOMBRIC!
...
Eh oui, le coffre de gauche est invisible, et l'avant-dernier de droite est en fait de l'air!
Il s'agit là des trois états de blocs "type" différents d'un coffre.
Dans minecraft, un bloc peut stocker deux types de données différentes :
1. Données NBT (Named Binary Tag) :
2. Données d'état de bloc (Block state) :
Enfin si je dis une bêtise, défoncez-moi dans les commentaires, ça serait pas cool qu'une fausse info se répande...
Sur l'image, le coffre de droite était de type "single", celui du milieu, de type "right", et celui de gauche, de type "Left". Le coffre "single" étant normal, on s'intéressera ici aux deux autres.
Le bloc "Right" représente le coffre se trouvant à droite dans un double-coffre (pourtant, ici, il est à gauche... enfin...) Comme c'était sans doute plus simple de ne mettre qu'une seule texture pour englober deux coffres, le coffre de gauche (right [...]) recouvre celui de droite, qui, lui, n'a pas de texture parce que c'est un peu stupide de mettre deux fois la même au même endroit...
Cependant, le coffre invisible n'a pas son voisin pour le recouvrir de sa texture; il sera donc considéré par le jeu comme invalide. Par contre, chaque bloc n'est actualisé que s'il survient une action pouvant potentiellement le modifier, comme le changement d'état d'un bloc voisin (toute action détectable par observer). Du moment que vous ne touchez pas à cela, le coffre invisible restera comme tel, puis redeviendra un coffre normal lors de son actualisation.
Du coup, voilà comment mettre un coffre invisible! (Disponible uniquement avec la commande /setblock ~ ~ ~ minecraft:chest[type=left] )
Bon, ça, c'est fait; maintenant, en parlant de double-blocs, je me suis intéressé aux lits...
Ben... C'est tout... J'espère que vous aurez appris des trucs...
Je bossais sur un pack de manipulation de coffres, et je bidouillais les blockstates lorsque je me suis rendu compte d'un truc, que je vous montrerai en commençant avec une devinette :
Sur l'image ci-dessous : Il y a trois coffres. où sont-ils?
HA HA HA! T'AVAIS TOUT FAUX! FAUT VRAIMENT PAS ÊTRE INTELLIGENT POUR SE TROMPER, PAUVRE LOMBRIC!
...
Eh oui, le coffre de gauche est invisible, et l'avant-dernier de droite est en fait de l'air!
Il s'agit là des trois états de blocs "type" différents d'un coffre.
Dans minecraft, un bloc peut stocker deux types de données différentes :
1. Données NBT (Named Binary Tag) :
Permet de stocker des valeurs pouvant changer selon les fonctionnalités du bloc, acceptant les formats suivants : End (utilisé comme fin de tag, aucune utilité), Byte, Short, Int, Long, Float, Double, Byte_array, String (format utilisé pour toutes les données sous forme de texte), List, Compound, Int_array, et Long_array.
Du moment qu'une donnée est liée au fonctionnement d'un bloc, mais aussi d'une entité, celle-ci se trouve dans ses données NBT. Si un bloc n'a aucune fonctionnalité, il n'aura pas de format NBT; dans ce cas, cibler ce bloc avec un "/data get block ..." retournera simplement "Le bloc ciblé n'est pas une entité de bloc".
Pour plus d'infos sur le NBT : https://minecraft-fr.gamepedia.com/Format_NBT
Du moment qu'une donnée est liée au fonctionnement d'un bloc, mais aussi d'une entité, celle-ci se trouve dans ses données NBT. Si un bloc n'a aucune fonctionnalité, il n'aura pas de format NBT; dans ce cas, cibler ce bloc avec un "/data get block ..." retournera simplement "Le bloc ciblé n'est pas une entité de bloc".
Pour plus d'infos sur le NBT : https://minecraft-fr.gamepedia.com/Format_NBT
2. Données d'état de bloc (Block state) :
Contrairement au NBT, disponible sur les entités comme sur les blocs, le block state est un regroupement de données exclusives à chaque bloc. Il sert simplement à stocker les conditions dans laquelle se trouve un bloc pour déterminer quelle texture il doit avoir. Avec ça, pas de format de donnée : les block states étant relativement peu nombreux, ils sont simplement stockés chacun sous un nom différent.
Pour un coffre, c'est ici que sont stockées son orientation, son type (coffre simple / droite ou gauche si double) et s'il est recouvert d'eau.
L'accès au block data par commandes est cependant extrêmement restreint : On peut l'utiliser uniquement via /setblock avec des brackets "[ ]", et la seule façon de le détecter est d'utiliser un /execute if block(s), en mettant également des brackets après le nom de bloc.
Pour un coffre, c'est ici que sont stockées son orientation, son type (coffre simple / droite ou gauche si double) et s'il est recouvert d'eau.
L'accès au block data par commandes est cependant extrêmement restreint : On peut l'utiliser uniquement via /setblock avec des brackets "[ ]", et la seule façon de le détecter est d'utiliser un /execute if block(s), en mettant également des brackets après le nom de bloc.
Sur l'image, le coffre de droite était de type "single", celui du milieu, de type "right", et celui de gauche, de type "Left". Le coffre "single" étant normal, on s'intéressera ici aux deux autres.
Le bloc "Right" représente le coffre se trouvant à droite dans un double-coffre (pourtant, ici, il est à gauche... enfin...) Comme c'était sans doute plus simple de ne mettre qu'une seule texture pour englober deux coffres, le coffre de gauche (right [...]) recouvre celui de droite, qui, lui, n'a pas de texture parce que c'est un peu stupide de mettre deux fois la même au même endroit...
Cependant, le coffre invisible n'a pas son voisin pour le recouvrir de sa texture; il sera donc considéré par le jeu comme invalide. Par contre, chaque bloc n'est actualisé que s'il survient une action pouvant potentiellement le modifier, comme le changement d'état d'un bloc voisin (toute action détectable par observer). Du moment que vous ne touchez pas à cela, le coffre invisible restera comme tel, puis redeviendra un coffre normal lors de son actualisation.
Du coup, voilà comment mettre un coffre invisible! (Disponible uniquement avec la commande /setblock ~ ~ ~ minecraft:chest[type=left] )
Bon, ça, c'est fait; maintenant, en parlant de double-blocs, je me suis intéressé aux lits...
Alors contrairement aux coffres, chaque pièce de lit a sa texture, défini par les états "part=head" et "part=feet".
Bon, pas de lit invisible, mais au moins, on peut faire des lits plus longs!
Appelez-moi si ça vous sert un jour...
Autres constatations :
-Le lit n'a besoin que de la partie "oreiller" pour être utilisable; cliquer sur l'autre partie sans que celle-ci soit reliée à l'autre n'aura aucun effet. Cliquer sur le bloc rajouté à droite fera dormir aussi le joueur, et cliquer chez Ruskov fera plaisir à Morsay (17 mai, 00:36). Par contre, celui-ci sera détruit s'il devient occupé, car son blockstate sera actualisé (pour les besoin de l'état "occupied")
-Le lit peut être verrouillé! Justement avec le blockstate "occupied", qui change si un joueur dort dans le lit, ce qui empêche un autre d'y entrer (minecraft est un jeu tout public, les amis!
).
Cela ne change aucune texture, mais j'imagine que c'était le meilleur choix entre le mettre en blockstate ou rajouter un NBT au bloc juste pour ça, ce qui le rendrait "entité de bloc" et solliciterait plus le jeu. Du coup, on peut verrouiller un lit boosté comme ci-dessus pour éviter de le détruire...
J'ai pas essayé mais s'il y a un blockstate pour ça, ça serait peut-être possible de faire un ressourcepack qui ajoute une texture juste quand il est occupé... Le pack "pipi au lit", ça serait super! J'veux ça!
Bon, pas de lit invisible, mais au moins, on peut faire des lits plus longs!
Appelez-moi si ça vous sert un jour...

Autres constatations :
-Le lit n'a besoin que de la partie "oreiller" pour être utilisable; cliquer sur l'autre partie sans que celle-ci soit reliée à l'autre n'aura aucun effet. Cliquer sur le bloc rajouté à droite fera dormir aussi le joueur, et cliquer chez Ruskov fera plaisir à Morsay (17 mai, 00:36). Par contre, celui-ci sera détruit s'il devient occupé, car son blockstate sera actualisé (pour les besoin de l'état "occupied")
-Le lit peut être verrouillé! Justement avec le blockstate "occupied", qui change si un joueur dort dans le lit, ce qui empêche un autre d'y entrer (minecraft est un jeu tout public, les amis!

Cela ne change aucune texture, mais j'imagine que c'était le meilleur choix entre le mettre en blockstate ou rajouter un NBT au bloc juste pour ça, ce qui le rendrait "entité de bloc" et solliciterait plus le jeu. Du coup, on peut verrouiller un lit boosté comme ci-dessus pour éviter de le détruire...
J'ai pas essayé mais s'il y a un blockstate pour ça, ça serait peut-être possible de faire un ressourcepack qui ajoute une texture juste quand il est occupé... Le pack "pipi au lit", ça serait super! J'veux ça!
Ben... C'est tout... J'espère que vous aurez appris des trucs...
Fichiers joints
Dernière édition: