[1.21+ / 26.x] SNDoctor — покажет, что сломается при обновлении, до обновления | Open Source

Плагин [1.21+ / 26.x] SNDoctor — покажет, что сломается при обновлении, до обновления | Open Source 26.8.1

Создайте и подтвердите аккаунт для скачивания
Поддерживаемые версии
  1. 1.21
  2. 26
Ядра и Прокси
  1. Bukkit
  2. Spigot
  3. Paper
Минимальная версия Java
17
Исходный код
https://github.com/Somikyy/SNDoctor
SNDoctor

Покажет, что сломается при обновлении на 26.x — до того, как ты обновишься

Бесплатно · Открытый исходный код · GPL-3.0 · Ноль зависимостей

────────────────────────────────────────────────────────────


В чём проблема

С версии 26.1 Mojang перестал отдавать обфусцированные server-jar'ы, а Paper полностью выкинул внутренний ремаппер. Формулировка PaperMC дословно: плагин со Spigot-маппингами «не будет работать на 26.1, независимо от того, Paper у вас или нет».

Масштаб последствий — данные Modrinth на 1 августа 2026:

версияплагинов с поддержкой
1.21.412 631
26.14 264
26.22 532
всего плагинов на Modrinth16 482

Примерно 85% экосистемы ещё не перешло рубеж. А узнать, что именно сломается на твоей сборке, до сих пор можно было ровно одним способом: обновиться и смотреть, что упало.


Что делает SNDoctor

Читает каждый jar в папке plugins как zip-архив, каждый class-файл — как поток байт, и выносит вердикт по каждому плагину:

  • красный — не запустится
  • жёлтый — запустится, но что-то сломано или устарело
  • зелёный — проблем не найдено

Главное: сервер запускать не нужно. Проверять надо тогда, когда сервер ещё работает на старой версии или уже не стартует на новой.

Код:
java -jar SNDoctor.jar plugins --java 25


Как выглядит отчёт

Код:
SNDoctor 26.8.1  —  проверка плагинов на совместимость с Minecraft 26.1+
Папка: /srv/mc/plugins
Найдено jar: 37   Java сервера: 21   Время: 180 ms

КРАСНЫЙ 12   ЖЁЛТЫЙ 9   ЗЕЛЁНЫЙ 15   НА ПРОВЕРКУ 1

КРАСНЫЕ — не запустятся (12)
───────────────────────────────────────────
● LegacyPlugin 1.0   LegacyPlugin.jar   Java 17
    ✗ Spigot-маппинги NMS  [EntityPlayer → ServerPlayer, NBTTagCompound → CompoundTag]
        С 26.1 Mojang не отдаёт обфусцированные server-jar'ы, а Paper полностью убрал
        внутренний ремаппер. Формулировка PaperMC: плагин со Spigot-маппингами «не будет
        работать на 26.1, независимо от того, Paper у вас или нет».
        → Пересобрать плагин на Mojang-маппингах (paperweight-userdev) или найти замену.
    ✗ Версионный пакет CraftBukkit  [org.bukkit.craftbukkit.v1_20_R3]
        Paper убрал релокацию org.bukkit.craftbukkit.vX_Y_RZ ещё в 1.20.5. Такие ссылки
        приводят к NoClassDefFoundError при загрузке.
        → Заменить на неверсионные org.bukkit.craftbukkit.* или на публичный API.

Каждая находка — это не просто «плохо», а три вещи: что нашли, почему это ломается и что с этим делать.


Чем отличается от того, что уже есть

Прямого аналога я не нашёл. Ближайшее по смыслу — платные решения про автообновление плагинов, но обновление и совместимость с новой мажорной версией это разные задачи: автообновление подтянет новую версию плагина, если она есть, и промолчит про плагин, который просто заброшен.

Канонический совет комьюнити по диагностике до сих пор звучит как «читай логи и убирай плагины по одному». Работает, но занимает вечер и требует запущенного сервера — а сервер как раз и не стартует.


Три правила, на которых он построен

1. Чужой код никогда не выполняется.
SNDoctor не загружает и не запускает проверяемые плагины. Jar читается как архив, class — как байты. Проверяемый плагин не оказывается в JVM ни на секунду. Для инструмента, которому дают папку с непроверенными jar-ами, это не опция, а обязательное условие.

2. Ноль зависимостей.
Ни ASM, ни SnakeYAML, ни JSON-библиотеки — свой ридер class-файлов и свой ридер YAML. Итоговый jar — около 70 КБ. Инструмент, который кладут на уже сломанный сервер, не должен приносить с собой ещё один способ конфликтовать с classpath. И 70 КБ открытого кода проверяются глазами за вечер — после истории с бэкдором в мае 2026 это не лишнее.

