Плагин Механика WorldAccessBlocker [0.8.0]

Version 0.8.0
Added
  • New /wab status [player|uuid] command to view restriction status.
  • PlaceholderAPI support (soft dependency).
  • New placeholders:
- %wab_nether_blocked%
- %wab_end_blocked%
- %wab_elytra_blocked%
- %wab_time_left_nether%
- %wab_time_left_end%
- %wab_time_left_elytra%
  • Per-feature/custom-world fallback spawn configuration (fallback-spawns).
  • Unit tests for core restriction logic (ConfigManagerTest).
Changed
  • /wab bypass and /wab remove now support offline players and UUIDs.
  • Bypass expiration timestamps now use configured plugin timezone.
  • Bypass persistence optimized with delayed save scheduling to reduce disk writes.
  • Updated README with new commands, placeholders, and config examples.
Fixed
  • Fixed recurring behavior: periods: [] now correctly means "always blocked".
  • Fixed date parsing with configured timezone for restriction-date.
  • Fixed Elytra equip checks (inventory edge cases and null-safety).
  • Fixed potential crash in portal creation handling when block list is empty.
  • Fixed teleport fallback handling when blocking Nether/End/custom world access.
  • Fixed broken README encoding.
Notes
- PlaceholderAPI integration is optional and auto-enabled when the plugin is installed.
Добавлена полноценная поддержка расписаний — теперь можно задавать точные временные рамки по дням недели. Например, указать, что функция активна только по воскресеньям с 15:00 до 17:00.

Ключевые возможности:
  • Гибкая настройка периодов (recurring.periods): выбор дней, времени или указание «весь день».
  • Умные подсказки для пользователей: система автоматически формирует понятные сообщения вроде «доступно по выходным с 10:00 до 22:00, а по понедельникам — весь день».
  • Поддержка расписаний для пользовательских миров.

Пример из нового config.yml:
YAML:
# ===================================================================
# Nether
# ===================================================================
nether:
  disable: true
  # Если recurring НЕТ — используется эта дата (до какого момента заблокировано)
  restriction-date: "2025-03-10 00:00:00"
  disable-portal-creation: true
  disable-teleportation: true

  # НОВОЕ: расписание по дням и времени
  # Если этот блок есть — restriction-date ИГНОРИРУЕТСЯ
  recurring:
    periods:
      # Пример 1: только по воскресеньям с 15:00 до 17:00
      - days: [SUNDAY]
        start-time: "15:00"
        end-time: "17:00"

      # Пример 2: по выходным весь день
      - days: [SATURDAY, SUNDAY]

      # Пример 3: каждый понедельник с 18:00 до 23:59
      - days: [MONDAY]
        start-time: "18:00"
        end-time: "23:59"
Исправил телепортацию в запрещенные миры с помощью эндер-жемчуга, также добавил больше проверок на поджигание портала в ад разными способами. Уменьшил задержку телепортации игрока из запрещенного мира.

Changelog для WorldAccessBlocker v0.5​

Обзор​

Версия 0.5 представляет собой значительное обновление плагина WorldAccessBlocker, добавляющее поддержку ограничений для кастомных миров, улучшенную блокировку элитр, исправление обхода для создания порталов в Незер, а также локализацию и управление обходами. Все изменения направлены на повышение надёжности, удобства и совместимости с серверами, включая Folia, на Minecraft 1.21.x.

Новые функции​

  1. Ограничения для кастомных миров:
    • Добавлена поддержка блокировки доступа к кастомным мирам через раздел custom-worlds в config.yml.
    • Игроки, пытающиеся войти в ограниченный кастомный мир, телепортируются в точку спавна оверворлда с сообщением custom_world_blocked.
    • Пример конфигурации:
    • Код:
      custom-worlds:
        my_custom_world:
          disable: true
      restriction-date: "2025-12-31 00:00:00"
    • Обходы для кастомных миров поддерживаются через команду /wab bypass <игрок> <имя_мира> <длительность>.
  2. Автоматическое снятие элитр:
    • Если игрок имеет надетые элитры в слоте нагрудника при активных ограничениях (elytra.disable-equip: true), элитры автоматически снимаются каждую секунду (20 тиков).
    • Элитры перемещаются в первый свободный слот инвентаря. Если инвентарь полон (36 занятых слотов), они выбрасываются на землю рядом с игроком.
    • Игрок получает сообщение elytra_equip_blocked (например, "Надевание элитр заблокировано еще на X дней и Y часов" при language: ru).
  3. Локализация уведомлений об обходе:
    • Добавлены сообщения bypass_granted и bypass_removed в файлы en.yml и ru.yml для уведомлений о предоставлении и снятии обхода.
    • Примеры (для language: ru):
      • bypass_granted: "Обход предоставлен для %s игроку %s до %s."
      • bypass_removed: "Обход для %s снят для игрока %s."
    • Сообщения включают имя функции, имя игрока и, для bypass_granted, время окончания обхода.
  4. Удаление обхода:
    • Добавлена команда /wab remove <игрок> <функция> для снятия обхода для указанного игрока и функции (nether, end, elytra, или кастомный мир).
    • Пример: /wab remove Steve nether снимает обход для Незера.
    • Успешное удаление подтверждается сообщением bypass_removed. Если обхода нет, отправляется уведомление об этом.
    • Изменения сохраняются в bypasses.yml.
