コマンドの処理 ~ Join・Quitメッセージを変更する – Bukkit・Spigotプラグイン解説 – part 3

Bukkit/Spigotプラグイン
スポンサーリンク

コマンドの処理をしてみる

プレイヤーにメッセージを送信してみる

@Override
    public boolean onCommand(CommandSender sender,Command command,String label,String[] args) {
        if (command.getName().equalsIgnoreCase("test")) {
            getLogger().info("コマンド:testが実行されたよ!");
            return true;
        }
        return false;
    }

ここまでできていると仮定します。

ここまでの内容はpart 2 で解説しているので、見ていない方はそちらをご覧になってからこちらのページを御覧ください。

ということでプレイヤーにメッセージを送信するコードを追加するとこのようになります。

@Override
    public boolean onCommand(CommandSender sender,Command command,String label,String[] args) {
        if (command.getName().equalsIgnoreCase("test")) {
            getLogger().info("コマンド:testが実行されたよ!");
            Player p = (Player) sender;
            p.sendMessage("コマンドが実行されました!!");
            return true;
        }
        return false;
    }

上の構文でコマンドが実行されましたというメッセージをプレイヤーに送信することができます。

追加されている行の解説を書くと

Player p = (Player) sender; 
/*コマンドを入力したプレイヤーはCommandSender型のsenderという変数に入るため、senderという変数をPlayer型の
pという変数に変換(キャスト)してあげます。*/
p.sendMessage("コマンドが実行されました!!");
/*上で宣言をしたpという変数にコマンドを送信したプレイヤーが入っているため、そのプレイヤーにメッセージを
送信するにはsendMessage()という関数を使用します。
これでコマンドが実行されましたというメッセージを送信することができます。*/

ということです。

ちなみに…
コマンドを送信したプレイヤーに対してはsender.sendMessage()でもメッセージの送信はできるんです。
なぜPlayer型に変換しているのかは、次に扱うJoinメッセージの変更で紛らわしいことになるからなんです。
それを理解した上なら、sender.sendMessage()を使用しても構いません。

送信したメッセージに色を付ける

送信したメッセージに色をつけたい場合は、”ChatColor”という関数を使用します。

使い方は

p.sendMessage(ChatColor.YELLOW + "ここのメッセージを表示します");

このような感じになります。

今回の例は、黄色に変更する例ですが別の色にすることも可能です。

その場合はYELLOWの部分を下記のものに変更してもらえれば、別の色に変更することができます。

リストを記載しておきます。(H.31 4/21現在)

  • AQUA – 水色
  • BLACK – 黒
  • BLUE – 青
  • BOLD – 太字
  • DARK_AQUA – ダークアクア
  • DARK_BLUE – ダークブルー
  • DARK_GREY – ダークグレー
  • DARK_GREEN – ダークグリーン
  • DARK_PURPLE – ダークパープル
  • DARK_RED – ダークレッド
  • GOLD – 金
  • GRAY – グレイ
  • GREEN – 緑
  • ITALIC – テキストを斜体に
  • LIGHT_PURPLE – ライトパープル
  • MAGIC – ランダム
  • RED – 赤
  • RESET – 色をリセット
  • STRIKETHROUGH – 取り消し線
  • UNDERLINE – 下線
  • WHITE – 白
  • YELLOW – 黄色

の22種類です

これで色を変更することが可能です。

サーバー全体にメッセージを表示する

サーバー全体にメッセージを表示させるにはBukkit.broadcastMessage()を使用します。

こちらも色付けに関してはChatColorで行うことができるので、上と同じように使用してください。

Join/Quitメッセージを変更する

Eventを使えるようにする

Eventを使えるようにするには上の

public final class SamplePlugin extends JavaPlugin {
}

のところに追記をします。

どうするかというと

public final class SamplePlugin extends JavaPlugin implements Listener {
}

こうします。

これでEventを受け取ることができます。

これで終わりではないです!!!

上の構文を記述した後ににももう一つやらないといけないことがあるんです。

それは何かと言うと

onEnableにregisterEventsするです。

これだけだと何言っているのかさっぱりだと思うので解説します。

プラグインが読み込まれた時に処理をするonEnableに追記をします。

以下の文を追記してください。

Bukkit.getServer().getPluginManager().registerEvents(this, this);

これをすることによってやっとEventを使うことができます。

Join・Quitメッセージを変更する

Joinメッセージの変更の書き方はこのような感じです。

@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer();
    String playerName = p.getName();
    e.setJoinMessage(playerName + "さんがサーバーに参加しました!!");
}

これでプレイヤーがサーバーに参加した時に表示されるメッセージが変更されます。

では1つづつ解説していきます。

まずイベントの発生を受け取るために、”@EventHandler”と入力します。

これはよく使うので、覚えておいてください。

onJoinというのはメゾッド名なので自由に決めてもらってもかまいませんが、onJoinというのが無難です。

その横にあるPlayerJoinEventというのはプレイヤーがサーバーに参加した時に発生するイベントになります。

QuitMessageのときはこれをPlayerQuitEventに変えるだけです。

Spigotのイベントはたくさんあるので、調べてみるといいかもしれません。

その下の

Player p = e.getPlayer();

というのはイベントで発生したプレイヤーを取得するという意味の文になります。

今回はPlayerJoinEventが発生しているので、発生させているプレイヤーはサーバーに参加したプレイヤーということになります。

ということでイベントの場合のプレイヤーの取得は上の文章でたいていできるので、覚えておいてください。

String playerName = p.getName();

これはString型のplayerNameという変数の中に上で入手したプレイヤーの名前を取得している文になります。

上の文のままだとプレイヤー名ではない文字になってしまうので、上の方法で取得するように覚えておきましょう。

そして最後

e.setJoinMessage(playerName + "さんがサーバーに参加しました!!");

この文ですが、イベントが入っている変数はeなので、eの中のsetJoinMessage()という関数を使用してサーバーに参加したときのメッセージを設定しています。

()の中に設定したい内容を入力するのですが、今回の場合はplayerName + “さんがサーバーに参加しました!”という構文なので、playerNameにはサーバーに参加したプレイヤーの名前が代入されます。

もし参加したプレイヤーの名前が”rito_528″という名前だったら

rito_528さんがサーバーに参加しましたという文が表示されると言うわけです。

Quitメッセージの変更ですが、上の方法とほとんど同じなので、構文のみ書いておきます。

@EventHandler
public void onQuit(PlayerQuitEvent e) {
    Player p = e.getPlayer();
    String playerName = p.getName();
    e.setQuitMessage(playerName + "さんがサーバーに参加しました!!");
}

最後に

どうだったでしょうか。

わからなかったことの解決の助けになれば幸いです。

もしわからなければ、分かる範囲で答えるので気軽にコメントをお願いします!!

また、今後の記事に書いてほしいことなどがあれば、そちらの方もぜひぜひコメントをよろしくお願い致します!!

次回予告

プラグイン制作に役立つ細かなことを紹介!!

この記事を書いた人

Javaなどをメインにプログラムを組んでいるritoです。
CosgyDevで適当に働いてます((
ブログを書きながらサーバープログラムを書いています。
好きなことはパソコンで、ハードオフ巡りが趣味だったりします。

ritoをフォローする
Bukkit/Spigotプラグイン
スポンサーリンク
ritoをフォローする
りとブログ

コメント

タイトルとURLをコピーしました