
Lamp: Построение команд Minecraft без излишней кода
"Современный фреймворк команд на аннотациях для Java и Kotlin "
Revxrsal/Lamp · github.com
Если вы когда-нибудь писали кастомные команды для сервера Minecraft, вы знаете, насколько это больно. Парсинг аргументов, управление подкомандами, проверка прав доступа - всё это повторяющееся, ошибочное и реализуемое по-разному в каждом плагине. Lamp упрощает эту проблему, позволяя определять команды с помощью аннотаций и передавать сложность фреймворку.
Что такое Lamp
Lamp не является модом или плагином. Это фреймворк команд для разработчиков на Java и Kotlin, создающих плагины, ботов и серверные инструменты. Подумайте о нём как о швейцарском армейском ноже для обработки команд. С 335 звёздами на GitHub, он построен сообществом для сообщества.
Ядро идеи非常 простое: аннотируйте методы команд с помощью @Command, определите параметры, и Lamp займётся остальным. Нет парсинга излишнего кода. Нет ручной проверки. Нет спагетти-кода с массивами аргументов.
То, что отличает его от самоподобных решений, - это продуманность. Проект явно избегает ловушек, которые мучают другие фреймворки. Поэтому он использует неизменяемые билдеры, сильную типизацию и аннотации компилятора для обнаружения ошибок до runtime.
Кто Needs Это
Три группы выигрывают от использования Lamp: администраторы серверов, создающие кастомные команды, разработчики плагинов, усталые от написания излишнего кода, и разработчики ботов Discord, желающие чистые определения команд.
Если вы управляете сервером Minecraft и хотите кастомные команды для административных задач без борьбы с парсингом аргументов, вам нужен разработчик плагинов, использующий Lamp. Если вы тот разработчик, Lamp экономит часы на проект.
Вам это не нужно, если вы кэжуальный игрок. Это чистое инструментальное решение для разработчиков.
Как Работает Мультиплатформенность
Одна из лучших особенностей Lamp - это абстракция платформ. Одиночный кодбейс может целеваться на Bukkit, Velocity, Minestom, JDA (Discord) и другие платформы, используя одинаковый синтаксис команд на аннотациях.

