Плагин pvp kkCabins [1.0]

kkCabins
Краткое описание:
kkCabins - плагин, который добавляет ПВП-кабинки
20
143
Для версий
  1. 1.16.✘
  2. 1.17.✘
  3. 1.18.✘
  4. 1.19.✘
  5. 1.20.✘
  6. 1.21.✘
Java
  1. Java 16
  2. Java 17
  3. Java 18
  4. Java 19
  5. Java 20
  6. Java 21
  7. Java 22
  8. Java 23
  9. Java 25
kkCabins
Плагин PvP-кабинок для Minecraft
Версия 1.0 | 1.16.5 — 1.21.4 | Spigot / Paper / Purpur


1. О плагине
kkCabins создаёт и управляет PvP-кабинками — ограниченными регионами, где игроки вступают в дуэли. После завершения боя победитель получает время на лут и телепортируется на настроенный варп. Плагин полностью на русском языке, все сообщения и цвета настраиваются без перекомпиляции.
  • Выделение регионов встроенным выделителем или WorldEdit/FAWE
  • Создание кабинок и областей дверей командами
  • Автоматическое закрытие/открытие дверей (материал определяется автоматически)
  • Контроль входа/выхода: дуэлянтов невозможно вытащить из кабинки (жемчуг Эндера, плод хоруса, команды, сторонние плагины, эксплойты)
  • PvP только между участниками активной дуэли — атака через границу кабинки запрещена (включая стрелы и снаряды)
  • Обратный отсчёт перед боем и стадия лута с таймером
  • Телепорт победителя на варп кабинки; проигравший возрождается на worldspawn
  • Тестовые бойцы DUMMY (Vindicator или NPC-игрок Citizens) — плагин воспринимает их как игроков
  • GUI управления dummy, авто-респавн, дуэли dummy против dummy
  • Настраиваемые уровни обхода блокировок (bypass)
  • Полная локализация: MiniMessage, HEX-цвета, пользовательская палитра
  • Режим отладки с лог-файлом и уведомлениями в чат
2. Требования и совместимость
  • Сервер: Spigot / Paper / Purpur 1.16.5 — 1.21.4
  • Java для сборки: 17 и новее (байткод — Java 16, совместим с 1.16.5 и новее)
  • Опционально: WorldEdit или FastAsyncWorldEdit — выделение регионов их топором
  • Опционально: Citizens — dummy в виде NPC-игрока; ZNPCs определяется, но без API используется Vindicator
Плагин самодостаточен: библиотека сообщений (MiniMessage/adventure) встроена в JAR и не требует установки.
3. Установка
  1. Скопируйте kkCabins-1.0.jar в папку plugins/ сервера.
  2. Перезапустите сервер.
  3. Сконфигурируйте plugins/kkCabins/config.yml и locale.yml при необходимости (/kkcabins reload применяет изменения).
Важно: данные хранятся в plugins/kkCabins/: config.yml (кабинки, варпы, bypass-уровни), locale.yml (сообщения и цвета), dummies.yml (состояние dummy, создаётся при первом включении отладки), debug.log.


4. Команды
Базовая команда: /kkcabins (право kkcabins.admin, по умолчанию OP). Полная подсказка по TAB-завершению.
/kkcabins help /kkcabins reload /kkcabins selector /kkcabins create cabin <nameID> /kkcabins create door <nameID> /kkcabins delete <cabinID> /kkcabins warp create <warpID> [x y z [yaw pitch]] /kkcabins warp set <warpID> <nameID> /kkcabins warp tp <warpID> /kkcabins debug enable /kkcabins debug notifications <on|off> /kkcabins debug dummy <create|kill|delete|tp|gui|attack|immortality|sethp|setdamage|knockback|autorespawn> <dummyID> [значение] /kkcabins debug disable
  • selector — выдаёт выделитель (см. раздел 5).
  • create cabin — создаёт кабинку из текущего выделения. Дубликат ID запрещён.
  • create door — назначает область дверей кабинке из текущего выделения. Область не может совпадать со всей кабинкой. Материал определяется автоматически (см. раздел 6.2).
  • delete — удаляет кабинку (недоступно во время дуэли).
  • warp create — создаёт варп: без аргументов — на вашей позиции; x y z — с вашими углами обзора; x y z yaw pitch — полная позиция.
  • warp set — привязывает варп кабинке (точка телепорта победителя).
  • warp tp — телепорт к варпу (только игроки).
