Перейти к содержимому

Свой фон GUI в DeluxeMenus с ItemsAdder

В Minecraft нет настройки для фоновой картинки меню, и всё же на многих серверах меню-сундуки выглядят как отдельные экраны. Секрет – font image в заголовке меню: ItemsAdder превращает твой PNG в символ, а отрицательные отступы сдвигают этот символ поверх сундука. В этом гайде мы шаг за шагом настроим это для DeluxeMenus.

Обновлено:

Как работает текстурное 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 экспортирует для меню на шесть рядов:

plugins/ItemsAdder/contents/mymenus/configs/gui_shop.yml
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>% для пустого места, которое может быть отрицательным.

plugins/DeluxeMenus/gui_menus/shop.yml
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'
  1. &f в начале сохраняет настоящие цвета картинки. Без него картинка окрашивается в цвет заголовка.
  2. %img_offset_-48% сдвигает курсор на 48 пикселей влево перед картинкой. Конструктор GUI использует это значение для своего холста: 8 пикселей на отступ заголовка сундука плюс 40 пикселей поля, которое он добавляет с каждой стороны.
  3. %img_gui_shop% – это сам фон.
  4. Второй отступ возвращает курсор назад, чтобы &8Shop писался поверх картинки там, где и положено быть заголовку. Его значение зависит от ширины твоей картинки; конструктор GUI считает его за тебя.

Если ты впечатаешь заголовок в картинку в конструкторе GUI, заголовок закончится после плейсхолдера фона, и второй отступ не нужен.

Шаг 4: зарегистрируй меню и пересобери пак

DeluxeMenus загружает только те меню, что перечислены в его config.yml:

plugins/DeluxeMenus/config.yml
gui_menus:
  shop:
    file: shop.yml
  1. Выполни /iazip, чтобы ItemsAdder пересобрал ресурспак с новой картинкой.
  2. Выполни /dm reload. Открой меню один раз через /dm open shop, чтобы проверить его.
  3. register_command: true регистрирует /shop как настоящую команду, но только при запуске сервера. После добавления нового меню один раз перезапусти сервер.
  4. Перезайди, прими ресурспак и открой меню.

Типичные ошибки и их решение

Что ты видишьПричина и решение
В заголовке текстом написано %img_gui_shop%Нет PlaceholderAPI или имя указано неверно. Плейсхолдер использует имя font image из конфига, без namespace.
Пустой квадрат или не тот символ вместо картинкиПак не пересобран или у игрока старый пак. Выполни /iazip и перезайди.
У некоторых игроков картинки нет вообщеОни отклонили серверный ресурспак. Проверь хостинг пака и настройки сервера в клиенте.
Картинка смещенаПервый отступ или y_position не совпадает с полями твоего PNG. Экспортируй заново, а не подбирай числа наугад.
Картинка серая или темнее, чем нужноПеред картинкой не хватает &f.
/shop – неизвестная командаСервер не перезапускали после добавления меню, или меню нет в config.yml.
ItemsAdder не принимает font imagey_position больше scale_ratio, или картинка больше 256×256.

Частые вопросы

Нужно ли игрокам что-то скачивать для своего фона GUI?

Да, серверный ресурспак, который собирает ItemsAdder. Без него в заголовке будет квадрат-заглушка или ничего. ItemsAdder может автоматически отправлять пак при входе игрока.

Почему в заголовке DeluxeMenus текстом написано %img_…%?

Плейсхолдер не подставляется. Проверь, что PlaceholderAPI установлен, ItemsAdder загружен, а имя после img_ точно совпадает с именем font image в твоём конфиге.

Можно использовать тот же фон для меню с меньшим числом рядов?

Только если картинка совпадает по рядам. Сундук на три ряда ниже, чем на шесть, поэтому ему нужен свой PNG и свой scale_ratio. Конструктор GUI экспортирует правильную высоту для любого числа рядов.

Это работает без ItemsAdder?

Тот же трюк работает с глифами Nexo или Oraxen. Совсем без плагина ресурспака можно собрать аккуратное меню из цветных стеклянных панелей – конструктор GUI экспортирует его с вариантом «Нет».

Источники

Сверено с официальной документацией: