今回追加するアイテム
まず今回追加するアイテムをさらっと紹介します。
「石の塊」と、「強化棒」です。名前・テクスチャはかなり適当に決めました。
どちらもツールの素材になります。
記事内では「強化棒」のほうの追加手順を載せています。
アイテム追加
今回も同様に、ほとんどの手順は1.16のときと同じです。
アイテムやブロックなどの登録用クラスを置くinitパッケージと、
アイテムのクラスを置くためのitemパッケージを追加します。
itemパッケージに新しくクラスを追加します。名前はStrongStickItemにします。
Itemクラスを継承して、コンストラクタも追加します。
Itemクラスですが、1.16の時は「net.minecraft.item.Item」だったのが1.17では「net.minecraft.world.item.Item」になってますね。
ちなみにアイテムIDは「strong_stick」です。
登録用クラスの前に、ModIDをfinalフィールドとしてメインクラスに置いておきます。
initパッケージに新しくクラスを作ります。名前は前回と同じ「ItemInit」です。
コードも前回のものを流用します。
メインクラスにコードを追加して、ItemInitクラスのアイテムが登録されるようにします。
これでアイテムの追加は完了です。
テクスチャの追加
次にテクスチャの設定に移ります。
こちらもほとんど1.16のときと同じなので、さくっといきます。
src/main/resources/assets/bettertoolsmodにlang、models、texturesというフォルダを追加して、
そこにjsonファイル、テクスチャの画像ファイルを入れます。(jsonファイルの中身は記事の最後に貼ってあります)
ちゃんとテクスチャが反映されているか確認します。
レシピの追加
レシピを追加していきます。
パッケージを追加して、
新しくjsonファイルを作ります。
コードはこんな感じです。
材料に使う原木は種類を問わないので、単純に「minecraft:logs」を使っています。
起動して確認。
ちゃんと他の原木でも作れますね。
クリエイティブタブの追加
最後にクリエイティブタブを追加しておきます。
タブ登録用クラスを作ります。
中身は1.16のときの流用ですが、タブ自体のクラスの名前がItemGroupからCreativeModeTabに変更されています。注意してください。
アイコンは今後追加するツール系アイテムにするつもりなので、今のところは土に設定しています。
さっき作ったアイテムをタブに追加します。こちらも同様に、メソッドの名前がgroupからtabに変わっています。
追加できました。langファイルでローカライズも済ませておきましょう。
同じように、「石の塊」も追加しました。
さいごに
今回はここまでです。
次回はツールを追加していきます。
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);
}
};
}