Выделение одноразовое: после успешного create внутреннее выделение сбрасывается — старый регион нельзя случайно переиспользовать.
5. Выделитель и WorldEdit/FAWE
Выделитель (/kkcabins selector):
  • ЛКМ по блоку — первая точка, ПКМ — вторая.
  • Предмет помечен внутренним ключом (PersistentDataContainer) — переименованный топор из наковальни не сработает.
  • Название и lore настраиваются в locale.yml (секция selector).
WorldEdit / FAWE: если установлен один из этих плагинов, можно создавать кабинки и двери прямо из текущего выделения WorldEdit — внутреннее выделение топором имеет приоритет, выделение WE используется при его отсутствии. Сообщение «Регион взят из выделения WorldEdit/FAWE» выводится только при включённых debug-уведомлениях.
6. Кабинки и дуэли
6.1. Жизненный цикл дуэли
  1. Игроки (и/или dummy) входят в свободную кабинку — приходят уведомления о входе и присоединении соперника.
  2. При достижении минимального числа участников стартует обратный отсчёт (actionbar).
  3. Двери закрываются, кабинка переходит в состояние боя, всё внутри — бойцы.
  4. PvP разрешён только между бойцами этой кабинки. Атака изнутри наружу и снаружи внутрь — запрещена (включая стрелы и снаряды).
  5. Смерть участника = поражение: победитель получает стадию лута (таймер в actionbar), по окончании которой телепортируется на варп кабинки (или спавн основного мира, если варп не задан). Проигравший возрождается на worldspawn.
  6. Двери открываются строго по окончании таймера лута.
Стадия лута — продолжение дуэли: победитель по-прежнему заперт в кабинке, послаблений на вход/выход нет. Двери не открываются раньше срока ни при каких условиях.
6.2. Двери и материал
  • Область дверей задаётся отдельно (create door).
  • Материал определяется автоматически по блокам области дверей: приоритет у дверных блоков (двери, люки), иначе самый частый не-air блок; если область пуста — WHITE_STAINED_GLASS.
  • Определённый материал сохраняется в конфиг как door.material — его можно задать вручную.
  • Сообщение с определённым материалом выводится при включённых debug-уведомлениях; факт закрытия логируется в debug.log.
6.3. Защита от выхода и входа
Выход бойца из дуэли невозможен — работает многоуровневая защита:
  • Отмена телепортов наружу (команды, плагины); жемчуг Эндера и плод хоруса не выводят из дуэли никого, даже с полным bypass (внутри кабинки жемчугом пользоваться можно).
  • Отскок от границы + счётчик нарушений: третья попытка — принудительный телепорт внутрь.
  • Задача удержания (каждые 0.5 с): выбравшегося любым способом бойца возвращает на последнюю позицию внутри.
  • Вертикальный эскейп: позиция на уровне потолка или выше (Y / Y+1 от верхней границы региона) — телепорт в центр кабинки.
  • Дальний эскейп: 1.7+ блока за территорию — телепорт в центр (центр вычисляется по безопасной высоте — без попадания в блоки).
  • Watchdog: если бойцов внутри нет дольше 3 секунд — повторная попытка принудительного возврата; бой завершается только если телепорт физически невозможен.
