- Для версий
- 1.16.✘
- 1.17.✘
- 1.18.✘
- 1.19.✘
- 1.20.✘
- 1.21.✘
kkCabins
Плагин PvP-кабинок для Minecraft
Версия 1.0 | 1.16.5 — 1.21.4 | Spigot / Paper / Purpur
Плагин 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-цвета, пользовательская палитра
- Режим отладки с лог-файлом и уведомлениями в чат
- Сервер: Spigot / Paper / Purpur 1.16.5 — 1.21.4
- Java для сборки: 17 и новее (байткод — Java 16, совместим с 1.16.5 и новее)
- Опционально: WorldEdit или FastAsyncWorldEdit — выделение регионов их топором
- Опционально: Citizens — dummy в виде NPC-игрока; ZNPCs определяется, но без API используется Vindicator
3. Установка
- Скопируйте kkCabins-1.0.jar в папку plugins/ сервера.
- Перезапустите сервер.
- Сконфигурируйте plugins/kkCabins/config.yml и locale.yml при необходимости (/kkcabins reload применяет изменения).
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 — телепорт к варпу (только игроки).
5. Выделитель и WorldEdit/FAWE
Выделитель (/kkcabins selector):
- ЛКМ по блоку — первая точка, ПКМ — вторая.
- Предмет помечен внутренним ключом (PersistentDataContainer) — переименованный топор из наковальни не сработает.
- Название и lore настраиваются в locale.yml (секция selector).
6. Кабинки и дуэли
6.1. Жизненный цикл дуэли
- Игроки (и/или dummy) входят в свободную кабинку — приходят уведомления о входе и присоединении соперника.
- При достижении минимального числа участников стартует обратный отсчёт (actionbar).
- Двери закрываются, кабинка переходит в состояние боя, всё внутри — бойцы.
- PvP разрешён только между бойцами этой кабинки. Атака изнутри наружу и снаружи внутрь — запрещена (включая стрелы и снаряды).
- Смерть участника = поражение: победитель получает стадию лута (таймер в actionbar), по окончании которой телепортируется на варп кабинки (или спавн основного мира, если варп не задан). Проигравший возрождается на worldspawn.
- Двери открываются строго по окончании таймера лута.
6.2. Двери и материал
- Область дверей задаётся отдельно (create door).
- Материал определяется автоматически по блокам области дверей: приоритет у дверных блоков (двери, люки), иначе самый частый не-air блок; если область пуста — WHITE_STAINED_GLASS.
- Определённый материал сохраняется в конфиг как door.material — его можно задать вручную.
- Сообщение с определённым материалом выводится при включённых debug-уведомлениях; факт закрытия логируется в debug.log.
Выход бойца из дуэли невозможен — работает многоуровневая защита:
- Отмена телепортов наружу (команды, плагины); жемчуг Эндера и плод хоруса не выводят из дуэли никого, даже с полным bypass (внутри кабинки жемчугом пользоваться можно).
- Отскок от границы + счётчик нарушений: третья попытка — принудительный телепорт внутрь.
- Задача удержания (каждые 0.5 с): выбравшегося любым способом бойца возвращает на последнюю позицию внутри.
- Вертикальный эскейп: позиция на уровне потолка или выше (Y / Y+1 от верхней границы региона) — телепорт в центр кабинки.
- Дальний эскейп: 1.7+ блока за территорию — телепорт в центр (центр вычисляется по безопасной высоте — без попадания в блоки).
- Watchdog: если бойцов внутри нет дольше 3 секунд — повторная попытка принудительного возврата; бой завершается только если телепорт физически невозможен.
Разрушение дуэли телепортом: если бойца телепортировали наружу по праву 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 через границу.
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 хранит варпы (мир, координаты, углы).
Поддерживаются 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-уведомлениях; цвет заменяется на белый.
Плейсхолдеры:{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.
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.
- Получение: Bukkit.getServicesManager().load(CabinsAPI.class, plugin) либо Main.getInstance().getApi().
- События: CabinPlayerEnterEvent, CabinPlayerLeaveEvent, CabinFightStartEvent, CabinFightEndEvent, CabinWinnerDeclaredEvent.
- Policy-слой: сторонний плагин может переопределять минимум участников и решения об уроне/телепорте.
- Пакет: com.kk.cabins.api.
- При рестарте сервера во время дуэли снимок блоков дверей теряется: после принудительного завершения боя стекло в проёме останется — уберите вручную.
- Пакетные NPC (ZNPCsPlus и аналоги) не поддерживаются: нет ни реальной сущности для урона, ни стабильного API.
- Dummy-Vindicator не умеет обходить препятствия (ванильный моб-ИИ) и внутри кабинки возвращается принудительно, как и игроки.
- Проигравший дуэль всегда возрождается на спавне основного мира, даже если его кровать вне кабинки.
kkCabins 1.0 | Собрано Gradle 9.4.1 | API v1.0.0