Загрузка данных


Напиши легкий, современный и оптимизированный плагин для сервера Minecraft на базе Paper API (версия 1.21.4, Java 21). Плагин должен отвечать за сохранение и регенерацию (ресет) определенных областей (арен) по команде, со встроенной системой защиты, отсчёта и телепортации игроков.

### ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ:
1. Зависимости и среда:
   - Только Paper API 1.21.4, без внешних зависимостей вроде WorldEdit или WorldGuard.
   - Использовать современные методы Java 21.

2. Инструмент выделения (Wand):
   - Команда `/arena wand` выдает игроку деревянный топорик с кастомным названием (например, "§bАрена-Топорик") и уникальной скрытой меткой в PersistentDataContainer (PDC) с ключом "arena:wand".
   - Левый клик по блоку этим топориком устанавливает Точку 1 (pos1).
   - Правый клик по блоку устанавливает Точку 2 (pos2).
   - Клики должны отменять стандартное поведение (setCancelled(true)).

3. Настройки и Конфиг (config.yml):
   - Создай конфиг по умолчанию со следующими параметрами:
     - `teleport-command`: "spawn %player%" (Команда, выполняемая от имени консоли для выдворения игроков с арены перед ресетом. Поддерживает плейсхолдер %player%).
     - `countdown-seconds`: 5 (Длительность отсчёта в секундах перед началом регенерации).
     - `countdown-message`: "§eРегенерация арены §a%arena% §eначнется через §c%time% §eсек. Вы будете телепортированы!" (Сообщение отсчета в чат игрокам, находящимся на арене).
     - `kick-message`: "§cЭта арена сейчас регенерируется! Доступ временно закрыт." (Сообщение, если игрок пытается зайти на арену во время ресета).

4. Полная блокировка входа на арену (Защита от обхода):
   Арена во время ресета помечается статусом "регенерируется". Должны быть перекрыты ВСЕ пути попадания на арену:
   - **Обычное движение:** Слушать `PlayerMoveEvent`. Если игрок пересекает границу заблокированной арены, отменять событие (`setCancelled(true)`) или откидывать его назад.
   - **Защита от телепортации (Варпы, TP, клики по NPC в FancyNpcs/zNPCs):** Обязательно слушай `PlayerTeleportEvent`. Если целевая локация телепорта (`event.getTo()`) находится внутри кубоида заблокированной арены, плагин должен отменить телепортацию (`event.setCancelled(true)`) и отправить игроку `kick-message`. Это намертво заблокирует проход через любые сторонние плагины на NPC, порталы и команды.

5. Логика процесса ресета (`/arena reset [название]`):
   - **Шаг 1 (Блокировка):** Арена получает статус блокировки.
   - **Шаг 2 (Обратный отсчёт):** Запускается таймер (`countdown-seconds`). Каждую секунду игрокам внутри этой арены пишется сообщение `countdown-message`.
   - **Шаг 3 (Телепортация игроков):** На 0 секунде для всех игроков внутри арены консоль выполняет команду `teleport-command` (например, `/spawn [Ник]`).
   - **Шаг 4 (Регенерация блоков и очистка):** 
     - Все блоки заменяются на сохраненные в шаблоне (плавно частями через BukkitRunnable, чтобы сервер не зависал).
     - Удаляются все лежащие на земле предметы (дроп) и стрелы в этой зоне.
   - **Шаг 5 (Разблокировка):** Снятие блокировки, игроки снова могут заходить и телепортироваться на арену.

6. Команды администратора (доступ только для OP или права `arena.admin`):
   - `/arena wand` — получить топорик.
   - `/arena save [название]` — сохранить выделенный кубоид (включая BlockData и TileState сундуков) в `plugins/ArenaReset/arenas/[название].yml`.
   - `/arena reset [название]` — запуск процесса регенерации.
   - `/arena reload` — перезагрузить config.yml.

Предоставь чистую структуру проекта на Java 21: Главный класс, менеджер арен (ArenaManager), обработчик команд, слушатель событий (EventListener, включающий отслеживание перемещения и телепортации игроков) и файл plugin.yml. Добавь комментарии на русском языке.