RenderOverlay

Версия Minecraft
1.7.10
API
Forge
Подскажите пожалуйста ,каким способом при использовании рендера можно вызвать кнопку на экране ?
 
Поточнее вопрос бы
Делаю рендер картинки на экране ,а вместе с этим рендером картинки я должен рендерить как-то кнопки на экране .Не могу найти способ,как можно сделать кнопки не прибегая к GuiScreen и т.п
 
345
25
94
.Не могу найти способ,как можно сделать кнопки не прибегая к GuiScreen и т.п
Можно отрендерить GuiButton, как это делается - можно в GuiScreen посмотреть, можно сделать свою реализацию кнопок (это даже лучше).
В джаве это происходит через Thread.sleep .
Способ реализаций огромное множество. Сделать свой TaskSheduller нацеленный на главный игровой поток.
 
342
14
113
определенное действие спустя время
Можешь использовать клиентские тики.
Есть соответствующий ивент, в слушателе которого можно завести счётчик и увеличивать его каждый тик. Организовать, возможно, кольцо вычетов.
Потом брать остаток от деления на число, равное длине желаемого промежутка (1 с = 20 тиков) . Если равен нулю, то выполнить действие.
 
345
25
94
Почему это не работает
Если культурно, то это просто плохой код. Эта проверка срабатывает только один раз.

1) Зачем исчислять это в тысячах?
2) Зачем использовать currentTimeMills? В этом случае это не требуется.
3) time копится и не изменяется.
 
1,370
112
241
Делаю рендер картинки на экране ,а вместе с этим рендером картинки я должен рендерить как-то кнопки на экране .Не могу найти способ,как можно сделать кнопки не прибегая к GuiScreen и т.п
Почему ты так боишься GuiScreen? Если ты всё ещё пытаешься сделать оверлей, то рендерить кнопки там бессмысленно. Это приведёт лишь к багам.
И если ты делаешь кнопочку на оверлее, то лучше отказаться от идеи "кнопка это класс кнопки и ничто другое". Создай ещё одну картинку, которая будет убираться при нажатии клавиши или как-то ещё.
Если ты всё ещё достаточно упрям, чтобы использовать кнопку, то
можно в GuiScreen посмотреть, можно сделать свою реализацию кнопок
Теперь о тиках.
Почему это не работает ,оно же должно срабатывать каждый тик
Оно срабатывает каждый тик (ты буквально написал решение в своём вопросе). Зачем тебе сторонние методы расчёта времени, вроде System@currentTimeMills()?
Псевдокод по работе с тиками:
int tick = 0;
public void onTick(Ticker ticker) {
    tick++;
    if(tick % (20*40) == 0) {//20 тиков в 1 секунде => 40 секунд это 20 * 40 тиков
        tick = 0;
        //some code
    }
}
 
Очень хороший совет на самом то деле .Просто GuiScreen когда вызывается,то стопается персонаж пока ты не закроешь этот GUI,а вот рендер - он уже работает так,как я вижу.Рассматривал создания кнопки через картинку ) но вот просто не мог прийти к решению.Как можно проверить находится ли мышь на картинке,и нажато ли на картинку
 
1,370
112
241
Очень хороший совет на самом то деле .Просто GuiScreen когда вызывается,то стопается персонаж пока ты не закроешь этот GUI,а вот рендер - он уже работает так,как я вижу.Рассматривал создания кнопки через картинку ) но вот просто не мог прийти к решению.Как можно проверить находится ли мышь на картинке,и нажато ли на картинку
Игрок всё равно в таком случае будет стопаться - невозможно управлять персонажем.
Сделай лучше вот как: на оверлее рендерится уведомление о том, что хочешь сделать в гуи. По нажатию условного Y, открывается гуи в котором игрок делает что ему заблагорассудится.
На мой взгляд, это наиболее адекватное решение.
Написал в точности как ты - ничего не сработало .Только вместо 40 поставил 4
Псевдокод по работе с тиками:
Никакого Ticker не существует. Я привёл пример того, как выглядит алгоритм в коде. А вот как и где, зачем и что пихать в метод/сам метод решаешь уже ты. В твоём случае вместо Ticker должен быть эвент клиентских тиков, а над методом аннотация @SubscriveEvent.
 
Сверху