User Tools

Site Tools


zh_cn:tutorial:itemgroup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
zh_cn:tutorial:itemgroup [2019/12/18 11:57] lightcolourzh_cn:tutorial:itemgroup [2024/08/23 13:06] (current) – [创建自定义物品组] solidblock
Line 1: Line 1:
 ====== 物品组 ====== ====== 物品组 ======
-==== 创建简单物品组 ==== + 
-使“项目’‘正确显示在“创造性”菜单中请使用''FabricItemGroupBuilder''创建它们: +//这是 1.20+ 版本的教程,对于 1.19 版本,请阅读[[tutorial:1.19:itemgroup|创建物品组(1.19)(英文)]]。// 
-<code java [enable_line_numbers="true"]> + 
-public class ExampleMod implements ModInitializer +现在,你可以使用命令 ''/give @s tutorial:custom_item'' 来获得你的物品。但是,不像原版物品,它还不存在于任何物品组中,你不能在创造模式轻易获取!有两种方式实现: 
-+  * 将你的物品添加到已存在的物品组 
- // ... +  * 创建你自己的物品组并添加物品 
- public static final ItemGroup ITEM_GROUP = FabricItemGroupBuilder.build( + 
- new Identifier("tutorial", "general"), +添加到任何物品组的物品都可以在创造模式物品栏中搜索到、 
- () -> new ItemStack(Blocks.COBBLESTONE)); + 
-  +===== 将物品添加到已存在的物品组 ===== 
- public static final ItemGroup OTHER_GROUP = FabricItemGroupBuilder.create+ 
- new Identifier("tutorial", "other")) +首先,先决定需将物品添加到哪个物品。例如添加到建筑方块物品组。原版物品组存储在 ''<yarn class_7706>'' 类中。 
- .icon(() -> new ItemStack(Items.BOWL)+ 
- .build(); +然后,需要为修改物品组创建事件处理器。 
- // ...+ 
 +<yarncode java [enable_line_numbers="true"]> 
 +public class ExampleMod implements ModInitializer { 
 +    @Override 
 +    public void onInitialize() { 
 +        ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { 
 +            content.add(TutorialItems.CUSTOM_ITEM); 
 +        }); 
 +    }
 } }
-</code> +</yarncode>
-调用''FabricItemGroupBuilder#build''后,您的组将被添加到creative菜单中的项目组列表中。+
  
-请确保替换参数请记住传递给''Identifier''构造函数参数只能包含某些字符)。[两参数(命名空间和路径)可以包含//lowercase letters////numbers////下划线//,//periods//,或//dashes//.'[a-z0-9_.-]''\\第二参数(“路径”)也可以包含//slashes//.'[a-z0-9_.-]''\\避免使其他符号,否则将引发"InvalidIdentifierException!")您将传递具有实际mod ID的''Identifier''构造函数,以及稍后要为本地化提供项组的转换密钥(第一个示例''item group''的完整转换密钥将是''ItemGroup.mod_ID.general''+这个 modification event 也能够进行更加精细化的控制,例如将你的自定义物品放在特定的位置例如在 ''<yarn field_8691>''后面或者其他的高级修改你需要修改的物品组需要自己的事件处理器当然同一事件处理器可以用给一个物品组添加多个物品
  
-=== 将物品添加到物品组 === +物品可以添加到一个相对于原版物品的位。仔细思考你的模组的户会期望物品出现在哪里。例如如果你添加一种新的类型的木头,那么将其添加到已有木头的面或许是最合理的。
-创建自定义项时,请在设上调''Item.Settings\group''传入自定义组: +
-<code java> +
-public static final Item YOUR_ITEM = new Item(new Item.Settings().group(ExampleMod.ITEM_GROUP)); +
-</code>+
  
-==== 使物品组按特定顺序显示特定项目 ==== +例如,以下这个事件监听器会你的模组的物品放建筑方块物品组中的橡木门后面: 
-调用''FabricItemGroupBuilder#appendItems''并传递任何''Consumer<List<ItemStack//>//>''。然后,您可按顺序任何堆栈添加到给定列表ItemStack.EMPTY“”可用于在组中放置空格。 + 
-<code java [enable_line_numbers="true",highlight_lines_extra="11,12,13,14,15,16,17,18"]> +<yarncode java [enable_line_numbers="true"]> 
-public class ExampleMod implements ModInitializer +public class ExampleMod implements ModInitializer { 
-+    @Override 
- // ... +    public void onInitialize() { 
- public static final ItemGroup ITEM_GROUP = FabricItemGroupBuilder.build( +        ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { 
- new Identifier("tutorial", "general"), +            content.addAfter(class_1802.field_8691TutorialItems.CUSTOM_ITEM); 
- () -> new ItemStack(Blocks.COBBLESTONE)); +        }); 
-  +    }
- public static final ItemGroup OTHER_GROUP = FabricItemGroupBuilder.create( +
- new Identifier("tutorial", "other")) +
- .icon((-> new ItemStack(Items.BOWL)) +
- .appendItems(stacks -> +
- +
- stacks.add(new ItemStack(Blocks.BONE_BLOCK)); +
- stacks.add(new ItemStack(Items.APPLE)); +
- stacks.add(PotionUtil.setPotion(new ItemStack(Items.POTION)Potions.WATER)); +
- stacks.add(ItemStack.EMPTY); +
- stacks.add(new ItemStack(Items.IRON_SHOVEL)); +
- }+
- .build(); +
- // ...+
 } }
