私は、そのブロックと対話するために、別のブロックの位置を格納する必要があるブロックを持っています。あなたが世界からログアウトしていない限り、すべてうまく動作します。他のブロックの座標をタイルエンティティのnbtデータに保存します。データの保存はうまくいきますが、世界にログインしてnbtデータを読み込むときに問題があります。私は今問題がクライアント側にのみ存在することを理解しました。ワールドをロードするとき、サーバーによって正しい座標がnbtからロードされますが、クライアントは各座標に対して0しかロードせず、これらの座標でブロックと対話しようとすると何らかの問題を引き起こします。 この問題を解決する方法はわかりません。なぜデータがサーバーに正しく読み込まれているのかクライアント側で正しく読み込まれないのか混乱しています。ここでクライアント側とサーバー側のNBTローディング
は、書き込み用のメソッドであり、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タグに格納されていても、空の配列を返します。 私を助けてくれることを願っています! :-)
であなたのTileEntityを登録する必要があります。 – Draco18s
ありがとうございました!これは私の問題を解決しましたが、私はgetUpdatePacket()の代わりにgetUpdateTag()を使う必要がありました! – XPModder