Вход посторонних в активную дуэль закрыт для всех (в том числе с правом bypass): ходьба — по списку режимов уровня bypass; жемчуг/хорус/команды — по флагам уровня. Посторонним не прилетает отскок — вход просто блокируется. Оказавшийся внутри посторонний выбрасывается на outsideTeleportLocation (если задан).
Разрушение дуэли телепортом: если бойца телепортировали наружу по праву bypass (force_tp_out / force_tp_player / bypass.all), дуэль завершается, а оставшийся игрок автоматически телепортируется на варп кабинки (или спавн).
6.4. Уведомления
Пока идёт дуэль, игроки, не участвующие в ней, не получают уведомлений кабинок (вход/выход/присоединение). Всем видны только предостережения: «кабинка заполнена» и сообщения о блокировке входа/выхода (с защитой от спама — не чаще раза в 1.5 с).
7. Права (permissions)
kkcabins.admin - полный доступ к командам (default: op) kkcabins.bypass - полный обход ограничений (легаси, default: op) kkcabins.bypass.all - полный обход всех ограничений (default: op) kkcabins.bypass.level.0 - уровень обхода 0, настройка в config.yml (default: false) kkcabins.debug.notify - получать debug-уведомления в чат (default: op)
Уровни bypass (kkcabins.bypass.level.X) настраиваются в config.yml; действует высший доступный уровень. bypass.all обходит всё, кроме запрета покидать дуэль жемчугом/хорусом и блокировки PvP через границу.
Замечание: OP по умолчанию имеет все права, включая любые bypass.level.X. Для «чистого» теста ограничений снимите OP или выдайте точечные права через perms-плагин.
8. config.yml
config.yml:
bypass_settings:
  level.0:
    gamemodes: [SPECTATOR]   # вход ходьбой только в этих режимах (пусто = без ограничения)
    ender_pearl: false       # вход жемчугом Эндера запрещён
    chorus_fruit: false      # вход плодом хоруса запрещён
    force_tp_in: true        # можно телепортироваться ВНУТРЬ командами/плагинами
    force_tp_out: true       # можно телепортироваться ИЗНУТРИ НАРУЖУ командами/плагинами
    force_tp_player: false   # нельзя телепортировать ИГРОКА во время дуэли

cabins:
  cabin_1:
    region:                  # регион кабинки
      pos1: {world: world, x: 0, y: 60, z: 0}
      pos2: {world: world, x: 10, y: 70, z: 10}

    door:                    # область дверей
      pos1: ...
      pos2: ...
      material: WHITE_STAINED_GLASS   # авто-определение при create door
 
   players: {min: 2, max: 2}
    timers: {start: 5, end: 10}
  • Ключи в bypass_settings вида level.<число> становятся правами kkcabins.bypass.level.<число>; прочие ключи игнорируются (пишется предупреждение).
  • timers.start — отсчёт до боя (сек), timers.end — стадия лута (сек).
  • Раздел warps хранит варпы (мир, координаты, углы).
