メインコンテンツまでスキップ

イベントを扱おう

プラグインの作成

まず、プラグインを作成します。プラグインの作成方法については、以前の資料を参照してください。

イベントの追加

まず、src/main/java/com/github/<username>/testevent/TestEvent.javaを開きます

src/main/java/com/github/<username>/testevent/TestEvent.java
public final class TestEvent extends JavaPlugin {

@Override
public void onEnable() {
// プラグインが有効になったときの処理
}

@Override
public void onDisable() {
// プラグインが無効になったときの処理
}
}

初めは、このような形になっていると思います。

プラグインのクラスを外部から参照できるようにするために、TestEventクラスにstaticな変数を追加します。

src/main/java/com/github/<username>/testevent/TestEvent.java
public final class TestEvent extends JavaPlugin {
private static TestEvent plugin;

@Override
public void onEnable() {
// プラグインが有効になったときの処理
plugin = this;
}

@Override
public void onDisable() {
// プラグインが無効になったときの処理
}

public static TestEvent getPlugin() {
return plugin;
}
}

この中に、イベントを追加していきます。 イベントの追加は、onEnableの中に追加していきます。

@Override
public void onEnable() {
// プラグインが有効になったときの処理
getServer().getPluginManager().registerEvents(new TestListener(), this);
}

このように、getServer().getPluginManager().registerEvents(new TestListener(), this);を追加してください。

それでは、イベントが実行された時の処理を行うTestListenerを作成していきます。 com.github.<username>.testeventの中にlistenerというパッケージを作成し、その中にTestListener.javaを作成してください。

src/main/java/com/github/<username>/testevent/listener/TestListener.java
package com.github.<username>.testevent.listener;

import com.github.<username>.testevent.TestEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;

public class TestListener implements Listener {
@EventHandler
public void onBlockBreakEvent(BlockBreakEvent event) {
TestEvent.getPlugin().getLogger().info("BlockBreakEvent is called!");
}
}

このように、@EventHandlerをつけて、onBlockBreakEventを作成してください。

これでイベントの処理ができるようになりました。

プラグインの実行

プラグインを実行するために、IntelliJ IDEA上のコンソールで、.\gradlew runServerを実行してください。

これで、サーバーが起動し、プラグインが読み込まれます。

サーバーに入り、ブロックを壊すと、コンソールにBlockBreakEvent is called!と表示されることを確認してください。

以上で、プラグインの作成が完了しました。

プレイヤーの情報の取得

プレイヤーの情報を取得するために

src/main/java/com/github/<username>/testevent/listener/TestListener.java
@EventHandler
public void onBlockBreakEvent(BlockBreakEvent event) {
Player player = event.getPlayer(); // プレイヤーの情報を取得
Test_event.getPlugin().getLogger().info(player.getName() + " broke a block!");
}

ほかにはどんな情報が取得できるのか

ほかの情報を閲覧するには、JavaDocを参照してください。

JavaDocとは、JavaのAPIのドキュメントのことです。JavaのAPIには、様々なクラスやメソッドがありますが、それらの説明が書かれています。 今回は、Paper MCのAPIを参照しているので、Paper MCのAPIのJavaDocを参照してください。

PaperMCのJavaDoc: https://jd.papermc.io/paper/1.21/

今回利用したBlockBreakEventのJavaDoc: https://jd.papermc.io/paper/1.21/org/bukkit/event/block/BlockBreakEvent.html

img.png

これを見ると、BlockEventから継承したgetBlock()というメソッドがあることがわかります。

これを利用して、ブロックの情報を取得することができます。

    @EventHandler
public void onBlockBreakEvent(BlockBreakEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock(); // ブロックの情報を取得
Test_event.getPlugin().getLogger().info(player.getName() + " broken " + block.getType());
}

これで、ブロックの情報を取得することができます。

別のイベント

他にも、様々なイベントがあります。 これについては、先ほどと同様にJavaDocを参照してください。

JavaDoc: https://jd.papermc.io/paper/1.21/

まとめ

今回は、プラグインの作成とイベントの追加について学びました。

次回は、コマンドの追加について学びます。

参考文献