前回に引き続き、MinecraftのNeoForge向けMod作成についてのブログ記事となります。
今回はイベントハンドラ編です。ブロック破壊イベントに処理を登録して動作させてみたいと思います。やることはわかりやすく操作キャラキルです!(苦笑)
今回の対象バージョンは前回に引き続きMinecraft:1.21.1、NeoForge:21.1.77です。
前回のブログ記事は「MinecraftのNeoForge向けMod作成:環境構築編」です。
イベントハンドラについて
Minecraftではゲーム内で発生するさまざまなことに対してイベントが発生しています(プレイヤーがキーボード操作した時や、マウス操作したとき、ブロックを破壊したとき、などなどたくさんの種類が存在します)。
イベントハンドラでは、たくさんあるイベントの中の目的のイベントに処理を登録し、登録したイベントが発生したときに希望した処理を実行させることができます。
ブロック破壊イベントにイベントハンドラを登録
今回は参考として「BlockEvent.BreakEvent」にイベントハンドラを登録します。
BlockEvent.BreakEventはプレーヤーがブロックを破壊した時にサーバー側で発生するイベントです(ここでは詳しく説明しませんが、Minecraftにはサーバー側とクライアント側が存在しています)。
ではいよいよIntelliJ IDEAでソースをいじります。まずjavaクラスを追加します。使用する環境は前回構築した環境をそのまま使用します。本ブログ記事ではMinecraft:1.21.1、NeoForge:21.1.77となっています。
IntelliJ IDEAの左のプロジェクトから「プロジェクト」配下にある「src」→「main」→「java」→「com.example.examplemod」を右クリックし、「新規作成」→「Javaクラス」を選択します。表示されるウインドウにクラス名(今回は「TestEventHandler」としました)を入力します。
クラスが作成できたら中身を編集します。以下のコードをコピー&ペーストしてみてください。わかりやすく、イベントハンドラで操作キャラをキルするコードを記述しました(汗
package com.example.examplemod;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.event.level.BlockEvent;
@EventBusSubscriber(modid="examplemod")
public class TestEventHandler {
@SubscribeEvent
public static void onBlockDestroy(BlockEvent.BreakEvent event) {
// 操作キャラをキル
event.getPlayer().kill();
}
}
簡単ですが、内容を説明します。まず7行目に記載しているようにクラスにアノテーション「@EventBusSubscriber」を記載します。
次に、イベントハンドラとするメソッドにアノテーション「@SubscribeEvent」を記載します。
二つの文字列は似ていますのでどっちがどっちとならないよう注意しましよう。
また注意点としてイベントハンドラとするメソッドは必ず「public static void」とするようです。
イベントハンドラを登録するイベントは引数で指定します。今回は「BlockEvent.BreakEvent」なので、引数の型を「BlockEvent.BreakEvent」とします(もし別のイベントをハンドリングしたい場合にはこの引数の型を変更してください)。
あとはメソッド内にやりたいこと/処理を記載します。今回は操作キャラキルです!
動作確認
ここまで出来たら、実際にMinecraftを起動し、動作を見てましょう。
実行の仕方は、左上の4本線を選択後表示されるメニューから「実行」を選択し、「デバッグ」→「Client」を選択です。
そのほかの方法として、右上からも行えます。下の画像を参考に「Client」と表示されていることを確認して、「テントウムシ?アイコン」をクリックでも実行できます。
Minecraftが起動できたら、周りにある土ブロックや、原木ブロックを破壊してみましょう。破壊した瞬間に操作キャラが死亡することがわかると思います(苦笑
このようにMinecraftではイベントに任意の処理を登録し、処理を追加することができます。
なおイベントはたくさんあるため、一つ一つの解説はしません(といいますか多すぎて解説できません…(汗))。右上の「虫眼鏡マーク」を選択し、上部の「クラス」を選択し、対象を「すべてのファイル」に変更し「*event.java」などで検索し、出てくるものから希望の物をさがしてみてください。基本的には外部ライブラリにある「neoforge-21.1.77-minecraft-merged.jar」配下の「net/minecraft」下のどこかか「net/neoforged/neoforge/event」にあると思います。
最後に
今回はイベントに処理を登録して、イベントが発生したときに目的の処理を実行する方法を紹介しました。
やったことは、動作確認も簡単で見た目もわかりやすい操作キャラキルとしましたが、イベントハンドラを使いこなせるようになると、色々なことが実現できます、
少しでも参考になれば幸いです。



0件のコメント: