Pane — GUI-библиотека для Fabric, которая меняет правила игры
Каждый, кто хоть раз писал интерфейс для мода в Minecraft, знает, как это мучительно. Ванильный Screen API требует горы шаблонного кода, ломается от версии к версии и заставляет мириться с модальными окнами. Сторонние решения? Они тащат за собой нативные библиотеки, собственные рендереры и вечные конфликты с другими модами за управление курсором. Похоже, разработчики наконец нашли третий путь — и называется он Pane.
Что такое Pane и почему он уникален
Pane — это библиотека для создания графических интерфейсов, разработанная специально для Fabric. Её главная фишка — подход, который напоминает веб-разработку: компонентное дерево, flex-раскладка, двустороннее связывание данных и темизация в стиле CSS. При этом всё это рендерится через тот же DrawContext, который использует сама игра. Никаких нативных библиотек, никаких сторонних рендереров — просто чистый код, который не с чем конфликтовать.
Pane создавалась для редактора Luminary, где она одновременно управляет тремя окнами инструментов, таймлайном ключевых кадров и дизайнером гобо — и всё это работает в сборке из 150 модов рядом с Axiom и Flashback. Это не игрушечная библиотека, а проверенный боевой инструмент, который извлекли из проекта и сделали публичным.
Два режима отображения: оверлеи и экраны
В Pane есть два способа показать интерфейс. Первый — оверлеи: плавающие окна поверх игры, которые не останавливают геймплей. Их можно перетаскивать, менять размер за любой край, прокручивать содержимое — всё это с аппаратными курсорами изменения размера. Одна клавиша освобождает мышь, клик по миру возвращает вас в игру. Именно такой режим делает возможными инструменты в стиле редактора.
Второй способ — классические модальные экраны, собранные из тех же виджетов, но размещённые в ванильном Screen. Они ведут себя как обычные меню: останавливают игру, поддерживают табуляцию и закрываются как положено. Потому что по сути они и есть обычные меню.
Двадцать один виджет для реальных задач
В библиотеке есть всё, что нужно для серьёзных инструментов: кнопки, чекбоксы, слайдеры, выпадающие списки, текстовые поля, числовые поля с перетаскиванием для точной подстройки, пикеры цвета, индикаторы прогресса, вкладки, прокручиваемые контейнеры, таблицы, списки с мультивыбором и перетаскиванием, поля захвата клавиш, контекстные меню, диалоги подтверждения и тосты. И всё это — через единый фабричный паттерн:
Window win = Window.of("My Tool").at(40, 40);
win.add(Label.of("Target"));
win.add(TextInput.of(name));
win.add(Slider.of(speed, 0f, 2f));
win.add(Button.of("Apply").onClick(() -> apply()));
PaneOverlay.addWindow(win);
Связывание данных вместо кучи колбэков
Вместо того чтобы плодить обработчики событий, Pane предлагает один примитив — State<T>, который соединяет виджеты с вашими данными в обе стороны. Привяжите один и тот же state к слайдеру и числовому полю — и они будут синхронизироваться сами. Изменение значения автоматически обновляет все связанные элементы, а подписка на изменения позволяет отправить новое значение на сервер одной строкой кода.
Разметка в стиле HTML и темы в стиле CSS
Большие макеты можно описывать декларативно на языке PML, а стилизовать — с помощью PSS. Селекторы, специфичность, цвета в формате #AARRGGBB — всё это уже знакомо каждому веб-разработчику. Хотите перекрасить кнопку? Просто добавьте правило в стиле button { bg: #292A31; padding: 3; }. Нужно выделить предупреждение? Используйте класс .warn. А для кнопки сохранения — id-селектор с цветом рамки.
Темизация построена на восьми токенах, которые управляют всеми виджетами. Из коробки доступны три темы: Studio (тёмная), Paper (светлая) и Vanilla (сливается с оригинальными меню игры). Своя тема создаётся одной записью, а переключение тёмной и светлой — один вызов.
Headless-архитектура и совместимость версий
Самое интересное — ядро Pane и все виджеты не имеют ни одного импорта из Minecraft. Весь слой виджетов компилируется и проходит тесты на голой JVM. Именно поэтому одни и те же виджеты работают без изменений в разных версиях игры: отличается только тонкий слой рантайма. Это значит, что вы можете скачать Pane и быть уверенными в его стабильности при обновлении Minecraft.
Для тех, кто хочет попробовать библиотеку в деле, важно понимать, как установить Pane в свой проект. Процесс стандартный для Fabric: добавьте зависимость в файл сборки, укажите версию библиотеки и подключите её в entrypoint мода. После этого можно начинать строить интерфейсы — документация на вики Pane подробно описывает каждый шаг, от создания первого окна до сложных многооконных редакторов. А если вы предпочитаете играть, а не разрабатывать, обратите внимание на лаунчер foxygame.net: в его каталоге дополнений можно найти моды, использующие Pane, и установить их буквально в один клик, не заботясь о ручной настройке версий и зависимостей. Лаунчер сам разберётся с совместимостью, а Pane будет работать как надо.
Почему стоит выбрать Pane
Pane — это не просто очередная библиотека, а ответ на многолетнюю боль моддеров. Она объединяет привычный веб-подход с мощью нативного рендеринга Minecraft, предлагает богатый набор виджетов и при этом остаётся лёгкой и предсказуемой. Если вы устали от хрупких экранов, которые ломаются при каждом обновлении, или хотите создавать инструменты уровня профессиональных редакторов, Pane для Minecraft — то, что вам нужно.
Скачать Pane можно с Modrinth, а полное руководство доступно в официальной вики проекта. Начните с малого — создайте окно с парой виджетов, а затем расширяйте функциональность по мере освоения. Уверяю вас: вернуться к старому способу писать интерфейсы уже не захочется.