Skip to content
This repository has been archived by the owner on Apr 3, 2022. It is now read-only.

Latest commit

 

History

History
125 lines (108 loc) · 5.07 KB

README.md

File metadata and controls

125 lines (108 loc) · 5.07 KB

日本語 | English

CommandUtility Latest releaseGitHub Workflows

CommandUtilityは、Bukkitでのコマンド処理を改善するために開発されたライブラリです。
独自のコマンドハンドラを使用することで、コマンドの実行処理や、Tab補完機能が簡単に実装できるようになります。

導入方法

Maven

Mavenの場合、まずリポジトリを以下のように追加し、

<repository>
    <id>shirokuro-repo</id>
    <url>https://maven.shirokuro.dev/repos/releases/</url>
</repository>

以下のように依存関係に追加してください。

<dependency>
    <groupId>dev.shirokuro</groupId>
    <artifactId>commandutility</artifactId>
    <version>最新のバージョン</version>
</dependency>

また、必要に応じてmaven-shade-pluginなどを使用してjar内に追加してください。

Gradle

Gradle(Groovy DSL)の場合、まずリポジトリを以下のように追加し、

maven { url 'https://maven.shirokuro.dev/repos/releases/' }

以下のように依存関係に追加してください。

implementation 'dev.shirokuro:commandutility:最新のバージョン'

また、必要に応じてshadowプラグインなどを使用してjar内に追加してください。

使用方法

以下は/foo info <player>でそのプレイヤーの現在地を表示するコマンドと、/foo helpでヘルプメッセージを表示するコマンドの例です。

import dev.shirokuro.commandutility.CommandExecutionException;
import dev.shirokuro.commandutility.CommandGroup;
import dev.shirokuro.commandutility.CommandUtils;
import dev.shirokuro.commandutility.ExecutionData;
import dev.shirokuro.commandutility.HelpCommandHandler;
import dev.shirokuro.commandutility.annotation.Executor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class FooPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        CommandGroup.initBukkit()
            // ヘルプメッセージを自動生成する
            .add("foo help", new HelpCommandHandler())
            // @Executorもしくは@Completerアノテーションが付いたメソッドをすべて追加する
            .addAll(this);
    }

    @Executor("foo info <player:players>")
    @Description("Displays location of specified player.")
    public void info(ExecutionData data) throws CommandExecutionException {
        CommandSender sender = data.getSender();
        Player target = CommandUtils.toPlayer(data.get("player"), name -> {
            return "Cannot find player named " + name;
        });
        sender.sendMessage(String.format("World: %s X: %s Y: %s Z: %s",
            target.getWorld().getName(),
            target.getLocation().getX(),
            target.getLocation().getY(),
            target.getLocation().getZ()));
    }
}

また、以下のようにアノテーションを使わずに実装することも可能です。

import dev.shirokuro.commandutility.CommandExecutionException;
import dev.shirokuro.commandutility.CommandGroup;
import dev.shirokuro.commandutility.CommandHandler;
import dev.shirokuro.commandutility.CommandUtils;
import dev.shirokuro.commandutility.ExecutionData;
import dev.shirokuro.commandutility.HelpCommandHandler;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class FooPlugin extends JavaPlugin implements CommandHandler {
    @Override
    public void onEnable() {
        CommandGroup.initBukkit()
            .add("foo help", new HelpCommandHandler())
            .add(this, "foo info <player:players>", "Displays location of specified player.");
    }

    @Override
    public void execute(ExecutionData data) throws CommandExecutionException {
        CommandSender sender = data.getSender();
        if (data.getCommand().sections().equals("foo info")) {
            // toPlayerは、渡されたプレイヤー名のプレイヤーが存在すればPlayerインスタンスを返し、
            // 見つからなかった場合はCommandExecutionExceptionを投げる。
            Player target = CommandUtils.toPlayer(data.get("player"), name -> {
                return "Cannot find player named " + name;
            });
            sender.sendMessage(String.format("World: %s X: %s Y: %s Z: %s",
                target.getWorld().getName(),
                target.getLocation().getX(),
                target.getLocation().getY(),
                target.getLocation().getZ()));
        } else {
            throw new RuntimeException("unreachable");
        }
    }
}