chore: clean up documentation and rebuild with badwords filter

- Remove outdated CODE_REVIEW_RU.md and REFACTORING_SERVICES.md documentation
- Add badwords.txt resource file for swear filter functionality
- Rebuild compiled classes with updated filter and configuration logic
- Update all configuration files (appearance, discord, filters, messages)
- Rebuild core components: ConfigManager, PluginInitializer, SwearFilter, GradientModule, PrefixService, PlayerEventListener, EnhancedChatRenderer
- Consolidate build artifacts with source changes for consistency
This commit is contained in:
loki5512344 2026-04-06 00:38:34 +02:00
parent bba480002f
commit 4f6eaf35e9
28 changed files with 1152 additions and 1364 deletions

58
bin/main/badwords.txt Normal file
View file

@ -0,0 +1,58 @@
# Список запрещенных слов (по одному на строку)
# Строки начинающиеся с # игнорируются
# Фильтр автоматически ловит замены букв (х->x, о->o и т.д.)
# Основной мат
хуй
хуя
хуе
хую
хуем
хуи
пизда
пизде
пизду
пиздой
пизды
ебать
ебал
ебет
ебут
ебала
ебали
ебаный
ебанный
ебучий
ебучая
ебучее
блять
блядь
бляди
блядей
сука
суки
сучка
сучки
пидор
пидора
пидоры
пидорас
пидорасы
гандон
гандоны
мудак
мудаки
мудила
мудилы
долбоеб
долбоебы
уебан
уебаны
уебок
уебки
говно
говна
говном
дерьмо
дерьма
дерьмом

View file

