▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/AdvancedSensitiveWords
AdvancedSensitiveWords

AdvancedSensitiveWords

Мощный антимат-плагин для серверов Minecraft на Paper. Фильтрует чат, команды, книги, таблички, предметы и ники с помощью DFA-алгоритма и опционального ИИ. Подходит для любых проектов, где нужен полный контроль над контентом.

Оцените первым
5.5K
20

AdvancedSensitiveWords

AdvancedSensitiveWords - это плагин для Paper, который решает проблему нецензурной лексики и нежелательного контента на серверах Майнкрафт. В основе лежит DFA-алгоритм (детерминированный конечный автомат) для быстрого поиска совпадений, плюс событийная проверка контента, модульные уровни нарушений и опциональная модерация через LLM (языковые модели).

Версия 2.x - это ломающий релиз. Он работает только на Paper, использует Gradle с Kotlin DSL и генерирует новую конфигурацию в kebab-case. Не используй старые конфиги до 2.0 без проверки каждого параметра.

Требования

КомпонентТребование
СерверPaper 1.21.11 или новее
JavaJava 21
Прокси (опционально)Velocity с соответствующей Velocity-сборкой
Опциональные интеграцииTrChat, PacketEvents, PlaceholderAPI, Floodgate, AuthMe

Spigot, CraftBukkit и BungeeCord не поддерживаются с версии 2.x.

Установка

  1. Скачай Paper-артефакт из релиза или собери paper:shadowJar локально.
  2. Положи Paper-джар в папку plugins/ сервера и запусти Paper один раз.
  3. Настрой plugins/AdvancedSensitiveWords/config.yml и сгенерированные messages_en.yml или messages_zhcn.yml.
  4. Выполни /asw reload all после изменения словарей или /asw reload config после изменения только конфигурации.

Для уведомлений на Velocity и прокси-команд установи Velocity-артефакт на прокси, включи plugin.hook-velocity: true на Paper, затем перезапусти обе стороны. Прокси-модуль сам по себе не фильтрует чат.

Что фильтрует 2.x

  • Чат и команды: Paper AsyncChatEvent, предобработка команд, контекст сообщений между сообщениями, настраиваемая замена или отмена, фейковые сообщения при отмене и совместимость с TrChat (фейковые сообщения/шадовбан).
  • Книги: проверка книг с пером по событиям, опциональная проверка по всем страницам в режиме отмены и кэш обработанных книг.
  • Таблички: проверка по строкам, по нескольким строкам и контекст последних табличек. В режиме отмены опциональный PacketEvents фейковый вид показывает автору его текст, а другие игроки видят реальную чистую табличку.
  • Наковальни и предметы: фильтрация переименований, а также отображаемых имен и описаний предметов через Adventure компоненты.
  • Ники игроков и объявления: отклонение входа для заблокированных ников и опциональная фильтрация объявлений.
  • Опциональная LLM-модерация: асинхронная проверка сообщений, которые не прошли DFA или контекст чата. Отключена по умолчанию, никогда не отзывает чат; может уведомлять, записывать, увеличивать отдельный AI VL и выполнять настроенные действия после подтвержденного ответа.

Быстрая настройка

Конфигурация генерируется в нижнем kebab-case. Сгенерированный файл - авторитетный список значений по умолчанию и встроенных комментариев.

plugin:
  language: en
  enable-chat-check: true
  enable-sign-edit-check: true

chat:
  method: CANCEL # REPLACE или CANCEL
  fake-message-on-cancel: false
  context-check: true

REPLACE заменяет совпавший текст на настроенный заменитель. CANCEL отклоняет взаимодействие. Фейковые сообщения чата и фейковый вид табличек - функции только для режима отмены.

Правила аргументов команд

chat.command-white-list также определяет, какие аргументы команд проверяются. При invert-command-white-list: true (по умолчанию) проверяются перечисленные пути команд, а команды вне списка пропускаются.

chat:
  invert-command-white-list: true
  command-white-list:
    - "[default:include] /msg [ignore:1]"
    - "[default:include] /bc [ignore:1,-1]"
    - "[default:ignore] /mail send [include:2..]"

Аргументы нумеруются после пути команды, начиная с 1. -1 - последний аргумент; 2.. означает со второго до конца. Директивы include и ignore обрабатываются по порядку. Игнорируемые аргументы разбивают сегменты обнаружения, так что заблокированное слово не может совпасть через пропущенный ник игрока, название сервера, число или другой параметр.

Наказания и уровни нарушений

У каждого модуля фильтрации свой список punishment и свой VL: CHAT, AI, BOOK, SIGN, ANVIL и ITEM. Команды используют общий VL CHAT. Ручной список по умолчанию в plugin.manual-punishment - исключение: его условия VL используют сумму по всем модулям.

chat:
  punishment:
    - "COMMAND|kick %player% Blocked content|VL>2"
    - "SHADOW|60|VL>5"

Поддерживаемые типы действий: COMMAND, COMMAND_PROXY, DAMAGE, HOSTILE, EFFECT и SHADOW. Используй %player% или %PLAYER% в командных действиях. Пустые списки оставляют активными обнаружение, логирование, уведомления и подсчет VL, но отключают автоматические действия.

Опциональная LLM-модерация

