2015年11月5日木曜日

MCreatorで作成したアイテムに特殊効果を付けてみる

※10/17更新しました

今回は前回使っていたMCreatorというツールで作成したアイテムに、
エンチャントやポーション等の特殊効果を付ける方法について紹介します。
MCreator公式サイト


まずはMCreatorを起動して『Create new element』を選択して、MODを作成します。


Name of the elementにてMODタイトル名とMODの種類を選択します。

今回は『モナド』という剣を作っていきます。

画像を選択します。

武器の情報を入力します。

--参考情報--------------------------------------------------

ツール系のデフォルト情報
ツール系レベル耐久値破壊速度攻撃力エンチャント
0592.0F015
11314.0F15
22506.0F214
エメラルド315618.0F310
03212.0F022
------------------------------------------------------------

アイテムを持った状態で右クリックした場合の設定や、アイテムを作成した直後の動作を設定します。

今回は何も設定しません。

アイテムのレシピを設定します。


ここまでが通常のアイテムMOD作成手順です。

さらにこのモナドに特殊効果を付ける場合はコードを書きかえる必要があります。

以下の手順を踏むことでエンチャントポーション
NTBタグなどを付加することができます。


では今作ったばかりのアイテムを選択し『View source』を選択してください。

View source』を選択すると以下のようなソースコードが表示されます。

武器にエンチャントをつけたい場合は
GameRegistry.addRecipe(stack, new Object[]{
の上に黄色い枠の一文を追加してください。

武器にポーション効果をつけたい場合は
return ret.keySet();
}
の下に水色枠の文を追加してください。

武器にNBTタグをつけたい場合は
下の画像のようにいくつかの赤い枠の文言を追加してください。




NBTタグ
◆インポート文
import net.minecraft.entity.ai.attributes.*;
◆クラス変数
public final static UUID MODIFIER_UUID = UUID.fromString("111093da-54f0-4c1b-9dbb-13434134a84c");※UUID自体は任意のものを入れてください
◆以下は剣の場合の設定です。
 わからない場合はいじるのやめたほうがいいともいますよ。
NBTTagList list = new NBTTagList();ItemSword item = (ItemSword)stack.getItem();AttributeModifier attackModifier = new AttributeModifier(MODIFIER_UUID, "attackDamage", item.getDamageVsEntity() + 4, 0);list.appendTag(writeAttributeModifierToNBT(SharedMonsterAttributes.attackDamage, attackModifier));attackModifier = new AttributeModifier(MODIFIER_UUID, "movementSpeed", 0.1D, 0);list.appendTag(writeAttributeModifierToNBT(SharedMonsterAttributes.movementSpeed, attackModifier));NBTTagCompound stackTagCompound = new NBTTagCompound();stackTagCompound.setTag("AttributeModifiers", list);stack.setTagCompound(stackTagCompound);
◆NBTタグ追加用メソッド
private static NBTTagCompound writeAttributeModifierToNBT(IAttribute attribute, AttributeModifier modifier) { NBTTagCompound nbttagcompound = new NBTTagCompound(); nbttagcompound.setString("AttributeName", attribute.getAttributeUnlocalizedName()); nbttagcompound.setString("Name", modifier.getName()); nbttagcompound.setDouble("Amount", modifier.getAmount()); nbttagcompound.setInteger("Operation", modifier.getOperation()); nbttagcompound.setLong("UUIDMost", modifier.getID().getMostSignificantBits()); nbttagcompound.setLong("UUIDLeast", modifier.getID().getLeastSignificantBits()); return nbttagcompound;}
エンチャント
stack.addEnchantment(Enchantment.protection, 2);※Enchantment.protectionに任意の効果
 2に適応したいレベルを入れてください。
持ってる時にポーションエフェクト
public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { if(isSelected){ ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(9, 20*5, 0)); }}
※PotionEffecfの9に任意の効果
 20*5に効果時間(20tickで1秒のため20をかけてます)
 0に効果力




そして、コンパイル後にテスト実行した結果が以下の状態です。


作成したモナドには各種特殊効果が付与されているのがわかります。

