关于 MC 的 Forge 模组开发(三):第一个物品与语言文件
关于 MC 的 Forge 模组开发(三):第一个物品与语言文件
一、物品创建
创建物品不是什么难事,我们先新建一个 items 包,存放我们的物品。
接着,我们计划加入的第一个物品是 “不完整的 C++” (先叫这个鬼畜名字),它的获取方式我们暂时不管。
在 items 目录下添加 Java 类:IncompleteC__ 和 ItemRegistry。它们将完成我们第一个物品的注册。
在 IncompleteC__ 中加入以下代码:
package com.OI.olympiadininformatics.items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
public class IncompleteC__ extends Item {
public IncompleteC__() {
super(new Properties().tab(ItemGroup.TAB_MATERIALS));
}
}
事实上,以我目前的知识水平,并不能为你解释这里面的实际内容,因为我也是刚刚接触 Java(此前只写过神奇 C++),不过我们了解它就行了。
简单讲一下语法,给像我这样的小白:
在 Java 的语法中,
package
有的类似于 C++ 的命名空间namespace
,而import
则是像 Python 中,或者是 C++ 的include
一样,用于导入某个文件。之后的代码中,我们将不会展示package
和import
的内容。
public
是一个修饰符,它表示对外公开,也就是可以由外部访问的。
class
是声明类的关键字,这其实就是“对象”的概念。
extends
也是一个关键字,它指明了IncompleteC__
的父类,其中父类为Item
,并且我们通过super
为关键字访问父类的成员。此处
super()
为调用父类的构造函数,这个public IncompleteC__()
本身也是个对外公开的构造函数。此外,我们调用了
Properties
类,它的功能我还不了解,大概是对物品属性的规定,不过其成员tab
方法可以返回一个group
类型的变量,这个表示了物品栏。
ItemGroup.TAB_MATERIALS
表示的是物品栏-杂项。
一个值得注意的是,不同版本的方法名不一定一样,我所参考的教程版本中就不存在 tab
方法,而是 group
方法。
接下来对我们的 ItemRegistry 文件动手脚,它将注册我们的物品:
public class ItemRegistry {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Utils.MOD_ID);
public static final RegistryObject<Item> c__fragments = ITEMS.register("incompletec__", IncompleteC__::new);
}
这里 DeferredRegister
中的第一个参数代表我们创建的是物品,第二个则指明了 MOD_ID。
RegistryObject
的第一个参数是物品名称,第二个则要求传入一个实例(可以简单地理解为一个真实创建的对象,而不是类这样的模板),我们直接用 new
关键字声明一个新物品传入即可。
现在进入游戏就可以发现,我们的物品出现了!尽管它没有贴图,名字也很奇怪
二、模型贴图
还记得 resources 文件夹吗?就是有着 mods.toml 文件的那个。
我们在它下面建立另一个目录,名为 assets
,然后随便拉若干级目录,建立 models.item 目录和 textures.item 目录(分开的)。
现在目录长这样(请暂时忽略那两个文件):
接着我们添加分别文件 incompletec__.json 和 incompletec__.png(注意位置),然后进入 incompletec__.json 中,编写如下代码:
{
"parent": "item/generated",
"textures": {
"layer0": "olympiadininformatics:item/incompletec__"
}
}
这里……算了我解释不了,就引用一下文末第二个链接(结合我的例子,有改动)。
这里的内容非常简单:
"parent": "item/generated”
指定了这个模型的「父模型」是什么,而"layer0": "olympiadininformatics:item/incompletec__”
指定了具体的材质。olympiadininformatics:
代表这个是在我们自己的assets 文件下,item/incompletec__
代表了是textures/item/obsidian_ingot.png
这张图片。
大概就是这样,先随便整张图下来糊弄一下(我还在学习 BlockBench,之后再自己做模型):
补:
我去水了一段时间,还是没看怎么懂 BlockBench 的用法……
不过自己一通瞎搞,还是整了个
丑得多的模型出来。图在后面会有。
三、语言文件
这里我没有截图,但你应该留意到了,我们物品的名字是一串不正常的字符。
而平时在游玩 mod 的时候,遇到没有官方汉化的 mod,我们也会在网上找到一个名为 zh_cn.json 的文件。
事实上,这个就是我们的语言文件,它包含这样的模板:
{
A: B,
C:D
}
可以看到这是一个键值对,将 A
命名为 B
,C
命名为 D
。
现在我们创建这个文件,目录结构如下:
然后加入我们的语言文件:
{
item.olympiadininformatics.incompletec__:残缺的C++
}
左边是我们的物品在游戏中显示的名称,右边是我们要给它的名字。
现在启动游戏,就可以看见我们的物品有名字了。
请注意的是,不同版本的方法有所不同,我所参考的教程多了一对引号,而网上一些教程则采用了 =
而不是 :
,并且存在更多的差异,如果加载失败请自行尝试。
现在就能看见我们的物品了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!