- Поддерживаемые версии
- 1.18
- 1.19
- 1.20
- 1.21
- Ядра и Прокси
- Paper
- Минимальная версия Java
- 17
- Исходный код
- https://github.com/ZloboocGip/NullShield
NullShield - плагин который добавляет систему щитов для WorldGuard-регионов.
Игрок может купить щит на свой регион через GUI или команду. Если у игрока несколько регионов, плагин сначала откроет меню выбора региона, а затем меню выбора щита. После покупки регион получает временную защиту.Пока щит активен, чужие игроки не смогут ломать, ставить блоки или взаимодействовать с регионом, если они не являются владельцами или участниками этого региона.
Работа плагина:
1. Игрок открывает меню покупки щитов.
2. Если у него один регион, плагин сразу открывает гуишку с щитами.
2.1. Если регионов несколько, сначала открывается гуишку выбора региона.
3. После выбора региона игрок выбирает нужный щит.
4. Плагин проверяет, принадлежит ли регион игроку, разрешён ли мир, не находится ли регион в исключениях, хватает ли денег, прав или других требований.
5. Если все проверки пройдены, щит активируется на регион.
Настройка плагина:
Почти вся логика плагина настраивается через кфг. Можно изменить сообщения, формат текста, GUI, предметы, типы щитов, требования для покупки, команды после покупки, список миров, исключённые регионы, базу данных и отображение активной защиты.
Плагин поддерживает Legacy и You must be logged in to see this link. форматирование, поэтому сообщения можно оформить под стиль сервера.
Перед активацией щита плагин может проверять разные условия:
- наличие права;
- баланс через Vault;
- значения через PlaceholderAPI;
- принадлежность региона игроку; (встроено)
- разрешённый мир; (встроено)
- исключённые регионы и миры. (встроено)
настраивается:
- время действия
- название
- предмет в GUI
- слот
- описание
- CustomModelData
- требования и команды, которые выполняются после покупки
YAML:
# █▄ █ █ █ █ █ █▀▀ █▄█ ▀█▀ █▀▀ █ █▀▄
# █ ▀█ █▄█ █▄▄ █▄▄ ▄██ █ █ ▄█▄ ██▄ █▄▄ █▄▀
# Покупка временных щитов на регионы WorldGuard.
# Связь с разработчиком плагина (телеграм) : @sssssssss2sss
settings:
prefix: "&8[&bNullShield&8] "
# legacy или minimessage.
# Legacy - цвета через "&", minimessage - цвета через "<color></color>"
# О minimessage можешь почитать тут: https://docs.papermc.io/adventure/minimessage/format/
message-format: legacy
# Если true, щиты живут только до рестарта в памяти сервера.
# Если false, используется database ниже.
reset-on-restart: false
# Где плагин будет проверять регионы (владельца в нём)
# Пустой список значит проверять только мир, где игрок на данный момент сидит.
checking-worlds: []
# Эти миры полностью исключаются из механики щитов.
ignored-worlds:
- spawn
# Эти регионы полностью исключаются из механики щитов.
ignored-regions:
- spawn
- pvp_arena
- event_region
# Право обхода защиты NullShield. WorldGuard bypass у админов обычно уже есть,
# но это право оставлено отдельно, чтобы не зависеть от чужих настроек.
admin-bypass-permissions:
- nullshield.bypass
- worldguard-a
- worldguard.region.bypass.*
# Покупать щит может только owner региона?
owner-only-purchase: true
# Если в регионе уже есть щит, новая покупка прибавит время к текущему остатку?
extend-existing-shield: true
# Включить команды покупки выполняются от консоли после всех проверок
execute-purchase-commands-as-console: true
database:
type: sqlite # sqlite, mysql
sqlite:
file: shields.db # создаться в папке плагина
mysql:
host: localhost
port: 3306
database: nullshields
username: root
password: password
use-ssl: false
table-prefix: ns_
worldguard-flags:
enabled: true
# Флаги ставятся на регион при активном щите.
active:
build: deny
use: deny
# Флаги ставятся после истечения щита.
expired:
build: allow
use: allow
# Если true, при удалении щита плагин просто убирает указанные active-флаги.
# Если false, ставит значения из expired.
remove-active-flags-instead-of-expired: false
gui:
rows: 3 # строки в гуишке
region-selection:
title: "&8Выбор региона"
empty-regions-item:
material: BARRIER
slot: 13
model-data: 0 # сделал model-data если у вас есть поддержка кастомных рп-менюшек
name: "&cНет доступных регионов"
lore:
- "&7У тебя нет регионов, где ты владелец."
region-item:
material: GRASS_BLOCK
model-data: 0
name: "&a{region}"
lore:
- "&7Мир: &f{world}"
- "&7Статус: {status}"
- ""
- "&eНажми, чтобы выбрать регион"
shield-selection:
title: "&8Покупка щита: &f{region}"
filler:
enabled: true
material: BLACK_STAINED_GLASS_PANE
model-data: 0
name: " "
lore: []
shields:
iron:
time: 30m
display-name: "&fIron Shield"
description:
- "&7Базовая защита региона на &f30 минут&7."
- "&7Цена: &a30$ &7и &b15 points"
item:
material: IRON_INGOT
slot: 11
model-data: 0
name: "&fIron Shield"
lore:
- "&7Время: &f{duration}"
- "&7Регион: &e{region}"
- ""
- "&aНажми, чтобы купить"
requirements:
permission:
type: has_permission
permission: blablabla
deny-message: "{prefix}&cНет права: &f{permission}&c."
money:
type: vault
balance: "30"
deny-message: "{prefix}&cНужно &e{required}&c монет. Сейчас: &e{current}&c."
vault_placeholder:
type: placeholderapi
placeholder: "%vault_eco_balance%"
check: ">=30"
deny-message: "{prefix}&cПроверка денег через PlaceholderAPI не пройдена."
points_placeholder:
type: placeholderapi
placeholder: "%playerpoints_points%"
check: ">15"
deny-message: "{prefix}&cНужно больше &b15 points&c."
commands:
- "eco take {player} 30"
- "points take {player} 15"
diamond:
time: 2h
display-name: "&bDiamond Shield"
description:
- "&7Усиленная защита региона на &f2 часа&7."
- "&7Цена: &a150$ &7и &b80 points"
item:
material: DIAMOND
slot: 15
model-data: 0
name: "&bDiamond Shield"
lore:
- "&7Время: &f{duration}"
- "&7Регион: &e{region}"
- ""
- "&aНажми, чтобы купить"
requirements:
money:
type: vault
balance: "150"
deny-message: "{prefix}&cНужно &e{required}&c монет. Сейчас: &e{current}&c."
points_placeholder:
type: placeholderapi
placeholder: "%playerpoints_points%"
check: ">=80"
deny-message: "{prefix}&cНужно минимум &b80 points&c."
commands:
- "eco take {player} 150"
- "points take {player} 80"
display:
active-shield:
enabled: true
mode: always
actionbar:
enabled: true
interval: 2s
message: "&aЩит региона &e{region}&a активен ещё &e{expires_in}"
bossbar:
enabled: false
title: "&aЩит региона &e{region}&a активен: &e{expires_in}"
color: GREEN
style: SOLID
progress-mode: time-left
update-interval: 1s
chat:
enabled: false
interval: 60s
message: "{prefix}&aРегион &e{region}&a защищён щитом ещё &e{expires_in}&a."
vulnerable-region:
enabled: true
mode: on-enter
actionbar:
enabled: true
interval: 3s
message: "&cРегион &e{region}&c без щита и уязвим"
bossbar:
enabled: false
title: "&cРегион &e{region}&c уязвим"
color: RED
style: SOLID
progress-mode: full
update-interval: 1s
chat:
enabled: true
interval: 60s
message: "{prefix}&cРегион &e{region}&c без щита. Его могут сломать."
attack-blocked:
enabled: true
actionbar:
enabled: true
message: "&cРегион &e{region}&c защищён щитом: &e{expires_in}"
bossbar:
enabled: false
title: "&cРегион защищён щитом"
color: RED
style: SOLID
duration: 3s
chat:
enabled: false
message: "{prefix}&cЭтот регион защищён щитом ещё &e{expires_in}&c."
messages:
only-player: "{prefix}&cКоманда доступна только игроку."
no-permission: "{prefix}&cНет прав."
reload: "{prefix}&aКонфиг перезагружен."
unknown-command: "{prefix}&cНеизвестная команда. Используй: &f/nullshield"
no-worldguard: "{prefix}&cWorldGuard не найден. Плагин не может работать."
no-regions: "{prefix}&cУ тебя нет регионов для покупки щита."
region-not-found: "{prefix}&cРегион &e{region}&c не найден или недоступен."
region-ignored: "{prefix}&cНа этот регион нельзя купить щит."
not-region-owner: "{prefix}&cПокупать щит можно только на свой регион."
shield-not-found: "{prefix}&cЩит &e{shield}&c не найден."
requirement-denied: "{prefix}&cУсловия покупки не выполнены."
vault-missing: "{prefix}&cVault или экономика не найдены."
placeholderapi-missing: "{prefix}&cPlaceholderAPI не найден."
purchase-success: "{prefix}&aКуплен щит &e{shield}&a для региона &e{region}&a. Истекает через &e{expires_in}&a."
purchase-error: "{prefix}&cОшибка покупки: &f{error}"
active-status: "&aактивен ещё &e{expires_in}"
vulnerable-status: "&cбез щита"
list-header: "{prefix}&aАктивные щиты:"
list-entry: "&7- &e{world}&7/&e{region}&7: &f{shield} &7ещё &a{expires_in}"
list-empty: "{prefix}&7Активных щитов нет."
- Зависимости
- WorldGuard (Vault, PAPI желательно)
- Команды и права
- Команды:
/nullshield открыть меню покупки щита.
/nullshield open открыть меню покупки щита.
/nullshield buy <щит> [регион] купить выбранный щит. Если регион не указан и у игрока несколько регионов, откроется меню выбора региона.
/nullshield list посмотреть список всех активных щитов. Админ-команда.
/nullshield info <регион> посмотреть информацию о щите региона. Админ-команда.
/nullshield remove <регион> снять активный щит с региона. Админ-команда.
/nullshield reload перезагрузить конфиг плагина. Админ-команда.