うまげーむのゲームブログ

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

【マインクラフト Modding】1.17で便利系Modを作る #2 - アイテム・レシピ・クリエイティブタブの追加

はじめに

どうも。

今回はいくつかアイテムを追加して、そのレシピも追加していきます。

前回:

www.umagame.info

今回追加するアイテム

まず今回追加するアイテムをさらっと紹介します。

f:id:Umagame:20210909203520p:plain

f:id:Umagame:20210909203518p:plain

「石の塊」と、「強化棒」です。名前・テクスチャはかなり適当に決めました。

どちらもツールの素材になります。

記事内では「強化棒」のほうの追加手順を載せています。

アイテム追加

今回も同様に、ほとんどの手順は1.16のときと同じです。

f:id:Umagame:20210908203618p:plain

アイテムやブロックなどの登録用クラスを置くinitパッケージと、

f:id:Umagame:20210908203736p:plain

アイテムのクラスを置くためのitemパッケージを追加します。

f:id:Umagame:20210908205840p:plain

itemパッケージに新しくクラスを追加します。名前はStrongStickItemにします。

f:id:Umagame:20210909110925p:plain

Itemクラスを継承して、コンストラクタも追加します。

Itemクラスですが、1.16の時は「net.minecraft.item.Item」だったのが1.17では「net.minecraft.world.item.Item」になってますね。

ちなみにアイテムIDは「strong_stick」です。

f:id:Umagame:20210909111526p:plain

登録用クラスの前に、ModIDをfinalフィールドとしてメインクラスに置いておきます。

f:id:Umagame:20210909111528p:plain

initパッケージに新しくクラスを作ります。名前は前回と同じ「ItemInit」です。

f:id:Umagame:20210909111531p:plain

コードも前回のものを流用します。

f:id:Umagame:20210909112916p:plain

メインクラスにコードを追加して、ItemInitクラスのアイテムが登録されるようにします。

f:id:Umagame:20210909114133p:plain

これでアイテムの追加は完了です。

テクスチャの追加

次にテクスチャの設定に移ります。

こちらもほとんど1.16のときと同じなので、さくっといきます。

f:id:Umagame:20210909114753p:plain

src/main/resources/assets/bettertoolsmodにlang、models、texturesというフォルダを追加して、

f:id:Umagame:20210909115727p:plain

そこにjsonファイル、テクスチャの画像ファイルを入れます。(jsonファイルの中身は記事の最後に貼ってあります)

f:id:Umagame:20210909120127p:plain

f:id:Umagame:20210909120132p:plain

ちゃんとテクスチャが反映されているか確認します。

レシピの追加

レシピを追加していきます。

f:id:Umagame:20210909150722p:plain

パッケージを追加して、

f:id:Umagame:20210909151007p:plain

新しくjsonファイルを作ります。

f:id:Umagame:20210909151630p:plain

コードはこんな感じです。

材料に使う原木は種類を問わないので、単純に「minecraft:logs」を使っています。

f:id:Umagame:20210909152021p:plain

起動して確認。

f:id:Umagame:20210909152026p:plain

ちゃんと他の原木でも作れますね。

クリエイティブタブの追加

最後にクリエイティブタブを追加しておきます。

f:id:Umagame:20210909153041p:plain

タブ登録用クラスを作ります。

f:id:Umagame:20210909153814p:plain

中身は1.16のときの流用ですが、タブ自体のクラスの名前がItemGroupからCreativeModeTabに変更されています。注意してください。

アイコンは今後追加するツール系アイテムにするつもりなので、今のところは土に設定しています。

f:id:Umagame:20210909153817p:plain

さっき作ったアイテムをタブに追加します。こちらも同様に、メソッドの名前がgroupからtabに変わっています。

f:id:Umagame:20210909154537p:plain

追加できました。langファイルでローカライズも済ませておきましょう。

f:id:Umagame:20210910072927p:plain

