Kuroko 1.1.0-dev · JVM 17+ · Paper-first

Плагины для Minecraft без Java-шума

Kuroko компилируется в обычный JVM-байткод. @Plugin, @Command, @On вместо registerEvents и CommandExecutor. Paper API доступен без импортов, plugin.yml генерируется сам.

HelloPlugin — 14 строк 0 импортов обычный .jar на выходе
HelloPlugin.kr kuroko
parse: 0 errors · auto-import: Player, PlayerJoinEvent · plugin.yml сгенерирован

этот же код в Playground — с разбором и генерацией plugin.yml

HelloPlugin.kr · 14 строк
ANTLR parse
типы · auto-import
десахаринг @Plugin / @Command / @On
ASM кодоген
HelloPlugin-1.0.jar + plugin.yml
0
строк в HelloPlugin — цель ≤ 15 достигнута
0×
короче Java на HomePlugin (значимых строк)
0
импортов — весь Paper API через auto-import
JVM 17+
обычный байткод: Paper, Purpur, Leaf, Spigot

Возможности

Всё, что нужно плагину, есть в языке

Аннотации вместо регистров, декларативные таблицы и меню, задачи и экономика — без обвязки на полфайла.

Аннотации вместо boilerplate

@Plugin, @Command, @On, @Permission, @Cooldown. Компилятор пишет регистрацию слушателей, обработчики команд и plugin.yml.

Auto-import Paper API

Player, Location, события, материалы доступны сразу — секция [minecraft] в kuroko.toml указывает платформу, индекс типов подтягивается компилятором.

Null-safety как в Kotlin

Player?, ?., ?:. NPE ловится на компиляции с кодом KR001, а не на онлайне в 2 часа ночи.

table {} — база данных декларацией

Таблица объявляется внутри плагина: компилятор создаёт SQLite-схему и DAO — set, find, delete, where. Ни одного SQL-строки в коде плагина.

Время в единицах

every(20 ticks), after(5 seconds), @Cooldown(3 seconds) — без конвертаций и магических чисел.

GUI в несколько строк

Инвентарные меню DSL-ом: слоты, предметы, обработчики кликов. Пагинация и заполнители — в kuroko.mc.gui.

pkr — пакеты для Kuroko

Локальный реестр в духе npm: init, pack, list, search. Манифест pkr.toml знает о Minecraft-платформе проекта.

economy и smartItem

Валюта и хранилище объявляются в коде, предметы с поведением — клики, запрет выброса, неразрушимость — описываются рядом с логикой, а не раскиданы по слушателям.

Сравнение

Меньше строк. Та же JVM.

Один и тот же HelloPlugin на трёх языках — реальные реализации из репозитория, не пересказ.

HomePlugin: значимые строки

одинаковая логика: /sethome, /home, /delhome + хранилище

Java~175 строк + 15 импортов
Kotlin~130 строк + 10 импортов
Kuroko~55 строк · 0 импортов · plugin.yml автоматом

Java требует отдельных CommandExecutor-классов, ручных проверок прав в каждой команде и plugin.yml, который расползается с кодом. Kuroko сворачивает команду, права и кулдаун в одну аннотированную функцию, а хранилище — в table {}. Методика и файлы — в сравнении языков.

~3.2×
Kuroko vs Java
~2.4×
Kuroko vs Kotlin

HelloPlugin.kr, HelloPlugin.java и HelloPlugin.kt — из examples/home-plugin в монорепозитории

Под капотом

Куда уходит бойлерплейт

Каждая аннотация разворачивается компилятором в обычный Bukkit-код. На сервере — ничего необычного: класс наследует JavaPlugin.

@Plugin → JavaPlugin + plugin.yml

Имя, версия, авторы и команды уходят в манифест, класс наследует JavaPlugin с onEnable / onDisable.

@Plugin(name = "Hello") extends JavaPlugin + yml

@On → Listener + @EventHandler

Класс регистрируется как Listener, метод получает аннотацию EventHandler — подписка в onEnable генерируется сама.

@On fun onJoin(e: PlayerJoinEvent) @EventHandler + registerEvents

@Command → CommandExecutor

Команда попадает в plugin.yml, обработчик и TabCompleter создаются по сигнатуре функции. @Permission и @Cooldown — рядом.

@Command("heal") setExecutor + yml commands

every / after / async → BukkitRunnable

Задачи десугарятся в планировщик Bukkit: sync-задачи — в главный поток, async — в пул. Единицы времени считаются в тики автоматически.

every(20 ticks) { … } runTaskTimer(…, 20L)

Ошибки

Сообщения, которые понятно читать

Ошибки имеют коды KR001–KR999 и говорят по-русски, что случилось и как чинить. Каталог — в документации, kurokoc explain KR001 — в CLI.

BuggyPlugin.kr:6 · KR001 · ошибка Нельзя присвоить null типу Int (переменная «hp»). Объяви Int? или убери null.
плохоkuroko
хорошоkuroko

Экосистема Sylnora

Язык — это начало

Вокруг Kuroko строится набор инструментов: документация, курс, реестр пакетов и среда разработки.

Sylnora Studio — IDE для Kuroko

Web-студия на Monaco: дерево проекта, подсветка .kr, панель проблем. IntelliJ-плагин с типом файла .kr — в разработке.

в разработке

Дорожная карта

Фазы 0–4 пройдены, 5-я в работе

Честный статус: ядро пайплайна проверено (parse → bytecode → запуск), часть производственных задач ещё впереди.

ФАЗА 0

Прототип

Грамматика ANTLR, Hello World в байткод, запуск java

ФАЗА 1

Alpha

Типы, auto-import, @Plugin-десугаринг, plugin.yml

ФАЗА 2

Beta

every/after/async, GUI DSL, table → SQLite, LSP-скелет

ФАЗА 3

RC

Оптимизатор IR, pkr CLI, IntelliJ-скелет, генератор тестов

ФАЗА 4

Stable 1.0

Совместимость, сайт, курс, финальный отчёт

ФАЗА 5

Ecosystem 1.1

Реальный 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 руками.