J'ai un bloc qui doit stocker la position d'un autre bloc pour interagir avec ce bloc. Tout fonctionne bien, tant que vous n'êtes pas en train de vous déconnecter du monde. Je veux enregistrer les coordonnées de l'autre bloc dans les données nbt des entités de tuiles. La sauvegarde des données fonctionne correctement, mais lors de la reconnexion au monde et donc du chargement des données nbt, il y a un problème. J'ai maintenant compris que le problème n'existe que du côté client. Lors du chargement du monde, les coordonnées correctes sont chargées à partir de nbt par le serveur, mais le client ne charge que 0 pour chaque coordonnée et cela cause des problèmes lors de l'interaction avec le bloc à ces coordonnées. Je ne sais pas comment résoudre ce problème et je suis confus quant à savoir pourquoi les données sont chargées correctement sur le serveur - mais pas correctement sur le côté client.Chargement NBT côté client ou côté serveur
Voici les méthodes pour l'écriture et la lecture du NBT dans le TileEntity:
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
int[] cont = {0, 0, 0};
if(this.controller != null) {
LogHelper.info("Writing " + this.controller);
cont[0] = this.controller.getX();
cont[1] = this.controller.getY();
cont[2] = this.controller.getZ();
}
compound.setInteger("controllerX", cont[0]);
compound.setInteger("controllerY", cont[1]);
compound.setInteger("controllerZ", cont[2]);
super.writeToNBT(compound);
return compound;
}
@Override
public void readFromNBT(NBTTagCompound compound){
super.readFromNBT(compound);
int[] coords = {0, 0, 0};
coords[0] = compound.getInteger("controllerX");
coords[1] = compound.getInteger("controllerY");
coords[2] = compound.getInteger("controllerZ");
LogHelper.info("Loading " + Arrays.toString(coords));
this.controller = new BlockPos(coords[0], coords[1], coords[2]);
LogHelper.info("Loading " + this.controller);
}
J'ai aussi essayé d'utiliser un tableau int pour le NBT, mais cela ne fonctionne pas du tout. Cela retournerait simplement un tableau vide même si les données correctes étaient stockées dans la balise nbt. J'espère que vous pouvez m'aider! :-)
Il y a aussi 'publique NBTTagCompound getUpdateTag()' qui est appelé à un autre moment que 'getUpdatePacket()'. – Draco18s
Merci beaucoup! Cela a résolu mon problème, mais j'avais besoin d'utiliser getUpdateTag() au lieu de getUpdatePacket()! – XPModder