Проблема с отображением drawrect и drawstring

Версия Minecraft
1.6.4
API
Forge
64
3
17
Приветствую всех, ковыряю моды одного мертвого проекта и напоролся на очень противный баг.
Есть два хука
хуки:
@Hook(injectOnExit = true)
    public static void drawScreen(GuiContainer gui, int par1, int par2, float par3) {
        for (int i = 0; i < gui.inventorySlots.inventorySlots.size(); ++i) {
            if (gui.inventorySlots.inventorySlots.get(i) instanceof ISlotColor) {
                int color = ((ISlotColor) gui.inventorySlots.inventorySlots.get(i)).getSlotColor();
                if (color != -1) {
                    Slot s = (Slot) gui.inventorySlots.inventorySlots.get(i);
                    int k1 = gui.guiLeft + s.xDisplayPosition;
                    int i1 = gui.guiTop + s.yDisplayPosition;
                    Gui.drawRect(k1, i1, k1 + 16, i1 + 16, color);
                }
            }
        }

    }
      @Hook(
            injectOnExit = true
      )
      public static void drawScreen(GuiContainer container, int par1, int par2, float par3) {
            Slot slot = container.getSlotAtPosition(par1, par2);
            if (slot != null) {
                  FontRenderer font = Minecraft.getMinecraft().fontRenderer;
                  font.drawString("GuiContainer: " + container.getClass().getCanonicalName(), 5, 5, 16777215);
                  font.drawString("SlotIndex: " + slot.getSlotIndex(), 5, 15, 16777215);
                  font.drawString("SlotNumber: " + slot.slotNumber, 5, 25, 16777215);
            }
      }

первый закрашивает слоты, которые наследуют ISlotColor
второй для дебага рисует 3 строки
Когда инвентарь открыт и в активном слоте ничего нет, то всё отлично:
1747000610842.png
Но когда я беру любой предмет в руку, либо надеваю броню, то цвет из красного переходит в тёмнокрасный:
1747000664439.png
По такой же логике "затемняется" дебаг инфа

1747000698878.png1747000713783.png
Также при открытом NEI цвет меняется в зависимости от предметов, которые выдал поиск. Если правильно понимаю, проблема в рендере гуи, но имею 0 навыков в ogl
 
Решение
disableStandardItemLighting исправил проблему


Java:
@Hook(injectOnExit = true)
    public static void drawScreen(GuiContainer gui, int par1, int par2, float par3) {
        RenderHelper.disableStandardItemLighting();
        for (int i = 0; i < gui.inventorySlots.inventorySlots.size(); ++i) {
            if (gui.inventorySlots.inventorySlots.get(i) instanceof ISlotColor) {
                int color = ((ISlotColor) gui.inventorySlots.inventorySlots.get(i)).getSlotColor();
                if (color != -1) {
                    Slot s = (Slot) gui.inventorySlots.inventorySlots.get(i);
                    int k1 = gui.guiLeft + s.xDisplayPosition;
                    int i1 = gui.guiTop + s.yDisplayPosition...
disableStandardItemLighting исправил проблему


Java:
@Hook(injectOnExit = true)
    public static void drawScreen(GuiContainer gui, int par1, int par2, float par3) {
        RenderHelper.disableStandardItemLighting();
        for (int i = 0; i < gui.inventorySlots.inventorySlots.size(); ++i) {
            if (gui.inventorySlots.inventorySlots.get(i) instanceof ISlotColor) {
                int color = ((ISlotColor) gui.inventorySlots.inventorySlots.get(i)).getSlotColor();
                if (color != -1) {
                    Slot s = (Slot) gui.inventorySlots.inventorySlots.get(i);
                    int k1 = gui.guiLeft + s.xDisplayPosition;
                    int i1 = gui.guiTop + s.yDisplayPosition;
                    Gui.drawRect(k1, i1, k1 + 16, i1 + 16, color);
                }
            }
        }
        RenderHelper.enableStandardItemLighting();
    }

@RareScrap, огромное спасибо
 
можно короткое объяснение что именно этот метод делает?
Глобально изменяет стейт opengl'а для последующих операций. Однако точно не знаю почему вообще возникла необходимость в таком техническом решении.
 
Назад
Сверху