Проблемы с рендером текстуры

Версия Minecraft
1.12.2
API
Forge
25
1
0
Текстура:
ResourceLocation backgroundBars = new ResourceLocation("exile_z", "textures/overlay/background_bars.png");
            mc.getTextureManager().bindTexture(backgroundBars);
            mc.renderEngine.bindTexture(backgroundBars);
            drawTexturedModalRect(textX - 40, textY - 30, 0, 0, textWidth + 50, textHeight + 40);

drawTexturedModalRect:
private void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) {
        mc.ingameGUI.drawTexturedModalRect(x, y, textureX, textureY, width, height);
    }

Проблема в том, что при взятии любого предмета в руку, текстура теряет свою прозрачность и становится просто черной, почему так происходит и как это можно исправить?
 

Вложения

  • 1689452779875.png
    1689452779875.png
    542.2 KB · Просмотры: 21
  • 1689452796530.png
    1689452796530.png
    535.2 KB · Просмотры: 21
Решение
RenderGameOverlayEvent.Text
Используй .Post, а внутри уже разделение на текст и картинки через слои (то, о чём писал @Ingresso ).
Также для понимания рекомендую ознакомиться вот с этим. Конечно это скорее к рендеру мира относится, но и в гуи/худ тоже пригодиться
25
1
0
Весь класс:
package ru.qlcreations.exile_z.player.gui;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
import ru.qlcreations.exile_z.player.specifications.PlayerEventHandler;

@Mod.EventBusSubscriber
public class PlayerHealth {

    private Minecraft mc = Minecraft.getMinecraft();
    private FontRenderer fontRenderer = mc.fontRenderer;
    private ScaledResolution res;

    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent.Text event) {
        if (mc.world != null && mc.currentScreen == null) {
            res = new ScaledResolution(mc);
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = fontRenderer.getStringWidth("Rad + 1000");
            int textHeight = fontRenderer.FONT_HEIGHT;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;
            fontRenderer.drawString("Rad " + PlayerEventHandler.getRadCounter(), textX, textY - 20, 0xFFFFFF);

            ResourceLocation backgroundBars = new ResourceLocation("exile_z", "textures/overlay/background_bars.png");
            mc.getTextureManager().bindTexture(backgroundBars);
            mc.renderEngine.bindTexture(backgroundBars);
            drawTexturedModalRect(textX - 40, textY - 30, 0, 0, textWidth + 50, textHeight + 40);

            ResourceLocation hpBar = new ResourceLocation("exile_z", "textures/overlay/hp_bar.png");
            mc.getTextureManager().bindTexture(hpBar);
            mc.renderEngine.bindTexture(hpBar);
            drawTexturedModalRect(textX - 28, textY + 4, 0, 0, textWidth + 30, textHeight);

            ResourceLocation hp = new ResourceLocation("exile_z", "textures/overlay/hp.png");
            mc.getTextureManager().bindTexture(hp);
            mc.renderEngine.bindTexture(hp);
            drawTexturedModalRect(textX, textY +555555, 0, 0, textWidth + 60, textHeight + 40);

            ResourceLocation hpIcon = new ResourceLocation("exile_z", "textures/overlay/hpicon.png");
            mc.getTextureManager().bindTexture(hpIcon);
            mc.renderEngine.bindTexture(hpIcon);
            drawTexturedModalRect(textX - 28, textY - 100, 0, 0, 32, 32);
        }
    }

    private void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) {
        mc.ingameGUI.drawTexturedModalRect(x, y, textureX, textureY, width, height);
    }

}
 
1,530
138
282
RenderGameOverlayEvent.Text
Используй .Post, а внутри уже разделение на текст и картинки через слои (то, о чём писал @Ingresso ).
Также для понимания рекомендую ознакомиться вот с этим. Конечно это скорее к рендеру мира относится, но и в гуи/худ тоже пригодиться
 
25
1
0
Теперь текстура отображается изначально без прозрачности, как на втором скриншоте:rolleyes:


.Post:
@SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) {
        if(mc.world != null && mc.currentScreen == null) {
            res = new ScaledResolution(mc);
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = fontRenderer.getStringWidth("Rad + 1000");
            int textHeight = fontRenderer.FONT_HEIGHT;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;

            ResourceLocation backgroundBars = new ResourceLocation("exile_z", "textures/overlay/background_bars.png");
            mc.getTextureManager().bindTexture(backgroundBars);
            mc.renderEngine.bindTexture(backgroundBars);
            drawTexturedModalRect(textX - 40, textY - 30, 0, 0, textWidth + 50, textHeight + 40);
        }
    }

    private void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) {
        mc.ingameGUI.drawTexturedModalRect(x, y, textureX, textureY, width, height);
    }
 
25
1
0
Мне, как новичку в этом к сожалению сложно разобраться в том плане, что бы выявить для себя полезное решение.
А ты ознакомился с тем, что я просил? И не вижу разделение по

Я попробовал разделить таким образом, не знаю на сколько правильно сделал, и еще я не уверен, какой ElementType должен быть у моего backgroundBars :)

