Skip to content

Repository files navigation

FunctionalActions

Компактный framework действий для Bukkit/Paper-плагинов: конфиг описывает действие, библиотека выполняет его.

Build Java Paper Version JitPack License


English version

Что это

FunctionalActions убирает повторяющийся код вокруг действий из конфигов. Вместо очередного switch на двадцать команд вы один раз регистрируете действия, а дальше парсите обычные строки и выполняете их для нужного игрока или Audience.

Сообщения, title, actionbar, звуки, команды, телепорт, эффекты, здоровье, еда, опыт, gamemode, velocity и работа с инвентарём уже есть из коробки. Свои действия добавляются через тот же registry.

Note

FunctionalActions — библиотека, а не самостоятельный серверный плагин. Её нужно подключить к своему Paper-проекту.


Подключение через JitPack

Добавьте 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 build

JAR и sources JAR появятся в build/libs.

Лицензия

FunctionalActions распространяется под MIT — см. LICENSE.

About

A lightweight, extensible action system for Paper plugins.

Topics

Resources

Code of conduct

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages