Minecraft1.12.2でMod作製 PART3. Mobのスポーンに反応するイベント

こちらはPCゲーム「Minecraft」のMod作製日記です。

Minecraft.1.12.2でのMod作製の作業進捗を書いています。
Minecraft.1.12.2での完成を目標としていますが、Minecraft.1.13の仕様によってはそちらへ移行してからの完成を目指すかも知れません。









新しくMobを追加するのにも慣れたから、ミニゴーレムのタイプを分けてみる事にした。

バイオームごとにスポーンする「野生?」のミニゴーレムは鼻無しで、「ポピー」で手懐けられる事が出来る。

それと別にバニラのアイアンゴーレムを小さくした村用(鼻有り)のミニゴーレムを作ってみる事にした。

バニラのアイアンゴーレムをそのまま小さくするだけだから簡単だと思ってたけど、「extends EntityIronGolem」でサイズだけ書いたらokかと思ったら、スポーンさせてみたら、当たり判定は設定したサイズなんだけど、見た目のサイズはバニラのアイアンゴーレムと同じw

なので、「extends EntityGolem」に変えて、サイズ以外の情報をアイアンゴーレムからコピー。

エラーが出たら、足りない情報をインポートしたり、クラス名が違ってるのを直すだけ(EntityIronGolem ➔ EntitySmallGolemなど)。

エラーが上手く解決できなかった、村人を見つめるAIと、村人を守ろうとするAIは一時的にコメントアウトして、花を差し出すモーションもコメントアウト。

なので、プレイヤーから村人を保護しようとはしないはずw

それでも敵対的なMobに対しては攻撃を仕掛けるので、役目は果たしてくれるはず。

[2タイプのミニゴーレム]

野生?のミニゴーレムは頭の位置を中央にした。

鼻が無いので下を向いても鼻がめり込む心配は無いw

並べてみて気付いたのは、花の有る無しと頭の位置で印象が変わる事。

鼻がある方が、ボーっとしてるように見えるかもw

村用のミニゴーレムのスポーンを村だけにしたかったけど、設定の仕方が見つからず悪戦苦闘。

村はバイオームでは無いし、ロケーションか何かかも知れないけど、呼び出し方が分からない・・・

村人を追加するModのソースを見てみたら、村人はMobとして追加してるわけじゃなかった。

村人の職業として、職業の名前や取引リストを設定するだけで、スポーンするみたい。

なので、村に専用のMobをスポーンさせてるModのソースを見てみたけど、そのModはスポーンの管理などを1体ずつではなく、グループのように設定している為、どこがスポーンの処理なのか見つけられなかった。

で、考え付いたのが、「アイアンゴーレムがスポーンする時に、一緒にスポーンさせる」方法。

普通のスポーン登録が見つけられなかったので、イベントに頼ってみる事にしたけど、こっちの方が難しいかも知れない。

いくつかのソースを見ていて「Entityがワールドに出現した時のイベント」というのを発見。

その使い方を調べていたら、スポーンがトリガーになる命令が3種類ある事を知った。

それぞれが・・・

1. 指定したエンティティがスポーンする時に、代わりに起こるイベント

2. 指定したエンティティがスポーンする時に、一緒に起こるイベント(自然スポーンのみ)

3. 指定したエンティティが読み込む時に、一緒に起こるイベント(スポーンの仕方を問わない)

アイアンゴーレムがスポーンしたら、ミニゴーレムもスポーンするようにしたかったので実験として、「スライムがスポーンしたら、スライムをスポーンする」で作ってみた。

その結果・・・

1. スライムの代わりにスライムがスポーンするので変化なし

2. スライムが自然スポーンした時に、追加で沸く

3. スライムがスポーンした事によって、追加されるスライムのスポーンもトリガーとなり、無限ループ

1と2は分かりやすい。

3はトリガーとスポーンするエンティティを同じにした為に無限ループに陥り、「スーパーフラット」のワールドで試した結果、ロード中に発生したスライムのスポーンから無限ループの処理で、時間が経ってもワールドを読み込めなくなった。

多分、見えない世界で、スライムの大量発生が起きていたんだと思うw

今回の場合はトリガーとスポーンが被らなければいいので、アイアンゴーレムがスポーンしたら村用ミニゴーレムを一緒にスポーンさせるようにした。

3を使ったので、カボチャから作っても、お供がスポーンするw

3の場合、読み込んだ時の処理のようで、ワールドに入りなおしたり、遠くから戻ってきた時に読み込むたびに処理が行われ、ミニゴーレムが増殖していったw

1つ疑問なのが、この処理が上手くいったら、1~2体スポーンするようにしたかったけど、なぜか元々2体スポーンする。

結局、原因はわからなかったけど、処理は上手くいってるみたいだから、このままでいいかなw

一番、苦労したのが、トリガーとなったエンティティの座標を得る方法。

Javaに慣れてる人は簡単に出来るんだろうけど、初心者のこっちはそうはいかないw

座標の設定が出来ない為に、スポーンが起きているかも確認できず、どこが間違っているのかも検討が付かなかった。

試しにトリガーに対する結果を、プレイヤーの位置に音を鳴らす処理に変更してみたら、音が鳴らなかった。

で、基本に戻ってみたら、作ったイベントのクラスをレジストリに登録していなかったw

その後も、うまくいかず、「初期化」の設定が入っていなったりと、かなり無駄な時間を費やしてしまってたみたい。

作っても登録や初期化をしてないとダメw

で、そっちが完了した途端に、イベントが動き出した。

この後に座標の検出に時間を取られたわけ。

[お供のミニゴーレム]

無事にお供の召喚に成功。

上のSSはテスト用に野生のミニゴーレムを設定してたから、この後に村用のミニゴーレムに置き換えて完成。

アイアンゴーレムがスポーンしたら無条件でお供が召喚。

スポーンエッグでも村のスポーンでもカボチャのスポーンでも召喚を確認。

これで村用のミニゴーレムに会えるようになった。

もし作れたら、バイオームごとにお供が変わる設定も作ってみたいかも。

でも、その座標のバイオームの情報を得る命令が見つけられなかったw

なので、これはそのうちってことで。

前回の目標をそっちのけで作ったので、次はゴーレムの装備を作りたいw











次の記事

☆Minecraft1.12.2でMod作製 PRAT4. Mod作製の進捗状況

前の記事

☆Minecraft1.12.2でMod作製 PRAT2. Mobの種類とスポーン

Minecraft 記事一覧へ