3. Ни одного правила «по ощущениям».
Каждое опирается на первоисточник: анонс PaperMC, пометку deprecated в javadoc или наблюдаемое свойство самого jar.

Два правила-кандидата проверены и намеренно не добавлены, потому что подтверждения не нашлось: смена идентификаторов геймрулов с camelCase на snake_case и переход методов длительности WorldBorder с миллисекунд на тики. Ни того, ни другого нет в анонсе Paper 1.21.9/1.21.10 — значит, правила нет.

Одно ложное «не запустится» стоит дороже десяти пропущенных проблем: админ, которому соврали про рабочий плагин, дальше не поверит ни одной строчке отчёта. И будет прав.


Что проверяется

23 правила совместимости и 5 эвристик безопасности.

Не запустится:
  • Spigot-маппинги NMS — по таблице из 105 имён
  • версионные пакеты net.minecraft.server.v1_XX_RX и org.bukkit.craftbukkit.v1_XX_RX
  • главный класс из plugin.yml отсутствует в архиве
  • плагину нужна Java новее, чем на сервере

Сломано или устарело:
  • TeleportFlag.EntityState — больше не имеет функциональности
  • Conversation API, Metadata API, PlayerSpawnLocationEvent
  • легаси-API предметов до 1.13, отсутствие или древний api-version
  • зависимость от ProtocolLib

На ручную проверку — на вердикт не влияет:
  • запуск внешних процессов, загрузка кода во время работы
  • обращения к сырым IP, пейстбинам и вебхукам
  • чтение rcon.password, ops.json, usercache.json
  • одиночные классы внутри пакета известной библиотеки

Настоящий шейдинг библиотеки приносит сотни её классов. Если внутри org/apache/commons/lang3/ лежит один класс — это не шейдинг, это чужой код в чужом пакете. Ровно такой формы был бэкдор, разобранный в RU-комьюнити в мае 2026.

Секция безопасности не влияет на вердикт совместимости: «стоит посмотреть глазами» и «запустится ли» — разные вопросы, и смешивать их значило бы врать светофором.


Три режима работы

1. До обновления, из командной строки. Основной сценарий, сервер не нужен.

Код:
java -jar SNDoctor.jar plugins --java 25

Код возврата: 2 — есть красные, 1 — есть жёлтые, 0 — чисто. Годится для скрипта:

Код:
java -jar SNDoctor.jar plugins --java 25 || echo "не обновляемся"

2. На живом сервере, командой. /sndoctor scan — сводка в чат, полный отчёт в файл. Сканирование асинхронное, главный поток не трогается.

3. Само, при запуске сервера. По умолчанию проверка идёт через пять секунд после старта, итог пишется в консоль. Обновил ядро, поднял сервер — и сразу видно, что не завелось.


Флаги командной строки

флагсмысл
--java <N>Java, на которой будет крутиться сервер
--json <файл>машинный отчёт для бота, панели или CI
--out <файл>полный текстовый отчёт в файл
--names <файл>свой список Spigot-имён поверх встроенного
--lang ru|enязык вывода, по умолчанию русский
--fullпоказывать справочные находки и зелёные плагины
--no-colorбез ANSI-цветов


Настройка

Весь конфиг — десяток строк в plugins/SNDoctor/config.yml:

Форматирование (BB-код):
general:
  language: ru          # язык отчёта: ru или en
  update-check: true    # один async-запрос к api.github.com при старте
                        # false = плагин не ходит в сеть вообще никогда

scan:
  on-start: true        # проверять плагины при запуске сервера
  start-delay: 100      # задержка перед автопроверкой, в тиках
  full: false           # включать ли справочные находки

reports:
  enabled: true         # писать отчёты в plugins/SNDoctor/reports/
  json: true            # дополнительно писать машиночитаемый .json
  keep: 20              # сколько последних проверок хранить, 0 = не удалять

Никакой телеметрии и никакой статистики плагин не собирает и не отправляет.


Расширение таблицы имён

Список Spigot-имён — 105 записей — лежит внутри jar и расширяется без пересборки:

  • режим плагина: plugins/SNDoctor/spigot-names.txt
  • режим CLI: --names my-names.txt

Формат — SpigotName=MojangName, строки с # игнорируются. Твои записи добавляются поверх встроенных.

Нашёл имя, которого не хватает? Присылай на GitHub — это самый простой способ помочь проекту.


Где запускается

