新物品!Minecraft Fabric 模组开发系列教程 #2
2023-07-25 12:09 作者:ABlueDog一条蓝狗 | 我要投稿

稍微折腾了半天,摸索出了1.20版本注册物品组的写法

public class ModItems { public static final Item CITRINE = registerItem("citrine", new Item(new FabricItemSettings()), ItemGroups.BUILDING_BLOCKS); //这里只能写ItemGroups里已经有的物品组分类,我把这两个添加到了建筑方块分类中,新建物品组的代码在另一个类中 public static final Item RAW_CITRINE = registerItem("raw_citrine", new Item(new FabricItemSettings()), ItemGroups.BUILDING_BLOCKS); @SafeVarargs public static Item registerItem(String name, Item item, RegistryKey<ItemGroup>... itemGroups) { Item registerItem = Registry.register(Registries.ITEM, new Identifier("template-mod", name), item); for (RegistryKey<ItemGroup> itemGroup : itemGroups) { ItemGroupEvents.modifyEntriesEvent(itemGroup).register(entries -> { entries.add(registerItem); }); }//下面的写法除了变量类型不同几乎没变化 return registerItem; } public static void registerModItems() { ExampleMod.LOGGER.debug("registering mod items for" + ExampleMod.MOD_ID); } }

public class ModItemGroup { //这里构建一个注册物品组所需的RegistryKey public static RegistryKey<ItemGroup> TEMPLATEMOD = RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier("template-mod")); public static void registerItemGroup() { //注册物品组 Registry.register(Registries.ITEM_GROUP, TEMPLATEMOD, ItemGroup.create(ItemGroup.Row.TOP, 3) //显示的物品组名称 .displayName(Text.translatable("itemGroup.templatemod")) //物品组图标 .icon(() -> new ItemStack(ModItems.CITRINE)) //添加物品到物品组里面 .entries((displayContext, entries) -> { entries.add(ModItems.CITRINE); entries.add(ModItems.RAW_CITRINE); }).build()); } public static void registerModItemGroup() { ExampleMod.LOGGER.debug("registering mod item group for" + ExampleMod.MOD_ID); } }