На практике это означает, что если вы пишете команду один раз, вы можете скомпилировать её для нескольких платформ без переписывания логики команды. Фреймворк обрабатывает платформо-зависимые детали, такие как отправка ответов, определение «акторов» и сопоставление прав с системой каждой платформы.
Это не идеально - некоторые функции платформо-зависимы - но это огромный сэкономленный время для разработчиков, поддерживающих несколько серверных реализаций или ботов на разных сервисах.
Функции, Которые Важны
Lamp обрабатывает несколько вещей, которые облегчают жизнь разработчиков. Вот, что выделяется.
Управление параметрами с контекстными решателями. Нужно преобразовать имя игрока в LivingEntity? Или распарсить локацию из трёх аргументов? Lamp может автоматически разрешать кастомные типы. Вы определяете решатель один раз, и он применяется везде, где появляется этот тип параметра команды.
Опциональные параметры и значения по умолчанию. Аннотации @Optional и @Default позволяют избежать некрасивых проверок на null и ручной установки значений по умолчанию. Если параметр не предоставлен, Lamp заполняет его значением по умолчанию, которое вы указали.
Флаги и переключатели. Встроенные опции в стиле Unix, такие как -переключатель и -s. Вы можете комбинировать короткие флаги (-spr) и смешивать флаги по всей команде. Это действительно приятно для административных команд, где могут потребоваться несколько модификаторов.
Множественные варианты команд. Нужно, чтобы одна логическая команда работала с разными сигнатурами? @Command позволяет определять несколько методов с одной базовой командой, но разными параметрами. Lamp выбирает правильный, основываясь на том, что предоставил пользователь.
Кастомные аннотации. Вы можете расширить поведение Lamp, используя свои собственные аннотации и определяя, как они работают. Это означает, что вы можете добавить осведомлённую о фреймворке проверку, специфичную для вашего сервера, без хакинга парсера.
Начало Работы (Просто)
Установка зависит от вашей платформы. Для плагина Bukkit добавьте Lamp в свою систему сборки и зарегистрируйте его в методе onEnable плагина.
dependencies {
implementation 'io.github.revxrsal:lamp.bukkit:4.0.0-rc.16'
}
Затем создайте класс команды. Вот минимум:
@Command("greet user")
@Description("Отправляет приветствие")
public void greet(CommandActor actor, @Default("World") String name) {
actor.reply("Привет, " + name + "!");
}
Зарегистрируйте его с менеджером команд Lamp, и вы готовы. Фреймворк обрабатывает парсинг, проверку и диспетчеризацию.
Для ботов Discord или других платформ процесс аналогичен, но вы используете реализации JDA или Minestom вместо этого. Определения команд остаются几乎 идентичными.
Практические Примеры Использования
Вот где Lamp сияет: реальные проблемы, которые он решает.
Администраторы серверов часто нуждаются в быстрых утилитах, таких как телепортация игроков, управление белым списком, или настройка серверных параметров. Разработчик, используя Lamp, может построить чистую панель административных команд за долю времени, которую бы занял ручной парсинг аргументов. Лучше всего, если вы проверяете статус сервера внешне, вы, возможно, хотите команды, интегрированные с внешними API. Решатели контекста Lamp позволяют извлечь данные игрока из вашей базы данных и чисто внедрить их в команды.
Для крупных сетей вы, возможно, имеете бота Discord, отражающего команды игрового процесса (например, проверку, кто онлайн). Lamp поддерживает этот случай напрямую. Напишите команду один раз, зарегистрируйте её на нескольких платформах, и они все ведут себя идентично.
А если вы строите что-то вроде публичного списка серверов с административными инструментами, кастомные команды для владельцев серверов управлять их списками намного чище с Lamp, чем с самоподобными парсерами.
Общие Ловушки (Что Подвлекает Людей)
Lamp уменьшает ошибки, но всё ещё есть ловушки.
Первое: порядок параметров важен. Если у вас опциональные параметры следуют за обязательными, Lamp не знает, как парсить. Фреймворк предназначен для того, чтобы быть безошибочным, но вам всё ещё нужно подумать о структуре вашей команды. Опциональные параметры должны следовать после обязательных.
Второе: контекстные решатели нужно зарегистрировать до регистрации команды. Если вы определяете кастомный тип, но забываете добавить решатель, вы получите ошибку времени компиляции (что на самом деле хорошо). Но вам нужно знать, где добавить его.
Третье: мультиплатформенность не означает «одинаково везде». Некоторые функции доступны только для Bukkit или Discord. Вам нужно понять ограничения вашей целевой платформы. Lamp документирует это явно, но стоит прочитать платформо-специфические руководства перед тем, как предполагать, что ваша команда будет работать везде.
Другие Значимые Альтернативы
Lamp не является единственным фреймворком команд, хотя, вероятно, он наиболее отполирован для мультиплатформенного использования.
Cloud - ещё один популярный вариант, особенно для ботов Discord. Это более тяжеловесное решение с другими целями проектирования. Если вы строите исключительно для одной платформы, Cloud может быть достойным для сравнения.
Некоторые разработчики просто пишут свой собственный парсер команд. Это работает хорошо для мелких проектов, но масштабируется плохо. К тому времени, как вы добавите опциональные параметры, флаги и поддержку нескольких платформ, вы фактически перестроили Lamp с нуля.
Для простых одноразовых скриптов самодельное решение нормально. Для всего, что вы будете поддерживать более нескольких месяцев, фреймворк побеждает изобретение велосипеда.
Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.
Комментарии
Пока нет комментариев. Станьте первым, кто поделится своим мнением!


