Minecraft Forge - Смещение слотов контейнера?

Я создаю новый мод, который имеет контейнер. Проблема заключается в том, что слоты инвентаря смещены на 7. Похоже, сервер думает, что первый столбец находится там, где находится второй-последний столбец, а второй столбец - где находится последний столбец. Вот код Классы должны быть включены.

public class GuiHandler implements IGuiHandler {
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        if (ID == 0) {
            return new ContainerGenerator(player.inventory, (TileEntityGenerator) world.getTileEntity(x, y, z));
        } else {
            return null;
        }
    }

    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        if (ID == 0) {
            return new GuiGenerator(player.inventory, (TileEntityGenerator) world.getTileEntity(x, y, z));
        } else {
            return null;
        }
    }
}

Контейнерный класс

public class ContainerGenerator extends Container {
    private TileEntityGenerator tileEntity;
    private int count;

    public ContainerGenerator(InventoryPlayer inventory, TileEntityGenerator tileEntity) {
        this.tileEntity = tileEntity;
        this.tileEntity.openInventory();
        this.count = tileEntity.getCount();
        this.addSlotToContainer(new Slot(tileEntity, 0, 27, 47));
        this.addSlotToContainer(new Slot(tileEntity, 1, 134, 47));
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 9; j++) {
                this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
            }
        }
        for (int i = 0; i < 9; i++) {
            this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142));
        }
    }
// some other random code

И некоторые подходящие элементы мозаичного изображения переопределяют (есть некоторый другой случайный код)

@Override
public void readFromNBT(NBTTagCompound nbt) {
    super.readFromNBT(nbt);
    this.count = nbt.getInteger("count");
    NBTTagList tagList = nbt.getTagList("items", 10);
    this.items = new ItemStack[2];
    NBTTagCompound compound = tagList.getCompoundTagAt(0);
    byte slotId = compound.getByte("slot");
    if (slotId >= 0 && slotId < 2) {
        items[slotId] = ItemStack.loadItemStackFromNBT(compound);
    }
    compound = tagList.getCompoundTagAt(1);
    slotId = compound.getByte("slot");
    if (slotId >= 0 && slotId < 2) {
        items[slotId] = ItemStack.loadItemStackFromNBT(compound);
    }
}

@Override
public void writeToNBT(NBTTagCompound nbt) {
    super.writeToNBT(nbt);
    nbt.setInteger("count", count);
    NBTTagList list = new NBTTagList();
    if (items[0] != null) {
        NBTTagCompound compound = new NBTTagCompound();
        compound.setByte("slot", (byte) 0);
        items[0].writeToNBT(compound);
        list.appendTag(compound);
    }
    if (items[1] != null) {
        NBTTagCompound compound = new NBTTagCompound();
        compound.setByte("slot", (byte) 1);
        items[1].writeToNBT(compound);
        list.appendTag(compound);
    }
    nbt.setTag("items", list);
}

@Override
public int getSizeInventory() {
    return items.length;
}

@Override
public ItemStack getStackInSlot(int slot) {
    return items[slot];
}

@Override
public ItemStack decrStackSize(int slot, int amount) {
    if (items[slot] == null) {
        return null;
    }
    if (items[slot].stackSize == amount) {
        ItemStack itemStack = items[slot];
        items[slot] = null;
        return itemStack;
    } else {
        ItemStack itemStack = items[slot].splitStack(amount);
        if (items[slot].stackSize == 0) {
            items[slot] = null;
        }
        markDirty();
        return itemStack;
    }
}

@Override
public ItemStack getStackInSlotOnClosing(int slot) {
    if (items[slot] != null) {
        ItemStack itemStack = items[slot];
        items[slot] = null;
        return itemStack;
    } else {
        return null;
    }
}

@Override
public void setInventorySlotContents(int slot, ItemStack stack) {
    items[slot] = stack;
    if (stack != null && stack.stackSize > getInventoryStackLimit()) {
        markDirty();
    }
}

Редактировать: скриншоты. Обратите внимание, какие слоты выделены, если таковые имеются.

Снимок экрана 1

Снимок экрана 2

Скриншот 3

Скриншот 4

Скриншот 5

Снимок экрана 6

Извините за длинный пост. Я новичок в моддинге, поэтому мне трудно точно определить проблему.

0 ответов

Другие вопросы по тегам