今回追加するアイテム
これからは、そのパートで何を追加するかを最初に紹介するようにしたいと思います。(Modの作り方だけ見たい方はとばして構いません)
前回言った通り、このシリーズではHypixelのUHCのアイテムを再現していきます。
ですがUHCには、このパートで扱うのに適しているような「特に特殊効果などがない単純なアイテム」というのがありません。
なので新しく考えました。その名も「熱された石炭」です。(「熱された木炭」も作ります。)
その名の通り、かまどで熱された石炭です。クラフト用アイテムで、かまどに入れるとアイテム9個分燃やすことができます。
UHCをやったことがある方なら、このアイテムは何のレシピためのものか分かるかと思います。(レシピの追加は次回やります。多分)
アイテムの追加
ModID
この先ModIDを使う場面が多々あるので、ModIDをfinalフィールド「MOD_ID」としてメインクラスに置いておきます。
その上の「@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
{
public static final Logger LOGGER = LogManager.getLogger();
public static final String MOD_ID = "uhcitems";
public UHCItemsMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
}
}
アイテムのクラス
それでは作っていきます。
まず、アイテムのクラスを置くためのパッケージを作ります。
名前は「item」にします。別に「items」でも良いですが、マインクラフト側は「item」なので一応合わせます。
作った「item」パッケージに、新しくクラスを作ります。
名前は「HeatedCoalItem」にします。画像では「HeatedCoal」になってますが気にしないでください。後で変えます。
クラス名の後に「extends Item」と入力します。
アイテムのクラスを作るときはほとんど、Itemクラスないしはその子クラスを継承して作ります。
まだimportをしていないのでエラーが出ます。
左端の豆電球のアイコンをクリックして、「net.minecraft.item」の「Item」をインポートします。
これからたびたび「Item」という名前のクラスを使いますが、それらはほとんど「net.minecraft.item」の「Item」です。
インポートすると別のエラーが出ます。
さっきと同じように豆電球をクリックして、「コンストラクター...」と書いてあるやつをクリックします。
これで自動的にコンストラクタが追加されます。
このコンストラクタをこのように書き換えます。
これでアイテムのクラスはOKです。
コードはこちら。(HeatedCoalItem.java)
package com.umagame.uhcitemsmod.item;
import net.minecraft.item.Item;
public class HeatedCoalItem extends Item{
public HeatedCoalItem() {
super(new Properties());
}
}
アイテム登録用クラス
次にアイテムの登録用クラスを作っていきます。
新しく「init」というパッケージを作ります。
initとはinitialization(初期化)の略です。結構使います。
アイテム登録用クラスを作ります。名前は「ItemInit」にします。
コードを書いていきます。今回は前シリーズとは違った登録方法です。
この「ITEMS」の「register」というメソッドを呼び出すことで、アイテムを登録することができます。
コードを書きます。
「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」に登録する必要があります。
メインクラス(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
{
public static final Logger LOGGER = LogManager.getLogger();
public static final String MOD_ID = "uhcitems";
public UHCItemsMod() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
bus.addListener(this::setup);
ItemInit.ITEMS.register(bus);
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
}
}
起動して確認
テクスチャなどがまだ設定できてませんが、起動してアイテムが追加できているか確認してみます。
/giveコマンドで出します。
ちゃんと追加されてました。
言語・モデル・テクスチャの設定
アイテムの追加はできたので、次はテクスチャなどを設定していきます。
「src/main/resources」に、新しくパッケージを作ります。
名前は「lang」です。ここに言語ファイル(ゲーム内でのアイテムの名前を設定するファイル)を置きます。
「lang」の他に、「models」、「textures」も作ります。
まず言語ファイルを作っていきます。
「lang」の中に新しくファイルを作ります。
まずは英語から。「en_us.json」を作成して、
このように入力します。
日本語のファイル(ja_jp.json)も作って、同じように入力します。
次にモデルを設定します。「models」の中に新しく「item」というパッケージを作成します。
「アイテムのID.json」という名前でファイルを作成します。
このように入力します。ModID(「uhcitems」)とアイテムのID(「heated_coal」)の部分はスペルミスしないようにしましょう。
Forgeのフォルダ\src\main\resources\assets\ModID\texturesに「items」というフォルダを作ります。
その中にテクスチャとなる画像のファイルを置きます。名前は「アイテムのID.png」にしてください。
最後に、「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
起動して確認してみます。
ちゃんとテクスチャ、名前が反映されていたら成功です。
ちゃんと日本語も反映されています。
おまけ(燃焼時間の設定)
アイテム自体はこれで完成ですが、今回作った「熱された石炭」はかまどの燃料として使えるものなので、燃焼時間を設定する必要があります。
アイテムのクラス(HeatedCoalItem.java)で「getBurnTime」というメソッドをオーバーライドします。
returnの値が燃焼時間になります。200で10秒(アイテム一個精錬するのに必要な時間)です。
ちゃんとかまどで燃料として使えるか確認します。
あと、「熱された木炭」も追加しました。テクスチャと名前以外すべて石炭と同じです。