Как работает текстурное GUI
Меню-сундук показывает свой заголовок в левом верхнем углу. Заголовок – это текст, а текст может содержать символы из серверного ресурспака. ItemsAdder умеет превращать любой PNG в такой символ – он называется font image. Вставь большой font image в заголовок, и клиент нарисует его поверх экрана сундука.
Чтобы всё совпало, нужны ещё две вещи. Отрицательный отступ (offset) сдвигает курсор влево перед картинкой, чтобы она начиналась от левого края сундука, а не после отступа заголовка. Параметр y_position у font image двигает его вверх или вниз, пока он не накроет всё меню.
Слоты остаются обычными слотами. Там, где на твоей картинке нарисована кнопка, в меню стоит пустой кликабельный слот с material: air и своими действиями при клике.
Что тебе понадобится
- DeluxeMenus и PlaceholderAPI на сервере Spigot или Paper.
- ItemsAdder, который собирает ресурспак и даёт плейсхолдеры
%img_…%. - Рабочая раздача ресурспака, чтобы игроки действительно скачивали пак (ItemsAdder предлагает self-hosting и другие варианты хостинга).
- Фоновый PNG. Minecraft не разрешает глифы шрифта больше 256×256 пикселей, так что картинка должна в это укладываться.
Шаг 1: сделай фоновую картинку
Нарисуй меню в конструкторе GUI: выбери число рядов, тему или шаблон и нарисуй большие кнопки на несколько слотов. В экспорте выбери ItemsAdder, укажи свой namespace (например, mymenus) и имя меню (например, shop).
Экспортированный PNG шириной 256 пикселей. Высота зависит от числа рядов: от 164 пикселей для одного ряда до 254 пикселей для шести. Дополнительное место вокруг сундука позволяет рамкам и украшениям выступать за обычный контур меню.
Шаг 2: зарегистрируй font image в ItemsAdder
Скопируй PNG в свой namespace и добавь запись font_images. Вот что конструктор GUI экспортирует для меню на шесть рядов:
info:
namespace: mymenus
font_images:
gui_shop:
path: gui/shop
show_in_gui: false
suggest_in_command: false
scale_ratio: 254
y_position: 45Сама картинка кладётся в plugins/ItemsAdder/contents/mymenus/resourcepack/assets/mymenus/textures/gui/shop.png.
scale_ratio– высота, с которой рисуется картинка. Укажи реальную высоту PNG в пикселях, чтобы ничего не растягивалось.y_positionсдвигает картинку по вертикали. ItemsAdder требует, чтобы значение было меньше или равноscale_ratio, потому что больше игра не позволяет.show_in_gui: falseубирает фон из списка эмодзи ItemsAdder.
Шаг 3: вставь картинку в заголовок меню DeluxeMenus
DeluxeMenus обрабатывает плейсхолдеры PlaceholderAPI в menu_title. ItemsAdder даёт %img_<name>% для картинки и %img_offset_<pixels>% для пустого места, которое может быть отрицательным.
menu_title: '&f%img_offset_-48%%img_gui_shop%%img_offset_-201%&8Shop'
open_command: 'shop'
register_command: true
size: 54
items:
button_1_buy:
material: air
slots: [10, 11, 19, 20]
priority: 1
click_commands:
- '[openguimenu] shop_buy'&fв начале сохраняет настоящие цвета картинки. Без него картинка окрашивается в цвет заголовка.%img_offset_-48%сдвигает курсор на 48 пикселей влево перед картинкой. Конструктор GUI использует это значение для своего холста: 8 пикселей на отступ заголовка сундука плюс 40 пикселей поля, которое он добавляет с каждой стороны.%img_gui_shop%– это сам фон.- Второй отступ возвращает курсор назад, чтобы
&8Shopписался поверх картинки там, где и положено быть заголовку. Его значение зависит от ширины твоей картинки; конструктор GUI считает его за тебя.
Если ты впечатаешь заголовок в картинку в конструкторе GUI, заголовок закончится после плейсхолдера фона, и второй отступ не нужен.
Шаг 4: зарегистрируй меню и пересобери пак
DeluxeMenus загружает только те меню, что перечислены в его config.yml:
gui_menus:
shop:
file: shop.yml- Выполни
/iazip, чтобы ItemsAdder пересобрал ресурспак с новой картинкой. - Выполни
/dm reload. Открой меню один раз через/dm open shop, чтобы проверить его. register_command: trueрегистрирует/shopкак настоящую команду, но только при запуске сервера. После добавления нового меню один раз перезапусти сервер.- Перезайди, прими ресурспак и открой меню.
Типичные ошибки и их решение
| Что ты видишь | Причина и решение |
|---|---|
В заголовке текстом написано %img_gui_shop% | Нет PlaceholderAPI или имя указано неверно. Плейсхолдер использует имя font image из конфига, без namespace. |
| Пустой квадрат или не тот символ вместо картинки | Пак не пересобран или у игрока старый пак. Выполни /iazip и перезайди. |
| У некоторых игроков картинки нет вообще | Они отклонили серверный ресурспак. Проверь хостинг пака и настройки сервера в клиенте. |
| Картинка смещена | Первый отступ или y_position не совпадает с полями твоего PNG. Экспортируй заново, а не подбирай числа наугад. |
| Картинка серая или темнее, чем нужно | Перед картинкой не хватает &f. |
/shop – неизвестная команда | Сервер не перезапускали после добавления меню, или меню нет в config.yml. |
| ItemsAdder не принимает font image | y_position больше scale_ratio, или картинка больше 256×256. |