@ -1,58 +1,143 @@
# LoChat Configuration v1.5.5
config-version: 4
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║ LoChat Configuration ║
# ║ Единый конфиг плагина ║
# ╚══════════════════════════════════════════════════════════════════════════════╝
config-version: 5
prefix: "&#00D4FF[LoChat]"
# Базовые настройки чата
# Детальные настройки (префиксы, цвета, форматы) в config/*.yml
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Режимы чата │
# └─────────────────────────────────────────────────────────────────────────────┘
chat:
# Режим чата:
# - Оба включены = локальный (по умолчанию) + глобальный (с "!")
# - Только global = единый чат без префиксов для всех
# Глобальный чат (все видят, активируется через "!")
global:
enabled: true
cooldown: 3
# Локальный чат (только в радиусе)
local:
enabled: true
cooldown: 1
radius: 100
# Личные сообщения
pm:
enabled: true
cooldown: 2
# Лимиты сообщений
min_message_length: 1
max_message_length: 2000
clear_lines: 100
# Hub команда
hub_command:
enabled: true
server: "hub"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Внешний вид чата (префиксы, форматы, цвета) │
# └─────────────────────────────────────────────────────────────────────────────┘
appearance:
# Префиксы чата (GLOBAL / LOCAL)
prefixes:
global:
emoji: "✦"
text: "GLOBAL"
colors: ["#B798A8", "#7858E9"]
separator:
text: " ▶ "
color: "#9878C9"
message-color: "#E8E0F0"
local:
emoji: "◆"
text: "LOCAL"
colors: ["#9878C9", "#7858E9"]
separator:
text: " ▶ "
color: "#8B6BD6"
message-color: "#E8E0F0"
# Формат сообщений
# {emoji} {prefix} {separator} {player_prefix} {player} {player_suffix} {message}
chat-format:
global: "{emoji} {prefix} {separator} {player_prefix}{player}{player_suffix}: {message}"
local: "{emoji} {prefix} {separator} {player_prefix}{player}{player_suffix}: {message}"
# Hover при наведении на ник
hover:
enabled: true
format:
- "&#7858E9▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"
- "&#B798A8✦ &f{player}"
- ""
- "&#9878C9⏱ &fПинг: &#7858E9{ping}ms"
- "&#9878C9❤ &fЗдоровье: &#7858E9{health}/20"
- "&#9878C9🍖 &fГолод: &#7858E9{food}/20"
- ""
- "&#7858E9▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"
- "&#B798A8✦ &fНажми чтобы написать"
# Эмодзи (текстовые замены)
emojis:
":heart:": "❤"
":star:": "★"
":diamond:": "♦"
":check:": "✓"
":cross:": "✗"
":arrow:": "→"
":smile:": ":)"
":sad:": ":("
":shrug:": "¯\\_(ツ)_/¯"
# Цвета системных сообщений
colors:
nobody_heard: "#9878C9"
error: "#CF6679"
success: "#9878C9"
warning: "#B798A8"
info: "#A485BC"
# Градиентные ники
lopreff:
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Градиентные ники и префиксы │
# └─────────────────────────────────────────────────────────────────────────────┘
gradient:
enabled: true
use-gradient-name: true
use-custom-prefix: true
display:
update-display-name: true
update-tab-list: true
# Градиенты (детали в config/gradient.yml)
gradient:
storage-type: "file"
# Настройки отображения
display:
update-display-name: true
update-tab-list: true
# Лимиты
min-colors: 1
max-colors: 7
max-prefix-length: 16
# Цены (PlayerPoints)
price-per-color: 50
prefix-price: 500
prefix-one-time-purchase: true
use-permission-instead-of-cost: false
max-prefix-length: 16
# Кулдауны (секунды)
color-cooldown: 60
prefix-cooldown: 120
# Форматирование
prefix-format: "[{prefix}] "
gradient-on-prefix: true
gradient-on-luckperms-prefix: true
gradient-on-luckperms-suffix: true
continuous-gradient: true
use-legacy-rgb-format: true
# Хранилище (file / sqlite)
storage-type: "file"
sqlite-file: "gradient-data.db"
# RP команды (детали в config/rp.yml)
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ RP команды (/me, /do, /try, /roll) │
# └─────────────────────────────────────────────────────────────────────────────┘
rp:
radius: 100
cooldowns:
@ -61,6 +146,126 @@ rp:
do: 3
roll: 2
# Модерация: после /lmute выполнить команду от консоли (SimpleVoiceChat: voice mute {player})
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Фильтры чата │
# └─────────────────────────────────────────────────────────────────────────────┘
filters:
# Мат-фильтр
swear:
enabled: true
replace: false
replacement: "***"
words:
- "хуй"
- "пизда"
- "ебать"
# URL фильтр
url:
enabled: true
replacement: "[ссылка скрыта]"
# IP фильтр
ip:
enabled: true
replacement: "[IP скрыт]"
# Скрытые URL (discord.gg и т.д.)
hidden-urls:
enabled: true
patterns:
- "discord\\.gg"
- "dsc\\.gg"
# Анти-спам
spam:
enabled: true
max-repeating-chars: 5
# Анти-флуд
flood:
enabled: true
max-same-messages: 3
# Капс
caps:
enabled: true
max-caps-percent: 70
min-length: 5
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Модерация (муты, баны, варны) │
# └─────────────────────────────────────────────────────────────────────────────┘
moderation:
# Дефолтные значения
default-mute-duration: "7d"
default-mute-reason: "Без причины"
default-ban-reason: "Без причины"
# Команда после мута (для голосового чата)
voice-mute-console-command: ""
# Сообщение при кике забаненного
ban-kick-message: "&#CF6679Вы забанены! &#B798A8Причина: &#7858E9{reason}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Звуки │
# └─────────────────────────────────────────────────────────────────────────────┘
sounds:
# Упоминание в чате
mention:
enabled: true
sound: "BLOCK_NOTE_BLOCK_PLING"
volume: 1.0
pitch: 1.5
# Личное сообщение
pm:
enabled: true
sound: "ENTITY_EXPERIENCE_ORB_PICKUP"
volume: 0.8
pitch: 1.2
# Команды
command:
enabled: false
sound: "UI_BUTTON_CLICK"
volume: 0.5
pitch: 1.0
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Сообщения входа/выхода/смерти │
# └─────────────────────────────────────────────────────────────────────────────┘
messages:
# Сообщение при входе
# {player} - ник игрока
join:
enabled: true
format: "&#9878C9✦ &#B798A8{player} &#7858E9зашел на сервер"
# Сообщение при выходе
quit:
enabled: true
format: "&#9878C9✦ &#B798A8{player} &#7858E9вышел с сервера"
# Сообщение при смерти
# {player} - ник игрока
# {killer} - ник убийцы (если есть)
# {weapon} - название оружия (если есть)
# {death_message} - стандартное сообщение смерти
death:
enabled: true
# Убийство игроком
player_kill: "&#CF6679☠ &#B798A8{player} &#7858E9был убит игроком &#B798A8{killer} &#9878C9({weapon})"
# Смерть от моба
mob_kill: "&#CF6679☠ &#B798A8{player} &#7858E9был убит мобом &#B798A8{killer}"
# Обычная смерть
default: "&#CF6679☠ &#B798A8{player} &#7858E9{death_message}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Прочее │
# └─────────────────────────────────────────────────────────────────────────────┘
# Hub команда
hub_command:
enabled: true
server: "hub"

View file