f:id:Umagame:20210910072931p:plain

同じように、「石の塊」も追加しました。

さいごに

今回はここまでです。

次回はツールを追加していきます。

ソースコード

StrongStickItem.java

package com.umagame.bettertoolsmod.item;

import com.umagame.bettertoolsmod.init.CreativeTabInit;

import net.minecraft.world.item.Item;

public class StrongStickItem extends Item{

	public StrongStickItem() {
		super(new Properties().tab(CreativeTabInit.BETTERTOOLSMOD));
	}
}

StoneChunkItem.java

package com.umagame.bettertoolsmod.item;

import com.umagame.bettertoolsmod.init.CreativeTabInit;

import net.minecraft.world.item.Item;

public class StoneChunkItem extends Item{

	public StoneChunkItem() {
		super(new Properties().tab(CreativeTabInit.BETTERTOOLSMOD));
	}
}

ItemInit.java

package com.umagame.bettertoolsmod.init;

import com.umagame.bettertoolsmod.BetterToolsMod;
import com.umagame.bettertoolsmod.item.StoneChunkItem;
import com.umagame.bettertoolsmod.item.StrongStickItem;

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

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

	public static final RegistryObject<Item> STRONG_STICK = ITEMS.register("strong_stick", () -> new StrongStickItem());
	
	public static final RegistryObject<Item> STONE_CHUNK = ITEMS.register("stone_chunk", () -> new StoneChunkItem());
}

BetterToolsMod.java

package com.umagame.bettertoolsmod;

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

import com.umagame.bettertoolsmod.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(BetterToolsMod.MOD_ID)
public class BetterToolsMod
{
    public static final Logger LOGGER = LogManager.getLogger();
    
    public static final String MOD_ID = "bettertoolsmod";

    public BetterToolsMod() {
    	IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        bus.addListener(this::setup);

        ItemInit.ITEMS.register(bus);

        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event)
    {
    	
    }
}

en_us.json(src/main/resources/assets/bettertoolsmod/lang)

{
	"item.bettertoolsmod.strong_stick": "Strong Stick",
	"item.bettertoolsmod.stone_chunk": "Stone Chunk",
	"itemGroup.bettertoolsmod": "Better Tools Mod"
}

ja_jp.json(src/main/resources/assets/bettertoolsmod/lang)

{
	"item.bettertoolsmod.strong_stick": "強化棒",
	"item.bettertoolsmod.stone_chunk": "石の塊",
	"itemGroup.bettertoolsmod": "Better Tools Mod"
}

strong_stick.json(src/main/resources/assets/bettertoolsmod/models/item)

{
  "parent": "minecraft:item/handheld",
  "textures": {
    "layer0": "bettertoolsmod:item/strong_stick"
  }
}

stone_chunk.json(src/main/resources/assets/bettertoolsmod/models/item)

{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "bettertoolsmod:item/stone_chunk"
  }
}

strong_stick.json(src/main/resources/data/bettertoolsmod/recipes)

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "#",
    "#"
  ],
  "key": {
    "#": {
      "tag": "minecraft:logs"
    }
  },
  "result": {
    "item": "bettertoolsmod:strong_stick",
    "count": 4
  }
}

stone_chunk.json(src/main/resources/data/bettertoolsmod/recipes)

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "###",
    "#X#",
    "###"
  ],
  "key": {
    "#": {
      "tag": "minecraft:stone_crafting_materials"
    },
    "X": {
      "item": "minecraft:coal"
    }
  },
  "result": {
    "item": "bettertoolsmod:stone_chunk"
  }
}

CreativeTabInit.java

package com.umagame.bettertoolsmod.init;

import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;

public class CreativeTabInit {
	public static final CreativeModeTab BETTERTOOLSMOD = new CreativeModeTab("bettertoolsmod") {
	      public ItemStack makeIcon() {
	         return new ItemStack(Items.DIRT);
	      }
	};
}