Plugin ASM
Плагин ASM — это лёгкий фреймворк для инъекции байт-кода в стиле Mixin для серверов Paper/Bukkit, позволяющий декларативно изменять методы через ASM без ручного написания байт-кода.
- Загрузчики
- Java Agent
- Скачиваний на Modrinth
- 262
- Подписчиков на Modrinth
- 2
- версии
- 3
- Обновлён
- 18 февраля 202618 февр.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
Plugin ASM
|---------------|------------------------------------------------------------------------| | 🩸 Все типы инъекций | BEFORE / AFTER / REPLACE / HEAD / TAIL (AROUND понижается до REPLACE) |
| 🧩 Хуки ASM-процессоров | Объявите массив asms в pasm.json, реализуйте интерфейс PasmAsmProcessor — можно выполнять собственные операции с байт-кодом до и после premain |
|---|
- Java 8 - 21
- Minecraft 1.0+
- Maven или Gradle (нужны только при компиляции плагина)
- Скачайте последнюю версию Plugin ASM с GitHub или Modrinth
server
| -> paper-1.xx.x-xx.jar
| -> pasm-x.x.x.jar
| -> pluginsjava -javaagent:pasm-x.x.x.jar -jar paper-1.xx.x-xx.jarИспользование Plugin ASM для инъекции байт-кода
Смотрите Wiki
- ✅ Полное покрытие типов BEFORE, AFTER, REPLACE, HEAD, TAIL
- ✅ Сложные методы с
try-catch-finally - ✅ Конфигурация только с
asmsбезpasms - ✅ Paper 1.21.11 / Java 21
git clone https://github.com/laolizhennui/Plugin-ASM.git
cd Plugin-ASM
mvn clean packageАртефакт сборки: target/pasm-x.x.x.jar (это и есть Java Agent)
- Pull Request: исправления кода, улучшение документации Ждём ваших Star ⭐ и Fork 🍴!
LGPL License Copyright © 2026 laolizhennui
Happy Coding! 🎮🔧
Plugin ASM
PASM — это лёгкий фреймворк для инъекции байт-кода в стиле Mixin, созданный специально для серверных сред Paper / Folia. Он позволяет изменять байт-код произвольных классов во время выполнения с помощью простых аннотаций — без рефлексии, без наследования, без потери производительности. 🎯 Цель: дать разработчикам плагинов Bukkit/Paper возможность делать хот-патчи, расширять API, перехватывать события и многое другое — просто написав обычный Java-код, не касаясь сложных внутренностей ASM.
✨ Ключевые возможности
Возможность Описание 🚀 Инъекция в стиле Mixin @Pasm + @Inject задают целевой класс и метод; фреймворк сам объединяет байт-код. 🩸 Все типы инъекций BEFORE / AFTER / REPLACE / HEAD / TAIL (AROUND понижается до REPLACE с предупреждением). 🏗️ Инъекция в конструктор Поддерживает ; вставка автоматически после вызова super(). 🔥 Совместимость с обработчиками исключений Полное воспроизведение блоков try‑catch‑finally; корректная привязка меток. 📏 Автоматический сдвиг для wide-типов Параметры long / double обрабатываются как занимающие два слота; вручную считать этот сдвиг не нужно. ⚔️ Эксклюзивный REPLACE Если у метода несколько REPLACE-инъекций, применяется только одна с наивысшим приоритетом. 🧩 Хуки ASM-процессоров Объявите массив asms в pasm.json; реализуйте интерфейс PasmAsmProcessor, чтобы выполнять собственные операции с байт-кодом до/после premain. 📦 Сканирование в стиле плагинов Поместите pasm.json в корень вашего плагина; PASM автоматически найдёт все точки инъекций. 📋 Требования к окружению
- Java 8–21
- Minecraft 1.0+
- Maven или Gradle (нужны только при компиляции вашего плагина)
📥 Установка и настройка
- Скачайте последнюю версию Plugin ASM с GitHub или Modrinth
- Поместите его в корневую папку сервера. Структура должна выглядеть так:
server | -> paper-1.xx.x-xx.jar | -> pasm-x.x.x.jar | -> plugins | -> some-plugin.jar
- Соответственно измените команду запуска:
java -javaagent:pasm-x.x.x.jar -jar paper-1.xx.x-xx.jar🛠️ Использование Plugin ASM для инъекции байт-кода
Подробное описание и примеры смотрите в Wiki.
🧪 Тестирование и совместимость
PASM полностью протестирован в следующих сценариях:
- ✅ BEFORE, AFTER, REPLACE, HEAD, TAIL — покрыты все типы
- ✅ Инъекция в конструктор (``)
- ✅ Методы, содержащие блоки
try‑catch‑finally- ✅ Методы с параметрами
long/double(static → non‑static, static → static)- ✅ Обнаружение конфликтов нескольких
REPLACE-инъекторов на одном методе (выполняется только с наивысшим приоритетом)- ✅ Конфигурация только с
asms(безpasms)- ✅ Paper 1.21.11 / Java 21 Известные ограничения (будут улучшены в будущих версиях):
- Инъекция
AROUNDпока не реализована; при её использовании происходит откат кREPLACEс предупреждением.- Хот-релоад экспериментальный и не рекомендуется для продакшена.
- Нативные и абстрактные методы изменять нельзя.
📦 Как собрать сам PASM (только для мейнтейнеров фреймворка)
git clone https://github.com/laolizhennui/Plugin-ASM.git cd Plugin-ASM mvn clean packageАртефакт сборки:
target/pasm-x.x.x.jar— это и есть Java Agent.🤝 Участие в разработке
PASM — ещё молодой проект, и мы рады любой помощи! Вы можете:
- Создать issue: сообщить о баге или предложить новую функцию
- Pull Request: исправить код, улучшить документацию
- Поделиться своими случаями использования Ждём ваших Star ⭐ и Fork 🍴!
📄 Лицензия
LGPL License Copyright © 2026 laolizhennui
Напоследок — PASM не призван заменить Mixin, а дать разработчикам под Paper более простой и интуитивный выбор для инъекции байт-кода. Если он вам понравился — расскажите друзьям; если возникли проблемы — расскажите нам. Happy Coding! 🎮🔧
Частые вопросы
Как установить Plugin ASM?
Установите Java Agent под свою версию Minecraft, скачайте Plugin ASM под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Plugin ASM?
У Plugin ASM есть сборки для Minecraft 1.0–1.21.11.
Нужен ли Plugin ASM на сервере?
Ставится только на сервер; игрокам ставить не нужно