- 42
- 8
Здравствуйте. Не синхронизируется тайл с клиентской частью.
При клике по одному из слотов в меню срабатывает следующий код:
После чего, обрабатывается пакет на сервере с таким кодом:
Собственно, всё бы ничего, да судя по плагину PowerNBT, у тайла NBT обновляется, но визуально никакого эффекта нет, хотя должен быть - в коробке должен измениться летающий предмет. Как пример: скриншот ниже.
При этом, у тайла есть специальные методы для обновления в NBT:
Из этого какой-никакой вывод, что данные о тайле на клиенте не обновляются. Возможно, это из-за того, что в этот момент открыт GuiScreen?
Прошу помочь с решением проблемы.
UPD: проверил - не обновляется вообще ни у каких клиентов, находящихся вокруг тайла. В данный момент обновляется только если принудительно изменить NBT через плагин PowerNBT
При клике по одному из слотов в меню срабатывает следующий код:
Исполняемый код при клике:
if (this.click && this.tile.itemStackShop != null) {
final ItemStack is = this.tile.itemStackShop.copy();
is.stackSize /= 2;
final PacketSendItemStack2 message = new PacketSendItemStack2(this.tile.xCoord, this.tile.yCoord, this.tile.zCoord, is);
XMain.PACKET.sendToServer(message);
}
После чего, обрабатывается пакет на сервере с таким кодом:
Код из обработчика пакетов:
@Override
public void handleServerSide(final EntityPlayer player) {
TileEntity tile = player.worldObj.getTileEntity(this.x, this.y, this.z);
if(tile instanceof ConomyShopTileEntity) {
ConomyShopTileEntity shop = (ConomyShopTileEntity) tile;
if(this.stack != null) shop.itemStackShop = this.stack.copy();
else shop.itemStackShop = null;
shop.markDirty(); // Добавил из попыток починить
}
}
Собственно, всё бы ничего, да судя по плагину PowerNBT, у тайла NBT обновляется, но визуально никакого эффекта нет, хотя должен быть - в коробке должен измениться летающий предмет. Как пример: скриншот ниже.
При этом, у тайла есть специальные методы для обновления в NBT:
Отрезок кода из класса тайла:
@Override
public Packet getDescriptionPacket() {
final NBTTagCompound nbt = new NBTTagCompound();
this.writeToNBT(nbt);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt);
}
@Override
public void onDataPacket(final NetworkManager net, final S35PacketUpdateTileEntity packet) {
this.readFromNBT(packet.func_148857_g());
}
Из этого какой-никакой вывод, что данные о тайле на клиенте не обновляются. Возможно, это из-за того, что в этот момент открыт GuiScreen?
Прошу помочь с решением проблемы.
UPD: проверил - не обновляется вообще ни у каких клиентов, находящихся вокруг тайла. В данный момент обновляется только если принудительно изменить NBT через плагин PowerNBT