Хук в наследуемом классе

Версия Minecraft
1.7.10
355
2
17
Добро, такая вот тема, есть хук:

Java:
    @Hook(at = @At(point = InjectionPoint.METHOD_CALL, target = "drawGradientRect", shift = Shift.INSTEAD))
    @SideOnly(Side.CLIENT)
    public static void drawScreen(GuiContainer guiScreen, int xMouse, int yMouse, float partialTicks, @Hook.LocalVariable(11) int xPos, @Hook.LocalVariable(8) int yPos)
    {}

В нём идёт подмена выделения слота, это работает в основном контейнере, под локальными переменами находятся xPos и yPos слота.
Но допустим в креативном инвентаре происходит сдвиг этих xPos и yPos, VariableIdHelper выдает уже другой список локальный полей.

Как в таком случае отловить эту позиционку, если в разных контейнера которые наследуют GuiContainer с добавлением новых полей происходит сдвиг основных? PS, сдвиг видимо происходит т.к. эти контейнеры имеют свой drawScreen, добавляют там свои поля и в конце вызываются супер метод.
 
7,099
324
1,510
Эти переменные просто не используются, удали их из подписи метода и все
 
7,099
324
1,510
355
2
17
Вот это удали, эти переменные все равно не используются
Так не, они как раз таки используются, там дальше идет отрисовка и бинд текстуры использует положение, я просто не скидывал весь рендер

Java:
    @Hook(at = @At(point = InjectionPoint.METHOD_CALL, target = "drawGradientRect", shift = Shift.INSTEAD))
    @SideOnly(Side.CLIENT)
    public static void drawScreen(GuiContainer guiScreen, int xMouse, int yMouse, float partialTicks, @Hook.LocalVariable(11) int xPos, @Hook.LocalVariable(8) int yPos)
    {
        //..render..
           
        Minecraft.getMinecraft().getTextureManager().bindTexture(UIResource.ITEM_HOVER);
        RendererHelper.drawModalRectWithCustomSizedTexture(xPos, yPos, 0, 0, 16, 16, 16, 16);
       
        //..render..
    }


Собственно я получают вот эти переменные:

Java:
            if (this.isMouseOverSlot(slot, p_73863_1_, p_73863_2_) && slot.func_111238_b())
            {
                this.theSlot = slot;
                GL11.glDisable(GL11.GL_LIGHTING);
                GL11.glDisable(GL11.GL_DEPTH_TEST);
                int j1 = slot.xDisplayPosition;    <----- xPos
                k1 = slot.yDisplayPosition;        <----- yPos
                GL11.glColorMask(true, true, true, false);
                this.drawGradientRect(j1, k1, j1 + 16, k1 + 16, -2130706433, -2130706433);     <----- Hook
                GL11.glColorMask(true, true, true, true);
                GL11.glEnable(GL11.GL_LIGHTING);
                GL11.glEnable(GL11.GL_DEPTH_TEST);
            }
 
7,099
324
1,510
В гуи инвнетаря выживания и креатива это разные переменные, поэтому простым решением будет сделать отдельные хуки для каждого вида инвентаря
Сложным решением будет сделать хук в drawGradientRect, по значению аргументов определять ,что рисуется слот и заменять логику на свою(returnCondition=ON_TRUE), тогда хук будет универсальным
 
7,099
324
1,510
355
2
17
А между тем простое решение действительно простое
Ну, не совсем то и простое, это нужно по каждому инвентарю пробежаться, проанализировать позиционки этих переменных и в каждый хукнуться. Я думал изначально об этом, но этих контейнеров, особенно с модами - дофига, проще уж подменять GuiContainer целиком со статичным хуком.
 
Сверху