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 [2023/11/18 08:09] solidblockzh_cn:tutorial:itemgroup [2024/08/23 13:06] (current) – [创建自定义物品组] solidblock
Line 1: Line 1:
 ====== 物品组 ====== ====== 物品组 ======
  
-//这是 1.20+ 版本的教程,对于 1.19 版本,请阅读[[1.19:itemgroup|创建物品组(1.19)]]。//+//这是 1.20+ 版本的教程,对于 1.19 版本,请阅读[[tutorial:1.19:itemgroup|创建物品组(1.19)(英文)]]。//
  
-现在,你可以使用命令 ''/give @s tutorial:custom_item'' 来获得你的物品。要让物品更容易获得,你需要将其添加到创造模式物品的物品组中。也可以添加自己的物品组。所有添加到了物品组中的物品都可以在创造模式物品栏中搜索。+现在,你可以使用命令 ''/give @s tutorial:custom_item'' 来获得你的物品。但是,不像原版物品,它还不存在于任何物品组中,你不能在创造模式轻易获取!有两种方式实现: 
 +  * 将你的物品添加到已存在的物品组 
 +  * 创建你自己的物品组添加物品
  
-==== 添加物品组 ====+添加到任何物品组的物品都可以在创造模式物品栏中搜索到、 
 + 
 +===== 将物品添加到已存在的物品组 =====
  
 首先,先决定需要将物品添加到哪个物品组。例如,添加到建筑方块物品组。原版物品组存储在 ''<yarn class_7706>'' 类中。 首先,先决定需要将物品添加到哪个物品组。例如,添加到建筑方块物品组。原版物品组存储在 ''<yarn class_7706>'' 类中。
  
-然后,在你的 ''onInitialize'' 方法中,这个物品组添加事件处理器。每个需要修改的物品组都需要一个自己的监听器,但可以使用同一个监听器来将多个物品添加到同一个物品组中。+然后,需要修改物品组创建事件处理器。 
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { +public class ExampleMod implements ModInitializer { 
- content.add(CUSTOM_ITEM); +    @Override 
-});+    public void onInitialize() { 
 +        ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { 
 +            content.add(TutorialItems.CUSTOM_ITEM); 
 +        }); 
 +    } 
 +}
 </yarncode> </yarncode>
  
Line 23: Line 33:
  
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { +public class ExampleMod implements ModInitializer { 
- content.addAfter(class_1802.field_8691, CUSTOM_ITEM); +    @Override 
-});+    public void onInitialize() { 
 +        ItemGroupEvents.modifyEntriesEvent(class_7706.field_40195).register(content -> { 
 +            content.addAfter(class_1802.field_8691, TutorialItems.CUSTOM_ITEM); 
 +        }); 
 +    } 
 +}
 </yarncode> </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>
  
-==== 创建简单物品组 ====+===== 创建自定义物品组 =====
  
 创建物品组之前,先决定是否有足够多的内容以至于需要自己的物品组。你的物品组会放置在单独的标签页中,影响可见性。 创建物品组之前,先决定是否有足够多的内容以至于需要自己的物品组。你的物品组会放置在单独的标签页中,影响可见性。
Line 35: Line 71:
 如果你认为需要自己的物品组,可以使用 ''FabricItemGroup.builder'' 方法来创建物品组的构建器,并调用 ''build'' 方法来完成: 如果你认为需要自己的物品组,可以使用 ''FabricItemGroup.builder'' 方法来创建物品组的构建器,并调用 ''build'' 方法来完成:
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-private static final class_1761 ITEM_GROUP = FabricItemGroup.builder() +public final class TutorialItemGroups { 
- .icon(() -> new class_1799(CUSTOM_ITEM)) +    public static final class_1761 TEST_GROUP = FabricItemGroup.builder() 
- .displayName(class_2561.method_43469("itemGroup.tutorial.test_group"))+        .icon(() -> new class_1799(TutorialItems.CUSTOM_ITEM)) 
 +        .displayName(class_2561.method_43469("itemGroup.tutorial.test_group"))
         .entries((context, entries) -> {         .entries((context, entries) -> {
- entries.add(CUSTOM_ITEM); +            entries.add(TutorialItems.CUSTOM_ITEM); 
- }) +        }) 
- .build();+        .build(); 
 +}
 </yarncode> </yarncode>
  
Line 51: Line 89:
  
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-class_2378.method_10230(class_7923.field_44687, new class_2960("tutorial", "test_group"), ITEM_GROUP);+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>
 +
 +当然,也可以在给字段赋值时,直接注册:
 +<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.1700294989.txt.gz · Last modified: 2023/11/18 08:09 by solidblock