Пргрессбар в gui

Версия Minecraft
1.12.2
37
1
3
Довольно глупый вопрос и довольно простая задача, но вот я уже второй день не могу понять, как это работает. Есть у меня gui, пытаюсь рисовать в нём прогрессбар. Знаю, что рисовать нужно методом drawTexturedModalRect, знаю, какие переменные в этом методом за что отвечают. Могу просто разместить прогрессбар в гуи. Есть уже анимация, которая рисуает прогрессбар сверху вниз. Но вот как нарисовать снизу вверх ума не приложу, сижу перебираю комбинации перемнных, но ничего внятного не получаю. Прошу тапки не кидать.
А, ещё один опциональный вопрос: насколько я знаю, прогрессбар надо синхронизировать с сервером: зачем и как?
Класс Gui:
 private final InventoryPlayer playerInventory;
    private final IInventory tileFurnace;

    public GuiElchemyExtractor(InventoryPlayer playerInv, IInventory furnaceInv)
    {
        super(new ContainerAlchemyExtractor(playerInv, furnaceInv));
        this.playerInventory = playerInv;
        this.tileFurnace = furnaceInv;
    }

    public void drawScreen(int mouseX, int mouseY, float partialTicks)
    {
        this.drawDefaultBackground();
        super.drawScreen(mouseX, mouseY, partialTicks);
        this.renderHoveredToolTip(mouseX, mouseY);
    }

    protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY)
    {
        String s = "Alchemy Furnace";
        this.fontRenderer.drawString(s, 135 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752);
        this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752);
    }

    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
    {
        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(EXTRACTOR_GUI_TEXTURES);
        int i = (this.width - this.xSize) / 2; //Ширина в GUI
        int j = (this.height - this.ySize) / 2; //Высота в GUI
        this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize);

        //Собственно, тут рисуется прогрессбар
        if (TileAlchemyExtractor.isBurning(this.tileFurnace))
        {
            int k = this.getBurnLeftScaled(19); //Так и не допёр, что это
            this.drawTexturedModalRect(i + 29,   j + 51 - k, 176, 64 - k,  7, k+1);
        }

    }

    private int getBurnLeftScaled(int pixels)
    {
        int i = this.tileFurnace.getField(1);

        if (i==0) {
            i = 200;
        }

        return this.tileFurnace.getField(0) * pixels / i;
    }
}
Координаты левого нижнего угла прогрессбара: (177, 64)
Координаты левого нижнего угла слота для прогрессбара: (30, 51)
Аннотация 2021-03-23 000848.png
 
7,099
324
1,510
Добавь поворот на 180 градусов вокруг оси Z
 
7,099
324
1,510
Неа, просто ось Z направлена перпендикулярно экрану и перспектива без искажений
 
7,099
324
1,510
GL11.glRotated(180, 0, 1, 0) типо того
Такое вращение может в итоге сместить точку, в которой будет начинаться полигон, поэтому рекомендую рисовать его в начале координат, тогда после вращения он сместится так:
1616453961310.png

И его можно будет подвинуть при помощи GL11.glTranslated(x,y,z)

1616454067153.png
 
37
1
3
@hohserg1, прошу прощения за назойливость, но всё-же, можно мне "ткнуть", что конкретно надо написать?
Вот я написал перед координатами (это правильно? для drawTexturedModalRect этот метод недоступен).
Что-то явно произошло, ибо исчезли все слоты в gui, но что дальше?
Java:
  int k = this.getBurnLeftScaled(19);
            GL11.glRotated(180, 0, 1, 0);
            this.drawTexturedModalRect(i + 29,   j + 51 - k, 176, 64 - k,  7, k+1);
 
7,099
324
1,510
Чтобы все остальное не улетало куда-то там нужно юзать стэк матриц
Java:
GL11.glPushMatrix(); //сохраняем матрицу в стеке
{
    // следующие две строчки раскоментить, если без них бар рисуется в начале координат и увеличивается вниз
    // GL11.glRotated(180, 0, 1, 0); //поворачиваем
    // GL11.glTranslated(i + 29,   j + 51); //сдвигаем бар туда куда надо
    drawTexturedModalRect(0, 0, 176, 64 - k,  7, k+1); //рисуем бар
}
GL11.glPopMatrix(); //восстанавливаем матрицу из стека
Добейся того, чтобы бар рисовался в верхнем левом углу и рос вниз. После раскоментируй те две строчки
 
37
1
3
Разместил бар в левом верхнем углу и сделал, чтобы рисовался вниз, раскомментировал. Но бар просто исчез, точнее, его нет на экране.

Java:
 GL11.glPushMatrix(); //сохраняем матрицу в стеке
            {
                 GL11.glRotated(180, 0, 1, 0); //поворачиваем
                 GL11.glTranslated(i + 29, 0 , j + 51); //ещё так пробовал (i + 29,  j + 51, 0)
                this.drawTexturedModalRect( 0,  19 - k, 176, 64-k, 7, k + 1);
            }
            GL11.glPopMatrix(); //восстанавливаем матрицу из стека
 
Сверху