OpenGl по клавише

Версия Minecraft
1.19.4
API
Forge
привет, где то неделю-две назад я спрашивал в дискорде про gui в майнкрафте, а точнее как его рисовать. Тогда мне ответили, что нужно юзать OpenGl, я написал код, который по идее должен рисовать квадрат, когда нажимается кнопка, но код выдает ошибку при нажатии кнопки. И так вопрос - Что я сделал не правильно?(код gl я содрал с этой статьи, возможно я что то недопонял)

ClientEvents:
package net.requiem.pathogen.event;

import jdk.jfr.Registered;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.requiem.pathogen.PathOGen;
import net.requiem.pathogen.util.keyBinding;

import javax.swing.text.JTextComponent;

import static org.lwjgl.opengl.GL11.*;

public class ClientEvents {
    @Mod.EventBusSubscriber(modid = PathOGen.MODID, value = Dist.CLIENT)
    public static class ClientForgeEvents {

        @SubscribeEvent
        public static void onKeyRegister(RegisterKeyMappingsEvent event) {
            event.register(keyBinding.OPENGUIKEY);
        }

        @SubscribeEvent
        public static void onKeyInput(InputEvent.Key event) {
            if (keyBinding.OPENGUIKEY.consumeClick())
            {
                glPushMatrix();
                glTranslatef(0, 0, 0);
                glBegin(GL_QUADS);
                glVertex3f(0.0F, 0.0F, 0.0F);
                glVertex3f(0.0F, 0.0F, 1.0F);
                glVertex3f(1.0F, 0.0F, 1.0F);
                glVertex3f(1.0F, 0.0F, 0.0F);
                glEnd();
                glPopMatrix();
            }
        }

    }

    @Mod.EventBusSubscriber(modid = PathOGen.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
    public static class ClientModBusEvents {
        @SubscribeEvent
        public static void onKeyRegister(RegisterKeyMappingsEvent event) {
            event.register(keyBinding.OPENGUIKEY);
        }
    }
}
 
Решение
полный флуд, но у меня андроид уже кучу лет переводит картинки, вероятность того шо яндекс что угодно уникальное в себе содержит крайне мала, и даже думать про то чтобы установить эту, кгм, программу, на чей угодно пк мерзко

Энивей, это опять открытый вопрос из разряда "как построить ракету, я посмотрел видос по сбору бумажных самолётиков", сложно взять и однозначно ответить, учись, ищи, шо

necauqua

когда-то был anti344
Администратор
1,216
27
172
я что то недопонял
Ну немного да, код с OpenGl надо вызывать в определённом месте, при чём когда отрисовывается каждый кадр, даже если бы бред (соре но так и есть) с вызовом его из обработчика кейбинда сработал бы, то видно было бы тот квадрат аж один кадр.

Самое простое что можно сделать это вызывать его в RenderWorldLastEvent (и то там куча заморочек будет, удачи с тем всем разобраться), а в обработчике кейбинда ставить значение переменной, в зависимости от которой в том коде ты будешь через OpenGl рисовать тот крадрат, или нет)
 
1,074
72
372
В поток рендеринга надо код поместить и проверять, нажата ли клавиша в данный момент или нет. Код в потоке рендеринга вызывается на отрисовку каждого кадра, потому чтобы убрать свой нарисованный объект - нужно всего лишь не вызывать код его отрисовки.
 
В поток рендеринга надо код поместить и проверять, нажата ли клавиша в данный момент или нет. Код в потоке рендеринга вызывается на отрисовку каждого кадра, потому чтобы убрать свой нарисованный объект - нужно всего лишь не вызывать код его отрисовки.
Я создал флаг по кнопке, но у меня есть дилемма, я не понимаю, как рисовать через OpenGl? В плане мне надо сразу начинать с glBegin?
 
Последнее редактирование модератором:
1,038
57
229
В плане мне надо сразу начинать с glBegin?
нет, тебе нужно в начале привязать к какому то событию отрисовки. поищи по форуму отрисовка блока например, отрисовка в GameOverlay, RenderWorldLastEvent
в гугле попробуй, вбивай эти слова и смотри что пишут, как они это пишут.
ЧАТ спроси про них.
не понимаешь анг, поставь яндекс браузер и переводи на русский.
 

will0376

Токсичная личность
2,078
55
585
не понимаешь анг, поставь яндекс браузер и переводи на русский.
Самый херовый совет на этом форуме - ставить помойку ради переводчика, коих существует овердохрена.
 
1,038
57
229
коих существует овердохрена.
Сколько из них при этом переводит текст на картинках на сайтах и даже видео?
Ты понимаешь, он даже японо-маму переводит (где яб точно голову сломал).
Тут зависит от нужды, есть ли желание ко всему прочему ещё учить анг. или там китайский или там японский (а именно последние хорошие программисты и часто делятся ништяками бесплатно)
 

will0376

Токсичная личность
2,078
55
585
переводит текст на картинках
Если человек не может перевести банальные фразы с картинки в текстовом переводчике ручками (очень сомневаюсь что туда лепят целые абзацы текста по коду.) - ему нечего делать в программировании. Не говоря уже о том, что вообще не зная языка пытаться лезть сюда является глупой мыслью.
даже японо-маму переводит
Ну и привет ему передавай в таком случае. К текущей теме не особо соотносится =\

По поводу перевода видео - есть такая замечательная вещь (еще со времён обезьян), называется: "повторяй за мной" работает безотказно в 50% случаях (шанс повышается по мере понимания общего процесса работы рассматриваемой вещи)
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
полный флуд, но у меня андроид уже кучу лет переводит картинки, вероятность того шо яндекс что угодно уникальное в себе содержит крайне мала, и даже думать про то чтобы установить эту, кгм, программу, на чей угодно пк мерзко

Энивей, это опять открытый вопрос из разряда "как построить ракету, я посмотрел видос по сбору бумажных самолётиков", сложно взять и однозначно ответить, учись, ищи, шо
 
Сверху