Работа с ItemStack

Версия Minecraft
1.7.10
API
Forge
Создаю много блоков с инвентарем и процесами из одних предметов в другие, как пытался либо залагивает тайл, или предметы стают фейковые или вообще крашит с NPE

Есть ли темы, или гайды как правильно реализовывать логику создания, накапливания предметов в слотах, разных условий если там предмет в слоте то не делать процес дальше, и т.п

Нелепая попытка сделать чтобы перемещать предмет в буфферные слоты работал с InvSlot из Ic2:
private void moveToBuffer(ItemStack stackToMove) {
        if (stackToMove != null) {
            for (int i = 0; i < bufferSlots.size(); i++) {
                ItemStack stackInBuffer = bufferSlots.get(i);
                if (stackInBuffer == null) {
                    // If buffer empty
                    bufferSlots.put(i, stackToMove);
                    return;
                } else if (stackInBuffer.isItemEqual(stackToMove) && stackInBuffer.getMaxStackSize() > 1) {
                    int spaceLeft = stackInBuffer.getMaxStackSize() - stackInBuffer.stackSize;
                    if (spaceLeft >= stackToMove.stackSize) {
                        stackInBuffer.stackSize = stackInBuffer.stackSize + stackToMove.stackSize;
                        return;
                    } else {
                        stackInBuffer.stackSize = (stackInBuffer.getMaxStackSize());
                        stackToMove.stackSize = (stackToMove.stackSize - spaceLeft);
                    }
                }
            }
            for (int i = 0; i < bufferSlots.size(); i++) {
                if (bufferSlots.get(i) == null) {
                    bufferSlots.put(i, stackToMove);
                    break;
                }
            }
        }
    }
 
1,374
113
241
либо залагивает тайл, или предметы стают фейковые или вообще крашит с NPE
1) Не вижу отправки пакетов об обновлении тайла.
2) Фейковые предметы - результат некорректной работы синхронизации инфы сервера и клиента
3) В данном коде не вижу, где может выскочить NPE. Очень желательно предоставить краш.

Вообще, лучшей создай какой-нить интерфейс доступа к слотам, где при каждом изменении будешь отправлять пакеты обновления. Так проще работать с ними. Скорее всего это будет внутри тайла.

Что касается самого алгоритма - не вникал, да и изначальная задача мне не ясна. Так что за него ничего не скажу.
 
Сверху