FABRIC 1.18.2 Размер инвентаря

Версия Minecraft
1.18.2
API
Fabric
А вот теперь начинаются сложные вопросы, на которые не найдено ответа даже на просторах официального wiki по фабрику.

Вводная:
Есть блок с инвентарем. (будем выражаться в терминах кода - screen и handler) SCREEN у меня сильно больше ванильного верстачного. Однако, нарисовав его с горем пополам (танцы с бубнами и отдельное указание размеров фона) я обнаружил, что HANDLER располагает все свои слоты относительно ванильного размера GUIшки. Т.е. в моем случае получается все собрано в одну большую кучку в середине. Убрать слоты игрока вниз - не проблема, но! Надпись Inventory рендерится абы как все равно + чтоб слоты моего GUI легли туда, куда задумано, мне надо прописывать отрицательный x. Я конечно может и дебил, но это точно не коректный подход. Может кто подсобить? Как сделать что HANDLER воспринимал сам себя размером со SCREEN?
 
Получаем мы вот такую кулебяку.
2022-05-08_20.38.46.png
P.S.
Тут позиции слотов игрока просто смещены вниз. Но все остальное как было по уродски, так и осталось. Причем если я сделаю Y = 0 у верхнего слота - то он будет все равно ниже отведенного ему в SCREEN места...
P.P.S.
Предметы из хотбара на ЛКМ и ПКМ просто выбрасываются. В остальных слотах все норм... Еще + 1 проблема в копилку...
 
Последнее редактирование:
Вот код ScreenHandler
SimpleArcaneSaturatorScreenHandler:
package net.ainorrikar.mod.screen;

import net.ainorrikar.mod.screen.slot.ModArcaneProviderSlot;
import net.ainorrikar.mod.screen.slot.ModArcanedSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;

public class SimpleArcaneSaturatorScreenHandler extends ScreenHandler {

    private final Inventory inventory;

    public SimpleArcaneSaturatorScreenHandler(int syncId, PlayerInventory playerInventory) {
        this(syncId, playerInventory, new SimpleInventory(5));
    }

    public SimpleArcaneSaturatorScreenHandler(int syncId, PlayerInventory playerInventory, Inventory inventory) {
        super(ModScreenHandlers.SIMPLE_ARCANE_SATURATOR_SCREEN_HANDLER, syncId);
        checkSize(inventory, 5);
        this.inventory = inventory;
        inventory.onOpen(playerInventory.player);

        this.addSlot(new ModArcaneProviderSlot(inventory,
                0, 80, 18));
        this.addSlot(new ModArcaneProviderSlot(inventory,
                1, 35, 61));
        this.addSlot(new ModArcaneProviderSlot(inventory,
                2, 79, 105));
        this.addSlot(new ModArcaneProviderSlot(inventory,
                3, 123, 61));
        this.addSlot(new ModArcanedSlot(inventory,
                4, 79, 61));

        addPlayerInventory(playerInventory);
        addPlayerHotbar(playerInventory);
    }

    @Override
    public boolean canUse(PlayerEntity player) {
        return this.inventory.canPlayerUse(player);
    }

    @Override
    public ItemStack transferSlot(PlayerEntity player, int invSlot) {
        ItemStack newStack = ItemStack.EMPTY;
        Slot slot = this.slots.get(invSlot);
        if (slot != null && slot.hasStack()) {
            ItemStack originalStack = slot.getStack();
            newStack = originalStack.copy();
            if (invSlot < this.inventory.size()) {
                if (!this.insertItem(originalStack, this.inventory.size(), this.slots.size(), true)) {
                    return ItemStack.EMPTY;
                }
            } else if (!this.insertItem(originalStack, 0, this.inventory.size(), false)) {
                return ItemStack.EMPTY;
            }

            if (originalStack.isEmpty()) {
                slot.setStack(ItemStack.EMPTY);
            } else {
                slot.markDirty();
            }
        }

        return newStack;
    }

    private void addPlayerInventory(PlayerInventory playerInventory) {
        for (int i = 0; i < 3; ++i) {
            for (int l = 0; l < 9; ++l) {
                this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 86 + i * 18 + 18));
            }
        }
    }

    private void addPlayerHotbar(PlayerInventory playerInventory) {
        for (int i = 0; i < 9; ++i) {
            this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 144 + 18));
        }
    }
}
 
Сверху