うまげーむさん

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

【マインクラフト Modding】1.16での自作Modの作り方 #4 アイテムの追加

はじめに

どうも。

来週スナップショットが配信されるらしいです。楽しみです。

前回:

www.umagame.info

今回追加するアイテム

これからは、そのパートで何を追加するかを最初に紹介するようにしたいと思います。(Modの作り方だけ見たい方はとばして構いません)

前回言った通り、このシリーズではHypixelのUHCのアイテムを再現していきます。

ですがUHCには、このパートで扱うのに適しているような「特に特殊効果などがない単純なアイテム」というのがありません。

f:id:Umagame:20210115222832p:plain
テクスチャ

なので新しく考えました。その名も「熱された石炭」です。(「熱された木炭」も作ります。)

その名の通り、かまどで熱された石炭です。クラフト用アイテムで、かまどに入れるとアイテム9個分燃やすことができます。

UHCをやったことがある方なら、このアイテムは何のレシピためのものか分かるかと思います。(レシピの追加は次回やります。多分)

アイテムの追加

ModID

f:id:Umagame:20210116213727p:plain

この先ModIDを使う場面が多々あるので、ModIDをfinalフィールド「MOD_ID」としてメインクラスに置いておきます。

f:id:Umagame:20210116213732p:plain

その上の「@Mod」の部分を、「MOD_ID」に書き換えます。

