Миксин не сдвигает текст

Версия Minecraft
1.12.2
API
Forge
Переделываю рпг худ, теперь он отображается в центре экрана и из-за этого перекрывается текст. Почитал в интернете и попробовал через Миксин напрямую изменить высоту текста в самом майнкрафте, но ничего не работает.
MixinGuiIngame:
@Mixin(GuiIngame.class)
public class MixinGuiIngame {

    @Inject(
            method = "renderSelectedItem",
            at = @At(
                    value = "INVOKE",
                    target = "Lnet/minecraft/client/gui/FontRenderer;drawStringWithShadow(Ljava/lang/String;FFI)I"
            ),
            cancellable = true
    )
    public void renderSelectedItem(ScaledResolution scaledResolution, CallbackInfo ci) {
        System.out.println("test");
        GuiIngame gui = (GuiIngame) (Object) this;
        Minecraft mc = Minecraft.getMinecraft();
        ItemStack stack = ((GuiIngameAccessor) gui).getHighlightingItemStack();
        int ticks = ((GuiIngameAccessor) gui).getRemainingHighlightTicks();

        if (ticks > 0 && stack != null) {
            String name = stack.getDisplayName();
            int opacity = (int) ((float) ticks * 256.0F / 10.0F);
            if (opacity > 255) opacity = 255;

            if (opacity > 0) {
                int screenWidth = scaledResolution.getScaledWidth();
                int screenHeight = scaledResolution.getScaledHeight();

                int yOffset = 500; // специально поставил большое значение, чтобы убедиться в неисправности

                GlStateManager.pushMatrix();
                GlStateManager.enableBlend();
                mc.fontRenderer.drawStringWithShadow(
                        TextFormatting.RESET + name,
                        (screenWidth - mc.fontRenderer.getStringWidth(name)) / 2f,
                        screenHeight - yOffset,
                        0xFFFFFF | (opacity << 24)
                );
                GlStateManager.disableBlend();
                GlStateManager.popMatrix();
                ci.cancel();
            }
        }
    }


    @Inject(method = "<init>", at = @At("RETURN"))
    private void onInit(Minecraft mc, CallbackInfo ci) {
        System.out.println("RPGHud Mixin LOADED!");
    }

}

P.S "RPGHud Mixin LOADED!" - выводится

1747249114347.png
 
Последнее редактирование:
Мне нужно оставить худ на этом же месте иначе вся картина выглядит криво, а дефолтный текст майнкрафта - выводить выше. Ибо выводить текст поверх этого худа - будет выглядеть плохо (надеюсь правильно понял совет).
 
Это дефолтная майнкрафт надпись, которая всплывает когда свапаешь предметы в хотбаре, поэтому и хочу миксином поменять этот текст в одном месте, где это используется. Если есть какой-то другой способ сместить текст - рад услышать!
 
Попробуй просто сместить матрицу.
Java:
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GL11.glTranslatef(0.0F, -yOffset, 0.0F);
mc.fontRenderer.drawStringWithShadow(
        TextFormatting.RESET + name,
        (screenWidth - mc.fontRenderer.getStringWidth(name)) / 2f,
        screenHeight,
        0xFFFFFF | (opacity << 24)
);
GlStateManager.disableBlend();
GlStateManager.popMatrix();

P.S я думал что у тебя проблема в том, что текст под худом и нужно просто отрендарить поверх xD
 
Если используешь IntelliJ IDEA, то поставь плагин Minecraft Development тык#1; тык#2;
Он показывает ошибки в миксинах и фиксит частые проблемы.

А так по виду вроде все корректно, хорошо посмотри в консоль при старте майна, возможно экспешен выкидывается.

На крайняк можешь полностью метод перезаписать через аннотацию @overwrite
 
Попробовал remap добавить вместе и по отдельности в Inject и Mixin - ничего. Попытался через @overwrite и как-то тоже не заметил изменений. Если у кого-то есть еще какие-то идеи в чем я ошибся или как реализовать, то буду рад услышать ибо то, что даже test не выводится - очень странно..
 
Назад
Сверху