Создание и настройка меню
Создание меню в PlayerProfile — это творческий процесс. Вы можете контролировать каждый аспект отображения, чтобы создать уникальный профиль для игроков вашего сервера. Все файлы меню находятся в папке plugins/PlayerProfile/menus/.
Основы: title-states, layout и icons
Каждый файл меню состоит из ключевых частей: настройки заголовка (title и title-states), layout (макет) и icons (иконки).
title&title-states: Задает стандартное название меню и позволяет динамически изменять его на основе условий (например, одно название для владельца, другое для админа).layout: Это визуальное представление вашего меню. Вы "рисуете" инвентарь, используя символы. Каждый символ — это ссылка на иконку.icons: Здесь вы описываете, чем является каждый символ изlayout: какой предмет, какое название, какие действия он выполняет.
Пример меню с динамическим заголовком:
# menus/default.yml
title: 'Профиль игрока %owner%'
# Опционально: Динамические заголовки на основе условий
title-states:
owner_title:
conditions:
- 'is_owner'
title: '&aВаш профиль'
admin_title:
conditions:
- 'is_viewer'
- 'has permission: playerprofile.admin'
title: '&cАдмин-режим: %owner%'
rows: 3
layout:
- '######### '
- '#p#h#c#l#b'
- '#########'
icons:
'#': # Описание символа '#'
material: BLACK_STAINED_GLASS_PANE
display: ' '
'p': # Описание символа 'p'
type: STATUS
# ... и так далееОписание иконки (icons)
Каждый символ в секции icons может иметь множество параметров.
Основные параметры предмета
| Параметр | Тип | Описание |
|---|---|---|
material | строка | Материал предмета из Minecraft (например, DIAMOND_SWORD). |
item-adder | строка | (Интеграция) ID предмета из ItemsAdder (например, my_items:cool_sword). Заменяет material. |
nexo | строка | (Интеграция) ID предмета из Nexo. Заменяет material. |
craft-engine | строка | (Интеграция) ID предмета из CraftEngine (например namespace:id). Заменяет material. |
item-model | строка | Устанавливает модель компонента (1.20.5+ / 1.21) по ключу (например, custom:cool_sword). |
display | строка | Название предмета. Поддерживает цветовые коды & и плейсхолдеры. |
lore | список строк | Описание предмета. Каждая строка — новый элемент списка. |
custom-model-data | число | Устанавливает CustomModelData для предмета. |
glow | true/false | Если true, предмет будет светиться (эффект зачарования). |
unbreakable | true/false | Если true, предмет будет неразрушимым. |
texture | строка | URL или Base64-текстура для головы игрока. Используется, только если material — PLAYER_HEAD. |
Кастомные шрифты и иконки
Плагин поддерживает отображение кастомных изображений в шрифте (в названиях, лоре и заголовках). Для CraftEngine используйте теги <image:namespace:id> или :namespace:id:. Для Nexo/ItemsAdder — их стандартные плейсхолдеры (типа :glyph_name:).
Функциональные параметры
| Параметр | Тип | Описание |
|---|---|---|
type | строка | Ключевой параметр! Определяет тип слота. Например, HELMET автоматически покажет шлем игрока, а STATUS — его статус. Подробнее о типах... |
actions | список строк | Список действий, которые выполнятся при клике на предмет. Подробнее о действиях... |
permission | строка | Право, которое должен иметь игрок, чтобы видеть этот предмет. Если права нет, слот будет пустым. |
action-executor | строка | Кто может выполнить действие: OWNER (только владелец профиля), VIEWER (только тот, кто смотрит), BOTH (оба). По умолчанию BOTH. |
Состояния и Условия (states & conditions)
Это самая мощная функция плагина. Она позволяет одному символу (icons) выглядеть и вести себя по-разному в зависимости от условий.
Представьте иконку 's'. Вы можете сделать так, чтобы:
- Если профиль смотрит владелец,
's'будет выглядеть как "Настройки". - Если профиль смотрит администратор,
's'будет выглядеть как "Админ-инструменты". - Во всех остальных случаях слот
's'будет пустым.
Как это работает?
Внутри описания иконки вы создаете секцию states. Внутри states вы перечисляете несколько состояний (state1, state2 и т.д.). Каждое состояние — это, по сути, полноценное описание предмета со своим material, display и actions.
Плагин проверяет состояния по порядку (сверху вниз). Первое состояние, у которого выполняются все conditions (условия), будет отображено.
Если у состояния нет условий, оно сработает всегда (если до него не дошло дело).
Список доступных условий (conditions)
| Условие | Описание |
|---|---|
is_owner | true, если тот, кто смотрит профиль, является его владельцем. |
is_viewer | true, если тот, кто смотрит, не является владельцем. |
has permission: <право> | true, если у смотрящего есть указанное право (например, playerprofile.admin). |
lacks permission: <право> | true, если у смотрящего нет указанного права. |
placeholder '...' ... '...' | (PAPI) Сравнивает значение плейсхолдера. Плейсхолдеры парсятся от имени владельца профиля. |
Операторы для плейсхолдеров:
equalsили==(равно)notequalsили!=(не равно)contains(содержит текст)is_greater_thanили>(больше чем, для чисел)is_less_thanили<(меньше чем)is_greater_or_equalили>=(больше или равно)is_less_or_equalили<=(меньше или равно)
Полный пример иконки с состояниями
Давайте создадим иконку s (настройки), которая будет разной для владельца, админа и обычного игрока.
# ...внутри icons:
's':
type: DEFAULT # Тип по умолчанию
states:
# --- Состояние 1: для владельца профиля ---
state1:
conditions: # Условие:
- 'is_owner'
material: COMPARATOR
display: '&a⚙ Настройки профиля'
lore:
- '&7Нажмите, чтобы изменить'
- '&7настройки вашего профиля.'
actions:
- 'player: profile-settings' # Откроет другое меню (пример)
# --- Состояние 2: для админа, который смотрит чужой профиль ---
state2:
conditions: # Условия (должны выполниться оба):
- 'is_viewer'
- 'has permission: playerprofile.admin'
material: REDSTONE
display: '&c⚙ Админ-инструменты'
lore:
- '&7Управление профилем игрока %owner%.'
actions:
- 'player: profile-admin %owner%' # Откроет админ-меню (пример)
# --- Состояние 3: Пустой слот для всех остальных ---
# У этого состояния нет условий, поэтому оно сработает,
# если state1 и state2 не подошли.
state3:
material: AIRВажно!
Порядок состояний имеет значение! Всегда размещайте более конкретные условия (например, для админа) выше, чем более общие.