Не работает кастомный инвентарь

Версия Minecraft
1.12.2
24
1
Здравствуйте. Я сделал пользовательский инвентарь игрока. но я не могу перемещать предметы в слотах. Как мне это исправить?


GuiContainer:
public class GuiSareahInventory extends GuiContainer {

    public GuiSareahInventory(EntityPlayer player, InventoryPlayer inventoryPlayer) {
        super(new ContainerInventory(inventoryPlayer,player));

        xSize = 180;
        ySize = 230;

    }

    @Override
    public void initGui() {
        super.initGui();
        this.buttonList.add(new GuiCustomButton(0,guiLeft + 175,guiTop,12,32, 0));
        this.buttonList.add(new GuiCustomButton(1,guiLeft + 175,guiTop + 37,12,32, 1));
    }

    @Override
    protected void actionPerformed(GuiButton button) throws IOException {

    }

    @Override
    protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
        super.drawGuiContainerForegroundLayer(mouseX, mouseY);
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
        drawDefaultBackground();
        mc.getTextureManager().bindTexture(new ResourceLocation(Sareah.MODID,"inventory_gui.png"));
        drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
        GuiInventory.drawEntityOnScreen(guiLeft + 88, guiTop + 110, 43, (float)(guiLeft + 51) - mouseX, (float)(guiTop + 74 - 50) - mouseY, mc.player);
    }
}

Container:
public class ContainerInventory extends Container {

    private final EntityPlayer player;

    public ContainerInventory(InventoryPlayer playerInv, EntityPlayer player) {
        this.player = player;

        this.addSlotToContainer(new SlotArmor(player, playerInv, 39, 16,22,3)); //head
        this.addSlotToContainer(new SlotArmor(player, playerInv, 38, 16,80,2)); //chest
        this.addSlotToContainer(new SlotArmor(player, playerInv, 37, 145,22,1)); //leg
        this.addSlotToContainer(new SlotArmor(player, playerInv, 36, 145,80,0)); //feet

        for (int i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 140 + i * 18));
            }
        }

        for (int i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(playerInv, i, 8 + i * 18, 202));
        }
    }

    @Override
    public boolean canInteractWith(EntityPlayer playerIn) {
        return true;
    }
}

Guihandler:
public class GuiHandler implements IGuiHandler {

    public static final int INVENTORY_GUI_ID = 0;

    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        if(ID == INVENTORY_GUI_ID) {
            return new ContainerInventory(player.inventory, player);
        }
        return null;
    }

    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
        if(ID == INVENTORY_GUI_ID) {
            return new GuiSareahInventory(player, player.inventory);
        }
        return null;
    }
}
 
Решение
24
1
А подменяешь как?
Вы говорите о том, как открыть инвентарь?
Если это означает, Я использую этот код:


Java:
@SubscribeEvent
        public void guiOpen(GuiOpenEvent event) {
            if(event.getGui() != null && event.getGui().getClass() == GuiInventory.class) {
                EntityPlayer player = mc.player;
                if(!player.isCreative()) {
                    event.setCanceled(true);
                    player.openGui(instnace, GuiHandler.INVENTORY_GUI_ID, player.world, (int)player.posX, (int)player.posY, (int)player.posZ);
                }
            }
        }
 
161
12
90
24
1
Ты отправляешь пакет на сервер, где и выполняешь эту строчку. Пример есть тут: Создание кастомного инвентаря игрока
Можно и по искать было...
Спасибо Все отлично работает Этот вопрос не имеет отношения к этому сообщению, но могу ли я изменить положение текста заголовка, который появляется над слот-панелью Vanilla HUD?
 

Вложения

  • 2020-02-28_15.56.39.png
    2020-02-28_15.56.39.png
    642.2 KB · Просмотры: 12
24
1
Там вроде должен был быть эвент рендера гуи экрана. Проверяешь на текст и с помощью гл транслейт двигаешь. Должно работать.
Возникла проблема: он отлично работает в одиночной игре, но контейнер не открывается в мультиплеере. Это проблема пакета, но я не знаю, как это сделать.
 
24
1
Хмм. Оч странно, ты бы кинул что ты там с пакетом сделал. Я мож и смог бы помочь.
Я написал этот код. Но он все еще не работает на сервере. Есть проблема? Помоги мне..😰

register:
networkWrapper.registerMessage(PacketOpenInventory.Handler.class, PacketOpenInventory.class, 0, Side.SERVER);

PacketOpenInventory:
@Override
public IMessage onMessage(PacketOpenInventory message, MessageContext ctx) {
    EntityPlayerMP player = ctx.getServerHandler().player;
    player.openGui(Sareah.getInstance(), GuiHandler.INVENTORY_GUI_ID, player.world, (int)player.posX, (int)player.posY, (int)player.posZ);
    return null;
}

GuiOpen method:
@SubscribeEvent
public void guiOpen(GuiOpenEvent event) {
    if(event.getGui() != null && event.getGui().getClass() == GuiInventory.class) {
        EntityPlayer player = mc.player;
        if(!player.isCreative()) {
            event.setCanceled(true);
            NetworkHandler.networkWrapper.sendToServer(new PacketOpenInventory());
        }
    }
}
 
Сверху