Компактный framework действий для Bukkit/Paper-плагинов: конфиг описывает действие, библиотека выполняет его.
FunctionalActions убирает повторяющийся код вокруг действий из конфигов. Вместо очередного switch на двадцать команд вы один раз регистрируете действия, а дальше парсите обычные строки и выполняете их для нужного игрока или Audience.
Сообщения, title, actionbar, звуки, команды, телепорт, эффекты, здоровье, еда, опыт, gamemode, velocity и работа с инвентарём уже есть из коробки. Свои действия добавляются через тот же registry.
Note
FunctionalActions — библиотека, а не самостоятельный серверный плагин. Её нужно подключить к своему Paper-проекту.
Добавьте JitPack в репозитории проекта:
repositories {
mavenCentral()
maven("https://jitpack.io")
}И саму библиотеку:
dependencies {
implementation("com.github.g4vrk:FunctionalActions:2.1.1")
}Gradle Groovy
repositories {
mavenCentral()
maven { url = uri('https://jitpack.io') }
}
dependencies {
implementation 'com.github.g4vrk:FunctionalActions:2.1.1'
}Maven
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.g4vrk</groupId>
<artifactId>FunctionalActions</artifactId>
<version>2.1.1</version>
</dependency>Tip
Для стабильных сборок используйте тег релиза. Если нужен последний коммит из master, замените версию на master-SNAPSHOT.
Important
JitPack собирает библиотеку прямо из GitHub. Перед использованием 2.1.1 в репозитории должен существовать соответствующий Git-тег/релиз.
ActionRegistry<Player> registry = new SimpleActionRegistry<>();
DefaultActions.Player.registerDefaults(
registry,
MiniMessage.miniMessage()::deserialize,
"\\|",
Long::parseLong
);
ActionParser<Player> parser = new SimpleActionParser<>(registry);
parser.parse("[message] <green>Готово!").execute(player);
parser.parse("[sound] entity.player.levelup|1|1").execute(player);
parser.parse("[teleport] world|0|80|0").execute(player);Парсер понимает несколько форматов:
[message] Hello
(message) Hello
<message> Hello
message: Hello
message Hello
Important
splitter передаётся в String#split, поэтому это regex. Для символа | используйте "\\|", а не "|".
| Категория | Действия |
|---|---|
| Text | message, actionbar, title |
| Broadcast | broadcast, broadcast-actionbar, broadcast-title |
| Commands | console-command, player-command |
| Player | teleport, effect, health, food, exp, gamemode |
| Utility | sound, velocity, fire, update-inventory, close-inventory |
У большинства действий есть короткие алиасы: msg, bar, cmd, tp, hp, gm, vel и другие.
Caution
Не передавайте непроверенный пользовательский ввод в console-command или player-command. Эти actions выполняют команды с реальными правами консоли или игрока.
ExecutableActionList<? super Player> actions = parser.parseAll(List.of(
"[message] <green>Награда получена",
"[sound] entity.player.levelup|1|1",
"[exp] 100"
));
actions.run(player);Аргументы можно обработать прямо перед выполнением — удобно для плейсхолдеров:
actions.run(player, args ->
args.replace("%player%", player.getName())
);Tip
Text parser и duration parser не зашиты внутрь библиотеки. Можно использовать MiniMessage, свой формат текста и собственный синтаксис времени без изменения FunctionalActions.
registry.register("heal", (player, args) ->
player.setHealth(player.getMaxHealth())
);После регистрации оно ничем не отличается от встроенных:
[heal]
Нужны Java 17+ и Gradle Wrapper из репозитория.
./gradlew buildJAR и sources JAR появятся в build/libs.
FunctionalActions распространяется под MIT — см. LICENSE.