✨ Добавлено
🕒 Поддержка часовых поясов
Добавлена опция time-zone в config.yml для указания пользовательского часового пояса для дат ограничений (например, UTC, Europe/Moscow).
➜ Включает ссылку на базу данных часовых поясов IANA.

🔍 Детальные ограничения
Введены подробные переключатели ограничений для:
  • Нижнего мира: portal-creation, teleportation
  • Конца: portal-activation
- Элитра: equipping, flight

🛡️ Команда обхода
Новая команда:
/wab bypass <игрок> <функция> <продолжительность>

Временно позволяет игроку обойти ограничения для Нижнего мира, Конца или Элитра.

⌨️ Автозаполнение
Добавлены интеллектуальные предложения для команды /wab:
  • Подкоманды (например, bypass)
  • Имена онлайн-игроков
  • Функции: nether, end, elytra
  • Продолжительность (например, 3600, 86400)

🚨 Активная проверка ограничений
Плагин теперь периодически проверяет, находятся ли игроки в ограниченных измерениях (Nether или End), и при необходимости телепортирует их наружу.

🐛 Исправлено
Создание портала Nether
Исправлена уязвимость, позволявшая игрокам создавать порталы Nether с помощью PortalCreateEvent.

Телепортация транспортных средств
Решена проблема, позволявшая телепортироваться в Нижний мир с помощью лодок или вагонеток через EntityPortalEvent.

Использование элитр
Исправлена уязвимость, позволявшая игрокам надевать элитры с помощью правого клика в нерабочей руке (обрабатывается через PlayerInteractEvent).

🔧 Изменено
⚡ Оптимизация производительности
Улучшены обработчики событий с условиями раннего выхода, чтобы снизить использование ЦП на серверах с большим количеством игроков.

🌐 Улучшения языка
Обновлены файлы en.yml и ru.yml, чтобы отображать оставшееся время ограничения в днях и часах для более понятных сообщений пользователям.

🗂 Структура конфигурации
Перестроена структура config.yml:
  • Группировка функций в разделах nether, end, elytra
  • Добавлены ясные комментарии и описания для облегчения настройки

📝 Примечания
  • ✅ Плагин теперь поддерживает Folia, хотя блокировка портала Nether может по-прежнему быть ограничена из-за поведения PlayerPortalEvent.
  • 🧭 Убедитесь, что в конфигурации установлен действительный часовой пояс IANA (time-zone: Europe/Moscow и т. д.).
  • 📁 Проверьте config.yml на наличие новых вложенных опций и соответствующим образом настройте параметры.
🔹 Что нового в этой версии?

Полностью переработана структура кода:
  • Логика разделена на отдельные классы (PortalBlocker, EndBlocker, ElytraBlocker, ConfigManager).
  • Код стал читаемее, удобнее и масштабируемее.
Улучшена работа с конфигурацией:
  • Добавлен отдельный класс ConfigManager для загрузки и обновления параметров.
  • Команда /wabreload теперь корректно перезагружает настройки без перезапуска сервера.
Добавлено подробное логирование:
  • В консоли теперь отображаются все загруженные настройки.
  • Добавлены предупреждения для серверов Folia о возможных проблемах с блокировкой входа в Ад.
Исправлены мелкие ошибки и оптимизирован код.
⚠️ Важно! Если вы используете Folia, запрет входа в Ад может работать нестабильно из-за особенностей многопоточности.
ВерхНиз