9. locale.yml — сообщения, цвета, MiniMessage
Поддерживаются MiniMessage (теги <white>, <#99ff75> и т.д.) и старый синтаксис &-кодов. Палитра по умолчанию — зелёно-изумрудная, обычный текст — белый.
Пользовательские цвета — секция colors над messages:
colors:
colors:
  primary: "#99ff75"    # HEX
  secondary: "<white>"  # minimessage-тег
  accent: "#2aff8a"
  error: "red"          # имя цвета minimessage
Использование в сообщениях:
  • {c:primary}текст{/c:primary} — включить/выключить цвет.
  • {/c} — сбросить все цвета далее.
  • Невалидное значение цвета (например qwdhas) — ошибка в консоль, debug.log и уведомление админам при включённых debug-уведомлениях; цвет заменяется на белый.
Префикс — необязательный: сообщение само решает, ставить ли {prefix}. По умолчанию префикс не ставится в разделах «Кабинки», «Дуэль» и в no_permission.
Плейсхолдеры:{player} {player_display} {enemy} {enemy_display} {duration} {warp} {cabin} {dummy} {value} {id} {x} {y} {z} {material} {prefix}
Форматы вывода (в начале строки): $$title$$ — title, $$subtitle$$ — subtitle, $$actionbar$$ — строка действий. Без тега — обычное сообщение чата.
Справка/kkcabins help редактируется — ключ messages.help (список строк).


10. DUMMY — тестовые бойцы
Dummy доступен только в режиме отладки (/kkcabins debug enable) и плагин расценивает его как игрока: он входит в кабинку, участвует в дуэле, получает и наносит урон, может проиграть.
Реализация (выбирается автоматически):
  • Citizens — NPC-игрок. attack=off — стоит без оружия; attack=on — деревянный меч, сам идёт к цели. Урон по нему нативный.
  • ZNPCs — у плагина нет стороннего API, dummy создаётся как Vindicator (с уведомлением).
  • Без NPC-плагинов — Vindicator. attack=off — AI выключен, без оружия («не поднимет топор»); attack=on — железный топор, сражается сам. HP/урон — из настроек dummy.
Команды:create/kill/delete/tp/gui/attack/immortality/sethp/setdamage/knockback/autorespawn. Значения по умолчанию: attack=off, immortality=off, hp=20, damage=1, knockback=off.
GUI (/kkcabins debug dummy gui <dummyID>): информация о dummy, тумблеры (атака, авто-респавн, бессмертие, отбрасывание), лечение, Max HP ±5, урон ±1, телепорт к себе, убить, удалить.
Авто-респавн: dummy с включённым флагом возрождается на месте смерти после завершения стадии лута и телепорта победителя. В дуэли dummy против dummy погибший не возрождается, даже если флаг включён.
Дуэль двух dummy: считаются игроками, кабинка закрывается, обоим автоматически включается attack (они сражаются друг с другом), после любого исхода — attack=off у обеих.
dummies.yml: создаётся при первом включении отладки, хранит тип/позицию/настройки каждого dummy. Пустой файл удаляется при выключении отладки. После рестарта сервера все dummy респавнятся (если плагин реализации пропал — пересоздаются как Vindicator). Выключение отладки деспавнит dummy, повторное включение — возвращает.
11. Режим отладки
  • debug enable — включает режим, создаёт debug.log, возвращает деспавненных ранее dummy. Режим переживает рестарт сервера (признак — существующий debug.log).
  • debug notifications on|off — уведомления об ошибках и предупреждениях игрокам с правом kkcabins.debug.notify (по умолчанию выключены). Также включает показ служебных сообщений (регион из WorldEdit, материал дверей).
  • debug disable — выключает режим и уведомления, деспавнит dummy (состояние сохраняется), удаляет пустой dummies.yml.
12. API для разработчиков
  • Получение: Bukkit.getServicesManager().load(CabinsAPI.class, plugin) либо Main.getInstance().getApi().
  • События: CabinPlayerEnterEvent, CabinPlayerLeaveEvent, CabinFightStartEvent, CabinFightEndEvent, CabinWinnerDeclaredEvent.
  • Policy-слой: сторонний плагин может переопределять минимум участников и решения об уроне/телепорте.
  • Пакет: com.kk.cabins.api.
13. Известные ограничения
  • При рестарте сервера во время дуэли снимок блоков дверей теряется: после принудительного завершения боя стекло в проёме останется — уберите вручную.
  • Пакетные NPC (ZNPCsPlus и аналоги) не поддерживаются: нет ни реальной сущности для урона, ни стабильного API.
  • Dummy-Vindicator не умеет обходить препятствия (ванильный моб-ИИ) и внутри кабинки возвращается принудительно, как и игроки.
  • Проигравший дуэль всегда возрождается на спавне основного мира, даже если его кровать вне кабинки.


kkCabins 1.0 | Собрано Gradle 9.4.1 | API v1.0.0

Автор

4yro4ka

Еще ресурсы от 4yro4ka

Разрывная Молния | Executable Items
Разрывная Молния | Executable Items
Снежок, разящий молнией в месте и радиусе приземления
Executable Items | Меч "Пожиратель" (фишки в описании)
Executable Items | Меч "Пожиратель" (фишки в описании)
Добавляет меч с вампиризмом и прокачкой его уровня.
ExecutableItems | Посох грома (фишки в описании)
ExecutableItems | Посох грома (фишки в описании)
В данной конфигурации учтено: использование на спавне (запрещено), лимит (можно редактировать)
ExecutableItems | Зелье "Слепая надежда" (фишки в описании)
ExecutableItems | Зелье "Слепая надежда" (фишки в описании)
После употребления данного зелья, врагов в радиусе трижды ударяет очень мощная молния. (Настраеваемо
ВерхНиз