User Tools

Site Tools


zh_cn:tutorial:tags

标签

标签是一组有类似属性的方块、物品或者流体,可以用在配方中,使得不同物品可以在配方中等价。关于标签的更多表述,可参考中文 Minecraft Wiki。标签也可以用来分组不同模组的相同物品,以使得这些物品互相兼容。这些称为“常用标签”。

标签示例

在 JSON 文件中定义

文件位置:

  • src/main/resources/data/tutorial/tags/blocks/example_ores.json(1.21 之前)
  • src/main/resources/data/tutorial/tags/block/example_ores.json(自从 1.21)
{
    "replace": false,
    "values": [
        "tutorial:example_ore"
    ]
}

“replace” 标签决定了模组是否要从标签中移除该文件中未提及的其他物品。不建议设为 true,且破坏和其他模组的兼容性。文件路径的 blocks 也可以是 items 或者 fluids,用于表示不同的类型。多个词语用下划线隔开,且标签名称使用复数形式(不可数名词除外)。

在代码中使用标签

在一些情况下,你可能想要在代码中使用带有标签的注册物品。比如,像 Block#isIn 一类的方法需要这些标签参数。除此之外,例如 FlammableBlockRegistry, FuelRegistry 以及 CompostingChanceRegistry 这样的 Fabric 注册表也接受方块标签或者物品标签。

原版的标签物品可以在 BlockTagsItemTags 类中找到。如需注册标签并在代码中使用,你需要这样使用:

1.21 以上

public class ModBlockTags {
  public static final TagKey<Block> EXAMPLE_ORES = TagKey.of(RegistryKeys.BLOCK, Identifier.of("tutorial", "example_ores"));
}

1.19.3 至 1.20.6

public class ModBlockTags {
  public static final TagKey<Block> EXAMPLE_ORES = TagKey.of(RegistryKeys.BLOCK, new Identifier("tutorial", "example_ores"));
}

1.19.2 及以下

public class ModBlockTags {
  public static final TagKey<Block> EXAMPLE_ORES = TagKey.of(Registry.BLOCK_KEY, new Identifier("tutorial", "example_ores"));
}

1.18.1 及以下(需要 Fabric API)

public class ModBlockTags {
  public static final Tag<Block> EXAMPLE_ORES = TagFactory.BLOCK.create(new Identifier("tutorial", "example_ores"));
}

1.17 及以下,不含 1.17.1(需要 Fabric API)

public class ModBlockTags {
  public static final Tag<Block> EXAMPLE_ORES = TagRegistry.block(new Identifier("tutorial", "example_ores"));
}

注意由于 TagFactory 的出现,TagRegistry 自从 Fabric API 0.46.0 已经弃用。TagRegistry 可以在我的世界1.17及低于1.17的版本使用,因为这些版本的 Fabric API 没有收到 TagFactory 的更新。

常用标签和模组标签

常用标签是一种标准化的标签命名方案,旨在减少模组开发者,数据包作者和模组整合包作者的推理工作和不一致性。这些标签共享 c 命名空间并且有明确的命名规则。

当一个模组添加的一段内容与另一个模组增加的另一段内容足够相似时,应该使用常用标签,以使两个项目之间的功能可以互换。例如,如果一个模组为它添加的一种木材类型添加了一个自定义箱子,它可能会将这个箱子添加到 c:wooden_chests 标签中,以便于在别的模组的合成配方中可以使用。

另一方面,如果你的标签仅仅适用于你的模组,其他的模组不太可能有类似物品,或者你尤其只需要将你的模组的物品包含到标签中,则不应该使用常用标签。比如,如果一个模组添加了一系列独特的,必须单独用一个标签划分的机器,那么这个模组应该把这些机器放到它自己的命名空间下的一个标签中,例如 yourmodid:custom_machines

创建新的常用标签

常用标签即指 c 命名空间中的标签,这些标签可能会被多个模组使用,因此常用标签的命名方法应该在模组中保持一致。常用标签的名称使用复数形式(不可数名词除外),单词之间用下划线隔开。下面标签是这个约定的范例:

  • c:chests 方块标签
  • c:water_buckets 物品标签
  • c:in_the_end 生物群落标签

标签名应使用平面结构而不是层次结构。比如,c:iron_oresc:ores/iron 更可取。

已存在的常用标签

Fabric API在其 Fabric-conconventional-tags-v1 模块中发布了常用标签的定义。提供的标签可以在 这里 查看。

(可能过时的)普遍得到认可的常用标签目录见单独页面

zh_cn/tutorial/tags.txt · Last modified: 2024/08/24 14:51 by solidblock