Включай LLM-проверку только после настройки совместимого провайдера и API-ключа. Paper загружает библиотеки LangChain4j через plugin.yml, так что серверу нужен доступ к сети или существующий кэш библиотек Paper при первом запуске.

a i:
  enabled: true
  base-url: https://api.deepseek.com
  api-mode: CHAT_COMPLETIONS # CHAT_COMPLETIONS, RESPONSES или ANTHROPIC_MESSAGES
  api-key-environment: DEEPSEEK_API_KEY
  model-name: deepseek-v4-flash

Перед запросом ASW требует, чтобы прямые DFA и контекстные проверки чата не сработали, затем применяет ограничения по длине сообщения, энтропии, кулдауну на игрока, количеству выполняемых запросов, конкурентности и очереди. Вывод LLM строго парсится локально перед любым последующим действием.

У каждой категории есть независимые пороги уверенности для уведомлений и наказаний, а также действия в разделе ai.category-policy. Запросы и ответы LLM аудируются в plugins/AdvancedSensitiveWords/llm-history/. Относись к этой папке как к чувствительным операционным данным.

ai.server-context-can-override - это политический переключатель владельца сервера. Когда включен, ai.server-context вставляется в доверенную системную политику и намеренно опускается из пользовательского JSON-пейлоада. Держи текст политики под контролем администратора; никогда не помещай туда ввод игрока, учетные данные или личные данные.

Команды

КомандаНазначение
/asw help [query]Показать справку по командам.
/asw statusПоказать общий статус плагина.
/asw ai statusПоказать счетчики LLM, состояние очереди, модель, режим API и политики категорий.
`/asw reload [allconfig]`
/asw test <text...>Проверить текст через DFA-фильтр.
/asw word add/remove <word> [word...]Изменить список заблокированных слов для текущей сессии.
/asw allow add/remove <word> [word...]Изменить список разрешенных слов для текущей сессии.
/asw player info <online-player>Показать VL по модулям и общий VL.
/asw player reset <online-player> [module]Сбросить VL всех или одного модуля.
/asw player punish <online-player> [method...]Выполнить настроенное ручное наказание или одно указанное действие.
/asw teleport <world-id> <x> <y> <z>Телепортировать сотрудника на указанную локацию.

/asw и /advancedsensitivewords эквивалентны. Изменения списков слов во время сессии сбрасываются при полной перезагрузке словаря или перезапуске сервера.

Права доступа (Permissions)

ПравоПо умолчаниюНазначение
advancedsensitivewords.bypassfalseОбход фильтрации.
advancedsensitivewords.noticeopПолучение уведомлений для персонала.
advancedsensitivewords.updateopПолучение уведомлений об обновлениях.
advancedsensitivewords.command.*falseРодительский узел для всех команд управления.
advancedsensitivewords.command.helpopИспользование справки.
advancedsensitivewords.command.statusopИспользование общего статуса.
advancedsensitivewords.command.ai.statusopИспользование статуса AI.
advancedsensitivewords.command.reload.allopПерезагрузка конфигурации и словарей.
advancedsensitivewords.command.reload.configopПерезагрузка только конфигурации.
advancedsensitivewords.command.testopИспользование DFA-теста.
advancedsensitivewords.command.word.addopДобавление заблокированных слов во время сессии.
advancedsensitivewords.command.word.removeopУдаление заблокированных слов во время сессии.
advancedsensitivewords.command.allow.addopДобавление разрешенных слов во время сессии.
advancedsensitivewords.command.allow.removeopУдаление разрешенных слов во время сессии.
advancedsensitivewords.command.player.infoopПросмотр VL игрока.
advancedsensitivewords.command.player.resetopСброс VL игрока.
advancedsensitivewords.command.player.punishopПрименение ручного наказания.

Интеграции и API

  • TrChat: совместимость с фейковыми сообщениями чата и отображением шадовбана. TrChat остается ответственным за свой форматирующий пайплайн.
  • PacketEvents: опционально и мягко требуется только для фейкового вида табличек. Без него поведение отмены табличек остается активным без фейкового вида.
  • PlaceholderAPI: включи plugin.enable-placeholder, чтобы получить доступ к плейсхолдерам %asw_version%, %asw_total_filtered%, %asw_is_shadow% и %asw_violation_count%.
  • Floodgate / AuthMe: опциональная обработка Bedrock-ников и статуса аутентификации.

Другие плагины Paper могут получить доступ к API шадовбана без зависимости от классов реализации:

import io.wdsj.asw.bukkit.api.AdvancedSensitiveWordsApi;
import java.time.Duration;

AdvancedSensitiveWordsApi.shadowBan().shadow(player, Duration.ofMinutes(5));

Событие AsyncModerationResponseEvent вызывается асинхронно после ответа LLM. Обработчики событий могут наблюдать, отменять последующие действия ASW или заменять подтвержденный результат, но должны сами планировать работу с Bukkit entity/world.

Сборка из исходников

.\gradlew.bat --no-daemon build

Лицензия

AdvancedSensitiveWords распространяется под лицензией GNU AGPL-3.0.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

26.2.x26.1.x1.21.x1.20.x1.19.x1.18.x1.17.x1.16.x1.15.x1.14.x1.13.x1.12.x1.11.x1.10.x1.9.x1.8.x1.7.x

Поддерживаемые окружения

Сервер

Ссылки


Детали

Лицензия:
Опубликован:2 года назад
Обновлён:21 часов назад
Главная