创造模式物品栏 1.21 NeoForge 长线教程计划
本篇教程的视频
(待发布)
本篇教程的源代码
(待发布)
添加到原版物品栏
那么首先我们首先将物品添加到原版的物品栏
中
这个的话就用到之前主类中的addCreative
方法,当然,前提是你之前没完全删掉
如果之前删掉了的话就写上下面这个方法
1 | private void addCreative(BuildCreativeModeTabContentsEvent event) { |
同时在主类的构造函数中也要加上注册事件
1 | modEventBus.addListener(this::addCreative); |
确保这两个部分都有之后,我们就可以在addCreative
方法中写一些语句,将我们的物品添加到物品栏中了
1 | if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) { |
这里我们写一个if
语句,判断当前物品栏是不是原版中的某一个栏,如果是的话,就将我们的物品添加进去
CreativeModeTabs.INGREDIENTS
就是原材料
栏的键值,这个类也是原版那些物品栏
的注册类
其他的物品栏像BUILDING_BLOCKS
建筑方块、COLORED_BLOCKS
染色方块等等
现在,我们进入游戏,就可以在原材料
这一栏看到这三个物品了
自定义物品栏
注册物品栏
那么,一般模组是会有自己单独的物品栏的,而不是直接将模组的物品和原版的东西放一起
这里我们也可以来写一个,同样的,先写一个物品栏的注册类,创建一个ModCreativeModeTabs
类
1 | public class ModCreativeModeTabs { |
接下来,先写一个延迟注册器
1 | public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = |
这个延迟注册器是DeferredRegister<CreativeModeTab>
类型
这里面Registries.CREATIVE_MODE_TAB
是CreativeModeTab
的注册表,TutorialMod.MOD_ID
是模组的ID
随后我们就来写一个物品栏
1 | public static final Supplier<CreativeModeTab> TUTORIAL_TAB = |
这里是创建一个Supplier<CreativeModeTab>
CreativeModeTab.builder()
是创建一个CreativeModeTab
的构造器
icon
是设置物品栏的图标,它的图标是从一个物品堆栈(ItemStack
)获取的,这里我们用ModItems.ICE_ETHER.get()
获取我们之前注册的ICE_ETHER
物品的物品堆栈,
至于物品堆栈是什么,这里我们简单介绍一下吧
物品堆栈
与方块实体
概念类似,在游戏中,物品本身是不存储数据的,像物品的堆叠数量
、耐久度
等等都是通过物品堆栈存储的
所以简单来说,它其实就像物品的一个容器,用来存储数据
title
是设置物品栏的标题,这里我们用Component.translatable
来创建一个可供语言文件翻译
的文本
,itemGroup.tutorial_tab
是语言文件中的键值
displayItems
是设置物品栏中的物品,这里我们用output.accept
来添加物品
最后再写一个build
方法,返回这个构建器
举一反三
来,我们来举一反三
1 | public static final Supplier<CreativeModeTab> MATERIALS = |
这里的话我们多加了一个方法,也就是withTabsBefore
,也就是指定它在哪一个物品栏后面
里面填一个ResourceLocation
类型的参数,用fromNamespaceAndPath
方法,传入命名空间
和我们上一个注册的物品栏的注册名
默认的话,创造模式物品栏是按照字母顺序
排列的,所以默认MATERIAL
会在TUTORIAL_TAB
前面
而我们可以通过这个方法将它搬到后面去
这个的话算一个小知识点吧,也是Forge
和NeoForge
这里特有的吧,Fabric
没有这个方法,只能通过指定其绝对位置
来决定其顺序
注册事件
最后,和前面注册物品一样的,我们得写一个方法,注册物品栏这个事件
1 | public static void register(IEventBus eventBus) { |
以及,不要忘记在主类
的构造函数
中的调用
1 | ModCreativeModeTabs.register(modEventBus); |
语言文件
上面的物品栏中的title我们要用语言文件来翻译
1 | "itemGroup.tutorial_tab": "Tutorial Tab", |
测试
那么最后我们就能进入游戏来查看物品栏了
因为原版的物品栏已经将第一页占满了,所以我们添加的物品栏是在第二页
的