うまげーむさん

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

【マインクラフト Modding】1.15対応 自作MODの作り方 #6 ツール

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

umagame.hatenablog.jp

こんばんは。

記事のストックがもう消えかけています。結構やばいです。

はじめに

今回はツールです。

前回作った、圧縮された土ブロックのツール5種をつくっていきます。

前回:

umagame.hatenablog.jp

ツールを作る

ティアを作る

<ティアのクラスは修正記事を出したので、そちらを参考にして作ってください。>

umagame.hatenablog.jp

まずはツールのティア(材質)を新しく作ります。バニラでいうと石とか鉄とかです。

toolパッケージを作ってそこにクラスを作ります。

f:id:Umagame:20200315220938p:plain

ティアは、IItemTierというインターフェースを実装することで作れます。

ティアはEnumを使って作るのが主流らしいですが、めんどくさいので普通のクラスで作ります。(ていうかこのシリーズを通してコードはめっちゃ適当です)

implementsで実装して、メソッドを追加。いっぱい出てきます。

package com.umagame.dirtmod.item.tool;

import net.minecraft.item.IItemTier;
import net.minecraft.item.crafting.Ingredient;

public class ItemTierDirt implements IItemTier{

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

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

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

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

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

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

}

これらのメソッドは上から順に、耐久力、効率、攻撃力、採掘レベル、エンチャント力、修理の素材を設定できます。

(採掘レベルは前回の記事参照、エンチャント力は良いエンチャントの付きやすさです)

とりあえず今回は、

  • 耐久力:石と同じ
  • 効率:鉄と同じ
  • 攻撃力:石と同じ
  • 採掘レベル:鉄と同じ
  • エンチャント力:鉄と同じ
  • 修理の素材:圧縮された土ブロック

にします。

なのでコードはこんな感じ。(ItemTierクラスから石、鉄を持ってくる)

package com.umagame.dirtmod.item.tool;

import com.umagame.dirtmod.block.BlockSuperCompressedDirt;

import net.minecraft.item.IItemTier;
import net.minecraft.item.ItemTier;
import net.minecraft.item.crafting.Ingredient;

public class ItemTierDirt implements IItemTier{

    @Override
    public int getMaxUses() {
        return ItemTier.STONE.getMaxUses();
    }

    @Override
    public float getEfficiency() {
        return ItemTier.IRON.getEfficiency();
    }

    @Override
    public float getAttackDamage() {
        return ItemTier.STONE.getAttackDamage();
    }

    @Override
    public int getHarvestLevel() {
        return ItemTier.IRON.getHarvestLevel();
    }

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

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

}

ティアはこれでOKです。

ツールのクラスを作る

ツールのクラスを作ります。

まずはツルハシから。

f:id:Umagame:20200315224204p:plain

ツルハシは、PickaxeItemクラスを継承して作ります。

コンストラクタも追加。

package com.umagame.dirtmod.item.tool;

import net.minecraft.item.IItemTier;
import net.minecraft.item.PickaxeItem;

public class ItemDirtPickaxe extends PickaxeItem{

    public ItemDirtPickaxe(IItemTier tier, int attackDamageIn, float attackSpeedIn, Properties builder) {
        super(tier, attackDamageIn, attackSpeedIn, builder);
    }
}

引数を消し、superの中を設定して、IDも設定。

attackDamageとattackSpeedについてですが、どうやら0に設定するとゲーム内ではDamageが2に、Speedが4になるみたいです。

なので今回は石斧と同じにするので(石斧は攻撃速度が0.8、攻撃力が9)、attackDamageを7に、attackSpeedを-3.2にします。

package com.umagame.dirtmod.item.tool;

import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.item.PickaxeItem;

public class ItemDirtPickaxe extends PickaxeItem{

    public ItemDirtPickaxe() {
        super(new ItemTierDirt(),7,-3.2F,new Properties().group(DirtMod.DIRTMOD_TAB));
        this.setRegistryName("dirt_pickaxe");
    }
}

これを他のツールも同じようにやります。(剣はSwordItemクラス、斧はAxeItemクラス、シャベルはShovelItemクラス、クワはHoeItemクラス)

アイテムを登録

前作ったItemsクラスに登録します。

といっても、クラスの名前を追加するだけで、超簡単です。

@SubscribeEvent
public static void registerItems(final RegistryEvent.Register<Item> event) {
    final Item[] item = {
            new ItemCompressedDirt(),
            new ItemDirtAxe(),
            new ItemDirtHoe(),
            new ItemDirtPickaxe(),
            new ItemDirtShovel(),
            new ItemDirtSword()
    };
    event.getRegistry().registerAll(item);
}

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

以前の記事:

umagame.hatenablog.jp

設定したあとがこちら。

f:id:Umagame:20200316003949p:plain

修正を入れる

ですが、このままでは手に持ったときのツールの形がちょっと変です。

modelsのjsonファイルを修正しましょう。

{
    "parent": "item/handheld",
    "textures": {
        "layer0": "dirtmod:item/dirt_axe"
    }
}

parentのところをhandheldにすることで解決します。

さいごに

今回はここまでです。

次回:

umagame.hatenablog.jp