-</code>+</yarncode> 
 +在实践中,考虑到你注册的物品可能有很多,所以建议放在专门的方法中,而不是直接在你的 ''ModInitializer'' 里面。请看下面这个例子(如果这么写,记得撤销上面的代码): 
 + 
 +<yarncode java [enable_line_numbers="true"]> 
 +public final class TutorialItems { 
 +    // [...] 
 +     
 +    public static void registerToVanillaItemGroups() { 
 +        ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { 
 +            content.addAfter(class_1802.field_8691, CUSTOM_ITEM); 
 +        }); 
 +    } 
 +
 +</yarncode> 
 +然后,记得在你的 ''ModInitializer'' 中引用那个方法。 
 +<yarncode java [enable_line_numbers="true"]> 
 +public class ExampleMod implements ModInitializer { 
 +    @Override 
 +    public void onInitialize() { 
 +        TutorialItems.registerToVanillaItemGroups(); 
 +    } 
 +
 +</yarncode> 
 + 
 +===== 创建自定义物品组 ===== 
 + 
 +创建物品组之前,先决定是否有足够多的内容以至于需要自己的物品组。你的物品组会放置在单独的标签页中,影响可见性。 
 + 
 +如果你认为需要自己的物品组,可以使用 ''FabricItemGroup.builder'' 方法来创建物品组的构建器,并调用 ''build'' 方法来完成: 
 +<yarncode java [enable_line_numbers="true"]> 
 +public final class TutorialItemGroups { 
 +    public static final class_1761 TEST_GROUP = FabricItemGroup.builder() 
 +        .icon(() -> new class_1799(TutorialItems.CUSTOM_ITEM)) 
 +        .displayName(class_2561.method_43469("itemGroup.tutorial.test_group")) 
 +        .entries((context, entries) -> { 
 +            entries.add(TutorialItems.CUSTOM_ITEM); 
 +        }) 
 +        .build(); 
 +
 +</yarncode> 
 + 
 +你可以在 ''entries'' 方法中,将物品添加到你的物品组中。注意,不像原版的物品组,当你添加与已存在的物品相对位置的物品时,必须往你自己的物品组添加物品,因为没有原版的物品可以用来做为相对位置。 
 + 
 +必须设置显示名称,否则会导致崩溃。 
 + 
 +下一部是注册你的物品组。 
 + 
 +<yarncode java [enable_line_numbers="true"]> 
 +public final class TutorialItemGroups { 
 +    // .... 
 +     
 +    public static void initialize() { 
 +        // 自从 1.21: 
 +        class_2378.method_10230(class_7923.field_44687, Identifier.of("tutorial", "test_group"), ITEM_GROUP); 
 +         
 +        // 在 1.21 之前: 
 +        class_2378.method_10230(class_7923.field_44687, new class_2960("tutorial", "test_group"), ITEM_GROUP); 
 +    } 
 +
 +</yarncode> 
 + 
 +当然,也可以在给字段赋值时,直接注册: 
 +<yarncode java [enable_line_numbers="true"]> 
 +public final class TutorialItemGroups { 
 +    public static final class_1761 TEST_GROUP = class_2378.method_10230(class_7923.field_44687, new class_2960("tutorial", "test_group"), FabricItemGroup.builder() 
 +        .icon(() -> new class_1799(CUSTOM_ITEM)) 
 +        .displayName(class_2561.method_43469("itemGroup.tutorial.test_group")) 
 +        .entries((context, entries) -> { 
 +            entries.add(TutorialItems.CUSTOM_ITEM); 
 +        }) 
 +        .build()); 
 +     
 +    public static void initialize() { 
 +    } 
 +
 +</yarncode> 
 + 
 +记得在你的 ''ModInitializer'' 中静态加载类。 
 +<yarncode java [enable_line_numbers="true"]> 
 +public class ExampleMod implements ModInitializer { 
 +    @Override 
 +    public void onInitialize() { 
 +        TutorialItemGroups.initialize(); 
 +    } 
 +
 +</yarncode> 
 + 
 +:!: 下面的截图已过时。 
 {{:tutorial:item_group_append_items.png?nolink&400|}} {{:tutorial:item_group_append_items.png?nolink&400|}}
zh_cn/tutorial/itemgroup.1576670264.txt.gz · Last modified: 2019/12/18 11:57 by lightcolour