spigotプラグイン講座3-1(コマンドを実装しよう)

どうも! プラグインティーチャー、Mr_IKです!
初心者向けマイクラspigotプラグイン講座、第三回(1限目)です!

前回、hello world プラグインを作りましたね。
今回はその続きからやっていきます。

第三回すべてのメニュー

  • コマンドを打ったらメッセージを送信 ←今回はこれ
  • コマンドを打ったら全体にメッセージを送信
  • OP以外のブロックの破壊をすべてキャンセル
  • パスワードを入力したらOPになれるコマンド
  • [おまけ]経済との連携

第三回をすべて読むと、ある程度のプラグインを作ることができます!

コマンドを打ったらメッセージを送信

まずは簡単なものからですね。
これは、様々なプラグインの中でも大大大前提のコードです。

intellijを開き、前回のプロジェクト『TutorialPlugin』を開いてください。
開きましたか?では、コマンドの実装をしましょう。

前回のコード、”getLogger().info(“Hello!world!こんにちは!世界!”);”の下に

getCommand(“test”).setExecutor(this);

を追加してください。

これで、”test”というコマンド自体の実装ができました。
今度は処理を書きます。

画面のように、OverrideしたonCommand(下にコピペがあります。)を作ってください。
https://gyazo.com/b8ca9e488007de80c27c3e05f5ab2015
コピペ用↓

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return true;
}

さて、何か赤線で引かれてしまいました。
実は、まだこのTutorialPlugin君には “Commandsender”くんが何かわかってないのです。
どうやって教えるの? 簡単です。 “import” をするんです。

intellijには自動インポートがあるので、使ってみましょう。
赤くなっている文字の上でクリック、その後 ALT+ENTER。

すると…?

https://gyazo.com/19cf75c750f30a5357e68e04a66830e8

何か出てきましたね。今回使うのは “import”なので import class をクリックします。すると

https://gyazo.com/550d453ff34ded9b1936230894061e0b

“import” が一つ増え、赤文字が消えましたね!
同様に、右の赤文字もクリック後 ALT+ENTER でインポートしましょう。

さあ、やっとできた この “onCommand” の中にコマンドの処理を書いていくわけですが

コマンドを打つのはプレイヤーだけじゃありません。
“黒い画面”->console コマンドブロック などなど

プレイヤー以外にもコマンドを実行するものはいくつかあります。

もし、それをはじく処理をしないままプレイヤーとして処理すると…
エラーが出てしまうので、先にプレイヤー以外がコマンドを使えないようにしてしまいましょう。

“return true;”の上に、下のコードをコピペしてください。

if (!(sender instanceof Player)) {
return true;
}

先ほど同様、赤文字になったらALT+ENTERでインポートです。

これが追加できると、sender、つまりコマンド実行者がPlayer以外の場合はじくようになります。

さあ、いよいよプレイヤーにメッセージを送信です!!

以下のコードを先ほどのコードの下に書いてください!

Player p = (Player)sender;
p.sendMessage(“やあ!こんにちは!世界!”);

最終的なコードはこちら
https://gyazo.com/5ed5d1c45b874222588ae122886ce62d

間違っていた場合は画像を見て直してくださいね。

これで、ついにコマンドが使える!ビルドだ…と行きたいところですが。

プラグインが読み込まれた時、このコマンドを使うぜ!とサーバーに教えないといけません。
Plugin.ymlを開き、下の画像のようにしてください。
https://gyazo.com/6b985207faba725da8b17760e93c2ec7
これ、スペースや文字、一字一句慎重に書いてください。
間違えたらコマンドが読み込まれません。

さあ、ここまでできたらビルドし、自分のサーバーに入れてみましょう。
前回使用したプラグインは削除してください。

https://gyazo.com/847de5a6c8f7564c7d8f129343947699

/test と打って”やあ!こんにちは!世界!”と出たら成功です!

=====仕組み解説タイム(中級者向け)======

ここからは、コードの仕組みと応用を書いていきます。

まずは

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return true;
}

ですが、これはコマンドを受け取った時の処理を書く場所です。
senderが実行者 commandがコマンド自体の変数 labelは/testのtest argsは/test 1 2 の 1,2,… の詰め合わせ

となっています。

/test 1 2 3 4
というコマンドをPlayerが実行した場合…

実行者(sender) = Player , label = test args = 1,2,3,4 となっています。

1を取り出したいときは args[0] 2はargs[1] となっています

次に

if (!(sender instanceof Player)) {
return true;
}

ですが、sender が player かどうか。-> いいえならここに入る というif文です。
ifについては 3-2、3-3 あたりで学習しますが、あくまで分岐と思ってください。

最後に

Player p = (Player)sender;
p.sendMessage(“やあ!こんにちは!世界!”);

これは senderをplayer型にした後、
そのプレイヤーにメッセージを送るコードです。
“やあ!こんにちは!世界!”の部分を変えると、メッセージも変わります。
(メッセージに色を付ける方法は 3-2 全体メッセージにて)

=====以上、中級者向け解説======

いかがでしたでしょうか。
あまりにも長い解説となったので第三回は分割してお届けすることになります。

次回、全体メッセージの回をお楽しみに!

コメントする