Chapter 01

ウェルカムメッセージプラグインを作ろう

Maki
Maki
2021.12.11に更新

いきなりですが、ウェルカムメッセージを表示してくれるプラグインを作ります。

完成図

完成図 誰でも歓迎されるのは嬉しいものですよね

package com.gmail.aoibotowner.welcomemessage;

import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public final class WelcomeMessage extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        // Plugin startup logic
        getLogger().info("プラグインが正常に起動しました。");

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

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        event.setJoinMessage(ChatColor.YELLOW + event.getPlayer().getName() + "さん、ようこそ!");
    }
}

これを見て一発で意味がわかる方は、発展編へ進んで構いません。
見た瞬間に、「うっ...」と思ったでしょうか?私もそう思って、挫折してしまったことが何度もあります。
しかし、少しずつ分解して考えればあまり複雑なことではありません。一緒に読み進めていきましょう。

まず、一番先頭の部分です。

package com.gmail.aoibotowner.welcomemessage;

import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

この部分では、主に「宣言」ということを行っています。
最初の行では、このコードの名前を宣言しています。
日本語に直すと、「私はcom.gmail.aoibotowner.welcomemessageという名前のpackageですよ」という感じでしょうか。
ここにはあまり深い意味はありませんが、環境によって名前を変えなければなりません。

どういうことかというと、com.gmail.aoibotownerは筆者の固有の名前だからです。
これが被ると、「俺が本当のcom.gmail.aoibotownerだ!」「いや、私がcom.gmail.aoibotownerよ!」ということが起きてしまいます。これではプラグインを作っているどころではないですよね。
だから、適当なおおよそ被らないだろうと思われる名前にする必要があります。私の使っているIntellij IDEAというエディターではこれを自動で生成してくれるので、あまり気にする必要はありません。

3行目以降の「import 〇〇」というのは、「これを使うから予め学んでおいてね」とパソコンに宣言するためのものです。先生が、「次の授業で12ページから45ページの内容を使うので予習しておいてください」と言うのとあまり変わりません。〇〇の部分には、先程説明した「固有の名前」が入ります。

次に、9行目の

public final class WelcomeMessage extends JavaPlugin implements Listener {

です。
これは正直難しいので、最初から理解する必要はありません。
軽く説明すると、「新しいJavaPluginのWelcomeMessageを作るよ。これはListenerって機能を含んでるよ」みたいな感じです。(これは全然正しくないですが、Spigotのプラグインを作るだけならとりあいずはこの理解で十分です。後ページで説明します。)

続いて、

    @Override
    public void onEnable() {
        // Plugin startup logic
        getLogger().info("プラグインが正常に起動しました。");

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

の解説に移ります。

このコードのキモは、

@Override
public void onEnable() {

の部分です。Overrideというのは、「上書き」みたいな意味です。
JavaPluginには、onEnable()という機能があり、これはプラグインが有効化されたとき(=起動されたとき)に呼び出されます。これを上書きして、

        // Plugin startup logic
        getLogger().info("プラグインが正常に起動しました。");

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

に変更するよ、ってことなんですね。

一行ずつ読んでいきます。

        // Plugin startup logic

という行では、「Plugin startup logic」というコメントを残しています。Javaでは、「//」と先頭に書いた行はコメントになります。コメントはメモのようなもので、「このプログラムではこういうことをしていますよ」とか、「このプログラムを使うときはこういうふうに使ってくださいね」みたいなことを書いたりします。もちろんメモ書きなので、プラグインの実行時には読み飛ばされます。

getLogger().info("プラグインが正常に起動しました。");

という行では、ログを出力しています。マインクラフトサーバーの管理画面でログは表示されます。

こんな感じですね。
次の

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

ですが、この記事で説明は諦めます。意味的には、このプラグインになにか出来事があったら教えてねっていうものですね。

次のブロックです。


    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        event.setJoinMessage(ChatColor.YELLOW + event.getPlayer().getName() + "さん、ようこそ!");
    }

これは意外と読みやすいのではないでしょうか。

@EventHandler

で、イベントを実装していますよということを表しています。

public void onJoin(PlayerJoinEvent event) {

は、onJoinという名前でPlayerJoinEventを引数に取る関数を作成します、という意味です。PlayerJoinEventが発生したら、呼び出されます。PlayerJoinEventとは、プレイヤーがサーバーに参加したときに呼び出されるイベントです。

event.setJoinMessage(ChatColor.YELLOW + event.getPlayer().getName() + "さん、ようこそ!");

という部分です。
英語そのままですが、このeventのJoinMessageを「ChatColor.YELLOW + event.getPlayer().getName() + "さん、ようこそ!"」に変更します、という意味になります。

ChatColor.YELLOW
と
event.getPlayer().getName()

については、入門編で詳しく説明しますが、それぞれ
「文字の色を黄色にしますよ」「ログインしたプレイヤーの名前」という意味です。

長くてわかりにくかったかもしれませんが、このコードを理解できるとこれ以降のハードルがぐんと下がります。ぜひ理解してみてください。

次回は、「会話を禁止してみよう」です。