うまげーむのゲームブログ

ゲームの情報を主に投稿します。

【マインクラフト Modding】1.15対応 自作MODの作り方 #7 防具

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも~~~~

はじめに

今回は防具を作ります。

実は前回のときに一緒に作ればよかったのですが、長くなりそうなのでやめました。

前回:

umagame.hatenablog.jp

防具をつくる

アーマーマテリアルクラス

<前回と同じように、こちらも修正記事のものを参考にしてクラスを作ってください。>

umagame.hatenablog.jp

前回と同じように、防具のステータスを決めるクラスを作ります。

前回作ったtoolパッケージに入れようかと思いましたが、今回は新しくパッケージを作っておきます。

f:id:Umagame:20200317172833p:plain

IArmorMaterialを実装して、メソッドを追加。

package com.umagame.dirtmod.item.armor;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.SoundEvent;

public class ArmorMaterialDirt implements IArmorMaterial{

    @Override
    public int getDurability(EquipmentSlotType slotIn) {
        // TODO 自動生成されたメソッド・スタブ
        return 0;
    }

    @Override
    public int getDamageReductionAmount(EquipmentSlotType slotIn) {
        // TODO 自動生成されたメソッド・スタブ
        return 0;
    }

    @Override
    public int getEnchantability() {
        // TODO 自動生成されたメソッド・スタブ
        return 0;
    }

    @Override
    public SoundEvent getSoundEvent() {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public Ingredient getRepairMaterial() {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public String getName() {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public float getToughness() {
        // TODO 自動生成されたメソッド・スタブ
        return 0;
    }

}

上から順に耐久力、アーマーポイント(体力バーの上のやつ)、エンチャント力(前記事参照)、サウンドイベント(つけたときの音)、修理の素材、マテリアルのID、防具強度です。

防具強度はバニラではダイヤ防具にだけついています。(これがなんなのかはわからない)

今回は

  • 耐久力:チェーンと同じ
  • アーマーポイント:チェーンと同じ(2、5、4、1)
  • エンチャント力:鉄と同じ
  • サウンドイベント:革と同じ
  • 修理の素材:圧縮された土ブロック
  • タフネス:なし

にします。

なのでコードはこんな感じ。(耐久力、アーマーポイントは防具の部位によって変わります)

import com.umagame.dirtmod.block.BlockSuperCompressedDirt;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorMaterial;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;

public class ArmorMaterialDirt implements IArmorMaterial{

    @Override
    public int getDurability(EquipmentSlotType slotIn) {
        int durability = 0;
        if(slotIn == EquipmentSlotType.HEAD) {
            durability = 166;
        }else if(slotIn == EquipmentSlotType.CHEST) {
            durability = 241;
        }else if(slotIn == EquipmentSlotType.LEGS) {
            durability = 226;
        }else if(slotIn == EquipmentSlotType.FEET) {
            durability = 196;
        }
        return durability;
    }

    @Override
    public int getDamageReductionAmount(EquipmentSlotType slotIn) {
        int damageReduction = 0;
        if(slotIn == EquipmentSlotType.HEAD) {
            damageReduction = 2;
        }else if(slotIn == EquipmentSlotType.CHEST) {
            damageReduction = 5;
        }else if(slotIn == EquipmentSlotType.LEGS) {
            damageReduction = 4;
        }else if(slotIn == EquipmentSlotType.FEET) {
            damageReduction = 1;
        }
        return damageReduction;
    }

    @Override
    public int getEnchantability() {
        return ArmorMaterial.IRON.getEnchantability();
    }

    @Override
    public SoundEvent getSoundEvent() {
        return SoundEvents.ITEM_ARMOR_EQUIP_LEATHER;
    }

    @Override
    public Ingredient getRepairMaterial() {
        return Ingredient.fromItems(new BlockSuperCompressedDirt().asItem());
    }

    @Override
    public String getName() {
        return "dirtmod:dirt";
    }

    @Override
    public float getToughness() {
        return ArmorMaterial.CHAIN.getToughness();
    }
}

アーマーマテリアルクラスはこれでOK。

防具のクラス

防具のクラスを作ります。

f:id:Umagame:20200317180451p:plain

防具はArmorItemクラスを継承して作ります。

package com.umagame.dirtmod.item.armor;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.IArmorMaterial;

public class ItemDirtHelmet extends ArmorItem{

    public ItemDirtHelmet(IArmorMaterial materialIn, EquipmentSlotType slot, Properties builder) {
        super(materialIn, slot, builder);
    }
}

アーマーマテリアル、部位、プロパティー、IDを設定します。

package com.umagame.dirtmod.item.armor;

import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;

public class ItemDirtHelmet extends ArmorItem{

    public ItemDirtHelmet() {
        super(new ArmorMaterialDirt(),EquipmentSlotType.HEAD,new Properties().group(DirtMod.DIRTMOD_TAB));
        this.setRegistryName("dirt_helmet");
    }
}

他の部位も作ります。(チェストプレートはEquipmentSlotTypeのCHEST、レギンスはLEGS、ブーツはFEET)

防具を登録

前回同様にItemsクラスに登録します。

起動するとちゃんと追加されていることが分かります。

f:id:Umagame:20200317184233p:plain

テクスチャ、名前

以前の記事と同様に、テクスチャと名前を設定します。

ですが防具を着たときのテクスチャも追加する必要があります。

こんな感じのやつ。

f:id:Umagame:20200317185338p:plain

これをassets/ModのID/textures/models/armorに、マテリアルのID_layer_1.pngとマテリアルのID_layer_2.pngで保存します。

f:id:Umagame:20200317185534p:plain

これでOKです。

f:id:Umagame:20200317191157p:plain

さいごに

今回はここまでです。

次回:

umagame.hatenablog.jp