【Bukkit Plugin開発】コマンド入力を受け付ける

これは Adventar: Bukkit Plugin開発 Advent Calendar 2015 参加記事です。
他の記事もぜひご覧ください。

11日分も込みで6日間分ため込んでますね。くそですね、自覚あります

さて、今回はプラグインにコマンドを追加しましょう
いつも通り、下のサイトに助けていただきましょう
Minecraft Modding Wiki: Plugin Tutorial #コマンド

基本的にはリンク先に従ってやれば追加できました。
この先、コードや説明はMinecraft Modding Wiki: Plugin Tutorialを再使用・再編集したものです。また、リンク先の記事は翻訳記事であり文責その他はリンク先に書いてある通りですので、よろしくお願いします。

とりあえずコマンドを実装する

<br />
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){<br />
        // プレイヤーが「/basic」コマンドを投入した際の処理...<br />
	if(cmd.getName().equalsIgnoreCase(&quot;basic&quot;)){<br />
		// 何かの処理<br />
		return true;<br />
                // コマンドが実行された場合は、trueを返してメソッドを抜ける。<br />
	}<br />
	return false;<br />
        // コマンドが実行されなかった場合は、falseを返してメソッドを抜ける。<br />
}<br />

  • CommandSender sender – コマンドの発行元
  • Command cmd – 実行されたコマンドの内容
  • String commandLabel – 利用されたコマンドエイリアス
  • String[] args – コマンドの引数を格納した配列

例として/hello abc defコマンドを実行したとしたらcmd.getName: helloargs[0]: abcargs[1]: defみたいな感じです。
.equalsIgnoreCase("hoge")は大文字小文字を区別しないで比較するということです。この例で初めて知りました。

メインクラスへの記述が終わったら、plugin.ymlファイルにも定義を追加する必要があります。plugin.ymlの最後に次の行を追加します。

<br />
commands:<br />
   basic:<br />
      description: This is a demo command.<br />
      usage: /&lt;command&gt; [player]<br />
      permission: tutorialplugin.basic<br />
      permission-message: You don't have &lt;permission&gt;<br />

  • basic – コマンド名。
  • description – コマンドの説明文。
  • usage – コマンドの使い方。onCommand() でfalseを返したときに表示されるメッセージの内容。
  • permission – コマンドの実行権限。このコマンドの実行に必要なパーミッションノードを設定する。プラグイン名.コマンド名を設定することを推奨しているらしい(例:myplugin.test)。
  • permission-message – コマンド実行権限を持たないユーザがコマンドを実行した場合に、実行権限が無いことをユーザに知らせるメッセージ。

usage の欄では<command>は設定したコマンド名に、permission-message の欄では <permission>は設定したパーミッションノードに置き換えられる。

詳しい設定方法はMinecraft Modding Wiki: Plugin.ymlの設定一覧を参照。

大きなプラグインの時

プラグインが大きくなり、コマンドが増えると今のようなメインクラスに記述していく方法では見にくくなる。
そこで、 Bukkit では CommandExecutor によるクラスを分割する方法が用意されている。
この場合でも plugin.yml への記述が必要。

詳しいやり方はMinecraft Modding Wiki: Plugin Tutorial #CommandExecutorのクラス分割を参照してほしい。

安全なonCommandの作り方

onCommand()の基本は上の通りだが、バグや予期しない動作が起きないよう配慮してコーディングすることで堅牢なonCommand()を実装できる。

Minecraft Modding Wiki: Plugin Tutorial #堅牢なonCommandの記述には、

  • Sender が Player 型かどうか
  • コマンドのパラメタ長をチェックする
  • プレイヤーがオンラインである事を確認する
  • オフラインプレイヤーの操作を行うクラス

が紹介されている。

まとめ&次回

今回はコマンドを紹介しました
分量は増えましたがコピペなので著作権的に怪しい記事になってしまいましたが…
メモ記事だし引用してるだけだしで乗り切れるのでしょうか(;´・ω・)

まぁ、それはおいといて、次回は Configuration を勉強してみましょう。これ、超便利でした。

今回の記事はコマンドの実装方法を実際に確認したり、製作中のプラグインの制作を進めたり、オープンソース化されたSwiftをいじったりと遅くなりました。
Swift については別で記事を書きたいなと思ってます。

コメント
トラックバック
ページトップへ