用户:MashKJo/1.21.1模组开发教程/5.2.创造模式物品栏

显然,用/give命令获取我们注册进游戏的物品还是太麻烦了,我们还需要将新物品放进创造模式物品栏里。

修改已有的创造模式物品栏

如果你想将物品放入原版已有的创造模式物品栏,考虑监听事件BuildCreativeModeTabContentsEvent:

//应该被注册到Mod总线中。
@SubscribeEvent
public static void onBuildCreativeModeTabContents(BuildCreativeModeTabContentsEvent event) {
   if(event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
       event.accept(ModItems.ONE_EXAMPLE_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总线,并在语言文件中把创造模式物品栏的名称完成本地化。

进入游戏,开启创造模式,物品栏调到第二页,即可看到你的创造模式物品栏了。