Coffre invisible : Plus simple qu'il n'y paraît! -Bonus : Ce que vous ignoriez sur les lits!-

Comment trouvez-vous cet article? (2 réponses)

  • Trop fort! Bien joué, comme d'habitude, très cher Eglaios!

    Votes: 0 0.0%
  • C'est toi le lombric, petit crétin!

    Votes: 0 0.0%
  • J'ai appris des trucs!

    Votes: 0 0.0%
  • Je savais déjà tout //Ouais ben lis au complet avant de dire!

    Votes: 0 0.0%
  • Je savais déjà tout, et cette fois, j'ai tout lu! //Ah bon...

    Votes: 0 0.0%
  • Trop de texte

    Votes: 0 0.0%
  • Pas bien expliqué

    Votes: 0 0.0%

  • Total voters
    0

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
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?
2019-07-12_15.47.30.png


2019-07-12_15.47.30 - Copie.png


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

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.
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...
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!
2019-07-12_16.53.18.png


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! :fou:).
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

  • 2019-07-12_16.57.57.png
    2019-07-12_16.57.57.png
    37.6 KB · Affichages: 314
Dernière édition:

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Finalement, ça irait dans la section tutoriels...?
Boarf, je sais pas trop, s'il y a un admin, qu'il fasse ce qu'il juge le mieux de faire...
-Sauf supprimer ce post, hein? C'est pas ce que je voulais dire!!!:'(