提供: Minecraft Modding Wiki
2013年9月3日 (火) 18:49時点におけるSchr0 (トーク | 投稿記録)による版 (PotionEffectを付与するアイテムを追加し、基礎的なPotionEffectについて述べたもの。)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

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