Tag 1.21 Fabric
本篇教程的视频
本篇教程的源代码
GitHub地址:TutorialMod-Tag-1.21
介绍
Tag
是一种标签,用于方块、物品以及实体的分类。
具体可见Wiki
在Minecraft中,我们可以将具有相同或类似属性的方块、物品或实体放在一个Tag
中,然后可以通过这个Tag
进行一些逻辑处理,比如合成
比如说在游戏中,木板可以合成木棍,但是木板有很多种。如果为每一种木板都写一个配方,那就太麻烦了。游戏就使用Tag
来简化配方的编写
同理,我们的前一篇教程中的Prospector
探测的矿石也可以使用Tag
来简化代码。将其能够探测的矿石放在一个Tag
中,然后通过这个Tag
来判断矿石
注册Tag
查看源代码
Minecraft的Tag
有很多种,它的那些Tag
在net.minecraft.registry.tag
包下,本篇教程我们主要使用ItemTags
和BlockTags
两者差不多,无非在于注册方法中的参数不同
1 | public static final TagKey<Block> WOOL = of("wool"); |
1 | public static final TagKey<Item> PLANKS = of("planks"); |
前者是方块
的Tag,后者是物品
的Tag,他们的不同之处就是TagKey
的泛型参数和RegistryKeys
的参数
而其具体在哪里使用这就自行研究了,这里不再赘述
创建ModBlockTags类
接下来我们创建一个ModBlockTags
1 | public class ModBlockTags { |
然后在这里面我们来注册我们的Tag
1 | public static final TagKey<Block> ORE_LIST = of("ore_list"); |
这个of
方法其实就是原版的方法,但要记得将Identifier
改一下
然后我们注册一个ORE_LIST
的Tag
,这个Tag
是来改写我们的Prospector
的
另外,初始化注册方法也不要忘了
1 | public static void registerModBlockTags() { |
以及主类中的调用
1 | ModBlockTags.registerModBlockTags(); |
创建ModItemTags类
同理,我们创建一个ModItemTags
1 | public class ModItemTags { |
其方法是和ModBlockTags
一样的,这里我们注册一个SUGAR_TAG
的Tag
,其他的不再赘述
为Tag添加内容
手动添加Tag
的内容是很麻烦的,方法的话在讲战利品列表的时候也讲过了。
我们这里使用DataGen
来生成Tag
的内容
BlockTagsProvider
我们在configure
方法中添加以下内容
1 | getOrCreateTagBuilder(ModBlockTags.ORE_LIST) |
这里我们将ICE_ETHER_ORE
放入了ORE_LIST
中,然后将BlockTags
中的矿石Tag
(这些矿石的Tag包括普通矿石和深层矿石)放入了ORE_LIST
中
add
和forceAddTag
的区别在于,add
是添加单个方块或者物品;而forceAddTag
是添加已有的Tag
,他们接受的参数是不同的
ItemTagsProvider
同理,我们在configure
方法中添加以下内容
1 | getOrCreateTagBuilder(ModItemTags.SUGAR_TAG) |
这里我们将BEETROOT
,CHEESE
,STRAWBERRY
放入了SUGAR_TAG
中
然后我们运行Data Generation
,生成对应的json文件,而后我们就可以在generated
中看到我们生成的Tag
文件
比如ore_list.json
1 | { |
使用Tag
修改Prospector类
我们将isRightBlock
方法修改为
1 | private boolean isRightBlock(BlockState blockState) { |
这里我们使用isIn
方法来判断这个方块是不是在ORE_LIST
中,其接受的参数是Tag
,所以我们直接传入ORE_LIST
即可
这样我们在探测矿石的时候就可以输出所有在ORE_LIST
中的矿石了
配方
我们之前写了一个甜菜制糖的配方,我们可以将这个配方改为使用SUGAR_TAG
来制作
1 | ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, Items.SUGAR,3) |
我们将#
的输入改为SUGAR_TAG
,这样我们就可以使用BEETROOT
,CHEESE
,STRAWBERRY
来制作糖了
这样我们就不用写一堆的配方了,只需要这一个配方就可以完成制糖