|
| 1 | +# 🌍 WorldAccessBlocker |
| 2 | + |
| 3 | +**WorldAccessBlocker** временно закрывает игрокам доступ к **Аду**, **Энду**, **полёту на элитрах** и **любым отдельным мирам** — до заданной даты или по недельному расписанию. Плагин написан под **Paper** и его форки (**Purpur**, **Folia**) и использует родные Adventure- и Folia-планировщики. |
| 4 | + |
| 5 | +Удобно, когда вайп только стартовал и вы хотите открывать Ад через неделю, пускать в Энд только по выходным или держать лобби закрытым в рабочие часы. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## ✨ Возможности |
| 10 | + |
| 11 | +- ⏳ **Блокировка по дате** — закрыть возможность до конкретной даты и времени. |
| 12 | +- 📅 **Недельное расписание** — открывать доступ только в нужные дни и часы (например, по выходным или в воскресенье с 15:00 до 17:00). |
| 13 | +- 🌋 **Блок Ада** — отменяет создание портала, переход через портал и телепорт эндер-жемчугом. |
| 14 | +- 🐉 **Блок Энда** — не даёт активировать портал в Энд (и попасть туда). |
| 15 | +- 🪽 **Контроль элитр** — можно запретить надевание и/или сам полёт по отдельности. |
| 16 | +- 🗺️ **Отдельные миры** — ограничить любой мир по имени, по дате или расписанию. |
| 17 | +- 🚪 **Телепорт при блоке** — заблокированного игрока отправит на спавн указанного мира. |
| 18 | +- 🎫 **Персональные исключения** — выдать временный доступ через `/wab bypass`, снять — `/wab remove`. |
| 19 | +- 🔌 **Поддержка PlaceholderAPI** — статус блокировки и оставшееся время можно вывести в скорборд или TAB. |
| 20 | +- 🌐 **Два языка из коробки** — русский и английский; свой язык добавляется отдельным `.yml`. |
| 21 | +- ♻️ **Перезагрузка на лету** — `/wabreload` применяет изменения конфига без рестарта сервера. |
| 22 | +- 🧵 **Родная поддержка Folia** — задачи идут через региональный планировщик, без предупреждений о потоках. |
| 23 | +- 🔔 **Уведомления об обновлениях** — админы видят сообщение в игре, когда вышла новая версия. |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +## 💻 Совместимость |
| 28 | + |
| 29 | +| Платформа | Версии | Статус | |
| 30 | +|---|---|---| |
| 31 | +| Paper | 1.20.1+ | ✅ Полная поддержка | |
| 32 | +| Purpur | 1.20.1+ | ✅ Полная поддержка | |
| 33 | +| Folia | 1.20.5+ | ✅ Родной планировщик | |
| 34 | +| Spigot / Bukkit | — | ❌ Не поддерживаются | |
| 35 | + |
| 36 | +**Нужна Java 17+** (Minecraft 1.20.1–1.20.4 работают на Java 17, 1.20.5+ — на Java 21). Плагин собран под Paper 1.20.1 и работает на всех версиях от 1.20.1 до последней. Spigot и Bukkit не подходят: плагин использует Adventure и планировщики Paper. |
| 37 | + |
| 38 | +--- |
| 39 | + |
| 40 | +## 📦 Установка |
| 41 | + |
| 42 | +1. Скачайте свежий `WorldAccessBlocker.jar`. |
| 43 | +2. Положите его в папку `plugins/` на сервере. |
| 44 | +3. Перезапустите сервер. |
| 45 | +4. Отредактируйте `plugins/WorldAccessBlocker/config.yml` под себя и выполните `/wabreload`. |
| 46 | + |
| 47 | +--- |
| 48 | + |
| 49 | +## ⚙️ Настройка |
| 50 | + |
| 51 | +```yaml |
| 52 | +# Язык сообщений: "ru" или "en" |
| 53 | +language: "ru" |
| 54 | + |
| 55 | +# Часовой пояс сервера (важен для недельного расписания!) |
| 56 | +time-zone: "Europe/Moscow" |
| 57 | + |
| 58 | +nether: |
| 59 | + disable: true |
| 60 | + # Работает, только если НЕТ блока `recurring` (закрыто до этой даты): |
| 61 | + restriction-date: "2025-03-10 00:00:00" |
| 62 | + disable-portal-creation: true |
| 63 | + disable-teleportation: true |
| 64 | + |
| 65 | + # Недельное расписание. Если этот блок есть, `restriction-date` ИГНОРИРУЕТСЯ. |
| 66 | + # Каждый период — это ОКНО, когда доступ ОТКРЫТ. Вне окон — закрыт. |
| 67 | + recurring: |
| 68 | + periods: |
| 69 | + # Открыто только по воскресеньям с 15:00 до 17:00 |
| 70 | + - days: [SUNDAY] |
| 71 | + start-time: "15:00" |
| 72 | + end-time: "17:00" |
| 73 | + # Открыто весь день по выходным |
| 74 | + - days: [SATURDAY, SUNDAY] |
| 75 | + |
| 76 | +end: |
| 77 | + disable: true |
| 78 | + disable-portal-activation: true |
| 79 | + # Пустой список = нет открытых окон = закрыто ВСЕГДА |
| 80 | + recurring: |
| 81 | + periods: [] |
| 82 | + |
| 83 | +elytra: |
| 84 | + disable: true |
| 85 | + disable-equip: true |
| 86 | + disable-flight: true |
| 87 | + |
| 88 | +custom-worlds: |
| 89 | + lobby_world: |
| 90 | + disable: true |
| 91 | + recurring: |
| 92 | + periods: |
| 93 | + - days: [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY] |
| 94 | + start-time: "09:00" |
| 95 | + end-time: "17:00" |
| 96 | + |
| 97 | +# Куда телепортировать заблокированных (имя мира → его спавн) |
| 98 | +fallback-spawns: |
| 99 | + default: "world" |
| 100 | + nether: "hub" |
| 101 | +``` |
| 102 | +
|
| 103 | +> **Как читать расписание:** когда задан `recurring:`, каждый период описывает **открытое** окно. Попадает текущий день и время в период — доступ **открыт**, иначе **закрыт**. Пустой `periods: []` означает **закрыто всегда**. |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## 🧩 Команды и права |
| 108 | + |
| 109 | +| Команда | Право | По умолчанию | Что делает | |
| 110 | +|---|---|---|---| |
| 111 | +| `/wab bypass <игрок> <объект> <секунды>` | `wab.bypass` | op | Выдать временный доступ | |
| 112 | +| `/wab remove <игрок> <объект>` | `wab.bypass` | op | Снять исключение | |
| 113 | +| `/wab status [игрок]` | `wab.status` | все | Показать статус блокировок | |
| 114 | +| `/wabreload` | `wab.reload` | op | Перезагрузить конфиг без рестарта | |
| 115 | + |
| 116 | +`<объект>` — это `nether`, `end`, `elytra` или имя отдельного мира. |
| 117 | + |
| 118 | +Отдельное право `wab.update-notify` (по умолчанию op) отвечает за уведомления о новых версиях в игре. |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## 🔧 PlaceholderAPI |
| 123 | + |
| 124 | +| Плейсхолдер | Возвращает | |
| 125 | +|---|---| |
| 126 | +| `%wab_nether_blocked%` | `true` / `false` | |
| 127 | +| `%wab_end_blocked%` | `true` / `false` | |
| 128 | +| `%wab_elytra_blocked%` | `true` / `false` | |
| 129 | +| `%wab_time_left_nether%` | сколько осталось (или расписание) | |
| 130 | +| `%wab_time_left_end%` | сколько осталось (или расписание) | |
| 131 | +| `%wab_time_left_elytra%` | сколько осталось (или расписание) | |
| 132 | + |
| 133 | +--- |
| 134 | + |
| 135 | +## ❓ Частые вопросы |
| 136 | + |
| 137 | +**Работает ли на Folia?** |
| 138 | +Да. С версии 0.9.0 плагин сам определяет Folia и раскидывает задачи через региональный планировщик, а на Paper/Purpur — через обычный планировщик Bukkit. |
| 139 | + |
| 140 | +**Как выдать игроку постоянный доступ к закрытой возможности?** |
| 141 | +Задайте большую длительность исключения: `/wab bypass Ник nether 999999999`. |
| 142 | + |
| 143 | +**Можно закрыть мир по дате, а потом перейти на расписание?** |
| 144 | +Да. Если под возможностью есть блок `recurring:`, дата игнорируется. Уберите `recurring:`, чтобы вернуться к режиму по дате, и выполните `/wabreload`. |
| 145 | + |
| 146 | +--- |
| 147 | + |
| 148 | +## 🐛 Ошибки и предложения |
| 149 | + |
| 150 | +Пишите в [GitHub Issues](https://github.com/denfry/WorldAccessBlocker/issues) или в комментариях под ресурсом. |
| 151 | + |
| 152 | +--- |
| 153 | + |
| 154 | +# 📋 Список изменений — 0.11.0 |
| 155 | + |
| 156 | +### Добавлено |
| 157 | + |
| 158 | +- **Поддержка Minecraft 1.20.1 — последняя версия.** Плагин теперь запускается на Paper / Purpur / Folia начиная с **1.20.1** (Java 17+), а не только с 1.20.5. Один и тот же JAR работает и на старых 1.20.x, и на самых свежих версиях игры. |
| 159 | +- **Статус блокировок для всех.** Теперь любой игрок может посмотреть, что и до когда закрыто, командой `/wab status` — op больше не нужен. Выдача и снятие исключений (`/wab bypass`, `/wab remove`) остаются только у операторов. |
| 160 | +- **Элитры отключаются даже в полёте.** Если игрок уже летит, когда начинается окно блокировки, его теперь тоже опустит на землю (раньше отменялся только взлёт). |
| 161 | +- **Предупреждение об устаревшем конфиге.** При старте сервер подскажет в консоли, если ваш `config.yml` старее текущей версии плагина. |
| 162 | +- **Мягкий откат языка.** Если в языковом файле не хватает какой-то фразы, плагин подставит её на английском вместо «Message not found». |
| 163 | + |
| 164 | +### Исправлено |
| 165 | + |
| 166 | +- **Folia: больше никаких крашей.** Плагин перестал падать при сохранении исключений и корректно телепортирует игроков между мирами и регионами. |
| 167 | +- **Цветные уведомления о новой версии.** Сообщение об обновлении теперь выводится с цветами, а не с символами форматирования в тексте. |
| 168 | +- **Выход из Энда.** Покинуть Энд больше нельзя запретить случайно: при закрытом Энде блокируется только вход, выход работает. |
| 169 | +- **Перенос старых настроек расписания** при обновлении конфига теперь срабатывает как надо. |
| 170 | + |
| 171 | +### Изменено |
| 172 | + |
| 173 | +- Права проверяются отдельно для каждой подкоманды. |
| 174 | +- В сборку релиза добавлен прогон тестов, а список поддерживаемых версий на Modrinth формируется автоматически — все релизы от 1.20 и выше. |
0 commit comments