创造模式物品栏 26.1 Fabric
本篇教程的视频:
本篇教程源代码
GitHub地址:Tutorial Mod - CreativeModeTabs
本篇教程目标
- 理解原版物品栏注册
- 学会物品栏注册
查看源代码
我们先来看看原版是如何添加物品到物品栏的。之前的教程也提到过了,原版物品栏的注册在CreativeModeTabs类中。
1 | public static final ResourceKey<CreativeModeTab> INGREDIENTS = createKey("ingredients"); |
首先我们看到它的注册,这里使用的是createKey方法,这个方法是一个静态方法,返回一个RegistryKey<CreativeModeTab>
注册方法
1 | private static ResourceKey<CreativeModeTab> createKey(final String id) { |
看着这个方法的返回语句,是否和之前物品的注册键方法有些类似呢?是的没错,同样的,Identifier要我们自行更改
注册语句
那么除此之外,我们可以看到bootstrap方法中一堆的ingredients.accept(...)
那么这些东西便是将物品加入到物品栏的方法了
1 | Registry.register( |
这里我们以INGREDIENTS为例,我们可以看到它使用的是Registry.register方法,这个方法是用来注册物品栏的
但是首先我们得知道这个registry应该写什么,其实它就是Registries.CREATIVE_MODE_TAB,这个是原版的物品栏注册器
1 | public static final Registry<CreativeModeTab> CREATIVE_MODE_TAB = registerSimple(Registries.CREATIVE_MODE_TAB, CreativeModeTabs::bootstrap); |
我们在Registries类中可以看到,CREATIVE_MODE_TAB是一个Registry<CreativeModeTab>类型的常量,创建的时候使用的是bootstrap方法
而我们自己写的时候直接使用Registries.CREATIVE_MODE_TAB即可
那么接下来,我们看到第二个参数是INGREDIENTS,这个是一个RegistryKey<CreativeModeTab>类型的常量,这个是物品栏的ID吗,也是上面注册的ID
然后我们看到CreativeModeTab.builder方法,这个方法是用来创建物品栏的,里面有一些参数,比如Row.BOTTOM,这个是指物品栏所在的位置,这里的BOTTOM表示它在GUI的下面那行中,3是指在第4个;
那么其他的还有Row.TOP,这个是指在GUI的上面那行中
我们接着看title方法,这个是用来设置物品栏的名字的,这里使用的是Component.translatable方法,这个方法是用来设置物品栏名字的,这里使用的是itemGroup.ingredients,这个是一个翻译键,我们可以在语言文件中找到这个翻译键,然后设置物品栏的名字
然后我们看icon方法,这个是用来设置物品栏的图标的,这里使用的是Items.IRON_INGOT,这个是物品栏的图标,这里使用的是铁锭
displayItems方法是用来设置物品栏的物品的,这里使用的是一个lambda表达式,这个lambda表达式有两个参数
一个是parameters,一个是ingredients,ingredients是用来设置物品栏的物品的,这里的东西省略了,我们就不展开了
创建物品栏
创建 ModCreativeModeTabs 类
首先我们创建一个类ModCreativeModeTabs
1 | public class ModCreativeModeTabs { |
创建注册键
接下来我们创建一个注册键
1 | public static final ResourceKey<CreativeModeTab> TUTORIAL_TAB = ResourceKey.create( |
记得要使用fromNamespaceAndPath传入我们自己的模组ID
创建物品栏
1 | public static final CreativeModeTab TUTORIAL = FabricCreativeModeTab.builder() |
区别于原版的注册语句,这里我们直接用FabricCreativeModeTab.builder方法创建物品栏,它会自己给我们排位置(按首字母排序)
然后里面的方法我就不赘述了,前面都讲过了,这是与原版一样的
物品栏里面不止可以加我们自己模组的物品,也可以加原版物品
初始化注册方法
同样的,我们也来写一个初始化注册方法
1 | public static void register() { |
这里我们同样写了一个输出日志
另外还需要写一个额外的注册语句,用于将我们的物品栏和它的注册键绑定
主类还要调用这个方法
1 | ModCreativeModeTabs.register(); |
举一反三
我们可以再写一个,举一反三
1 | public static final ResourceKey<CreativeModeTab> TUTORIAL_TAB2 = ResourceKey.create( |
语言文件
1 | { |
这里的语言文件用来翻译物品栏的名字
测试
现在我们启动游戏,由于原版的物品栏已经填满了第一页,不过它会自动生成一个翻页符,我们点击翻页符,就可以看到我们的物品栏了











