HelloWorld編の続きです。
今回はイベントを使用してログインしてきたプレイヤーにかぼちゃをかぶせるプラグインを作成してみましょう。

Bukkitではサーバーで発生したいろいろなイベントを受け取る仕組みが用意されています。
これを使用することで一定範囲のブロックを破壊できないようにしたり、ログインしてきたプレイヤーにアイテムをプレゼントしたりなどの処理を行えます。

イベントを受け取るリスナはorg.bukkit.event.Listenerインターフェイスを実装します。
Listenerインターフェイスはマーカーインターフェイスになっていて実装しなければいけないメソッドはありません。
イベントを受け取るメソッドはorg.bukkit.event.Eventを継承しているクラス1つを引数に取り、@EventHandlerアノテーションがなければいけません。
引数のクラスによってメソッドは適切なタイミングで呼び出されるようになります。

プレイヤーがログインした時にかぼちゃをかぶせる処理を書いてみます。

public class MyListener implements Listener {

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        player.getInventory().setHelmet(new ItemStack(Material.PUMPKIN));
    }
}

非常に簡単ですね。
最後にこのMyListenerをBukkitに登録する必要があります。
registerEventsには第一引数にListener、第二引数にPluginを与えます。

public class HelloWorld extends JavaPlugin {
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new MyListener(), this);
    }
}

イベントは独自で定義することも可能です。
複雑なプラグインを作ったりする場合は使うことになると思います。
独自のイベントを作成する場合はEventを継承し、staticなHandlerListを宣言します。
親に定義されているgetHandlersメソッドをオーバーライドしてHandlerListを返すようにします。
追加でHadlerListを返すpublic static HandlerList getHandlerList()を作成します。
これを用意しないとIllegalPluginAccessExceptionが発生します。

イベントを通知する場合はBukkit.getServer().getPluginManager().callEvent(customEvent);のようにcallEventメソッドを使用します。
リスナは@EventHandlerアノテーションのつけられたメソッドで引数にCustomEventを定義するだけです。

これでイベント編終了です。