Визуальный баг. Подскажите, где искать причину?

Версия Minecraft
1.7.10
API
Forge
215
1
20
Когда в инвентаре беру вещь в руку, появляется у эффекта зелий какой-то белый дефект. Не могу понять, от чего это зависит, баг проявляется с зачарованными вещами и с незачарованными, с модовыми и с ванильными, с описанием у шмотки и без описания.
Видео приложил. Не прикладывается. :(

Может, так? WDfiles — файлообменник бесплатный - загрузить файл
Или так: ice_video_20241004-123259
 
Последнее редактирование:
Вопрос как раз-таки по моддингу. Тут стоит несколько модов, в том числе - мой собственный. Я предполагаю, что я когда-то в коде напортачил, подменяя гуишки ванильные на свои, изменённые, а может - в рендерах. Вот и спрашиваю, с чем может быть связан такой баг.
 
Я убрал все моды, однако баг никуда не исчез.
Поэкспериментировал. Баг есть только для первого эффекта. Как будто в классе InventoryEffectRenderer после прохождения первой итерации перечисления (отрисовки) эффектов в функции func_147044_g ошибка куда-то девается и её уже нет.
Java:
for (Iterator iterator = this.mc.thePlayer.getActivePotionEffects().iterator(); iterator.hasNext(); j += k)
            {
                PotionEffect potioneffect = (PotionEffect)iterator.next();
                Potion potion = Potion.potionTypes[potioneffect.getPotionID()];
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                this.mc.getTextureManager().bindTexture(field_147001_a);
                this.drawTexturedModalRect(i, j, 0, 166, 140, 32);

                if (potion.hasStatusIcon())
                {
                    int l = potion.getStatusIconIndex();
                    this.drawTexturedModalRect(i + 6, j + 7, 0 + l % 8 * 18, 198 + l / 8 * 18, 18, 18);
                }

                potion.renderInventoryEffect(i, j, potioneffect, mc);
                if (!potion.shouldRenderInvText(potioneffect)) continue;
                String s1 = I18n.format(potion.getName(), new Object[0]);

                if (potioneffect.getAmplifier() == 1)
                {
                    s1 = s1 + " " + I18n.format("enchantment.level.2", new Object[0]);
                }
                else if (potioneffect.getAmplifier() == 2)
                {
                    s1 = s1 + " " + I18n.format("enchantment.level.3", new Object[0]);
                }
                else if (potioneffect.getAmplifier() == 3)
                {
                    s1 = s1 + " " + I18n.format("enchantment.level.4", new Object[0]);
                }

                this.fontRendererObj.drawStringWithShadow(s1, i + 10 + 18, j + 6, 16777215);
                String s = Potion.getDurationString(potioneffect);
                this.fontRendererObj.drawStringWithShadow(s, i + 10 + 18, j + 6 + 10, 8355711);
            }
В теле цикла сначала отрисовывается прямоугольник с закругленными краями из inventory.png - и только в первый проход возникает баг. Ниже отрисовывается текст через функцию FontRenderer.drawStringWithShadow, а оттуда идёт перенаправление в drawString, где вызывается метод enableAlpha, в котором есть одна лишь строчка: GL11.glEnable(GL11.GL_ALPHA_TEST);
Я так понимаю, вот он, альфа-тест, который исправляет косяк для эффектов, начиная со второго. Выходит, баг находится в самом Forge? Ведь баг есть и в клиенте на моём сервере, и в Eclipse. Проблема возникает, когда я держу в руке предмет (не блок!) и только если он один, как только два беру - проблема исчезает. Куда смотреть? Я так понимаю, туда, где отрисовывается предмет, который я держу в руке (мышке). Когда он один, рядом с ним не отрисовывается цифра, и поэтому не вызывается FontRenderer.drawStringWithShadow и не включается альфа-тест. В каком классе отрисовывается предмет в курсоре?

Bug.jpg
Блендинг помер или альфатест, ебни хук/миксин в место, где это рисуется, и все
Кто бы научил, да чтоб покороче.)
 
Последнее редактирование:
Старая болячка связанная с ручными вызовами. Код рендера содержит много вызовов GL11.glEnable() и GL11.glDisable() Мододелы частенько после перевода этих "переключателей" забывают вернуть всё как было.

Проще всего, как сказали, в код майна воткнуть переключение режима рендеринга в нужное состояние, чем каждый раз искать проблемный мод.
 
в код майна воткнуть переключение режима рендеринга в нужное состояние
Так проблема в том, что дело вроде как не в модах, а в... не знаю, в Forge 1.7.10?
Где конкретно отрисовывается предмет, который я держу в курсоре, находясь у себя в инвентаре?
 
GuiContainer#drawItemStack()
Точно, спасибо.

Кажется, нашёл. Оттуда я как-то попал в RenderItem.class. И здесь вижу это:
1728224533409.png

Ранее мы говорили о "бленде" или "альфе". И здесь в обоих блоках есть "GL11.glDisable(GL11.GL_BLEND);"
Если предметов в руке больше одной штуки, то бленд выключается и не включается, но если предмет имеет неполную прочность, то и выключается и включается. А точнее - в Eclipse строка закомментирована, но в MCP1.7.10 - нет.

1728224659724.png
Я взял в руку неповреждённый меч (курсор мышки не заскриншотился, но видно слева меч, который я держу) - баг виден.

1728224704559.png
Беру точно такой же, но с повреждением - бага уже нет.

Выходит, дело действительно не в модах. Подскажите, пожалуйста, как проще (то есть способ для недоразвитых недопрограммистов) всего это исправить?
 
Последнее редактирование:
Назад
Сверху