@ -44,16 +44,17 @@ prefixes:
# {separator} — separator (e.g. ▶)
# {player_prefix} — LuckPerms / gradient prefix from LoPreff
# {player} — display name + hover (click to /msg)
# {player_suffix} — LuckPerms / gradient suffix from LoPreff
# {message} — message body
#
# Examples:
# Default: {emoji} {prefix} {separator} {player} : {message}
# Minimal: {player_prefix} {player} ▶ {message}
# Custom: ✦ {player_prefix} {player} ▶ {message}
# Custom: ✦ {player_prefix} {player} {player_suffix} ▶ {message}
chat-format:
global: "{emoji} {prefix} {separator} {player} : {message}"
local: "{emoji} {prefix} {separator} {player} : {message}"
global: "{emoji} {prefix} {separator} {player_prefix}{player}{player_suffix} : {message}"
local: "{emoji} {prefix} {separator} {player_prefix}{player}{player_suffix} : {message}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Hover shown when pointing at the player name in chat │

View file

@ -40,6 +40,7 @@ events:
enabled: true
# Настройки входа на сервер
# {player} - ник игрока
join:
enabled: true
title: "🟢 Игрок зашел на сервер"
@ -47,7 +48,8 @@ events:
color: "00FF00"
thumbnail: "https://mc-heads.net/avatar/{player}/64"
# Настройки выхода с сервера
# Настройки выхода с сервера
# {player} - ник игрока
quit:
enabled: true
title: "🔴 Игрок покинул сервер"
@ -56,11 +58,27 @@ events:
thumbnail: "https://mc-heads.net/avatar/{player}/64"
# Настройки смерти игрока
# {player} - ник игрока
# {killer} - ник убийцы (если есть)
# {weapon} - название оружия (если есть)
# {death_message} - стандартное сообщение смерти
death:
enabled: true
title: "💀 Смерть игрока"
description: "**{player}** {death_message}"
color: "800080"
# Убийство игроком
player_kill:
title: "⚔️ PvP убийство"
description: "**{player}** был убит игроком **{killer}** с помощью **{weapon}**"
color: "FF0000"
# Смерть от моба
mob_kill:
title: "💀 Смерть от моба"
description: "**{player}** был убит мобом **{killer}**"
color: "800080"
# Обычная смерть
default:
title: "💀 Смерть игрока"
description: "**{player}** {death_message}"
color: "800080"
thumbnail: "https://mc-heads.net/avatar/{player}/64"
# Настройки фильтрации

View file

