main() blog

プログラムやゲーム、旅、愛する家族について綴っていきます。

Minecraft MODでオリジナル「食料」を追加しよう!(Mac編)

今回は「食料」を追加してみます。

Forge MDK 1.12.2 の環境での説明になります。
環境のセットアップなどは過去の記事を参照してください。

www.main-function.com

www.main-function.com

「食料」を追加してみよう

新規にMyItemCustomFoodというクラスを追加します。

package testmod;

import net.minecraft.item.ItemFood;

public class MyItemCustomFood extends ItemFood {

    public MyItemCustomFood(String name, int amount, float saturation, boolean isWolfFood)
    {
        super(amount, saturation, isWolfFood);
        setUnlocalizedName(name);
        setRegistryName(name);
    }
}

ModItemsに以下のコードを追加します。

@Mod.EventBusSubscriber(modid=TestMod.MODID)
public class ModItems {
    
        :
    static Item myApple;

    public static void init()
    {       
            :
            :

        // オリジナルリンゴを追加.
        myApple = new MyItemCustomFood("my_apple", 5, 0.3f, false).setCreativeTab(CreativeTabs.FOOD);
    }
    
    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event)
    {
        event.getRegistry().registerAll(myIngot, myApple);
    }
    
    @SubscribeEvent
    public static void registerRenders(ModelRegistryEvent event)
    {
            :
            :
        registerRender(myApple);
    }
}

my_apple.jsonとmy_apple.pngも用意します。

{
    "parent": "item/generated",
    "textures": {
        "layer0": "testmod:items/my_apple"
     },
     
    "display": {
        "thirdperson": {
            "rotation": [-90,0,0],
            "translation": [0,1,-3],
            "scale": [0.55,0.55,0.55]
        },
        "firstperson": {
            "rotation": [0,-135,25],
            "translation": [0,4,2],
            "scale": [1.7,1.7,1.7]
        }
    }
}

実行すると食料のタブにオリジナルのリンゴが追加されています。
もちろん食べることも可能です。

f:id:takezoh_1127:20181110000526p:plain

「効果付き」の食料を追加してみよう

これだけど面白くないので食べたら何かしらの効果が付く食料を作ってみましょう。

新しくMyItemEffectFoodというクラスを作成します。

package testmod;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class MyItemEffectFood extends MyItemCustomFood  {

    public MyItemEffectFood(String name, int amount, float saturation, boolean isWolfFood)
    {
        super(name, amount, saturation, isWolfFood);
        setAlwaysEdible();
    }
    
    // ↓食べたら呼ばれる関数.
    @Override
    protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player) {
        if(!worldIn.isRemote) {
            // ↓プレイヤーに跳躍力アップ(JUMP_BOOST)の効果を付ける.
            player.addPotionEffect(new PotionEffect(MobEffects.JUMP_BOOST, 60*20, 5, false, true));
        }
    }
    
    @SideOnly(Side.CLIENT)
    public boolean hasEffect(ItemStack stack)
    {
        return true;
    }
}

プレイヤーが食料を食べると onFoodEaten() という関数が呼ばれるので、
その中でプレイヤーに跳躍力アップの効果を付けてあげます。

ModItemsに以下のコードを追加します。

@Mod.EventBusSubscriber(modid=TestMod.MODID)
public class ModItems {
    
    static Item myIngot;
    static Item myApple;
    static Item myEffectApple;

    public static void init()
    {
            :
            :

        // 跳躍力アップの効果付き.
        myEffectApple = new MyItemEffectFood("my_effect_apple", 5, 0.3f, false).setCreativeTab(CreativeTabs.FOOD);
    }
    
    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event)
    {
        event.getRegistry().registerAll(myIngot, myApple, myEffectApple);
    }
    
    @SubscribeEvent
    public static void registerRenders(ModelRegistryEvent event)
    {
            :
            :
        registerRender(myEffectApple);
    }
}

my_effect_apple.jsonも用意します。

{
    "parent": "item/generated",
    "textures": {
        "layer0": "testmod:items/my_apple"
     },
     
    "display": {
        "thirdperson": {
            "rotation": [-90,0,0],
            "translation": [0,1,-3],
            "scale": [0.55,0.55,0.55]
        },
        "firstperson": {
            "rotation": [0,-135,25],
            "translation": [0,4,2],
            "scale": [1.7,1.7,1.7]
        }
    }
}

実行してみます。
食料タブに追加されているので食べみます。

f:id:takezoh_1127:20181110000622p:plain

f:id:takezoh_1127:20181110000936p:plain

跳躍力アップの効果が付いたことが確認できました。