Java:
@SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent.Pre event) {
        if (event.getType() == RenderGameOverlayEvent.ElementType.TEXT && mc.world != null && mc.currentScreen == null) {
            res = new ScaledResolution(mc);
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = fontRenderer.getStringWidth("Rad + 1000");
            int textHeight = fontRenderer.FONT_HEIGHT;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;
            fontRenderer.drawString("Rad " + PlayerEventHandler.getRadCounter(), textX, textY - 20, 0xFFFFFF);
        }
    }

    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) {
        if (event.getType() == RenderGameOverlayEvent.ElementType.TEXT && mc.world != null && mc.currentScreen == null) {
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = 40;
            int textHeight = 20;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;

            ResourceLocation backgroundBars = new ResourceLocation("exile_z", "textures/overlay/background_bars.png");
            mc.getTextureManager().bindTexture(backgroundBars);
            mc.renderEngine.bindTexture(backgroundBars);
            drawTexturedModalRect(textX - 40, textY - 30, 0, 0, textWidth + 50, textHeight + 40);

            ResourceLocation hpBar = new ResourceLocation("exile_z", "textures/overlay/hp_bar.png");
            mc.getTextureManager().bindTexture(hpBar);
            mc.renderEngine.bindTexture(hpBar);
            drawTexturedModalRect(textX - 28, textY + 4, 0, 0, textWidth + 30, textHeight);

            ResourceLocation hp = new ResourceLocation("exile_z", "textures/overlay/hp.png");
            mc.getTextureManager().bindTexture(hp);
            mc.renderEngine.bindTexture(hp);
            drawTexturedModalRect(textX, textY +555555, 0, 0, textWidth + 60, textHeight + 40);

            ResourceLocation hpIcon = new ResourceLocation("exile_z", "textures/overlay/hpicon.png");
            mc.getTextureManager().bindTexture(hpIcon);
            mc.renderEngine.bindTexture(hpIcon);
            drawTexturedModalRect(textX - 28, textY - 100, 0, 0, 32, 32);
        }
    }
 
1,530
138
282
1) Не дели на методы-копирки то, что можно записать в одном.
2)
Мне, как новичку в этом к сожалению сложно разобраться в том плане, что бы выявить для себя полезное решение
Это основы либы LWJGL - с которой рендерится всё, что есть в майне. Ознакомление с этим обязательно.
туда, кстати, и относится. И не понятно что у тебя не работает - код сюда/ошибку/логи и пр.
 
25
1
0
Да, я извиняюсь, не так вызывал его. Частично помогло, всё рендерится как нужно. Появилась только проблема при отправки любого сообщения в чат

Java:
@SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent.Post event) {
        if (event.getType() == RenderGameOverlayEvent.ElementType.TEXT && mc.world != null && mc.currentScreen == null) {
            res = new ScaledResolution(mc);
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = fontRenderer.getStringWidth("Rad + 1000");
            int textHeight = fontRenderer.FONT_HEIGHT;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;
            fontRenderer.drawString("Rad " + PlayerEventHandler.getRadCounter(), textX, textY - 20, 0xFFFFFF);
        }
        if (event.getType() == RenderGameOverlayEvent.ElementType.ALL && mc.world != null && mc.currentScreen == null) {
            int screenWidth = res.getScaledWidth();
            int screenHeight = res.getScaledHeight();
            int textWidth = 40;
            int textHeight = 20;

            int textX = screenWidth - textWidth - 5;
            int textY = screenHeight - textHeight - 5;
            GL11.glEnable(GL11.GL_BLEND);

            ResourceLocation backgroundBars = new ResourceLocation("exile_z", "textures/overlay/background_bars.png");
            mc.getTextureManager().bindTexture(backgroundBars);
            mc.renderEngine.bindTexture(backgroundBars);
            drawTexturedModalRect(textX - 40, textY - 30, 0, 0, textWidth + 50, textHeight + 40);

            ResourceLocation hpBar = new ResourceLocation("exile_z", "textures/overlay/hp_bar.png");
            mc.getTextureManager().bindTexture(hpBar);
            mc.renderEngine.bindTexture(hpBar);
            drawTexturedModalRect(textX - 28, textY + 4, 0, 0, textWidth + 30, textHeight);

            ResourceLocation hp = new ResourceLocation("exile_z", "textures/overlay/hp.png");
            mc.getTextureManager().bindTexture(hp);
            mc.renderEngine.bindTexture(hp);
            drawTexturedModalRect(textX, textY +555555, 0, 0, textWidth + 60, textHeight + 40);

            ResourceLocation hpIcon = new ResourceLocation("exile_z", "textures/overlay/hpicon.png");
            mc.getTextureManager().bindTexture(hpIcon);
            mc.renderEngine.bindTexture(hpIcon);
            drawTexturedModalRect(textX - 28, textY - 100, 0, 0, 32, 32);
        }
    }
 

Вложения

  • 1689492057402.png
    1689492057402.png
    622.6 KB · Просмотры: 17
Сверху