项目结构

src
├── main
│ ├── java
│ │ ├── com
│ │ │ ├── XXXYJade17
│ │ │ │ └── TestMod
│ │ │ │ ├── Registry.java //注册类
│ │ │ │ ├── ModCreativeTab .java //自定义物品栏
│ │ │ │ └── TestMod.java //Mod主程序
│ └── resources
│ ├── assets
│ │ ├── testmod
│ │ │ ├── lang
│ │ │ │ ├── en_us.json // 英文语言文件
│ │ │ │ └── zh_cn.json // 中文语言文件

一.创建物品栏的注册器(与Block和Item类似)

public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = 
    DeferredRegister.create(Registries.CREATIVE_MODE_TAB, TestMod.MODID);

二.注册物品栏,并且添加物品

public static final String EXAMPLE_MOD_TAB_STRING = "creativetab.example_tab";
这里可以将物品栏的名字定义为一个变量

public static final Supplier<CreativeModeTab> EXAMPLE_TAB  = 
    CREATIVE_MODE_TABS.register("example_tab",
        () -> CreativeModeTab.builder()
            .withTabsBefore(CreativeModeTabs.COMBAT)        //将自定义标签页插入原版"战斗"标签页之前
            .title(Component.translatable(EXAMPLE_MOD_TAB_STRING))        //设置标签名
            .icon(() -> new ItemStack(Registry.EXAMPLE_ITEM_01.get()))     //设置物品栏图标
            .displayItems((pParameters, pOutput) -> {
                pOutput.accept(Registry.EXAMPLE_ITEM_01.get());      //添加物品到物品栏
                pOutput.accept(Registry.EXAMPLE_ITEM_02.get());
                pOutput.accept(Registry.EXAMPLE_BLOCK_01.get());
                pOutput.accept(Registry.EXAMPLE_BLOCK_02.get());
            })
            .build());

三.添加语言文件

同Block和Item

//en_us.json
{
  "creativetab.example_tab": "Example Tab"
}
//zh_cn.json
{ 
 "creativetab.example_tab": "示例创造模式标签"
}