目次
【Minecraft Forge1.15.2】 アイテムを追加してみよう~ウンコ編~【Modの作り方】
この記事では、Minecraft1.15.2にアイテムを追加するmodを作っていきます。
環境構築は前回を参考にしてください!
今回やること
今回のModの要件は簡単。
新アイテム「ウンコ」を追加してみようと思います。
最終的に、3つのjavaファイルと2つのjsonファイルを作成していきます。以下では細かい手順を書いていますが、ここで最終的な3つのjavaファイルの完成形と、ファイルの置き場所(ツリー構造)を先に出しておきます。手順が分からなくなったら参考にしてください。
青い丸で書かれているのがclassです。
//UnkoMod.java
package com.waktech.unkomod;
import com.waktech.unkomod.util.RegistryHandler;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.stream.Collectors;
@Mod("unkomod")
public class UnkoMod
{
private static final Logger LOGGER = LogManager.getLogger();
public static final String MOD_ID = "unkomod";
public UnkoMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);
RegistryHandler.init();
MinecraftForge.EVENT_BUS.register(this);
}
private void setup(final FMLCommonSetupEvent event)
{
}
private void doClientStuff(final FMLClientSetupEvent event){
}
}
//RegistryHandler.java
package com.waktech.unkomod.util;
import com.waktech.unkomod.UnkoMod;
import com.waktech.unkomod.items.ItemBase;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
public class RegistryHandler {
public static final DeferredRegister<Item> ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, UnkoMod.MOD_ID);
public static void init(){
ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
}
//Items
public static final RegistryObject<Item> UNKO = ITEMS.register("unko", ItemBase::new);
}
//ItemBase.java
package com.waktech.unkomod.items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
public class ItemBase extends Item {
public ItemBase(){
super(new Item.Properties().group(ItemGroup.MATERIALS));
}
}
これから紹介するコードを書く際に、各関数を提案されたライブラリからインポートするようにしてください。IntelliJでは、定義されていない関数に赤線が付き、net.minecraftから該当するものを見つけ出してくれます。水色のボックスが出るので、「Alt+Enter」を押して自動読み込みすると便利です。
mod起動の下準備
- main>java>com>examplemodにある
ExmampleMod.java
を開く - コメント行
//
が邪魔なのですべて削除 - ファイル名をExampleMod.javaからUnkoMod.javaに変更する。ファイル名を右クリック→Refactor>Renameで変更可能。
- UnkoMod.javaのExampleModと書いてある場所を全てUnkoModに変更(クラス名と、その中にある
public ExampleMod()
) enqueueIMC
以下を全て削除(後ほど違うファイルに入れて作るため)doClientStuff
とsetup
の中の行を削除UnkoMod()
の4行のうち中央2行を削除- 一番上の
package
をcom.hogehoge.modname
にする @Mod
の中身をmodのIDにする。今回はunkomod
にした。
ここまでで変更したUnkoMod.javaは以下の通りになる。package com.waktech.unkomod; import com.waktech.unkomod.util.RegistryHandler; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.stream.Collectors; @Mod("unkomod") public class UnkoMod { private static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "unkomod"; public UnkoMod() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); RegistryHandler.init(); MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { } private void doClientStuff(final FMLClientSetupEvent event){ } }
- resources>META-INF>mods.tomlを開く
modId
を先程決めたmodidにする。今回はunkomod
にしたので、modId="unkomod"
とした。- 同様に
version
とdisplayName
を変更。私の場合はそれぞれ1.15.2-1.0.0
、Unko Mod
を入れた。
Modのビルド・実行
- ターミナルを開いて
gradlew genIntelliJRuns
と打つ。ターミナルは画面下のTerminal
を押せばOK。
- 画面上に
runClient
という項目ができているので、選んで緑色の三角を押す。すると自動でマインクラフトが開き、Mod欄に先程作ったModが追加されている。
※動かない場合は、Terminalを開いてgradlew runClient
で動くことがある。
これで、modの中に自分の追加した名前のunkomodがあれば成功です!
アイテムを追加する
modの骨組みはできたので、これからunkoというアイテムを追加していきます。
- unkomod下に
util
パッケージを追加し、中にRegistryHandler
クラスを追加する。
RegistryHandler
の中にpublic static final DeferredRegister<Item> ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, UnkoMod.MOD_ID);
と追記RegistryHandler
の中に初期化関数を追加public static void init(){ ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); }
- mainのjavaファイルに
public static final String MOD_ID = "unkomod";
を追記 - アイテムを追加する文を追加
public static final RegistryObject<Item> UNKO = ITEMS.register("unko", ItemBase::new);
ItemBaseはまだ作られていない関数なので次で作成する
com.hogehoge.modname
下にitems
パッケージを追加して、ItemBase
クラスを追加ItemBase
クラス内に下記のように記述。public class ItemBase extends Item { public ItemBase(){ super(new Item.Properties().group(ItemGroup.MATERIALS)); } }
RegistryHandler.java
のItemBase
を上記で作成したクラスにする(読み込む)UnkoMod.java
のpublic UnkoMod()
内にRegistryHandler.init();
を追加- この状態で
runClient
を実行。動かない場合はターミナルでgradlew runClient
をする
実行すると、アイテムの中にunkoが追加されています。ただまだテクスチャを適用していないため、このような表示になっています。
アイテムのテクスチャを追加する
- resourcesの下にassetsフォルダーを作る
- assetsフォルダー以下に次のようなフォルダーとjsonファイルを作成
us_en.json
にはアイテムの英語名称を書く。unkoの場合、{ "item.unkomod.unko": "Unko" }
と記述して保存
- unko.jsonには以下のように記述する。
{ "parent": "item/generated", "textures": { "layer0": "unkomod:items/unko" } }
- piskel等のサービスを使い、16×16のテクスチャを作成する
- テクスチャをtextures>itemsの中に入れる
この時、ファイル名をunko.png
に変更する。 runClient
で起動してみる
これで無事にうんこを追加するmodを作れました!!
modを配布する
modを配布するには、当然modname.jar
ファイルが必要です。これを作るには
gradlew build
を実行しましょう。
無事にビルドが成功すると、reobfJarフォルダにoutput.jarが出現。
これをいつも通りにForgeの入ったminecraftのmodsフォルダに入れてあげれば使用できます!
まとめ
無事にウンコが追加できました。
次回はこのウンコに属性(食べたり、燃料にしたり、エフェクトをつけたり)をつけていきます。
お楽しみに!