bukkit
コマンド
サーチ…
構文
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
コマンドの処理
コマンドを処理するには、CommandExecutorインターフェイスを実装するクラスが必要です。 JavaPluginクラス(プラグインのメインクラス)は既にこれを実装しています。
CommandExecutorインターフェイスを実装するときは、次のメソッドを実装する必要があります。
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true; ///Should return false if you want to show the usage
}
送信者はコマンドを送信した人です。これはプレーヤーまたはコンソールにすることができます。
CMDは、plugin.ymlで宣言されているように、あなたが聞いているコマンドです。ラベルと混同しないでください。
labelは、このコマンドを実行するために使用されるエイリアスです。送信者がスラッシュの後に入力するものです。
最後にargsは、送信者があなたのコマンドを送信するために使用したかもしれない引数です。
可能なコマンドは次のようになります。
/ Tell Kerookerこんにちは、Kerooker!
Tellはあなたのラベルであり、あなたがplugin.ymlでそうした場合、あなたのコマンドとして定義することもできます。
'Kerooker'、 'Hi、'、 'Kerooker!'あなたのargsはそれぞれ0,1,2です
リターンとして、あなたは、すべてがそうしたことが起こることを期待したときに、おそらく常に真を返すことになります。送信者にplugin.ymlで定義されているコマンドの使用法を表示する場合は、falseを返す必要があります
単純に設定されたGameModeコマンド(/ gm )
この例は、onCommandを使用する方法の非常に基本的な例を示しています。あなたのコマンドをonCommandで直接処理することはお勧めしませんが、これはこの単純なケースのトリックです。
この例では、プレーヤーのゲームモードを設定しようとしています。
まず、コンソールのゲームモードを設定できないため、送信者がConsoleCommandSenderでないことを確認する必要があります。これは(sender instanceof Player)で行われます。
次に、プレイヤーに/ gm CREATIVE(または他のゲームモード)を入力させて、2つのことをチェックする必要があります:
- それらが1つの引数(クリエイティブ)を渡すことを確認してください
- 彼らのコマンドが "gm"であることを確認してください
これらのチェックは次のように行いました:args.length == 1 && label.equalsIgnoreCase( "gm")
これで、プレイヤーが「/ gm x」と入力したことが分かりました。
次は、args [0]をGameModeオブジェクトにして、それをプレーヤに適用できるようにする必要があります。これはGameMode.valueOf(String)で行うことができますが、Java列挙のドキュメントによれば、列挙と一致しない文字列がvalueOf()に渡された場合、IllegalArgumentExceptionがスローされます。それをキャッチする。
ゲームモードができたら、p.setGameMode(gm)を使うだけで、プレーヤーのゲームモードが変わります。私たちが例外をキャッチした場合、単に文を出力してfalseを返すだけです。
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
final Player p = (Player) sender;
if (args.length == 1 && label.equalsIgnoreCase("gm")) {
try {
GameMode gm = GameMode.valueOf(args[0]);
p.setGameMode(gm);
p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
return true;
} catch (IllegalArgumentException e) {
p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
return false;
}
}
}
return false;
}
メインクラスにないコマンド
コマンドがたくさんある場合は、それらをすべてメインクラスに入れるべきではありません。
新しいクラスを作成し、
CommandExecutor
実装するクラスに次のコードを追加します。
@Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { }
あなたのメインクラスでは、onEnableを追加します(commandNameにはコマンドの名前を、CommandExecutorにはクラスの名前を指定します)。
getCommand("commandName").setExecutor(new CommandExecutor());