提供: Minecraft Modding Wiki
2013年9月10日 (火) 01:25時点におけるDewfalse (トーク | 投稿記録)による版 (解説)
移動先: 案内検索


モンスタードロップの追加

既存のmobを倒したときに追加でアイテムドロップさせるサンプルプログラムです。

AddDrop.java

package adddrop;

import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;

@Mod(modid = AddDrop.modid, name = AddDrop.modid, version = "1.0")
public class AddDrop {
	public static final String modid = "adddrop";

	@EventHandler
	public void init(FMLInitializationEvent event) {
		MinecraftForge.EVENT_BUS.register(new LivingDeathEventHandler());
	}
}

LivingDeathEventHandler.java

package adddrop;

import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.item.Item;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

public class LivingDeathEventHandler {

	@ForgeSubscribe
	public void onLivingDeathEvent(LivingDeathEvent event) {
		if(event.entityLiving.worldObj.isRemote) {
			return;
		}
		if(event.entityLiving instanceof EntityZombie) {
			if(event.entityLiving.worldObj.rand.nextInt(10) == 0) {
				event.entityLiving.dropItem(Item.bone.itemID, 1);
			}
		}
	}
}

解説

LivingDeathEventをフックすることでmobの死亡時に指定の処理を追加することができます。

このイベントを利用すれば、戦隊ヒーローモノのようにmobは死亡時に爆発する、などの効果も実装できます。

(ただし、単純に上記のサンプルプログラムを爆発に置き換えるだけでは死亡即爆発となりそれっぽくはならないでしょう…)

上記はドロップアイテムの「追加」ですが、ドロップアイテムの「置換」を行いたい場合には、LivingDropsEventイベントをフックして置換することができます。(LivingDropsEventイベントなら追加も自由自在かも。筆者はLivingDeathEventばっかり使っているので詳細不明です)

なお、当然ですがこのような処理は既存のmobの死亡時の動作を変更したい場合に利用すればよく、新規追加mobの場合は単にgetDropItemIdメソッドやdropFewItemsメソッドをオーバーライドすることでドロップアイテムを指定することができます。