PotionEffectのチュートリアル

提供:Minecraft Modding Wiki
移動: 案内, 検索

この記事は"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アップにより効果が違ってくる可能性もある。

チュートリアル
個人用ツール