この記事は"Minecraft Forge Universal 9.10.0.xxx~"を前提MODとしています。 |
PotionEffectのチュートリアル
PotionEffectを付与するアイテムを追加し、基礎的なPotionEffectについて述べる。
尚、Itemの追加などの解説などは『アイテムの追加』を参照。
ソースコード
- Sample_Potion.java
package Sample.Sample_Potion.mods; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid="Sample_Potion", name="Sample_Potion", version="1.0") public class Sample_Potion { public static Item Item_PotionItem; public static int ItemID_PotionItem; @EventHandler public void preInit(FMLPreInitializationEvent event) { Item_PotionItem = new ItemSample(ItemID_PotionItem); GameRegistry.registerItem(Item_PotionItem, "potionitem"); } @EventHandler public void init(FMLInitializationEvent event) { LanguageRegistry.addName(Item_PotionItem, "Potion Item"); LanguageRegistry.instance().addNameForObject(Item_PotionItem, "ja_JP", "ポーション アイテム"); } }
- ItemSample.java
package Sample.Sample_Potion.mods; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; public class ItemSample extends Item { public ItemSample(int par1) { super(par1); //クリエイティブのタブ this.setCreativeTab(CreativeTabs.tabMaterials); //システム名の登録 this.setUnlocalizedName("PotionItem"); //テクスチャの指定 this.func_111206_d("sample:PotionItem"); //スタックできる量 this.setMaxStackSize(1); //アイテムの最大ダメージ値 this.setMaxDamage(1200); } //アイテムを右クリック時に呼ばれる @Override public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { //PotionのID int potionID = Potion.moveSpeed.id; //Potionの効果時間(【20tick ≒ 1秒】なので*20) int duration = 10 * 20; //PotionのLv int amplifier = 1; //PotionEffectの設定 PotionEffect Effect = new PotionEffect(potionID, duration, amplifier); //PotionEffect(Effect)がEntityPlayerに付与されているかの判定 boolean isMoveSpeed = par3EntityPlayer.isPotionActive(Effect.getPotionID()); //PotionEffect(Effect)がEntityPlayerに付与されていない場合 if( !isMoveSpeed ) { //Itemを振る動作 par3EntityPlayer.swingItem(); //ダメージ値を【1】増やす par1ItemStack.damageItem(1, par3EntityPlayer); //PotionEffect(Effect)をEntityPlayerに付与 par3EntityPlayer.addPotionEffect(Effect); } return par1ItemStack; } }
解説
ItemSample.java
//PotionのID int potionID = Potion.moveSpeed.id; //Potionの効果時間 int duration = 10 * 20; //Potionの強さ int amplifier = 0; //PotionEffectの設定 PotionEffect Effect = new PotionEffect(potionID, duration, amplifier);
potionIDは『PotionのID』である。
この値により、PotionEffectのIDが決まる。
現在(2013/9/3)では1~23にIDが振り当てられおり、醸造によって得られない効果も多数ある。
一部の効果はバッドステータスとしても利用されている。(例:ゾンビ肉を食べた際の空腹、ウィザーの攻撃によるウィザー状態)
durationは『Potionの効果時間』である。
この値により、PotionEffectの強効果時間決まる。
『20tick ≒ 1秒』である為、ここでは20を乗算している
amplifierは『Potionの強さ』である。
この値により、PotionEffectの強さが決まる。
PotionEffectが付与されている際に画面に表示されるLvのことでもある。
ここで注意すべきは、0から振り当てられているということである。(例:0と設定した場合にはLv1となる)
//PotionEffect(Effect)をEntityPlayerに付与 par3EntityPlayer.addPotionEffect(Effect);
上記の要素を組み合わせたPotionEffectは、addPotionEffect()を用いて付与される。
尚、ここではEntityPlayerであるが、基本的にPotionEffectは『生物』であるならば付与可能である。
(アンデットには発揮されない、プレーヤーにのみにしか発揮されない効果などもある)
まとめ
このようにPotionEffectは簡単に付与できる上に応用も利くので、Mod製作においては非常に便利な要素である。
しかし、未だ未実装段階の効果なども存在しているのでverアップにより効果が違ってくる可能性もある。