- 30
- 1
- 0
Всем доброго времени суток. Делаю приватный мод на политику для своего сервера. Функционал по мере разработки на столько возрос, что простых команд в чате начинает не хватать для полноценного взаимодействия с полит модом. Во-первых это не настолько удобно, насколько хотелось бы, во-вторых - в некоторых моментах сильно бы пригодились визуальные плюшки, которые не удастся реализовать используя одни лишь команды.
Решил я значит накодить интерфейс для нужд полит мода. До этого я не сильно углублялся в графическую часть игры, делал в основном серверные моды. Хотя прекрасно шарю за OpenGL. Изучил исходники Gui, GuiScreen и т.п., и как с ними вообще работать. Дело это мне показалось муторным (хоть и лёгким).
Мне нужно было какое-то готовое решение для таких целей, чтоб подключить, написать пару строк и оно работало без танцев с бубном, так как писать еще дофига всего, а к ноябрю надо успеть релизнуть этот мод.
Листаю форум, и натыкаюсь на сей чудо GExt - The layout engine for Minecraft
GExt - то самое решение, которого мне так не хватало. Модульность, простота, кроссплатформенность и много чего еще. В общем, то что доктор прописал!
Делаю всё по инструкции. Расширяю ExtendedGuiScreen, пишу в инициализации GUI (в статье это init(), но там походу инфа устарела, так как этот движок успел здорово так обновиться, и теперь родительский класс требует оверрайдить initLayout(), но отличается вроде только названием) следующий код:
Запускаю игру, открываю GUI привязанной клавишей, жму по кнопке и... Ничего не происходит! Никакой "click" в консоль не выводится. Как так?
Бегу сверять с инструкцией. Вроде всё правильно, а не работает. Скопипастил от туда готовый код
который по идее, должен после нажатия заменить надпись "SecondaryText" на "PrimaryText". Даже он отказывается работать. Что я делаю не так? Помогите плиз.
Мне этот движок категорически важен, по этому просьба не писать "кодь свой интерфейс, а то ишь, ленивая задница" и всё в этом роде.
Решил я значит накодить интерфейс для нужд полит мода. До этого я не сильно углублялся в графическую часть игры, делал в основном серверные моды. Хотя прекрасно шарю за OpenGL. Изучил исходники Gui, GuiScreen и т.п., и как с ними вообще работать. Дело это мне показалось муторным (хоть и лёгким).
Мне нужно было какое-то готовое решение для таких целей, чтоб подключить, написать пару строк и оно работало без танцев с бубном, так как писать еще дофига всего, а к ноябрю надо успеть релизнуть этот мод.
Листаю форум, и натыкаюсь на сей чудо GExt - The layout engine for Minecraft
GExt - то самое решение, которого мне так не хватало. Модульность, простота, кроссплатформенность и много чего еще. В общем, то что доктор прописал!
Делаю всё по инструкции. Расширяю ExtendedGuiScreen, пишу в инициализации GUI (в статье это init(), но там походу инфа устарела, так как этот движок успел здорово так обновиться, и теперь родительский класс требует оверрайдить initLayout(), но отличается вроде только названием) следующий код:
GuiMainMenu.java:
public GButton buttonProfile = Graphics
.button()
.label(Graphics
.label()
.text("Профиль", 0xffffff)
.scale(1.0f)
.setCentered()
.build())
.action(button -> {
System.out.println("click"); //проверка кнопки на работоспособность
})
.size(profileButtonSize.width, profileButtonSize.height)
.placeAt(profileButtonPos.width, profileButtonPos.height)
.alignment(Alignment.LEFT, Alignment.YCENTER)
.padding(50, 50)
.build();
@Override
public void initLayout() {
final GList<IGraphicsComponent> labels = Graphics.list().size(containerSize.width, containerSize.height).alignment(Alignment.XCENTER, Alignment.YCENTER).build();
labels.addComponent(100, Graphics.label().text("FerrumPolit v"+ Core.VERSION, 0xFFFFFF).scale(1.0f).alignment(Alignment.XCENTER, Alignment.TOP).padding(0, 40).build());
labels.addComponent(100, buttonProfile);
labels.addComponent(Graphics.background().size(containerSize.width, containerSize.height).build());
this.add(labels);
}
Запускаю игру, открываю GUI привязанной клавишей, жму по кнопке и... Ничего не происходит! Никакой "click" в консоль не выводится. Как так?
Бегу сверять с инструкцией. Вроде всё правильно, а не работает. Скопипастил от туда готовый код
код кнопошки из статьи:
this.add(100, Graphics.button()
.label(Graphics.label().text("Primary text", 0xffffff).scale(2.0F).setCentered().build())
.action(button -> {
if (button.getLabel().getText().startsWith("P")) {
button.getLabel().setText("SecondaryText");
} else {
button.getLabel().setText("PrimaryText");
}
})
.size(150, 60)
.placeAt(800, 400)
.build());
Мне этот движок категорически важен, по этому просьба не писать "кодь свой интерфейс, а то ишь, ленивая задница" и всё в этом роде.