User Tools

Site Tools


zh_cn:tutorial:datagen_tags

标签生成

FabricTagProvider<T> 类可以让你生成标签的 JSON 文件。

本页面将会跟随你了解提供者(provider)的所有方面。

为了创建一个标签生成器,请创建一个类来继承(extends)FabricTagProvider<T>。其中 T 为你想要生成的标签的类型。然后在你的数据根入口(datagen entrypoint)像这样注册它:

private static class MyTagGenerator extends FabricTagProvider<Item> {
   public MyTagGenerator(FabricDataGenerator dataGenerator) {
       super(dataGenerator, Registries.ITEM);
   }
 
   @Override
   protected void generateTags() {
 
   }
}
 
// ...
 
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
    // ...
    fabricDataGenerator.addProvider(MyTagGenerator::new);
    // ...
}

FabricTagProvider<T> 类支持所有可以被支持的标签。请确认已经把构造函数(constructor)中的 Registries 改为你想要生成的标签的类型。

添加一个标签

添加一个标签,只需要简单在 generateTags() 方法中使用 TagKey<T> 调用 getOrCreateTagBuilder 方法,就像这样:

private static final TagKey<Item> SMELLY_ITEMS = TagKey.of(Registries.ITEM_KEY, new Identifier("tutorial:smelly_items"));
 
@Override
protected void generateTags() {
     // 这将会创建一个标签建造器(tag builder),我们在里面添加史莱姆球、腐肉和任何东西在 minecraft:dirt 的物品标签中。
     getOrCreateTagBuilder(SMELLY_ITEMS)
              .add(Items.SLIME_BALL)
              .add(Items.ROTTEN_FLESH)
              .addOptionalTag(ItemTags.DIRT);
     // This will automatically generate "assets/mymod/tags/items/smelly_items.json" in the "generated" folder.
     // 这将会自动在 ''generated'' 文件夹中生成 ''assets/tutorial/tags/items/smelly_items.json'' 
}

以上代码的输出样例:

smelly_items.json
{
  "replace": false,
  "values": [
    "minecraft:slime_ball",
    "minecraft:rotten_flesh",
    {
      "id": "#minecraft:dirt",
      "required": false
    }
  ]
}

向建造器中添加物品

往你的标签建造器(tag builder)中添加物品,只需要简单地调用 add(Item item)

如果你想要向你的建造器中添加物品,请确认是调用 addOptionalTag(TagKey<T> tag),因为在数据生成的过程中,标签的内容(contents)可能不会被加载。如果你已经确认这个标签已经被加载,那么请调用 addTag(TagKey<T> tag)

接受 Identifiers, StringsRegistryKey<T>addTag, addOptionalTag, addItem 存在各种重载(overloads)。

如果你想要忽略损坏的格式地强制地添加标签,你可以使用 forceAddTag(TagKey<T> tag)

最后,如果你想要你的标签替换已经存在的标签,你可以使用 setReplace(boolean replace)

上述所有方法的使用都可以在这个样例中找到:

private static final TagKey<Item> SMELLY_ITEMS = TagKey.of(Registries.ITEM_KEY, new Identifier("tutorial:smelly_items"));
 
@Override
protected void generateTags() {
     getOrCreateTagBuilder(SMELLY_ITEMS)
                    .add(Items.SLIME_BALL)
                    .add(Items.ROTTEN_FLESH)
                    .addOptionalTag(ItemTags.DIRT)
                    .add(new Identifier("minecraft", "wooden_planks"))
                    .forceAddTag(ItemTags.BANNERS)
                    .setReplace(true)
                    .add(Items.ROTTEN_FLESH.getRegistryEntry().registryKey());
}
zh_cn/tutorial/datagen_tags.txt · Last modified: 2023/02/24 11:21 by hanatomizu