コードはこちら。(UHCItemsMod.java

package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(UHCItemsMod.MOD_ID)
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public static final String MOD_ID = "uhcitems";

    public UHCItemsMod() {
        // Register the setup method for modloading
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}

アイテムのクラス

それでは作っていきます。

f:id:Umagame:20210116213736p:plain

まず、アイテムのクラスを置くためのパッケージを作ります。

f:id:Umagame:20210116213740p:plain

名前は「item」にします。別に「items」でも良いですが、マインクラフト側は「item」なので一応合わせます。

f:id:Umagame:20210116213744p:plain

作った「item」パッケージに、新しくクラスを作ります。

f:id:Umagame:20210116213748p:plain

名前は「HeatedCoalItem」にします。画像では「HeatedCoal」になってますが気にしないでください。後で変えます。

f:id:Umagame:20210116213751p:plain

クラス名の後に「extends Item」と入力します。

アイテムのクラスを作るときはほとんど、Itemクラスないしはその子クラスを継承して作ります。

f:id:Umagame:20210116213755p:plain

まだimportをしていないのでエラーが出ます。

左端の豆電球のアイコンをクリックして、「net.minecraft.item」の「Item」をインポートします。

これからたびたび「Item」という名前のクラスを使いますが、それらはほとんど「net.minecraft.item」の「Item」です。

f:id:Umagame:20210116213800p:plain

インポートすると別のエラーが出ます。

さっきと同じように豆電球をクリックして、「コンストラクター...」と書いてあるやつをクリックします。

f:id:Umagame:20210116213804p:plain

これで自動的にコンストラクタが追加されます。

f:id:Umagame:20210116213807p:plain

このコンストラクタをこのように書き換えます。

これでアイテムのクラスはOKです。

コードはこちら。(HeatedCoalItem.java

package com.umagame.uhcitemsmod.item;

import net.minecraft.item.Item;

public class HeatedCoalItem extends Item{

	public HeatedCoalItem() {
		super(new Properties());
	}
}

アイテム登録用クラス

次にアイテムの登録用クラスを作っていきます。

f:id:Umagame:20210116213810p:plain

新しく「init」というパッケージを作ります。

initとはinitialization(初期化)の略です。結構使います。

f:id:Umagame:20210116213814p:plain

アイテム登録用クラスを作ります。名前は「ItemInit」にします。

f:id:Umagame:20210116213818p:plain

コードを書いていきます。今回は前シリーズとは違った登録方法です。

この「ITEMS」の「register」というメソッドを呼び出すことで、アイテムを登録することができます。

f:id:Umagame:20210116213822p:plain

コードを書きます。

「ITEMS.register」の後の「"heated_coal"」がアイテムのIDとなります。

アイテムIDはテクスチャの反映のときに使うので、スペルミスしないようにしましょう。

またこの「HEATED_COAL」は、作ったアイテムを他のクラスから指定するときに使います。

これでアイテム登録用クラスはOKです。

コードはこちら。(ItemInit.java

package com.umagame.uhcitemsmod.init;

import com.umagame.uhcitemsmod.UHCItemsMod;
import com.umagame.uhcitemsmod.item.HeatedCoalItem;

import net.minecraft.item.Item;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

public class ItemInit {
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,UHCItemsMod.MOD_ID);

	public static final RegistryObject<Item> HEATED_COAL = ITEMS.register("heated_coal", () -> new HeatedCoalItem());
}

もちろん、ソースコード内のアイテム名は皆さんが追加するものに合わせてください。

EventBus

アイテム登録用クラスはできましたが、このままではまだアイテムが追加されません。

EventBusというものを「ITEMS」に登録する必要があります。

f:id:Umagame:20210116213829p:plain

メインクラス(UHCItemsMod.java)のコンストラクタの中身を書き換えます。

EventBusが何なのかは知らなくても大丈夫です。私も知らないので。

とりあえずこのようにすればアイテムの登録ができる、とだけ知っておいてください。

コードはこちら。(UHCItemsMod.java

package com.umagame.uhcitemsmod;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.umagame.uhcitemsmod.init.ItemInit;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(UHCItemsMod.MOD_ID)
public class UHCItemsMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();

    public static final String MOD_ID = "uhcitems";

    public UHCItemsMod() {
        // Register the setup method for modloading
        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        bus.addListener(this::setup);

        ItemInit.ITEMS.register(bus);

        // Register ourselves for server and other game events we are interested in
        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
        // some preinit code
    }
}

起動して確認

テクスチャなどがまだ設定できてませんが、起動してアイテムが追加できているか確認してみます。

f:id:Umagame:20210116213836p:plain

/giveコマンドで出します。

f:id:Umagame:20210116213845p:plain

ちゃんと追加されてました。

言語・モデル・テクスチャの設定

アイテムの追加はできたので、次はテクスチャなどを設定していきます。

f:id:Umagame:20210116213852p:plain

「src/main/resources」に、新しくパッケージを作ります。

f:id:Umagame:20210116213855p:plain

名前は「lang」です。ここに言語ファイル(ゲーム内でのアイテムの名前を設定するファイル)を置きます。

f:id:Umagame:20210116213900p:plain

「lang」の他に、「models」、「textures」も作ります。

f:id:Umagame:20210116213906p:plain

まず言語ファイルを作っていきます。

「lang」の中に新しくファイルを作ります。

f:id:Umagame:20210116213910p:plain

まずは英語から。「en_us.json」を作成して、

f:id:Umagame:20210116213913p:plain

このように入力します。

f:id:Umagame:20210116213917p:plain

日本語のファイル(ja_jp.json)も作って、同じように入力します。

f:id:Umagame:20210116213919p:plain

次にモデルを設定します。「models」の中に新しく「item」というパッケージを作成します。

f:id:Umagame:20210116213922p:plain

「アイテムのID.json」という名前でファイルを作成します。

f:id:Umagame:20210116213925p:plain

このように入力します。ModID(「uhcitems」)とアイテムのID(「heated_coal」)の部分はスペルミスしないようにしましょう。

f:id:Umagame:20210116213928p:plain

Forgeのフォルダ\src\main\resources\assets\ModID\texturesに「items」というフォルダを作ります。

f:id:Umagame:20210116213931p:plain

その中にテクスチャとなる画像のファイルを置きます。名前は「アイテムのID.png」にしてください。

f:id:Umagame:20210116225323p:plain

最後に、「src/main/resources」を右クリックして「リフレッシュ」をクリックします。

これをすることでテクスチャのファイルがEclipse内でロードされます。(これをしないと、テストプレイしたときにちゃんと反映されません)

これで言語・モデル・テクスチャの設定はOKです。

コードはこちら。(en_us.json、ja_jp.json、heated_coal.json

{
	"item.uhcitems.heated_coal": "Heated Coal"
}
{
	"item.uhcitems.heated_coal": "熱された石炭"
}
{
	"parent": "item/generated",
	"textures": {
		"layer0": "uhcitems:items/heated_coal"
	}
}

起動して確認 その2

起動して確認してみます。

f:id:Umagame:20210116213934p:plain

ちゃんとテクスチャ、名前が反映されていたら成功です。

f:id:Umagame:20210116213940p:plain

ちゃんと日本語も反映されています。

おまけ(燃焼時間の設定)

アイテム自体はこれで完成ですが、今回作った「熱された石炭」はかまどの燃料として使えるものなので、燃焼時間を設定する必要があります。

f:id:Umagame:20210116213946p:plain

アイテムのクラス(HeatedCoalItem.java)で「getBurnTime」というメソッドをオーバーライドします。

returnの値が燃焼時間になります。200で10秒(アイテム一個精錬するのに必要な時間)です。

f:id:Umagame:20210116213951p:plain

ちゃんとかまどで燃料として使えるか確認します。

f:id:Umagame:20210116225520p:plain

あと、「熱された木炭」も追加しました。テクスチャと名前以外すべて石炭と同じです。

さいごに

今回はここまでです。

もし記事におかしな点などありましたらご報告お願いします。

次回はレシピ・クリエイティブタブの追加を予定してます。

ではでは~

次回:
www.umagame.info