Позиционирование GUI со scaled-текстурой

Версия Minecraft
1.12.2
17
3
Итак, добрался я до изучения GUI, его отрисовки и позиционирования. И вот тут где-то у меня зарылась собака. Прямо псина сутулая
Хочу напихать значков в правый нижний угол, но не могу понять, как правильно работает позиционирование при изменении размера
Знаю. Норм так над формулой поизвращался... Но, из того что у меня получалось, это самое близкое к правильному результату
Вообще в идеале - найти как работает отрисовка HUD у эффекта зелья и позаимствовать с поправкой на scale. Но я не нашёл, где это можно подсмотреть
CEXj2g1.png

mi4egx6.png

EQIrc8h.png


java:
    @SubscribeEvent
    public void drawText(RenderGameOverlayEvent.Post event) {
        // draw FPS
        int fps = Minecraft.getDebugFPS();
        mc.fontRenderer.drawStringWithShadow("FPS: " + Integer.toString(fps), 1, 1, 0xFFFFFF);
        
        if (mc.player.isPotionActive(Potion.getPotionById(2))) {     
                int w = mc.displayWidth;
                int h = mc.displayHeight;
                int ws = event.getResolution().getScaledWidth();
                int hs = event.getResolution().getScaledHeight();
                GL11.glPushMatrix();
                mc.getTextureManager().bindTexture(dayzcore.textures.texture_break_leg);
                // уменьшаю текстурку в размере
                GL11.glScalef(0.15F, 0.15F, 0.15F);
                // рисую
                mc.ingameGUI.drawTexturedModalRect((int)((w-(ws*0.15))*3), (int)((h-(hs*0.15))*3), 0, 0, 250, 250);
                GL11.glPopMatrix();
                
                mc.fontRenderer.drawStringWithShadow("displayWidth " + Integer.toString(w), 1, 40, 0xFFFFFF);
                mc.fontRenderer.drawStringWithShadow("getScaledWidth " + Integer.toString(ws), 1, 46, 0xFFFFFF);
                mc.fontRenderer.drawStringWithShadow("w*0.15 " + Integer.toString((int)(w *0.15)), 1, 54, 0xFFFFFF);
                mc.fontRenderer.drawStringWithShadow("w-(ws*0.15) " + Integer.toString((int)((w-(ws*0.15))*3)), 1, 60, 0xFFFFFF);
                mc.fontRenderer.drawStringWithShadow("итог " + Integer.toString((int)((w-(ws*0.15))*3)), 1, 66, 0xFFFFFF);
                String text = "Сломана кость";
                mc.fontRenderer.drawStringWithShadow(text, ws-(text.length()*4) - 4, hs - 18, 0xFFFFFF);

       }
    }
 
7,099
324
1,510
 
17
3
glScale, то координаты вычисляются так: x / scale.
Ура! Благодарю за подсказку.
Всё оказалось гораздо проще, чем я себе выдумывал :)
НО из-за всех этих манипуляций появились такие артефакты с баром еды. Не подскажешь, куда смотреть?
с эффектом
DsF87Fu.png

без эффекта
ypSs79h.png


java:
    @SubscribeEvent
    public void drawText(RenderGameOverlayEvent.Post event) {
        // draw FPS
        int fps = Minecraft.getDebugFPS();
        mc.fontRenderer.drawStringWithShadow("FPS: " + Integer.toString(fps), 1, 1, 0xFFFFFF);
        if (mc.player.isPotionActive(Potion.getPotionById(2))) {
            int w = event.getResolution().getScaledWidth();
            int ws = mc.displayWidth;
            int h = event.getResolution().getScaledHeight();
            String text = "Сломана кость";
            mc.fontRenderer.drawStringWithShadow(text, w-(text.length()*4) - 4, h - 90, 0xFFFFFF);
            GL11.glPushMatrix();
            mc.getTextureManager().bindTexture(dayzcore.textures.texture_break_leg);
   
            // уменьшаю текстурку в размере
            float scale = 0.1F;
            GL11.glScalef(scale, scale, 1F);
      
            // рисую
            mc.ingameGUI.drawTexturedModalRect((int)((w/scale)-260), (int)((h/scale)-800), 0, 0, 250, 250);
            GL11.glPopMatrix();
        }
    }
Проблема в бинде текстур О_о выкидываю эту строку и бар возвращается
java:
public ResourceLocation texture_break_leg;

    protected Textures() {
        this.texture_break_leg = new ResourceLocation(dayzcore.MODID, "textures/gui/bone.png");
    }

......

mc.getTextureManager().bindTexture(dayzcore.textures.texture_break_leg);
ovvAf5E.png
 
17
3
Теперь всё шоколадно! Спасибо за ответы

Event:
@SubscribeEvent
    public void drawText(RenderGameOverlayEvent.Post event) {
 
        if (event.getType() == ElementType.ALL) {
            // draw FPS
            int fps = Minecraft.getDebugFPS();
            mc.fontRenderer.drawStringWithShadow("FPS: " + Integer.toString(fps), 1, 1, 0xFFFFFF);
            
            if (mc.player.isPotionActive(Potion.getPotionById(2))) {
                int w = event.getResolution().getScaledWidth();
                int ws = mc.displayWidth;
                int h = event.getResolution().getScaledHeight();
                String text = "Сломана кость";
                
                mc.fontRenderer.drawStringWithShadow(text, w-(text.length()*4) - 4, h - 90, 0xFFFFFF);
                GL11.glPushMatrix();
                mc.getTextureManager().bindTexture(dayzcore.textures.texture_break_leg);
                
                // уменьшаю текстурку в размере
                float scale = 0.1F;
                GL11.glScalef(scale, scale, 1F);
    
                // рисую
                mc.ingameGUI.drawTexturedModalRect((int)((w/scale)-260), (int)((h/scale)-800), 0, 0, 250, 250);
                GL11.glPopMatrix();
            }
        }
    }
texture:
public static final ResourceLocation texture_break_leg = new ResourceLocation(dayzcore.MODID, "textures/gui/bone.png");
 
Сверху