标签生成
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
, Strings
和 RegistryKey<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()); }