イベントを扱おう
プラグインの作成
まず、プラグインを作成します。プラグインの作成方法については、以前の資料を参照してください。
イベントの追加
まず、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!");
}