本篇教程的视频

(待发布)

本篇教程的源代码

(待发布)

简介

在Minecraft中,标签(Tag)用于对方块、物品等东西进行分类,生物群系、实体等也都有各自的标签

本期教程我们主要来添加方块和物品的标签

注册标签

方块标签

首先我们来看方块标签的添加,我们创建一个ModBlockTags类,用于存放我们自定义的方块标签

1
2
3
public class ModBlockTags {

}

然后我们在类中添加一个静态方法create,用于注册标签

1
2
3
private static TagKey<Block> create(String pName) {
return TagKey.create(Registries.BLOCK, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, pName));
}

这里的pName参数是标签的名称,TutorialMod.MOD_ID是我们模组的ID

接下来我们在类中添加一些标签

1
public static final TagKey<Block> ORE_TAGS = create("ore_tags");

这里我们创建了一个名为ore_tags的方块标签

这也是之后用在探矿器上的标签

物品标签

物品标签的添加和方块标签类似,我们创建一个ModItemTags

1
2
3
public class ModItemTags {

}

然后我们添加一个静态方法bind,用于注册物品标签

1
2
3
private static TagKey<Item> bind(String pName) {
return TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, pName));
}

接下来我们添加一些物品标签

1
public static final TagKey<Item> SUGAR_TAG = bind("sugar_tag");

这里我们创建了一个名为sugar_tag的物品标签

使用标签

方块标签的使用

这里我们来改写之前写的探矿器,之前写的矿物判断是直接判断方块,现在我们改成使用标签来判断

1
2
3
4
5
6
7
private boolean isCorrectBlock(BlockState blockState) {
if (blockState.is(ModBlockTags.ORE_TAGS)) {
return true;
} else {
return false;
}
}

这里我们使用了blockState.is(TagKey<Block> tag)方法来判断当前方块是否属于指定的标签

物品标签的使用

物品标签的使用也类似,这里我们以配方为例

1
2
3
4
5
ShapedRecipeBuilder.shaped(RecipeCategory.FOOD, Items.SUGAR, 3)
.pattern("###")
.define('#', ModItemTags.SUGAR_TAG)
.unlockedBy(getHasName(Items.BEETROOT), has(Items.BEETROOT))
.save(pWriter, TutorialMod.MOD_ID + ":" + "sugar_from_beetroot");

这里我们使用了define方法来定义配方中的材料,使用了物品标签ModItemTags.SUGAR_TAG

数据生成

当然,我们的标签还是空的,所以可以使用数据生成来为标签添加内容

方块标签的数据生成

在之前创建的ModBlockTagsProvider类中,我们添加方块标签的数据生成代码

1
2
3
4
5
6
7
8
9
this.tag(ModBlockTags.ORE_TAGS)
.add(ModBlocks.ICE_ETHER_ORE.get())
.addTag(BlockTags.COAL_ORES)
.addTag(BlockTags.IRON_ORES)
.addTag(BlockTags.GOLD_ORES)
.addTag(BlockTags.DIAMOND_ORES)
.addTag(BlockTags.EMERALD_ORES)
.addTag(BlockTags.LAPIS_ORES)
.addTag(BlockTags.REDSTONE_ORES);

这里我们为ore_tags标签添加了一些矿物方块

add方法用于添加单个方块,addTag方法用于添加已有的标签

物品标签的数据生成

在之前创建的ModItemTagsProvider类中,我们添加物品标签的数据生成代码

1
2
3
this.tag(ModItemTags.SUGAR_TAG)
.add(Items.BEETROOT)
.add(ModItems.STRAWBERRY.get());

这里我们为sugar_tag标签添加了甜菜和草莓物品

方块和物品的标签就是这个样子,在未来的教程中,我们还会继续使用标签来实现更多的功能