Проверяет, что из твоих плагинов сломается при переходе на Minecraft 26.x — до того, как ты обновишься.
Бесплатно, открытый исходный код, GPL-3.0. Без обфускации, без «премиум-версии», без телеметрии.
Автор — Somikyy · t.me/somikyy · разработка плагинов и 3D-моделей.
С версии 26.1 Mojang перестал отдавать обфусцированные server-jar'ы, а Paper выкинул внутренний ремаппер. Формулировка PaperMC: плагин со Spigot-маппингами «не будет работать на 26.1, независимо от того, Paper у вас или нет».
По данным Modrinth на 1 августа 2026: под 1.21.4 — 12 631 плагин, под 26.2 — 2 532 из 16 482. Примерно 85% экосистемы ещё не перешло рубеж.
Раньше узнать, что именно у тебя отвалится, можно было одним способом: обновиться и смотреть.
- Скачай
SNDoctor-26.8.1.jarиз релизов - Положи в
plugins/ - Перезапусти сервер
Конфиг создастся сам при первом запуске. Никаких зависимостей ставить не нужно.
Требования: Java 17 или новее. Плагин собран под api-version: 1.21.
Отдельно ставить ничего не надо и для режима командной строки — это тот же самый файл.
Сервер запускать не нужно. Это и есть главный сценарий: проверять надо тогда, когда сервер ещё работает на старой версии или уже не стартует на новой.
java -jar SNDoctor.jar plugins --java 25/sndoctor scan
Сканирование идёт асинхронно, главный поток не трогается. В чат уходит сводка, полный отчёт
пишется в plugins/SNDoctor/reports/.
По умолчанию SNDoctor проверяет плагины через пять секунд после старта и пишет итог в консоль.
Ради этого его и ставят: обновил ядро, поднял сервер — и сразу видно, что не завелось, вместо
чтения стектрейсов по одному. Отключается в config.yml.
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.
Вердикты: красный — не запустится, жёлтый — запустится, но что-то сломано или устарело, зелёный — проблем не найдено.
Отдельной секцией идёт «на ручную проверку» — эвристики безопасности. Они не влияют на вердикт совместимости: «стоит посмотреть глазами» и «запустится ли» — разные вопросы, и смешивать их значило бы врать светофором.
| команда | что делает | право |
|---|---|---|
/sndoctor |
без аргументов сразу запускает проверку — то же, что scan |
sndoctor.use |
/sndoctor scan |
сводка в чат, полный отчёт в файл | sndoctor.use |
/sndoctor full |
то же плюс справочные находки и список зелёных | sndoctor.use |
/sndoctor version |
версия плагина и цель проверки | sndoctor.use |
/sndoctor reload |
перечитать config.yml без рестарта сервера |
sndoctor.reload |
/sndoctor help |
список команд | sndoctor.use |
Алиасы: /snd, /sndoc, /снд. Флаги --lang ru|en и --full работают и в игре:
/snd scan --lang en --full. Автодополнение по Tab есть у подкоманд, флагов и значений --lang.
Оба права по умолчанию только у операторов. Вся команда закрыта правом sndoctor.use на уровне
plugin.yml, поэтому одного sndoctor.reload не хватит — без sndoctor.use команда не введётся
вообще.
Весь конфиг — plugins/SNDoctor/config.yml, десяток строк. Значения по умолчанию рассчитаны
на то, чтобы плагин был полезен сразу после установки.
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 = не удалять--lang в команде перекрывает language для одного запуска.
| Флаг | Смысл |
|---|---|
--java <N> |
Java, на которой будет крутиться сервер. Без неё SNDoctor не может сказать «плагину нужна Java новее». |
--json <файл> |
машинный отчёт для бота, панели или CI |
--out <файл> |
полный текстовый отчёт |
--names <файл> |
свой список Spigot-имён поверх встроенного |
--lang ru|en |
язык вывода, по умолчанию русский |
--full |
показывать справочные находки и перечислять зелёные плагины |
--no-color |
без ANSI-цветов |
--color |
включить цвета принудительно |
Код возврата: 2 — есть красные, 1 — есть жёлтые, 0 — чисто.
Отчёт печатается в той кодировке, которую консоль действительно понимает, а не вслепую в UTF-8:
русская консоль Windows работает на cp866, и UTF-8 в ней превращается в иероглифы. Символы, которых
в кодировке нет, заменяются на понятные аналоги (● → *, → → >), а не на вопросительные знаки.
Ставить chcp 65001 перед запуском не нужно.
Цвета в обычной консоли Windows по умолчанию выключены: PowerShell печатает сами escape-коды вместо
того, чтобы им подчиняться. В Windows Terminal и Git Bash цвет включается сам, а --color включает
его принудительно где угодно.
java -jar SNDoctor.jar plugins --java 25 || echo "не обновляемся"23 правила совместимости и 5 эвристик безопасности. Полная таблица со ссылками на первоисточники — в docs/SPEC-SNDoctor.md, раздел 4.
Коротко:
- Не запустится: Spigot-маппинги NMS, версионные пакеты
net.minecraft.server.v1_XX_RXиorg.bukkit.craftbukkit.v1_XX_RX, отсутствующий в архиве главный класс, требование Java новее, чем на сервере. - Сломано или устарело:
TeleportFlag.EntityState(больше не работает), Conversation API, Metadata API,PlayerSpawnLocationEvent, легаси-API предметов до 1.13, отсутствиеapi-version, зависимость от ProtocolLib. - На ручную проверку: запуск внешних процессов, загрузка кода во время работы, обращения к
сырым IP и вебхукам, чтение
rcon.passwordиops.json, одиночные классы внутри пакета известной библиотеки.
Каждое правило опирается на первоисточник — анонс PaperMC, пометку deprecated в javadoc или наблюдаемое свойство самого jar.
Два кандидата проверены и не добавлены, потому что подтверждения не нашлось: смена
идентификаторов геймрулов с camelCase на snake_case и переход методов длительности WorldBorder
с миллисекунд на тики. Ни того, ни другого нет в анонсе Paper 1.21.9/1.21.10.
Одно ложное «не запустится» стоит дороже десяти пропущенных проблем: оно ломает доверие ко всему отчёту.
SNDoctor не запускает и не загружает код плагинов. Каждый jar читается как zip-архив, каждый class-файл — как поток байт. Плагин, который SNDoctor проверяет, никогда не оказывается в JVM.
Ноль runtime-зависимостей. Ни ASM, ни SnakeYAML, ни JSON-библиотеки — свой ридер class-файлов и свой ридер YAML. Итоговый jar — около 70 КБ. Инструмент, который кладут на уже сломанный сервер, не должен приносить с собой ещё один способ конфликтовать с classpath. И плагин на 70 КБ с открытым кодом проверяется глазами за вечер.
В сеть плагин ходит ровно один раз и только за номером последней версии — это отключается
строкой update-check: false. Никакой статистики, никакой телеметрии.
- Ядро. Из серверного API используются пять классов Bukkit:
JavaPlugin,Command,CommandSender,TabCompleterи планировщик. Ни одного Paper-only API в коде нет — можешь убедиться сам, весь список импортов виден грепом поsrc/. - Folia — нет. В
plugin.ymlчестно стоитfolia-supported: false: сканирование планируется черезBukkitScheduler, а он на Folia бросает исключение. Ставить флаг «на всякий случай» — это обещать то, чего нет. На Folia пользуйся режимом командной строки, ему сервер вообще не нужен. - Java. Плагин собран под 17, потому что должен запускаться на тех самых старых серверах, которые он и диагностирует. На 21 и 25 работает.
Нужен только JDK 17 или новее:
git clone https://github.com/Somikyy/SNDoctor.git && cd SNDoctor && bash tools/offline/verify.shГотовый jar появится в build/offline/jar/. Скрипт собирает плагин без доступа в интернет и
прогоняет 39 утверждений на синтетических jar-ах. Компиляция идёт против крошечных заглушек Bukkit
из tools/offline/bukkit-stubs, которые не попадают в jar — настоящие классы даёт сервер.
Это не экзотика, а основной путь: repo.papermc.io и Maven Central для машины в РФ бывают
недоступны, и сборка инструмента для сломанного сервера не должна от этого зависеть.
Обычная сборка через Gradle тоже есть, ей нужен доступ к repo.papermc.io и JDK 21 — paper-api
опубликован как Java 21, и Gradle не отдаст его на classpath под 17. Байт-код при этом остаётся
17-м, так что готовый jar по-прежнему запускается на старых серверах:
gradle buildJar в релизах собран именно ею — против настоящего paper-api, а не против заглушек. Заглушка,
у которой разошёлся хотя бы возвращаемый тип, компилируется молча и роняет плагин на сервере с
NoSuchMethodError: в JVM возвращаемый тип входит в дескриптор метода, так что запрошенного метода
просто нет. Поэтому дескрипторы каждой сборки сверяются с записанным
tools/offline/bukkit-api-surface.txt, а CI дополнительно сравнивает офлайн-сборку с собранной
против настоящего API. Подробности — в спеке, раздел 8.1.
Список Spigot-имён (105 записей) лежит в sndoctor/spigot-names.txt внутри jar. Расширяется без
пересборки:
- режим плагина:
plugins/SNDoctor/spigot-names.txt - режим CLI:
--names my-names.txt
Формат — SpigotName=MojangName, строки с # игнорируются. Твои записи добавляются поверх
встроенных.
Нашёл имя, которого не хватает? Присылай PR — это самый простой способ помочь проекту, подробности в CONTRIBUTING.md.
Somikyy — t.me/somikyy
Разработка плагинов и 3D-моделей. В канале выходят новые плагины линейки SN — все бесплатные и с открытым исходным кодом.
GPL-3.0-or-later. См. LICENSE.
Часть линейки SN (Somikyy Network) — бесплатных open-source плагинов для Minecraft-серверов.
Готовый текст для публикации на форумах:
- docs/RESOURCE-PAGE.md — читаемая версия
- docs/RESOURCE-PAGE.bbcode.txt — BBCode для XenForo (spigotmc.ru, black-minecraft.ru)
- docs/RESOURCE-PAGE.commands.bbcode.txt — команды и права отдельным блоком, для форумов, где под них есть своё поле