--MOD情報--------------------------------------------------
  1. MOD名:
    • モナド
  2. MODバージョン:
    • 1.0.0
  3. 更新日:
    • 2015/11/5
  4. 対応バージョン:
    • Minecraft 1.8以上
  5. 必要MOD:
    • Minecraft 1.8対応forge
  6. ダウンロード
  7. 変更履歴
    • 1.0.0
    • 公開
    ------------------------------------------------------------


    参考情報としてエンチャントやポーションの各種IDをのせておきます。

    --参考情報--------------------------------------------------

    エンチャント
    防具エンチャント最大レベルID
    ダメージ軽減IVEnchantment.protection
    火炎耐性IVEnchantment.fireProtection
    落下耐性IVEnchantment.featherFalling
    爆発耐性IVEnchantment.blastProtection
    飛び道具耐性IVEnchantment.projectileProtection
    水中呼吸IIIEnchantment.respiration
    水中採掘IEnchantment.aquaAffinity
    棘の鎧IIIEnchantment.thorns
    水中移動IIIEnchantment.depthStrider
    耐久力IIIEnchantment.unbreaking
    武器エンチャント最大レベルID
    ダメージ増加VEnchantment.sharpness
    アンデッド特効VEnchantment.smite
    虫特効VEnchantment.baneOfArthropods
    ノックバックIIEnchantment.knockback
    火属性IIEnchantment.fireAspect
    ドロップ増加IIIEnchantment.looting
    耐久力IIIEnchantment.unbreaking
    ツールエンチャント最大レベルID
    効率強化VEnchantment.efficiency
    シルクタッチIEnchantment.silkTouch
    耐久力IIIEnchantment.unbreaking
    幸運IIIEnchantment.fortune
    弓エンチャント最大レベルID
    ダメージ増加VEnchantment.power
    パンチIIEnchantment.punch
    フレイムIEnchantment.flame
    無限IEnchantment.infinity
    釣り竿エンチャント最大レベルID
    宝釣りIIIEnchantment.luckOfTheSea
    入れ食いIIIEnchantment.lure


    ポーション
    ポーション効果IDポーション効果ID
    移動速度上昇1水中呼吸13
    移動速度低下2透明化14
    採掘速度上昇3盲目15
    採掘速度低下4暗視16
    攻撃力上昇5空腹17
    即時回復6弱体化18
    ダメージ719
    跳躍力上昇8ウィザー20
    吐き気9体力増強21
    再生能力10衝撃吸収22
    耐性11満腹度回復23
    火炎耐性12
    ※:ポーションの効力によっては効果時間を設定しないと反映されない場合があります。
       例:吐き気は5秒程度効果時間がないと発動しません。

    NBTタグ
    NBTタグID
    体力SharedMonsterAttributes.maxHealth
    探索範囲SharedMonsterAttributes.followRange
    ノックバック耐性SharedMonsterAttributes.knockbackResistance
    移動速度SharedMonsterAttributes.movementSpeed
    攻撃力SharedMonsterAttributes.attackDamage

    ------------------------------------------------------------

    質問指摘意見等はコメントでどうぞ

    14 件のコメント:

    1. アイテムの耐久を無限にするにはどうすればいいのでしょうか

      返信削除
      返信
      1. number of usesが耐久値なので0にすると無限になると思いますよ
        Mcreator Wiki http://mcreator.wikia.com/wiki/The_MCreator_Wikia

        削除
      2. あと無限の属性(NBTタグ)付けるという手法もあります

        削除
    2. 複数のポーション効果をつけるにはどうしたらいいのでしょうか

      返信削除
      返信
      1. ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(9,20*5,0));
        この行をコピペして効果だけを変更すると
        複数ポーションの効果を付けることができますよ

        削除
    3. 出来れば追加するコードをコピペ用に貼っといてくれると助かります。

      返信削除
    4. 上記コメントを良く見てください
      貼ってありますよ

      返信削除
      返信
      1. 貼ってないですよね?
        主に写真で写ってる赤枠の部分とか

        削除
      2. ポーションについては2016年3月24日 7:47のコメントを参照してください
        赤枠は写真を見てください

        削除
    5. 右クリックを左クリックにすることはできないのでしょうか?

      返信削除
    6. すみません。お聞きしたいことがあるのですが、水色枠の部分をreturn ret.keyset();}の下につけるとシンボルが見つかりませんと出てくるのですが、どうすればよいですかね?1.7.10用のMODを作成しています。

      返信削除
    7. ある特定のアイテムで右クリックした場合にmobをアイテム化させるなんてことは可能ですか?

      返信削除
      返信
      1. できますがここで説明できるほど簡単ではありません
        まずはオリジナルMODを作ってスキルを磨いてください

        削除
    8. すみません、自分で出来ました

      返信削除