【Minecraft-Forge1.15.2】-アイテムを追加してみよう~ウンコ編~【Modの作り方】

【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起動の下準備

  1. main>java>com>examplemodにあるExmampleMod.javaを開く
  2. コメント行//が邪魔なのですべて削除
  3. ファイル名をExampleMod.javaからUnkoMod.javaに変更する。ファイル名を右クリック→Refactor>Renameで変更可能。
  4. UnkoMod.javaのExampleModと書いてある場所を全てUnkoModに変更(クラス名と、その中にあるpublic ExampleMod()
  5. enqueueIMC以下を全て削除(後ほど違うファイルに入れて作るため)
  6. doClientStuffsetupの中の行を削除
  7. UnkoMod()の4行のうち中央2行を削除
  8. 一番上のpackagecom.hogehoge.modnameにする
  9. @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){
        }
    
    }
    
    
  10. resources>META-INF>mods.tomlを開く
  11. modId先程決めたmodidにする。今回はunkomodにしたので、modId="unkomod"とした。
  12. 同様にversiondisplayNameを変更。私の場合はそれぞれ1.15.2-1.0.0Unko Modを入れた。

Modのビルド・実行

  1. ターミナルを開いてgradlew genIntelliJRunsと打つ。ターミナルは画面下のTerminalを押せばOK。
  2. 画面上にrunClientという項目ができているので、選んで緑色の三角を押す。すると自動でマインクラフトが開き、Mod欄に先程作ったModが追加されている。

    ※動かない場合は、Terminalを開いてgradlew runClientで動くことがある。

これで、modの中に自分の追加した名前のunkomodがあれば成功です!

アイテムを追加する

modの骨組みはできたので、これからunkoというアイテムを追加していきます。

  1. unkomod下にutilパッケージを追加し、中にRegistryHandlerクラスを追加する。
  2. RegistryHandlerの中にpublic static final DeferredRegister<Item> ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, UnkoMod.MOD_ID);と追記
  3. RegistryHandlerの中に初期化関数を追加
    public static void init(){
        ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
    }
    
  4. mainのjavaファイルにpublic static final String MOD_ID = "unkomod";を追記
  5. アイテムを追加する文を追加
    public static final RegistryObject<Item> UNKO = ITEMS.register("unko", ItemBase::new);
    

    ItemBaseはまだ作られていない関数なので次で作成する

  6. com.hogehoge.modname下にitemsパッケージを追加して、ItemBaseクラスを追加
  7. ItemBaseクラス内に下記のように記述。
    public class ItemBase extends Item {
        public ItemBase(){
            super(new Item.Properties().group(ItemGroup.MATERIALS));
        }
    }
    
  8. RegistryHandler.javaItemBaseを上記で作成したクラスにする(読み込む)
  9. UnkoMod.javapublic UnkoMod()内にRegistryHandler.init();を追加
  10. この状態でrunClientを実行。動かない場合はターミナルでgradlew runClientをする


実行すると、アイテムの中にunkoが追加されています。ただまだテクスチャを適用していないため、このような表示になっています。

アイテムのテクスチャを追加する

  1. resourcesの下にassetsフォルダーを作る
  2. assetsフォルダー以下に次のようなフォルダーとjsonファイルを作成
  3. us_en.jsonにはアイテムの英語名称を書く。unkoの場合、
    {
      "item.unkomod.unko": "Unko"
    }
    

    と記述して保存

  4. unko.jsonには以下のように記述する。
    {
      "parent": "item/generated",
      "textures": {
        "layer0": "unkomod:items/unko"
      }
    }
    
  5. piskel等のサービスを使い、16×16のテクスチャを作成する
  6. テクスチャをtextures>itemsの中に入れる

    この時、ファイル名をunko.pngに変更する。
  7. runClientで起動してみる

これで無事にうんこを追加するmodを作れました!!

modを配布する

modを配布するには、当然modname.jarファイルが必要です。これを作るには
gradlew buildを実行しましょう。

無事にビルドが成功すると、reobfJarフォルダにoutput.jarが出現。

これをいつも通りにForgeの入ったminecraftのmodsフォルダに入れてあげれば使用できます!

まとめ

無事にウンコが追加できました。
次回はこのウンコに属性(食べたり、燃料にしたり、エフェクトをつけたり)をつけていきます。

お楽しみに!

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です