Minecraft Forge 添加新物品
基本概念
注册
所有 mod 的对象都要向游戏注册(物品,方块,声音等) 如果不进行注册,会报错或者导致莫名其妙的行为。
注册方法
- 延迟注册 DeferredRegister
- 注册事件 RegisterEvent
- 非 Forge 注册的注册
在使用到的时候详细说明
引用注册的对象
详细内容可以参考 Forge 文档
新建物品类
创建一个软件包 item
,在包里创建一个 Java 类 ModeItems
可以把 mod 中的所有物品从这个类文件中定义
定义物品变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package cc.neolux.tutorialmod.item;
import cc.neolux.tutorialmod.TutorialMod; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject;
public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TutorialMod.MODID);
public static final RegistryObject<Item> BEAR = ITEMS.register("bear", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
public static void register(IEventBus eventBus) { ITEMS.register(eventBus); } }
|
在本例中,我简单的把微信头像放到游戏中,当作一个物品。
之后在 Mod 的构造方法中注册这个类
1
| ModItems.register(modEventBus);
|
添加材质
在 resources 文件夹里面创建目录结构如下:
1 2
| cd src/main/resources mkdir assets/tutorialmod/{blockstates,lang,models/{block,item},textures/{block,item}} -p
|
之后 resources 文件夹结构应该是这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| . ├── assets │ └── tutorialmod │ ├── blockstates │ ├── lang │ ├── models │ │ ├── block │ │ └── item │ └── textures │ ├── block │ └── item ├── META-INF │ └── mods.toml └── pack.mcmeta
12 directories, 2 files
|
在 assets/tutorialmod/models/item
创建 bear.json
1 2 3 4 5 6
| { "parent": "item/generated", "textures": { "layer0": "tutorialmod:item/bear" } }
|
把材质放到 /assets/tutorialmod/textures/item/bear.png
添加翻译
在 assets/tutorialmod/lang
创建英文翻译文件和中文翻译文件 en_us.json
, zh_cn.json
1 2 3
| { "item.tutorialmod.bear": "Bear" }
|
1 2 3
| { "item.tutorialmod.bear": "熊" }
|
运行 runClient,创建存档,在杂项里面可以找到这个物品
新物品栏
创建 cc.neolux.tutorialmod.item.ModCreativeTab
类
1 2 3 4 5 6 7 8 9 10 11 12 13
| package cc.neolux.tutorialmod.item;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack;
public class ModCreativeTab { public static final CreativeModeTab tutorialmod_tab = new CreativeModeTab("tutorialmod_tab") { @Override public ItemStack makeIcon() { return new ItemStack(ModItems.BEAR.get()); } }; }
|
之后修改 ModItems
类
1 2
| public static final RegistryObject<Item> BEAR = ITEMS.register("bear", () -> new Item(new Item.Properties().tab(ModCreativeTab.tutorialmod_tab)));
|
为物品栏添加翻译
1 2 3 4
| { "item.tutorialmod.bear": "熊", "itemGroup.tutorialmod_tab": "我的物品" }
|
运行