gpt4 book ai didi

java - NBT 在客户端和服务器端加载

转载 作者:行者123 更新时间:2023-12-01 14:28:42 27 4
gpt4 key购买 nike

我有一个 block 需要存储另一个 block 的位置,以便与该 block 交互。一切正常,只要你没有退出世界。我想在图 block 实体 nbt 数据中保存另一个 block 的坐标。数据的保存工作正常,但是当重新登录到世界并因此加载 nbt 数据时,出现了某种问题。我现在发现问题只存在于客户端。加载世界时,服务器从 nbt 加载正确的坐标,但客户端只为每个坐标加载 0,这会在尝试与这些坐标处的 block 交互时导致一些问题。我不知道如何解决这个问题,我很困惑为什么数据在服务器上正确加载,但在客户端却不正确。

在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);

}

我也尝试过为 nbt 使用一个 int 数组,但这根本不起作用。即使正确的数据存储在 nbt 标签中,它也只会返回一个空数组。我希望你能帮帮我!:-)

最佳答案

默认情况下,Minecraft 不会在客户端和服务器之间同步 NBT 数据。

要同步 NBT 数据,您需要覆盖 onDataPacketgetUpdatePacket功能。

我的通常是这样的:

@Nullable
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
return new SPacketUpdateTileEntity(getPos(), getBlockMetadata(), writeToNBT(new NBTTagCompound()));
}

@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
readFromNBT(pkt.getNbtCompound());
}

您是否还确保正确注册了您的 TileEntity,以便它可以在世界加载时创建?

为此,您的 block 应该覆盖 hasTileEntityreturn true如果它在给定 IBlockState 中有 TileEntity和 createTileEntity返回一个新的 TileEntity。

最后但同样重要的是,您必须向 GameRegistry 注册您的 TileEntity

GameRegistry.registerTileEntity(YourTileEntity.class, "YourModid:ResourceString");

关于java - NBT 在客户端和服务器端加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46757423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com