Fabric Wiki

Fabric Wiki

首先,先决定需要将物品添加到哪个物品组。例如,添加到建筑方块物品组。原版物品组存储在 ItemGroups 类中。

然后,需要为修改物品组创建事件处理器。

public class ExampleMod implements ModInitializer { @Override public void onInitialize() { ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(content -> { content.add(TutorialItems.CUSTOM_ITEM); }); }}

这个 modification event 也能够进行更加精细化的控制,例如将你的自定义物品放在特定的位置(例如,在 OAK_DOOR 的后面)或者其他的高级修改。每个你需要修改的物品组都需要自己的事件处理器,当然,同一个事件处理器可以用于给一个物品组添加多个物品。

物品可以添加到一个相对于原版物品的位置。仔细思考你的模组的用户会期望物品出现在哪里。例如,如果你添加一种新的类型的木头,那么将其添加到已有木头的后面或许是最合理的。

例如,以下这个事件监听器会将你的模组中的物品放在建筑方块物品组中的橡木门后面:

public class ExampleMod implements ModInitializer { @Override public void onInitialize() { ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(content -> { content.addAfter(Items.OAK_DOOR, TutorialItems.CUSTOM_ITEM); }); }}

在实践中,考虑到你注册的物品可能有很多,所以建议放在专门的方法中,而不是直接在你的 ModInitializer 里面。请看下面这个例子(如果这么写,记得撤销上面的代码):

public final class TutorialItems { // [...] public static void registerToVanillaItemGroups() { ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(content -> { content.addAfter(Items.OAK_DOOR, CUSTOM_ITEM); }); }}

然后,记得在你的 ModInitializer 中引用那个方法。

public class ExampleMod implements ModInitializer { @Override public void onInitialize() { TutorialItems.registerToVanillaItemGroups(); }}

相关推荐