renderGameOverlay убирает все остальные элементы

Версия Minecraft
1.12.2
25
2
Доброго времени суток.

Пытаюсь отрендерить на экране картинку и текст, но выходит в результате, что рендерится только эта картинка и текст, а чат, инвентарь и т.д. пропадают.

Код:
Java:
@SideOnly(Side.CLIENT)
public class PanelRenderer extends GuiIngame {
    private final Minecraft mc = Minecraft.getMinecraft();
    private final ResourceLocation icons = new ResourceLocation("relevant_craft:textures/gui/icons.png");

    public PanelRenderer(Minecraft mc) {
        super(mc);
    }

    @SubscribeEvent
    public void renderGameOverlayEvent(RenderGameOverlayEvent.Pre event) {
        FMLClientHandler.instance().getClient().ingameGUI = new PanelRenderer(this.mc);
    }

    public void renderGameOverlay(float partialTicks) {
        ScaledResolution resolution = new ScaledResolution(mc);
        int width = resolution.getScaledWidth();
        int height = resolution.getScaledHeight();
        mc.getTextureManager().bindTexture(icons);

        GL11.glEnable(GL11.GL_BLEND);

        // Левый верхний уголок
        drawTexturedModalRect(width - 135, 15, 0, 235, 9, 9);

        // Верхняя и нижняя обводка
        for (int l6 = 0; l6 < 10; l6++) {
            drawTexturedModalRect(width - 135 + 9 + l6 * 9, 15, 9, 235, 9, 9);
            drawTexturedModalRect(width - 135 + 9 + l6 * 9, 69, 9, 247, 9, 9);
        }

        // Правый верхний уголок
        drawTexturedModalRect(width - 135 + 99, 15, 21, 235, 9, 9);

        // Боковые полосы
        for (int l6 = 0; l6 < 5; l6++) {
            drawTexturedModalRect(width - 135, 24 + l6 * 9, 0, 244, 9, 9);
            drawTexturedModalRect(width - 135 + 99, 24 + l6 * 9, 21, 244, 9, 9);
        }

        // Нижний левый уголок
        drawTexturedModalRect(width - 135, 69, 0, 247, 9, 9);
        // Нижний правый уголок
        drawTexturedModalRect(width - 135 + 99, 69, 21, 247, 9, 9);

        // Внутреннее заполнение
        for (int l6 = 0; l6 < 5; l6++) {
            for (int k8 = 0; k8 < 10; k8++) {
                drawTexturedModalRect(k8 * 9 + width - 135 + 9, l6 * 9 + 24, 3, 246, 9, 9);
            }
        }

        mc.fontRenderer.drawString("Убийства: " + PanelData.playerKills, width - 130, 18, 16777215);
        mc.fontRenderer.drawString("Убийства зомби: " + PanelData.walkerKills, width - 130, 28, 16777215);
        mc.fontRenderer.drawString("Смертей: " + PanelData.deaths, width - 130, 38, 16777215);
        mc.fontRenderer.drawString("Деньги: " + PanelData.money, width - 130, 48, 16777215);
        mc.fontRenderer.drawString("Группа: " + PanelData.group, width - 130, 58, 16777215);
        mc.fontRenderer.drawString("Игроки: " + PanelData.online, width - 130, 68, 16777215);

        GL11.glDisable(GL11.GL_BLEND);
    }
}

Так регистрирую:
Java:
@EventHandler
    public void onLoad(FMLInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new PanelRenderer(Minecraft.getMinecraft()));
    }

Пробывал разные способы, но ничего не выходит. Неужели мне нужно брать код из GuiIngame из метода renderGameOverlayEvent и пихать в свой renderGameOverlayEvent?? Это же не очень правильно будет.

Есть способ как-то добавлять мой рендер картинки в основной рендер? А ни заменять моим рендером?
 
3,005
192
592
Каждый тик устанавливать новый ingameGUI умно... (нет)
Лучше всего рендерить сразу в эвенте, а не заменять готовый класс.

Попробуй так:
(Инфа не точная)
(Регать: MinecraftForge.EVENT_BUS.register(new CLASSNAME());
Код:
public class CLASSNAME {
    private final Minecraft mc = Minecraft.getMinecraft();
    private final ResourceLocation icons = new ResourceLocation("relevant_craft:textures/gui/icons.png");

    @SubscribeEvent
    public void renderGameOverlayEvent(RenderGameOverlayEvent.Pre event) {
       
        ScaledResolution resolution = new ScaledResolution(mc);
        int width = resolution.getScaledWidth();
        int height = resolution.getScaledHeight();
        mc.getTextureManager().bindTexture(icons);

        GL11.glEnable(GL11.GL_BLEND);

        // Левый верхний уголок
        drawTexturedModalRect(width - 135, 15, 0, 235, 9, 9);

        // Верхняя и нижняя обводка
        for (int l6 = 0; l6 < 10; l6++) {
            drawTexturedModalRect(width - 135 + 9 + l6 * 9, 15, 9, 235, 9, 9);
            drawTexturedModalRect(width - 135 + 9 + l6 * 9, 69, 9, 247, 9, 9);
        }

        // Правый верхний уголок
        drawTexturedModalRect(width - 135 + 99, 15, 21, 235, 9, 9);

        // Боковые полосы
        for (int l6 = 0; l6 < 5; l6++) {
            drawTexturedModalRect(width - 135, 24 + l6 * 9, 0, 244, 9, 9);
            drawTexturedModalRect(width - 135 + 99, 24 + l6 * 9, 21, 244, 9, 9);
        }

        // Нижний левый уголок
        drawTexturedModalRect(width - 135, 69, 0, 247, 9, 9);
        // Нижний правый уголок
        drawTexturedModalRect(width - 135 + 99, 69, 21, 247, 9, 9);

        // Внутреннее заполнение
        for (int l6 = 0; l6 < 5; l6++) {
            for (int k8 = 0; k8 < 10; k8++) {
                drawTexturedModalRect(k8 * 9 + width - 135 + 9, l6 * 9 + 24, 3, 246, 9, 9);
            }
        }

        mc.fontRenderer.drawString("Убийства: " + PanelData.playerKills, width - 130, 18, 16777215);
        mc.fontRenderer.drawString("Убийства зомби: " + PanelData.walkerKills, width - 130, 28, 16777215);
        mc.fontRenderer.drawString("Смертей: " + PanelData.deaths, width - 130, 38, 16777215);
        mc.fontRenderer.drawString("Деньги: " + PanelData.money, width - 130, 48, 16777215);
        mc.fontRenderer.drawString("Группа: " + PanelData.group, width - 130, 58, 16777215);
        mc.fontRenderer.drawString("Игроки: " + PanelData.online, width - 130, 68, 16777215);

        GL11.glDisable(GL11.GL_BLEND);
    }
}
 
154
17
97
Да просто подпишись на событие RenderGameOverlayEvent.Post и рисуй все поверх существующего прямо в этом ивенте. И конечно не нужно при этом заменять на свой ingameGUI. Можно еще делать проверки на элемент, который сейчас отрисовывается, например
Java:
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void render(RenderGameOverlayEvent.Post event) {
    if (event.getType().equals(ElementType.HOTBAR)) {
        //Код отрисовки
    }
}
И еще, регай не в инициализации, а в ClientProxy, на сервере ж тебе рендер не нужен.
 
Последнее редактирование:
Сверху