Не синхронизируется NBT

Версия Minecraft
1.12.2
API
Forge
Добрый день всем!
Столкнулся с проблемой, что переменная в NBTTagCompound, заданная на клиенте, не синхронизируется с сервером.
Ниже приведу код.
Инкремент переменной:
Void Update (by ITIckable:
    @Override
    public void update()
    {
        if (!world.isRemote) return;
        this.cur_progress++;
        this.markDirty();
    }
Переопределение записи и чтения NBT:

Write/Read NBT:
@Override
    public NBTTagCompound writeToNBT(NBTTagCompound compound)
    {
        super.writeToNBT(compound);

        compound.setInteger("cur_progress", this.cur_progress);

        return compound;
    }

    @Override
    public void readFromNBT(NBTTagCompound compound)
    {
        super.readFromNBT(compound);

        this.cur_progress = compound.getInteger("cur_progress");
    }

Синхронизация NBT тэга:

Sync NBT:
    @Override
    public SPacketUpdateTileEntity getUpdatePacket()
    {
        super.getUpdatePacket();
        return new SPacketUpdateTileEntity(this.getPos(), 0, writeToNBT(new NBTTagCompound()));
    }

    @Override
    public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet)
    {
        super.onDataPacket(net, packet);
        this.readFromNBT(packet.getNbtCompound());
        IBlockState state = this.getWorld().getBlockState(this.getPos());
        this.getWorld().notifyBlockUpdate(this.getPos(), state, state, 3);
    }

    @Override
    public NBTTagCompound getUpdateTag()
    {
        super.getUpdateTag();
        return writeToNBT(new NBTTagCompound());
    }
 
7,099
324
1,510

tox1cozZ

aka Agravaine
8,455
598
2,892
Нет конечно. Только своими пакетами.
Имей ввиду, что в пакете должны быть проверки, иначе создаешь пакетхаки.
Если координаты тайла летят с клиента - нужно проверка на World#blockExists. Так же на расстояние игрока до тайла, если пакет летит на изменения из гуишки. И так далее.
 
7,099
324
1,510
Клики по кнопке можно сделать через ванильные пакеты, смотри гуи стола зачарования
 

Icosider

Kotliner
Администратор
3,603
99
664
Если координаты тайла летят с клиента - нужно проверка на World#blockExists.
Вообще-то тайл надо брать из контейнера и вообще не принимать с клиента никакие координаты для получения блоков или тайлов
 
7,099
324
1,510
Это если речь идет о классическом гуи. А если у мя in-world ui, как в ботании, например?
 

Icosider

Kotliner
Администратор
3,603
99
664
Смотря при каких условиях у тебя открывается твоё ui в мире. Если при подходе на N расстояние оно открывается, то легко можно отследить в update тайла на серверной стороне и затем получать тайл при опр. действиях. Хз конечно на сколько такой вариант хуже выше, но поверь, получать по координатам с клиента, тоже не гуд
 

Icosider

Kotliner
Администратор
3,603
99
664
Ахахах, там не только такое было :D Я уж молчу о других модах, Сокол хотя бы прикрыл большую часть трешака, но к сожалению ещё тонны остаются(( Кстати, если ты делаешь какой-нибудь аддон, который использует бублес(baubles), пожалуйста, не копируй код с Botania(надеть на ПКМ), я уже задолбался фиксить эту проблему чуть-ли не в каждом втором моде(( (крик души!)
 
Сверху