RenderGameOverlayEvent и новый Forge

Версия Minecraft
1.20.6
API
Forge
Для overlay теперь вроде как нужно регать IGuiOverlay в RegisterGuiOverlaysEvent.

Java:
private static final IGuiOverlay o = (gui, graphics, partialTick, w, h) -> {
        //render
};
   
public static void reg(RegisterGuiOverlaysEvent event) {
     event.registerAboveAll("test", o); //above all - поверх всех остальных. below ниже указанного, above поверх указанного, belowall ниже всех
}

Также есть RenderGuiOverlayEvent.Pre/Post
 
Всё что выше написали, это очень прекрасно.
Но что мешает использовать ScreenEvent? :)

ScreenEvent.java

Текст
Java:
    @SubscribeEvent
    public void onScreenRender(ScreenEvent.Render event) {
        MatrixStack matrixStack = event.getMatrixStack();
        Screen screen = event.getScreen();

        Minecraft.getInstance().font.draw(matrixStack, "MCModding", 10, 10, 0xFFFFFF);
    }

Картинка как с тыквой
Java:
       private static final ResourceLocation testTexture = new ResourceLocation("testMod", "textures/testOverlay.png");  

    @SubscribeEvent
    public void onScreenRender(ScreenEvent.Render event) {
        Screen screen = event.getScreen();
        MatrixStack matrixStack = event.getMatrixStack();
        TextureManager textureManager = Minecraft.getInstance().getTextureManager();
        textureManager.bind(testTexture);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
        int width = screen.width;
        int height = screen.height;
        int textureWidth = 256;
        int textureHeight = 256;
        this.blit(matrixStack, 0, 0, 0, 0, width, height, textureWidth, textureHeight);
        RenderSystem.disableBlend();
    }

    private void blit(MatrixStack matrixStack, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight) {
        Minecraft.getInstance().getTextureManager().bind(testTexture);
        net.minecraft.client.renderer.RenderHelper.blit(matrixStack, x, y, u, v, width, height, textureWidth, textureHeight);
    }


1730328607495.png
 
Можно зарегать свой слой, через событие, которое кидали выше, а можно по прежнему как в RenderGameOverlayEvent сделать через событие RenderGuiLayerEvent(Pre/Post)

В первом случае это необходимо для совместимости с другими модами. Во втором случае уже скорей из серии "хочу как в легаси"
 
Назад
Сверху