用户:MashKJo/1.21.1模组开发教程/5.2.创造模式物品栏
< 用户:MashKJo | 1.21.1模组开发教程
显然,用/give命令获取我们注册进游戏的物品还是太麻烦了,我们还需要将新物品放进创造模式物品栏里。
修改已有的创造模式物品栏
如果你想将物品放入原版已有的创造模式物品栏,考虑监听事件BuildCreativeModeTabContentsEvent:
//应该被注册到Mod总线中。
@SubscribeEvent
public static void onBuildCreativeModeTabContents(BuildCreativeModeTabContentsEvent event) {
if(event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
event.accept(MyItemClass.MY_ITEM.get());
}
}
自定义创造模式物品栏
不过更通常的做法是将物品塞进自己自定义的创造模式物品栏中,创造模式物品栏(CreativeModeTab)和物品一样,是注册项,因此需要通过延迟注册机制注册进游戏:
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, TutorialMod.MODID);
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> EXAMPLE_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder()
.title(Component.translatable("creative_mode_tab.tutorialmod.example_tab"))
//指定创造模式物品栏的名称,为了使其能本地化,调用Component.translatable()。
.icon(() -> new ItemStack(...))
//指定创造模式物品栏的图标,接受一个Supplier<ItemStack>,...处填写一个物品对象。
.displayItems((parameters, output) -> {
output.accept(...);
...
})
//用于指定该创造模式物品栏中陈列哪些物品,#accept方法接受ItemLike和ItemStack。
.build());
记得把延迟注册器注册进Mod总线,并在语言文件中把创造模式物品栏的名称完成本地化。
进入游戏,开启创造模式,物品栏调到第二页,即可看到你的创造模式物品栏了。