@ -1,286 +1,81 @@
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║ LoChat Filters Configuration ║
# ║ Конфигурация фильтров ║
# ║ Версия: 1.5.5-1.20.1 ║
# ║ LoChat — Фильтры чата ║
# ╚══════════════════════════════════════════════════════════════════════════════╝
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР ЗАГЛАВНЫХ БУКВ │
# └─────────────────────────────────────────────────────────────────────────────┘
caps:
# Включить фильтр заглавных букв
enabled: true
# Максимальный процент заглавных букв (0-100)
max-percent: 70
# Минимальная длина сообщения для проверки
min-length: 5
# Автоматически переводить в нижний регистр
auto-lowercase: true
# Действие при нарушении: block, warn, lowercase
action: "lowercase"
# Сообщение при блокировке
block-message: "&#FF6B6BСлишком много заглавных букв!"
# Сообщение-предупреждение
warn-message: "&#FFA726Не используйте слишком много заглавных букв"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР РЕКЛАМЫ │
# └─────────────────────────────────────────────────────────────────────────────┘
advertising:
# Включить фильтр рекламы
enabled: true
# Блокировать скрытые URL (bit.ly, tinyurl и т.д.)
block-hidden-urls: true
# Блокировать домены
block-domains: true
# Блокировать IP адреса
block-ips: true
# Действие при обнаружении: block, warn, replace
action: "block"
# Сообщение при блокировке
block-message: "&#FF6B6BРеклама запрещена!"
# Замена для заблокированного контента
replacement: "[РЕКЛАМА УДАЛЕНА]"
# Белый список доменов (разрешенные)
whitelist:
- "youtube.com"
- "youtu.be"
- "discord.gg"
- "twitch.tv"
- "imgur.com"
- "gyazo.com"
- "prntscr.com"
# Черный список доменов (запрещенные)
blacklist:
- "scam-site.com"
- "virus-site.ru"
- "fake-minecraft.net"
# Регулярные выражения для поиска рекламы
patterns:
- "(?i)\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?::[0-9]{1,5})?\\b" # IP адреса
- "(?i)\\b[a-z0-9.-]+\\.(com|net|org|ru|de|uk)\\b" # Домены
- "(?i)\\b(server|сервер)\\s*[:-]?\\s*[a-z0-9.-]+\\b" # Серверы
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР IP АДРЕСОВ │
# └─────────────────────────────────────────────────────────────────────────────┘
ip:
# Включить фильтр IP адресов
enabled: true
# Блокировать сообщение или заменять IP
block: false
# Замена для IP адресов
replacement: "[IP СКРЫТ]"
# Сообщение при блокировке
block-message: "&#FF6B6BIP адреса запрещены!"
# Белый список IP (разрешенные)
whitelist:
- "127.0.0.1"
- "localhost"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР ПОВТОРОВ │
# └─────────────────────────────────────────────────────────────────────────────┘
repeat:
# Включить фильтр повторяющихся символов
enabled: true
# Максимальное количество повторов подряд
max-repeats: 3
# Действие: block, warn, replace
action: "replace"
# Сообщение при блокировке
block-message: "&#FF6B6BНе повторяйте символы!"
# Автоматически сокращать повторы
auto-reduce: true
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР СПАМА │
# └─────────────────────────────────────────────────────────────────────────────┘
spam:
# Включить антиспам
enabled: true
# Максимальное количество одинаковых сообщений
max-similar-messages: 3
# Время для сброса счетчика (секунды)
reset-time: 60
# Процент схожести сообщений (0-100)
similarity-threshold: 80
# Действие при спаме: block, warn, mute
action: "warn"
# Сообщение при блокировке
block-message: "&#FF6B6BНе спамьте!"
# Время мута за спам (секунды)
mute-duration: 300
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР МАТА │
# │ Мат-фильтр │
# └─────────────────────────────────────────────────────────────────────────────┘
# Использует badwords.txt для списка слов
# Автоматически ловит замены букв: х->x, о->o, е->e и т.д.
# Обход: lochat.bypass.swear
swear:
# Включить фильтр мата
enabled: true
# Использовать внешний файл со словами
use-external-file: true
# Файл со словами (относительно папки плагина)
words-file: "filter-words.json"
# Действие: block, warn, replace, mute
action: "replace"
# Символ для замены
replacement-char: "*"
# Сообщение при блокировке
block-message: "&#FF6B6BМат запрещен!"
# Время мута за мат (секунды)
mute-duration: 600
# Встроенный список слов (если не используется внешний файл)
words:
- "плохое_слово1"
- "плохое_слово2"
# Проверять фрагменты слов
check-fragments: true
# Игнорировать регистр
ignore-case: true
# Проверять транслитерацию
check-transliteration: true
replace: false # true = заменять на ***, false = блокировать сообщение
replacement: "***"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ФИЛЬТР ФЛУДА │
# │ URL фильтр │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует ссылки в чате
# Обход: lochat.bypass.urlfilter
url:
enabled: true
replacement: "[ссылка скрыта]"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ IP фильтр │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует IP адреса в чате
# Обход: lochat.bypass.ipfilter
ip:
enabled: true
replacement: "[IP скрыт]"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Скрытые URL (discord.gg и т.д.) │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует популярные сокращенные ссылки
# Обход: lochat.bypass.hiddenurls
hidden-urls:
enabled: true
patterns:
- "discord\\.gg"
- "dsc\\.gg"
- "bit\\.ly"
- "tinyurl\\.com"
- "goo\\.gl"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Анти-спам │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует повторяющиеся символы (ааааааа, хххххх)
# Обход: lochat.bypass.spam
spam:
enabled: true
max-repeating-chars: 5 # Максимум повторений одного символа
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Анти-флуд │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует одинаковые сообщения подряд
# Обход: lochat.bypass.flood
flood:
# Включить антифлуд
enabled: true
# Максимальное количество сообщений в период
max-messages: 5
# Период времени (секунды)
time-period: 10
# Действие при флуде: block, warn, mute
action: "warn"
# Сообщение при блокировке
block-message: "&#FF6B6BНе флудите!"
# Время мута за флуд (секунды)
mute-duration: 180
max-same-messages: 3 # Сколько раз можно отправить одно и то же
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ДОПОЛНИТЕЛЬНЫЕ ФИЛЬТРЫ │
# │ Капс-фильтр │
# └─────────────────────────────────────────────────────────────────────────────┘
# Блокирует сообщения с большим количеством заглавных букв
# Обход: lochat.bypass.caps
additional:
# Фильтр эмодзи
emoji:
enabled: false
max-per-message: 5
block-message: "&#FF6B6BСлишком много эмодзи!"
# Фильтр длинных сообщений
length:
enabled: true
max-length: 256
action: "truncate" # truncate или block
block-message: "&#FF6B6BСообщение слишком длинное!"
# Фильтр пустых сообщений
empty:
enabled: true
block-message: "&#FF6B6BПустые сообщения запрещены!"
# Фильтр только пробелов
whitespace:
enabled: true
block-message: "&#FF6B6BСообщение не может состоять только из пробелов!"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ НАСТРОЙКИ ОБХОДА │
# └─────────────────────────────────────────────────────────────────────────────┘
bypass:
# Права для обхода фильтров
permissions:
caps: "lochat.bypass.caps"
advertising: "lochat.bypass.advertising"
ip: "lochat.bypass.ip"
repeat: "lochat.bypass.repeat"
spam: "lochat.bypass.spam"
swear: "lochat.bypass.swear"
flood: "lochat.bypass.flood"
all: "lochat.bypass.filter"
# Группы, которые обходят все фильтры
groups:
- "admin"
- "moderator"
# Миры, где фильтры отключены
worlds:
- "creative_world"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ ЛОГИРОВАНИЕ │
# └─────────────────────────────────────────────────────────────────────────────┘
logging:
# Логировать заблокированные сообщения
caps:
enabled: true
# Файл для логов
file: "plugins/LoChat/logs/filter.log"
# Формат лога
format: "[{time}] {player} ({filter}): {message}"
# Логировать в консоль
console: true
# Уведомлять администраторов
notify-admins: true
# Право для получения уведомлений
notify-permission: "lochat.filter.notify"
max-caps-percent: 70 # Максимум % заглавных букв
min-length: 5 # Минимальная длина для проверки

