Аннотации вместо boilerplate
@Plugin, @Command, @On, @Permission, @Cooldown. Компилятор пишет регистрацию слушателей, обработчики команд и plugin.yml.
Kuroko компилируется в обычный JVM-байткод. @Plugin, @Command,
@On вместо registerEvents и CommandExecutor. Paper API доступен без импортов,
plugin.yml генерируется сам.
этот же код в Playground — с разбором и генерацией plugin.yml
Возможности
Аннотации вместо регистров, декларативные таблицы и меню, задачи и экономика — без обвязки на полфайла.
@Plugin, @Command, @On, @Permission, @Cooldown. Компилятор пишет регистрацию слушателей, обработчики команд и plugin.yml.
Player, Location, события, материалы доступны сразу — секция [minecraft] в kuroko.toml указывает платформу, индекс типов подтягивается компилятором.
Player?, ?., ?:. NPE ловится на компиляции с кодом KR001, а не на онлайне в 2 часа ночи.
Таблица объявляется внутри плагина: компилятор создаёт SQLite-схему и DAO — set, find, delete, where. Ни одного SQL-строки в коде плагина.
every(20 ticks), after(5 seconds), @Cooldown(3 seconds) — без конвертаций и магических чисел.
Инвентарные меню DSL-ом: слоты, предметы, обработчики кликов. Пагинация и заполнители — в kuroko.mc.gui.
Локальный реестр в духе npm: init, pack, list, search. Манифест pkr.toml знает о Minecraft-платформе проекта.
Валюта и хранилище объявляются в коде, предметы с поведением — клики, запрет выброса, неразрушимость — описываются рядом с логикой, а не раскиданы по слушателям.
Сравнение
Один и тот же HelloPlugin на трёх языках — реальные реализации из репозитория, не пересказ.
одинаковая логика: /sethome, /home, /delhome + хранилище
Java требует отдельных CommandExecutor-классов, ручных проверок прав в каждой команде и plugin.yml, который расползается с кодом.
Kuroko сворачивает команду, права и кулдаун в одну аннотированную функцию, а хранилище — в table {}.
Методика и файлы — в сравнении языков.
HelloPlugin.kr, HelloPlugin.java и HelloPlugin.kt — из examples/home-plugin в монорепозитории
Под капотом
Каждая аннотация разворачивается компилятором в обычный Bukkit-код. На сервере — ничего необычного: класс наследует JavaPlugin.
Имя, версия, авторы и команды уходят в манифест, класс наследует JavaPlugin с onEnable / onDisable.
Класс регистрируется как Listener, метод получает аннотацию EventHandler — подписка в onEnable генерируется сама.
Команда попадает в plugin.yml, обработчик и TabCompleter создаются по сигнатуре функции. @Permission и @Cooldown — рядом.
Задачи десугарятся в планировщик Bukkit: sync-задачи — в главный поток, async — в пул. Единицы времени считаются в тики автоматически.
Ошибки
Ошибки имеют коды KR001–KR999 и говорят по-русски, что случилось и как чинить. Каталог — в документации, kurokoc explain KR001 — в CLI.
Экосистема Sylnora
Вокруг Kuroko строится набор инструментов: документация, курс, реестр пакетов и среда разработки.
Язык, Minecraft-раздел, каталог ошибок. От установки до table и GUI.
ЧитатьРедактор с подсветкой Kuroko, разбор кода и генерация plugin.yml прямо в браузере.
ОткрытьМодули с XP и мини-играми: Heal Challenge и Catch the Bug — с первого экрана.
УчитьсяПакеты для плагинов: init, pack, search. Каталог и манифест pkr.toml.
СмотретьWeb-студия на Monaco: дерево проекта, подсветка .kr, панель проблем. IntelliJ-плагин с типом файла .kr — в разработке.
Дорожная карта
Честный статус: ядро пайплайна проверено (parse → bytecode → запуск), часть производственных задач ещё впереди.
Грамматика ANTLR, Hello World в байткод, запуск java
Типы, auto-import, @Plugin-десугаринг, plugin.yml
every/after/async, GUI DSL, table → SQLite, LSP-скелет
Оптимизатор IR, pkr CLI, IntelliJ-скелет, генератор тестов
Совместимость, сайт, курс, финальный отчёт
Реальный JavaPlugin-байткод, Paper smoke, fat-jar kurokoc
Текущая версия — design-stable developer preview: пайплайн parse → types → desugar → ASM → plugin.yml работает, эмиссия полноценного Listener/CommandExecutor-байткода и живой прогон на Paper-матрице — в фазе 5. Подробности — в GAP-анализе репозитория.
Поставь JDK 17+, пройди «Первый плагин за 5 минут» и проверь код в Playground. Без импортов, без plugin.yml руками.