我有一个方块需要存储另一个方块的位置,以便与该方块进行交互。只要不退出世界,一切都正常运行。我想将其他方块的坐标保存在瓷砖实体的nbt数据中。数据保存运行良好,但是重新登录到世界并因此加载nbt数据时,存在某种问题。我现在已经发现该问题仅存在于客户端。服务器从nbt加载世界时,正确的坐标被加载,但客户端仅加载每个坐标的0,并且在尝试与这些坐标的方块进行交互时会导致一些问题。
以下是TileEntity中编写和读取nbt的方法:
@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);
}
我还尝试使用int数组来存储NBT数据,但这根本不起作用。即使正确的数据存储在NBT标签中,它也会返回空数组。
希望你可以帮助我!:-)
public NBTTagCompound getUpdateTag()
,它在不同的时间被调用于getUpdatePacket()
。 - Draco18s no longer trusts SE