View file

@ -1,16 +1,16 @@
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║ LoChat — messages.yml ║
# ║ Default palette (Spacelegacy): #B798A8 (dusty rose) → #7858E9 (violet) ║
# ║ Default palette (Spacelegacy): #7858E9 (dusty rose) → #7858E9 (violet) ║
# ╚══════════════════════════════════════════════════════════════════════════════╝
#
# Color roles (reference when editing strings below):
# &#B798A8 — primary labels / body (dusty rose)
# &#7858E9 — primary labels / body (dusty rose)
# &#9878C9 — accents / separators (mid violet)
# &#7858E9 — emphasis / values (deep violet)
# &f / #E8E0F0 — message body white
# &#CF6679 — errors (muted red, fits the palette)
prefix: "&#B798A8[&#9878C9L&#8B6BD6o&#7858E9C&#8565DCh&#8B6BD6a&#9878C9t&#B798A8]"
prefix: "&#7858E9[&#9878C9L&#8B6BD6o&#7858E9C&#8565DCh&#8B6BD6a&#9878C9t&#7858E9]"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Global chat (toggle messages, server-disabled notice) │
@ -18,7 +18,7 @@ prefix: "&#B798A8[&#9878C9L&#8B6BD6o&#7858E9C&#8565DCh&#8B6BD6a&#9878C9t&#B798A8
global:
toggled-on: "&#9878C9Глобальный чат &#7858E9включён"
toggled-off: "&#9878C9Глобальный чат &#B798A8отключён"
toggled-off: "&#9878C9Глобальный чат &#7858E9отключён"
disabled: "&#CF6679Глобальный чат отключён на этом сервере"
# ┌─────────────────────────────────────────────────────────────────────────────┐
@ -26,19 +26,19 @@ global:
# └─────────────────────────────────────────────────────────────────────────────┘
local:
no-players: "&#B798A8Рядом нет игроков"
nobody-heard: "&#9878C9Вас никто не услышал &#B798A8— рядом нет игроков"
no-players: "&#7858E9Рядом нет игроков"
nobody-heard: "&#9878C9Вас никто не услышал &#7858E9— рядом нет игроков"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Private messages (/msg, /reply) │
# └─────────────────────────────────────────────────────────────────────────────┘
pm:
format-sent: "&#B798A8[&#9878C9→&#B798A8] &#9878C9Вы &#B798A8→ {receiver_display}&#B798A8: &f{message}"
format-received: "&#B798A8[&#9878C9←&#B798A8] {sender_display} &#B798A8→ &#9878C9Вы&#B798A8: &f{message}"
format-sent: "&#7858E9[&#9878C9→&#7858E9] &#9878C9Вы &#7858E9→ {receiver_display}&#7858E9: &f{message}"
format-received: "&#7858E9[&#9878C9←&#7858E9] {sender_display} &#7858E9→ &#9878C9Вы&#7858E9: &f{message}"
use-gradient-names: true
sent: "&#B798A8[&#9878C9→&#B798A8] &#9878C9Вы &#B798A8→ &f{player}&#B798A8: &f{message}"
received: "&#B798A8[&#9878C9←&#B798A8] &f{player} &#B798A8→ &#9878C9Вы&#B798A8: &f{message}"
sent: "&#7858E9[&#9878C9→&#7858E9] &#9878C9Вы &#7858E9→ &f{player}&#7858E9: &f{message}"
received: "&#7858E9[&#9878C9←&#7858E9] &f{player} &#7858E9→ &#9878C9Вы&#7858E9: &f{message}"
no-reply: "&#CF6679Некому ответить"
ignored: "&#CF6679Этот игрок вас игнорирует"
player-offline: "&#CF6679Игрок не в сети"
@ -51,12 +51,12 @@ pm:
ignore:
added: "&#9878C9Игрок &#7858E9{player} &#9878C9добавлен в игнор"
removed: "&#9878C9Игрок &#7858E9{player} &#9878C9убран из игнора"
already-ignored: "&#B798A8Игрок &#7858E9{player} &#B798A8уже в игноре"
not-ignored: "&#B798A8Игрок &#7858E9{player} &#B798A8не в игноре"
already-ignored: "&#7858E9Игрок &#7858E9{player} &#7858E9уже в игноре"
not-ignored: "&#7858E9Игрок &#7858E9{player} &#7858E9не в игноре"
self: "&#CF6679Нельзя игнорировать самого себя"
list-empty: "&#B798A8Ваш список игнора пуст"
list-empty: "&#7858E9Ваш список игнора пуст"
list-header: "&#7858E9▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"
list-footer: "&#B798A8Всего: &#7858E9{count} &#B798A8игроков"
list-footer: "&#7858E9Всего: &#7858E9{count} &#7858E9игроков"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Announcements │
@ -71,9 +71,9 @@ announce:
spy:
enabled: "&#9878C9Режим шпиона &#7858E9включён"
disabled: "&#9878C9Режим шпиона &#B798A8отключён"
format: "&#B798A8[&#9878C9SPY&#B798A8] &#7858E9{sender} &#B798A8→ &#9878C9{receiver}&#B798A8: &f{message}"
chat-format: "&#B798A8[&#9878C9SPY&#B798A8] &#B798A8{type} &#7858E9{sender}&#B798A8: &f{message}"
disabled: "&#9878C9Режим шпиона &#7858E9отключён"
format: "&#7858E9[&#9878C9SPY&#7858E9] &#7858E9{sender} &#7858E9→ &#9878C9{receiver}&#7858E9: &f{message}"
chat-format: "&#7858E9[&#9878C9SPY&#7858E9] &#7858E9{type} &#7858E9{sender}&#7858E9: &f{message}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Message filters │
@ -81,14 +81,14 @@ spy:
filter:
blocked: "&#CF6679Сообщение заблокировано"
warning: "&#B798A8Предупреждение"
warning: "&#7858E9Предупреждение"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Cooldowns │
# └─────────────────────────────────────────────────────────────────────────────┘
cooldown:
wait: "&#B798A8Подождите &#7858E9{time} &#B798A8сек"
wait: "&#7858E9Подождите &#7858E9{time} &#7858E9сек"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Anti-spam (caps, repeat, similar messages) │
@ -104,7 +104,7 @@ antispam:
# └─────────────────────────────────────────────────────────────────────────────┘
clearchat:
cleared: "&#9878C9Чат очищен &#B798A8администратором &#7858E9{player}"
cleared: "&#9878C9Чат очищен &#7858E9администратором &#7858E9{player}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Command / usage errors │
@ -113,7 +113,7 @@ clearchat:
errors:
no-permission: "&#CF6679Нет прав"
player-not-found: "&#CF6679Игрок не найден"
invalid-usage: "&#B798A8Использование: &#7858E9{usage}"
invalid-usage: "&#7858E9Использование: &#7858E9{usage}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ General (permissions, reload, hub, etc.) │
@ -124,7 +124,7 @@ general:
players-only: "&#CF6679Только для игроков!"
config-reloaded: "&#9878C9Конфиг &#7858E9перезагружен!"
invalid-player: "&#CF6679Игрок &#7858E9{player} &#CF6679не найден!"
cooldown-active: "&#B798A8Подождите &#7858E9{time}с"
cooldown-active: "&#7858E9Подождите &#7858E9{time}с"
command-disabled: "&#CF6679Команда отключена!"
hub:
@ -137,9 +137,9 @@ hub:
mute:
muted: "&#9878C9Игрок &#7858E9{player} &#9878C9замучен на &#7858E9{time}"
unmuted: "&#9878C9Игрок &#7858E9{player} &#9878C9размучен"
already-muted: "&#B798A8Игрок &#7858E9{player} &#B798A8уже замучен"
not-muted: "&#B798A8Игрок &#7858E9{player} &#B798A8не замучен"
you-muted: "&#CF6679Вы замучены! &#B798A8Осталось: &#7858E9{time}"
already-muted: "&#7858E9Игрок &#7858E9{player} &#7858E9уже замучен"
not-muted: "&#7858E9Игрок &#7858E9{player} &#7858E9не замучен"
you-muted: "&#CF6679Вы замучены! &#7858E9Осталось: &#7858E9{time}"
permanent: "&#CF6679Вы замучены навсегда!"
# ┌─────────────────────────────────────────────────────────────────────────────┐
@ -149,32 +149,32 @@ mute:
gradient:
color-set: "&#9878C9Градиент &#7858E9установлен!"
color-enabled: "&#9878C9Градиентный ник &#7858E9включён"
color-disabled: "&#B798A8Градиентный ник &#9878C9отключён"
color-reset: "&#B798A8Градиент сброшен"
color-disabled: "&#7858E9Градиентный ник &#9878C9отключён"
color-reset: "&#7858E9Градиент сброшен"
prefix-set: "&#9878C9Префикс &#7858E9установлен!"
prefix-reset: "&#B798A8Префикс сброшен"
prefix-reset: "&#7858E9Префикс сброшен"
prefix-reset-success: "&#9878C9Префикс успешно &#7858E9сброшен!"
prefix-enabled: "&#9878C9Префикс &#7858E9включён"
prefix-disabled: "&#B798A8Префикс &#9878C9отключён"
prefix-disabled: "&#7858E9Префикс &#9878C9отключён"
invalid-hex: "&#CF6679Неверный HEX цвет: &#7858E9{color}"
invalid-color: "&#CF6679Неверный цвет: &#7858E9{color}"
too-many-colors: "&#CF6679Слишком много цветов! Максимум: &#7858E9{max}"
too-few-colors: "&#CF6679Слишком мало цветов! Минимум: &#7858E9{min}"
not-enough-colors: "&#CF6679Слишком мало цветов! Минимум: &#7858E9{min}"
cooldown: "&#B798A8Подождите &#7858E9{time} &#B798A8сек"
cooldown: "&#7858E9Подождите &#7858E9{time} &#7858E9сек"
not-enough-points: "&#CF6679Недостаточно поинтов! Нужно: &#7858E9{price}"
not-enough-points-color: "&#CF6679Недостаточно поинтов! Нужно: &#7858E9{price}"
not-enough-points-prefix: "&#CF6679Недостаточно поинтов! Нужно: &#7858E9{price}"
player-not-found: "&#CF6679Игрок не найден"
color-help: "&#B798A8Использование: &#7858E9/color <HEX1> <HEX2>"
color-help: "&#7858E9Использование: &#7858E9/color <HEX1> <HEX2>"
color-success: "&#9878C9Градиент успешно &#7858E9установлен!"
color-no-colors: "&#B798A8У вас нет установленных цветов"
color-copy-usage: "&#B798A8Использование: &#7858E9/color copy <игрок>"
color-copy-no-colors: "&#B798A8У игрока &#7858E9{player} &#B798A8нет цветов"
prefix-help: "&#B798A8Использование: &#7858E9/prefix <текст> &#B798A8или &#7858E9/prefix reset"
prefix-success: "&#9878C9Префикс установлен! &#B798A8Стоимость: &#7858E9{price} &#B798A8поинтов"
color-no-colors: "&#7858E9У вас нет установленных цветов"
color-copy-usage: "&#7858E9Использование: &#7858E9/color copy <игрок>"
color-copy-no-colors: "&#7858E9У игрока &#7858E9{player} &#7858E9нет цветов"
prefix-help: "&#7858E9Использование: &#7858E9/prefix <текст> &#7858E9или &#7858E9/prefix reset"
prefix-success: "&#9878C9Префикс установлен! &#7858E9Стоимость: &#7858E9{price} &#7858E9поинтов"
prefix-success-free: "&#9878C9Префикс &#7858E9установлен!"
prefix-no-prefix: "&#B798A8У вас нет префикса"
prefix-no-prefix: "&#7858E9У вас нет префикса"
prefix-too-long: "&#CF6679Префикс слишком длинный! Максимум: &#7858E9{max}"
prefix-no-colors: "&#CF6679Префикс не может содержать цветовые коды!"
prefix-invalid-chars: "&#CF6679Недопустимые символы в префиксе!"
@ -182,30 +182,30 @@ gradient:
only-player: "&#CF6679Только для игроков!"
no-permission: "&#CF6679Нет прав!"
reload-success: "&#9878C9Конфигурация &#7858E9перезагружена!"
info-header: "&#7858E9▬▬▬▬▬▬▬▬ &#B798A8{player} &#7858E9▬▬▬▬▬▬▬▬"
info-prefix: "&#B798A8Префикс: &f{prefix}"
info-prefix-enabled: "&#B798A8Префикс активен: &f{enabled}"
info-colors: "&#B798A8Цвета: &f{colors}"
info-color-enabled: "&#B798A8Цвет активен: &f{enabled}"
info-prefix-purchased: "&#B798A8Куплен: &f{purchased}"
info-header: "&#7858E9▬▬▬▬▬▬▬▬ &#7858E9{player} &#7858E9▬▬▬▬▬▬▬▬"
info-prefix: "&#7858E9Префикс: &f{prefix}"
info-prefix-enabled: "&#7858E9Префикс активен: &f{enabled}"
info-colors: "&#7858E9Цвета: &f{colors}"
info-color-enabled: "&#7858E9Цвет активен: &f{enabled}"
info-prefix-purchased: "&#7858E9Куплен: &f{purchased}"
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ Custom nicknames (/nick) │
# └─────────────────────────────────────────────────────────────────────────────┘
nick:
current: "&#B798A8Ваш ник: &#7858E9{nick}"
usage: "&#B798A8Использование: &#7858E9/nick <ник> &#B798A8или &#7858E9/nick reset"
reset-usage: "&#B798A8Используйте &#7858E9/nick reset &#B798A8для сброса"
set-usage: "&#B798A8Используйте &#7858E9/nick <ник> &#B798A8для установки"
no-nick: "&#B798A8У вас нет кастомного ника"
current: "&#7858E9Ваш ник: &#7858E9{nick}"
usage: "&#7858E9Использование: &#7858E9/nick <ник> &#7858E9или &#7858E9/nick reset"
reset-usage: "&#7858E9Используйте &#7858E9/nick reset &#7858E9для сброса"
set-usage: "&#7858E9Используйте &#7858E9/nick <ник> &#7858E9для установки"
no-nick: "&#7858E9У вас нет кастомного ника"
reset-success: "&#9878C9Ник &#7858E9сброшен!"
set-success: "&#9878C9Ник изменён на: &f{nick}"
invalid: "&#CF6679Невалидный ник!"
requirements-header: "&#B798A8Требования:"
requirements-header: "&#7858E9Требования:"
requirements-length: "&#9878C9◆ &fДлина: 3-16 символов"
requirements-chars: "&#9878C9◆ &fБуквы, цифры, _, русские буквы"
requirements-colors: "&#9878C9◆ &fЦвета: &#7858E9&#RRGGBB&#B798A8текст"
requirements-colors: "&#9878C9◆ &fЦвета: &#7858E9&#RRGGBB&#7858E9текст"
taken: "&#CF6679Этот ник уже занят!"
error: "&#CF6679Не удалось установить ник!"
@ -214,12 +214,12 @@ nick:
# └─────────────────────────────────────────────────────────────────────────────┘
rp:
me: "<color:#B798A8>* {player} {action}</color>"
try-format: "<color:#B798A8>* {player} пытается {action}...</color> {result}"
me: "<color:#7858E9>* {player} {action}</color>"
try-format: "<color:#7858E9>* {player} пытается {action}...</color> {result}"
try-success: "<color:#9878C9><bold>[Успех!]</bold></color>"
try-fail: "<color:#CF6679><bold>[Провал!]</bold></color>"
do-format: "<color:#7858E9>[<color:#B798A8>Сцена</color>]</color> <white>{description}</white> <color:#9878C9>({player})</color>"
roll-format: "<color:#B798A8>* {player} бросает кубик и получает </color><color:#7858E9><bold>{result}</bold></color><color:#B798A8> из </color><color:#9878C9>{max}</color>"
do-format: "<color:#7858E9>[<color:#7858E9>Сцена</color>]</color> <white>{description}</white> <color:#9878C9>({player})</color>"
roll-format: "<color:#7858E9>* {player} бросает кубик и получает </color><color:#7858E9><bold>{result}</bold></color><color:#7858E9> из </color><color:#9878C9>{max}</color>"
roll-min-error: "<color:#CF6679>Минимальное значение кубика: 2</color>"
roll-max-error: "<color:#CF6679>Максимальное значение: 1000000</color>"
roll-invalid-number: "<color:#CF6679>Укажите число: /roll [максимум]</color>"