MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
用户:MashKJo/1.21.1模组开发教程/7.标签
标签(Tags)是一种将注册对象分类的机制,并能影响到实际的游戏逻辑。
所有注册项(包括固有注册项和数据包注册项)都支持标签,不过给物品、方块添加标签最为常用。
给注册对象添加标签
对于原版的注册项而言,标签的路径在data/<modid>/tags/<registry_type>下。例如,物品的标签存放在路径data/<modid>/tags/item下。
标签的JSON格式如下:
{
//在这里填写存放进该标签的所有注册对象。
//可以填一个注册对象的资源路径,也可以填另一个标签(以#开头),表示将该标签下的所有注册对象加入进来。
"values": [
"modid:a_certain_object",
"#modid:a_certain_tag"
],
//在这里填写移出该标签的所有注册对象。
"remove": [
...
]
}
标签不同于数据包的其他部分,它默认是不覆盖的,而是会综合所有数据包对某一个标签的修改。
在代码中引用标签
标签在代码中的呈现形式是TagKey<?>,泛型参数为标签的类型。
public static final TagKey<Item> EXAMPLE_ITEM_TAG = TagKey.create(Registries.ITEM, aCertainResourceLocation);
要判断某个注册对象是否属于某个标签,只需要调用Holder#is方法即可。
原版所有的标签的TagKey都在包net.minecraft.tags下,NeoForge新增的标签在类net.neoforged.neoforge.common.Tags中,有需要的话可以直接引用。
你可能注意到NeoForge添加的标签绝大部分命名空间是c而非neoforge,c代表common,这是为了利好同时开发NeoForge和Fabric模组的Modder。
数据生成
标签支持datagen,很多种支持的标签都有其DataProvider实现类。如对于方块标签而言,对应的DataProvider实现类为BlockTagsProvider。下面就以生成方块标签为例:
public class MyBlockTagsProvider extends BlockTagsProvider {
public MyBlockTagsProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, @Nullable ExistingFileHelper existingFileHelper) {
super(output, lookupProvider, TutorialMod.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider lookupProvider) {
tag(aCertainTagKey)
//添加多个方块进标签。
.add(block1, block2, ...)
//添加多个其他标签进该标签。
.addTags(tag1, tag2, ...)
//移除该标签中的某个方块。
.remove(aCertainBlock);
}
}