Перейти к содержимому

Paper и Minestom в терминах mcrs

Меняется. Следите: #283, #285, #281, #546, #78, #82, #296, #321, #537, #266, #159, #154

Эта страница - справочная таблица для тех, кто знает Paper, Velocity или Minestom. Найдите знакомое название, и строка покажет, что ближе всего к нему в mcrs и в каком это состоянии сегодня. Если слова “сущность” и “система” вам незнакомы, сначала прочтите От объектов к данным.

JVM mcrs Состояние Заметки
JavaPlugin, onEnable impl Plugin for X с fn build(&self, app: &mut App) Работает#279 Как и в Minestom, свой main пишете вы, см. src/main.rs. Ни plugin.yml, ни отдельного jar нет
onDisable Хука нет. Остановка идет через сообщение ShutdownRequest Частичноshutdown.rs Запрос отправляет код, который встраивает сервер. Обработчик сигналов не устанавливается
depend: и softdepend: Группа плагинов: если плагину нужен другой, он падает в build и называет недостающий Работает#279 См. MinecraftServerPlugins в lib.rs
Отключить встроенную часть server.disable::<SomePlugin>() на группе плагинов Работает#282 Используется в main.rs, чтобы выключить мозг мобов
/reload, PlugMan Нет. Код не перезагружается В работе#316 Планируется только перезагрузка датапаков
NMS, CraftBukkit Любой публичный крейт библиотечных слоев Не планируется#437 Фасада между вашим кодом и движком нет, поэтому эти крейты - одновременно NMS и API
Статический Bukkit.getServer() Нет. Res<T>, Query<..> и Commands берутся как параметры системы Не планируется#437 Статический доступ отклонили
Зависимость от paper-api Git-зависимость от крейтов mcrs Решения нет#321 Одна версия игры за раз, без обратной совместимости (Не планируется#412)
JVM mcrs Состояние Заметки
Listener, @EventHandler Наблюдатель app.add_observer(f) с f: fn(On<Event>) или MessageReader<M> для буфера сообщений Частично#283 Публичные события есть только для чата. Наблюдатели пакетов есть как Received<P>
setCancelled(true) Поле cancelled события, которое меняет наблюдатель с параметром mut Частично#636 Только PlayerChatEvent. Общий механизм с откатом предсказания клиента - это Частично#283
AsyncChatEvent PlayerChatEvent { player, text, cancelled } Работает#636 text - компонент Text, а не String. Событие срабатывает до рассылки
EventPriority Порядок систем: .before(), .after(), SystemSet, например TickSet Работает#323 У наблюдателей приоритета нет. Неупорядоченный конфликт ломает тест
PlayerJoinEvent, PlayerQuitEvent Внутренние сообщения шины InboundPlayerSpawn и InboundPlayerDespawn Частично#283 Публичного события пока нет. Публичные события входа и выхода запланированы
BlockBreakEvent, BlockPlaceEvent Внутреннее сообщение BlockActionRequest Частично#283 Публичные отменяемые события запланированы
ProtocolLib, слушатели пакетов On<Received<P>> над типизированными игровыми пакетами Частично Типизирована примерно половина пакетов, см. README. Единый путь типизированного приема: Частично#57
Дерево EventNode в Minestom Дерева событий нет, есть только наблюдатели и расписания Bevy Решения нет Issue нет. Этот паттерн не копируйте
JVM mcrs Состояние Заметки
runTaskTimer Система в FixedUpdate, по умолчанию 20 тиков в секунду (DEFAULT_TPS) Работаетrunner.rs Состояние храните в ресурсе или Local<T>. Планированием занимается Bevy, собственного планировщика в mcrs нет
runTaskLater Счетчик или таймер в ресурсе или компоненте, либо Res<Time<Fixed>> Работает Пишется вручную, готовых хелперов нет
runTask для возврата в главный поток Не нужен. Главного потока в смысле Bukkit нет Работает#357 См. От объектов к данным
runTaskAsynchronously Пулы задач Bevy есть, но документированного паттерна для плагинов нет Частично Issue нет. Параллельность обеспечивает планировщик
JVM mcrs Состояние Заметки
Player, Entity как объекты Id Entity плюс компоненты Player, GameProfile, PlayerGameMode, Transform Работаетability.rs У игрока три идентификатора: Entity из Bevy, PlayerSession, который живет между измерениями, и сетевой id (В работе#158)
player.sendMessage(Component) Сообщение OutboundPlayerPacket, собранное через bus::to и хелпер system_chat Частично Это низкий уровень, и player.send() нет
Bukkit.getOnlinePlayers() Query<&GameProfile, With<Player>> внутри измерения Частично Игроки живут в мирах измерений, общей коллекции нет (В работе#154)
world.getBlockAt(..).setType(..) Сообщение BlockSetRequest и API томов WorldView Частично Работает внутри одного измерения. Единый API доступа к миру - это Частично#486
World и createWorld для мини-игр Миры измерений фиксируются на старте В работе#546 Создание и удаление мира во время работы запланировано
Instance из Minestom Мир измерения (sub-app) Работает#280 Плагины добавляйте через add_dimension_plugin, а не через add_plugins
ChunkGenerator Заменяемый источник чанков В работе#281 Сегодня генератор ванильный
Сохранение мира, world.save() Нет. Чтение Anvil работает, запись - нет В работе#78 Сервер не сохраняет чанки
Boss bar Нет В работе#247
Scoreboard Нет. Scoreboard упоминает только запланированный владелец глобального состояния В работе#154 Issue про scoreboard нет, и кода мы не нашли
JVM mcrs Состояние Заметки
Brigadier, registerCommand add_command, типизированное дерево команд, узлы литералов и аргументов Работает#579 Эталон - ванильные команды
Tab-дополнение и пакет команд с уровнями Дерево команд с уровнями прав и пакет команд Частично#285 Issue открыт
hasPermission("x.y") PermissionCheck::Require(CommandLevel::..), уровень оператора 0-4 в PlayerOpLevel Частично#285 Строковых узлов прав нет, плагина вроде LuckPerms тоже нет
Whitelist, бан-лист Ресурс бан-листа и команды /ban и /whitelist Работаетban.rs Покрыто тестами ban.rs и whitelist.rs
Свой тип аргумента Добавляется только при компиляции, как часть набора команд Частично#285
JVM mcrs Состояние Заметки
config.yml, saveDefaultConfig() Поля структуры плагина. Бинарник читает переменные окружения MCRS_* Частично Настройка идет только через плагин (Работает#278). Настройки бинарника описаны в server_settings.rs. Формата конфигурационного файла для плагина пока нет
PersistentDataContainer Собственный компонент плюс реестр сохраняемых компонентов В работе#159 Нужно сохранение мира, В работе#78
JVM mcrs Состояние Заметки
ProxyServer, @Subscribe из Velocity Библиотека прокси без Bevy: маршрутизация, online mode, modern forwarding, смена бэкенда В работе#296 В коде пока нет
Online mode, аутентификация Mojang Нет. Сервер работает только в offline-режиме В работе#82 Не открывайте порт наружу
ViaVersion Трансляция протокола на границе сети, вниз до 1.21.6 В работе#537 Решение еще не принято
JVM mcrs Состояние Заметки
MockBukkit Интеграционные тесты с PlayServer и host_app в crates/mcrs_minecraft_server/tests/it/ В работе#266 Около 45 файлов тестов. Тестовое окружение не вынесено в отдельный крейт

Состояние каждой области показано на странице Статус.

Источники и проверка

Проверено: 26.4-snapshot-7, 51d45c26a, 2026-11-09

Переведено с версии 51d45c26a

Следить: #283, #285, #281, #546, #78, #82, #296, #321, #537, #266, #159, #154