的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。

Ruby继承自 Minecraft 的 Item 类,就像你照着模型造了一个新的物品一样。 Item 是游戏里所有物品的基础类,所有物品(例如:钻石、苹果、剑等)都是它的实例或子类。
public class Ruby extends Item {
public Ruby(Properties properties) {
super(properties);
}
}
现在Ruby只是一个最基础的物品,我们这里没有写任何额外逻辑,它只是把东西交给原版的 Item 类去处理。
创建注册器
接着在item这个包下创建ModItems类
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(Registries.ITEM, ExampleMod.MODID); //这句是在创建一个 延迟注册器(DeferredRegister),专门用来注册你这个模组的所有物品。
public static final Supplier<Item> RUBY = ITEMS.register("ruby",() -> new Ruby(new Item.Properties())); //这一行表示在你刚才创建的“注册器”里注册一个叫 "ruby" 的物品。
public static void register(IEventBus eventBus){ //这个方法表示把我这个物品注册器连接到模组事件总线上去
ITEMS.register(eventBus);
}
}
这里说一下什么是事件总线,简单来说事件总线就是 Minecraft 游戏发出各种行为信号的广播中心,你把方法“注册”到这个总线上,当发生对应事件时,这个方法就会被自动调用。假设你想写一个模组,在玩家每次右键点击时打印一句话:
-
游戏内部会在玩家右键时创建一个事件
-
事件总线接收到这个事件
-
事件总线上所有订阅了这个事件的模组方法都会被调用
| 事件总线 | 用来监听什么 |
|---|---|
NeoForge.EVENT_BUS(也叫 Forge 总线) |
大多数游戏事件,例如玩家事件、实体事件、Tick 等 |
| 模组事件总线(Mod Event Bus) | 模组生命周期的事件,例如注册事件、初始化事件 |
最后把这个注册系统加入到总线
public ExampleMod(IEventBus modEventBus)
{
modEventBus.addListener(this::commonSetup);
ModItems.register(modEventBus);//物品注册系统(ModItems) 注册到模组事件总线(modEventBus)上。
NeoForge.EVENT_BUS.register(this);
}
添加材质
首先将resources的结构添加调整成图中所示

在models下新建item目录,再在item里新建ruby.json
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "examplemod:item/ruby"
}
}
"parent": "minecraft:item/generated" 这一句指定这个物品使用 原版的 2D 平面物品渲染方式。 这种方式适用于普通物品,比如苹果、钻石、材料类等。 这是绝大多数物品默认使用的模型。
"textures": { "layer0": "examplemod:item/ruby" } 这里 layer0 是最底层的贴图层,表示这张图就是这个物品的外观。 examplemod:item/ruby 表示 Minecraft 去这个路径找纹理:assets/examplemod/textures/item/ruby.png
最后在textures里创建item目录,并把ruby.png添加进去,图片需要是16×16像素的
在游戏中通过指令/give获取

物品名称设置
在lang目录下新建en_us.json和zh_cn.json
这两个文件用来翻译Mod中的键,Ruby现在在游戏的名称是item.examplemod.ruby而不是Ruby
{
"item.examplemod.ruby": "Ruby"
}
这是en_us中的写法,zh_cn只需要改成对应中文就行,写好之后我们的Ruby就能在游戏中正确显示名称了
类介绍
Item 类
这是 Minecraft 里所有“物品”的基类,代表游戏中的一个物品类型,例如苹果、棒子、钻石等。 你在模组里自定义的物品(例如 Ruby)通常要继承它(extends Item)才能成为一个完整的物品。
-
它定义了物品的基本行为,例如是否可以被食用、如何被使用、堆叠、掉落等。
-
如果你想让物品有特别的行为(例如右键发光、攻击造成特殊效果等),通常会在子类中重写
Item类的方法。 -
如果只是一个最普通的物品,也可以直接用
new Item(...)。
Item.Properties 类
这是一个内部静态类,用来配置你物品的各种“属性”,就像给这个物品加上标签一样。它可以设置:
常用属性包括:
-
最大堆叠数量(stack size)
-
耐久度(是否可损坏)
-
是否是食物(需要提供
FoodProperties) -
是否火焰免疫
-
稀有度 等等
它是你在注册物品时传给 Item 构造函数的那串设置参数。 例:
new Item(new Item.Properties().stacksTo(16))
表示这个物品最多叠 16 个
Registries 类
这个不是用来“创建物品”的,而是 Minecraft/NeoForge 用来 识别和分类各种注册表的系统性集合。 在 Minecraft 里,不管是物品(Item)、方块(Block)、生物类型、声音、流体等,都要登记到对应的“注册表”里,否则游戏不认识它们。
Registries 中包含了这些注册表的 键(registry keys),比如:
-
Registries.ITEM→ 物品注册表 -
Registries.BLOCK→ 方块注册表 -
Registries.ENTITY_TYPE→ 实体注册表 等
当你使用 DeferredRegister.create(Registries.ITEM, MODID) 的时候,就是在告诉 NeoForge:“我想把东西放进这个注册表(ITEM)里注册。” 这些注册表本质上是映射表(类似键值对 Map),把一个 资源 ID(例如 "examplemod:ruby")和一个对象实例(你的 Ruby 物品)关联起来。
Items 类
这是 Minecraft 原版里专门存放已经注册好的所有物品实例引用的类。 比如像:
public static final Item IRON_INGOT;
public static final Item APPLE;
这些都是原版里所有物品的常量引用,你可以从代码里直接用(例如传给合成、吃东西逻辑等)。
它本身并不是用来注册物品的类 —— 注册物品的通常是你自己写的 ModItems 之类的类。 Items
















![表情[ciya]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/ciya.gif)
![表情[se]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/se.gif)
![表情[jie]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/jie.gif)
暂无评论内容