Как зарендерить "кнопки" в гуишке инвентаря?

Версия Minecraft
1.12.2
API
Forge
Мне нужно зарендерить "кнопки" в гуишке инвентаря, но не до конца понимаю как это сделать..
Хочу сделать так:
1652556226346.png
Пытался создать гуишку с кнопками но когда вставляю её в инвентарь кнопки рисуются но пропадает сама гуишка инвентаря и просто кнопки, подскажите как это верно можно реализовать?
Код:
@SubscribeEvent
public boolean onPlayerTick(TickEvent.PlayerTickEvent event)
{
    GuiScreen screen = Minecraft.getMinecraft().currentScreen;
    
    if (screen instanceof GuiInventory)
    {
        if (inventory_open);
        //Minecraft.getMinecraft().displayGuiScreen(new Menu());
        inventory_open = true;
        System.out.println("inv render");
        return inventory_open;
    }
    
    return inventory_open;
}
 
627
72
178
не нужно такие манипуляции проводить. кнопки создаются при инициализации гуи, а за это отвечает событие GuiScreenEvent.InitGuiEvent. в нём достаёшь переменную отвечающую за само гуи, и в нем должно быть что-то вроде buttonList, туда добавляешь свою кнопку, почитай на форуме подробнее если не знаешь как
 
Точно.. спасибо)
вот кому нужно держите код:

Рендер кнопки в инвентаре:
    @SubscribeEvent
    public void initGui(GuiScreenEvent.InitGuiEvent.Post event) {
    if (event.getGui() instanceof GuiInventory) {
        GuiButton addButt = new GuiButton(120, 100, 100, I18n.format("test.button", new Object[0]));
        event.getButtonList().add(addButt);
        System.out.println("inv button add");
    }

    }
 
Такс, теперь вопрос как сделать ей текстуру свою? почекал форум ничего не нашел, только то что надо как-то создавать свою кнопку и тогда присваивать ей текстуру, на обычные кнопки такое не выйдет сделать, но как сделать свою кнопку еще и с текстуркой... нельзя ли просто при рендере текстуры указать айди кнопки и все?)
 
и добавляешь как обычную кнопу
Вот к примеру есть кнопка с картинкой и как мне добавить её вот сюда?

Java:
    @SubscribeEvent
    public void initGui(GuiScreenEvent.InitGuiEvent.Post event) {
    if (event.getGui() instanceof GuiInventory) {
        GuiButton addButt = new GuiButton(120, 100, 100, I18n.format("test.button", new Object[0]));
        event.getButtonList().add(addButt);
        System.out.println("inv button add");
    }

    }

кнопка:
public class RPGButton extends GuiButton {
    int h = 0, w = 0;
    public ResourceLocation img = new ResourceLocation(Leviathan.MOD_ID + (":textures/gui/Knopka.png"));
    private String text;
    private float scalledX = 1,scalledY = 1,zLevel = 1;
    private boolean drawText;
    public static RPGButton Instance;
    public RPGButton(int id, int x, int y, String text)
    {
        super(id, x, y, text);
    }

    public RPGButton(int id, int x, int y, int width, int height, String text)
    {
        super(id, x, y, width, height, text);
    }
 
   @Override
    public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks)
    {
            FontRenderer fontrenderer = mc.fontRenderer;
            mc.getTextureManager().bindTexture(img);
            GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
            if (this.hovered)
                    mc.getTextureManager().bindTexture(img);
            GlStateManager.enableBlend();
            GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
            GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
            draw();
            this.mouseDragged(mc, mouseX, mouseY);
            int j = 14737632;

            if (packedFGColour != 0)
            {
                j = packedFGColour;
            }
            else if (!this.enabled)
            {
                j = 10526880;
            }
            else if(this.hovered){
                j = 16777120;
            }
            if(drawText)
                this.drawCenteredString(fontrenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, j);
    }
    public void changeText(String text){
        this.text = text;
    }
    public void changeScalledX(float x){
        scalledX = x;
    }
    public void changeScalledY(float y){
        scalledY = y;
    }
    public void changeZLevel(float z){
        zLevel = z;
    }
    public boolean compareString(String text){
        return this.text.equals(text);
    }
    public void setDrawText(boolean set){
        drawText = set;
    }
    private void draw(){
        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferbuilder = tessellator.getBuffer();
        bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX);
        bufferbuilder.pos(x, y + h, 0).tex(0,1).endVertex();
        bufferbuilder.pos(x + w, y + h, 0).tex(1, 1).endVertex();
        bufferbuilder.pos(x + w, y, 0).tex(1,0).endVertex();
        bufferbuilder.pos(x, y, 0).tex(0,0).endVertex();
        tessellator.draw();
    }
}
 
627
72
178
бред. не представляю какой смысл это делать в ванильном инвентаре, который может подвергаться изменениям от любого мода, тем более когда ты на эту замену выделяешь кучу лишних операций. ничего профитнее обычного добавления элемента в коллекцию при инициализации не вижу.
 
1,074
72
372
Для такой простой задачи как добавление пары кнопок, создание своего GUI - это перебор. Добавить кнопки в buttonList, да ловить событие клика, это всё что требуется. Тривиальная задача.
 
Последнее редактирование:
Так есть одна проблемка что на разных экранах кнопки по разному себя ведут, где-то выше где-то ниже как их зафиксировать что-бы на всех экранах будь-то чел на телеке играет что-бы кнопки были четко под инвентарем и не сьежали в завистимости от экрана пк и открыта игра на полную или нет?

Java:
    @SubscribeEvent
    public void initGui(GuiScreenEvent.InitGuiEvent.Post event) {
    if (event.getGui() instanceof GuiInventory) {
        GuiButton addButt2 = new GuiButton(132, 283, 260, 147, 20, I18n.format("Info", new Object[0]));
       
       
        event.getButtonList().add(addButt2);
        System.out.println("inv render");
       
    }

    }
 
627
72
178
относительно ширины и высоты дисплея выставляй их координаты.
Java:
ScaledResolution resolution = new ScaledResolution(mc);
int x = resolution.getScaledWidth() / 2 +- X // X - сдвиг
int y = resolution.getScaledHeight() /2 +- Y // Y - сдвиг
GuiButton addButt2 = new GuiButton(132, x, y, 147, 20, I18n.format("Info", new Object[0]));
 
Сверху