гдестатус
Режим командной строкиЛюбая ОС с Java 17+. Сервер не нужен вообще
Плагин на Paper 1.21+Собрано под api-version 1.21
Spigot, Purpur, Pufferfish и прочие форкиИз серверного API используются пять базовых классов Bukkit, Paper-only API в коде нет
Foliafolia-supported: false — честно. Пользуйся режимом командной строки

Минимальная Java — 17. Ниже, чем у большинства современных плагинов, и это осознанно: SNDoctor должен запускаться на тех самых старых серверах, которые он и диагностирует. На 21 и 25 работает.


Зависимости

Обязательных нет. Опциональных тоже нет. Плагин самодостаточен: ни одной библиотеки внутри, ни одного депенда снаружи. Единственная зависимость сборки — API сервера, и та compileOnly.


Команды

Основная команда: /sndoctor · Алиасы: /snd, /sndoc, /снд

командаописаниеправо
/sndoctor scanсводка в чат, полный отчёт в файлsndoctor.use
/sndoctor fullто же плюс справочные находки и список зелёныхsndoctor.use
/sndoctor scan --lang enотчёт на английскомsndoctor.use
/sndoctor versionверсия и цель проверкиsndoctor.use
/sndoctor reloadперечитать config.yml без рестартаsndoctor.reload

Права

правопо умолчаниючто даёт
sndoctor.useоператорзапуск проверки и просмотр отчёта
sndoctor.reloadоператорперезагрузка config.yml

Автодополнение по Tab работает у всех аргументов.


Установка

  1. Скачай SNDoctor-26.8.1.jar
  2. Положи в папку plugins/
  3. Перезапусти сервер

Конфиг создастся сам при первом запуске. Ставить рядом ничего не надо.

Для проверки без запуска сервера тот же самый файл запускается напрямую:

Код:
java -jar SNDoctor-26.8.1.jar plugins --java 25


Исходный код

You must be logged in to see this link.

Собирается без доступа в интернет одной командой — bash tools/offline/verify.sh — и прогоняет 39 утверждений на синтетических jar-ах, собранных так, чтобы содержать ровно те байты, которые ищет каждое правило. Правило без фикстуры в этом проекте не считается сделанным.


────────────────────────────────────────────────────────────

Somikyy

You must be logged in to see this link.

Разработка плагинов и 3D-моделей

В канале выходят новые плагины линейки SN — все бесплатные и с открытым исходным кодом.
Там же можно заказать плагин или модель под свой проект.

Лицензия GPL-3.0-or-later: пользуйся где угодно, включая коммерческие серверы, правь под себя.
Если распространяешь изменённую версию — открывай исходники, как и я.

Понравился плагин? Загляни в You must be logged in to see this link.
Зависимости
Нет. Ни обязательных, ни опциональных.
Команды и права
Команды

Основная команда: /sndoctor · Алиасы: /snd, /sndoc, /снд

командачто делаетправо
/sndoctorбез аргументов сразу запускает проверку — то же, что scansndoctor.use
/sndoctor scanсводка в чат, полный отчёт в файлsndoctor.use
/sndoctor fullто же плюс справочные находки и список зелёных плагиновsndoctor.use
/sndoctor versionверсия плагина и цель проверкиsndoctor.use
/sndoctor reloadперечитать config.yml без рестарта сервераsndoctor.reload
/sndoctor helpсписок командsndoctor.use


Флаги

Работают и в игре, не только в командной строке.

флагсмысл
--lang ru|enязык отчёта на один запуск, перекрывает config.yml
--fullто же, что подкоманда full

Например: /snd scan --lang en --full

Автодополнение по Tab работает и у подкоманд, и у флагов, и у значений --lang.

Проверка идёт асинхронно, главный поток не трогается. В чат уходит сводка и первые десять красных, полный отчёт пишется в plugins/SNDoctor/reports/. Пока проверка идёт, повторный запуск вторую не стартует.


Права

правопо умолчаниючто даёт
sndoctor.useоператордоступ к команде: запуск проверки, просмотр отчёта, версия
sndoctor.reloadоператорперезагрузка config.yml

Важная деталь. Вся команда закрыта правом sndoctor.use на уровне plugin.yml, поэтому одного sndoctor.reload не хватит: без sndoctor.use игрок не сможет ввести команду вообще.

Хелперу — только смотреть, без права менять настройки:
Код:
/lp group helper permission set sndoctor.use true

Администратору — всё:
Код:
/lp group admin permission set sndoctor.use true
/lp group admin permission set sndoctor.reload true

Если раздавать права никому не нужно — не делай ничего: оба права по умолчанию есть только у операторов.
Автор
somikyy
Скачивания
3
Просмотры
52
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя somikyy

Поделиться ресурсом

Назад
Сверху Снизу