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/08/17 12:57] – [创建简单物品组] wjz_pzh_cn:tutorial:itemgroup [2024/08/23 13:06] (current) – [创建自定义物品组] solidblock
Line 1: Line 1:
 ====== 物品组 ====== ====== 物品组 ======
  
-现在你可以使用命令 ''/give @s tutorial:custom_item'' 来获得你的物品。要让物品更容易获得,你需要将其添加到造模式物品栏的物品组中。你也可以添加自己的物品组。所有添加到了物品组中的物品都可以在创造模式物品栏中搜索+//这是 1.20+ 版本的教程对于 1.19 版本,请阅读[[tutorial:1.19:itemgroup|物品组(1.19)(英文)]]//
  
-==== 添加物品组 ====+现在,你可以使用命令 ''/give @s tutorial:custom_item'' 来获得你的物品。但是,不像原版物品,它还不存在于任何物品组中,你不能在创造模式轻易获取!有两种方式实现: 
 +  * 将你的物品添加到已存在的物品组 
 +  * 创建你自己的物品组并添加物品 
 + 
 +添加到任何物品组的物品都可以在创造模式物品栏中搜索到、 
 + 
 +===== 将物品添加到已存在的物品组 =====
  
 首先,先决定需要将物品添加到哪个物品组。例如,添加到建筑方块物品组。原版物品组存储在 ''<yarn class_7706>'' 类中。 首先,先决定需要将物品添加到哪个物品组。例如,添加到建筑方块物品组。原版物品组存储在 ''<yarn class_7706>'' 类中。
  
-然后,在你的 ''onInitialize'' 方法中,这个物品组添加事件处理器。每个需要修改的物品组都需要一个自己的监听器,可以使个监听器来将多个物品添加到同一个物品组中+然后,需要修改物品组创建事件处理器。 
 + 
 +<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); 
 +        }); 
 +    } 
 +
 +</yarncode> 
 + 
 +这个 modification event 也能够进行更加精细化的控制,例如将你的自定义物品放在特定的位置(例如,在 ''<yarn field_8691>'' 的后面)或者其他的高级修改。每个需要修改的物品组都需要自己的事件处理器,当然,同一个事件处理器可以用于给一个物品添加个物品。
  
 物品可以添加到一个相对于原版物品的位置。仔细思考你的模组的用户会期望物品出现在哪里。例如,如果你添加一种新的类型的木头,那么将其添加到已有木头的后面或许是最合理的。 物品可以添加到一个相对于原版物品的位置。仔细思考你的模组的用户会期望物品出现在哪里。例如,如果你添加一种新的类型的木头,那么将其添加到已有木头的后面或许是最合理的。
Line 14: 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>
  
-==== 创建简单物品组 ====+===== 创建自定义物品组 =====
  
 创建物品组之前,先决定是否有足够多的内容以至于需要自己的物品组。你的物品组会放置在单独的标签页中,影响可见性。 创建物品组之前,先决定是否有足够多的内容以至于需要自己的物品组。你的物品组会放置在单独的标签页中,影响可见性。
  
-如果你认为需要自己的物品组,可以使用 ''FabricItemGroup.builder'' 方法来创建物品组的构建器,并调用 ''build'' 方法来完成:(注意,1.19.4以及更新的版本中,下面所示的builder方法不需要任何参数。)+如果你认为需要自己的物品组,可以使用 ''FabricItemGroup.builder'' 方法来创建物品组的构建器,并调用 ''build'' 方法来完成:
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-private static final class_1761 ITEM_GROUP = FabricItemGroup.builder(new class_2960("tutorial", "test_group")) +public final class TutorialItemGroups { 
- .icon(() -> new class_1799(CUSTOM_ITEM)) +    public static final class_1761 TEST_GROUP = FabricItemGroup.builder(
- .build();+        .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> </yarncode>
  
-你可以使用 ''ITEM_GROUP'' 来修改内容,注意必须依次添加,因为没有原版物品可以为相对位置+你可以在 ''entries'' 方法中将物品添加到你的物品组中。注意,不像原版的物品组,当你添加与已存在的物品相对位置的物品时,必须往你自己的物品组添加物品,因为没有原版物品可以用来做为相对位置。 
 + 
 +必须设置显示名称,否则会导致崩溃。 
 + 
 +下一部是注册你的物品组。
  
 <yarncode java [enable_line_numbers="true"]> <yarncode java [enable_line_numbers="true"]>
-ItemGroupEvents.modifyEntriesEvent(ITEM_GROUP).register(content -> +public final class TutorialItemGroups { 
- content.add(CUSTOM_ITEM); +    // .... 
-});+     
 +    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.1692277039.txt.gz · Last modified: 2023/08/17 12:57 by wjz_p