From 614e540081dfe936a40aa8b01bde94aaccde62a5 Mon Sep 17 00:00:00 2001
From: Deximus-Maximus <dexman545@users.noreply.github.com>
Date: Sun, 17 Apr 2022 19:23:48 +0100
Subject: [PATCH] Add fabric-convention-tags-v1 (#2063)

* Add framework for common-tags-v1

* Add javadoc to fabric tool tags

* Fix wrong package arrangement

* Add some more tags

* Add more biome tags
Thanks to TelepathicGrunt for the suggestions

* Update fabric-common-tags-api-v1/src/main/java/net/fabricmc/fabric/api/tags/v1/CommonEnchantmentTags.java

Co-authored-by: haykam821 <24855774+haykam821@users.noreply.github.com>

* Update fabric-common-tags-api-v1/src/main/java/net/fabricmc/fabric/api/tags/v1/CommonEnchantmentTags.java

Co-authored-by: haykam821 <24855774+haykam821@users.noreply.github.com>

* Clarify enchantment tags

* Add no-shulker tag

* Add minecart tag

* Begin work on datagen and populating tags

* Add bucket tags

* First pass at populating biome tags

* Add boat tag

* Fix missing inclusion of f:shears into c:shears

* Hide fabric tool tags in datagen

* Add weapon damage enhancement tag

* Change impl package name to be inline with rest of fapi

* Rename enchantment tags

* Some cleanup

* Populate blocktag datagen
Remove crops tag

* Add javadoc links to vanilla counterparts

* Move datagen to its own sourceset

* Fix package names for checkstyle

* Populate more entries

* Remove exclusion tag

* Add license headers
Fix checkstyle

* Add missing nether quarts to ores tag

* Use `worldgen/biome` instead of `biomes` for biome tags

Co-authored-by: haykam821 <24855774+haykam821@users.noreply.github.com>

* Manually include all biomes for overworld

* Remove ancient debris from NetheriteOres

* Add and populate glass tags

* Add and populate movement enhancement

* Break up item tags

* Add armour damage reduction tag

* Add missing ore and related tags

* Fix quartz tags

* Add floral tag

* Add golden carrot

* Correct some biome tag issues

* Separate SNOWY_PLAINS and PLAINS

* Add SNOWY tag and remove snowy biomes from ICY

* Correct enchantment tag
Remove silk touch tag

* Fix more biome issues

* Add deep and shllow ocean tags

* Add no-move tag

* Remove netherite ores

* Add shulker tags

* Add raw ore

* Add dye tags

* Fif dye tags

* Fix typo

* Document some biome tags where the naming may not be clear

* Remove tag mirroring for blocks and items

* Rename module
Remove unused methods

* Rename impl package

* Rename packages and module

* Rename folder

* Rename api classes

* Add generateResources task to cover all resource generation tasks.

* Add generated tags to repo

* Fix ocean tag excluding shallow ocean

* Iterate registry to generate foods tag

* Remove cache, add to gitignore

* Rename generated folder

Co-authored-by: haykam821 <24855774+haykam821@users.noreply.github.com>
Co-authored-by: modmuss50 <modmuss50@gmail.com>
---
 build.gradle                                  |   5 +
 fabric-convention-tags-v1/.gitignore          |   1 +
 fabric-convention-tags-v1/build.gradle        |  44 +++
 .../convention/datagen/DatagenEntrypoint.java |  38 +++
 .../datagen/generators/BiomeTagGenerator.java | 241 +++++++++++++
 .../datagen/generators/BlockTagGenerator.java | 115 +++++++
 .../generators/EnchantmentTagGenerator.java   |  55 +++
 .../generators/EntityTypeTagGenerator.java    |  47 +++
 .../datagen/generators/FluidTagGenerator.java |  37 ++
 .../datagen/generators/ItemTagGenerator.java  | 318 ++++++++++++++++++
 .../src/datagen/resources/fabric.mod.json     |  31 ++
 .../data/c/tags/blocks/bookshelves.json       |   6 +
 .../resources/data/c/tags/blocks/chests.json  |   8 +
 .../data/c/tags/blocks/glass_blocks.json      |  23 ++
 .../data/c/tags/blocks/glass_panes.json       |  22 ++
 .../resources/data/c/tags/blocks/ores.json    |  41 +++
 .../data/c/tags/blocks/quartz_ores.json       |   6 +
 .../data/c/tags/blocks/shulker_boxes.json     |  22 ++
 .../entity_defense_enhancement.json           |  11 +
 .../entity_movement_enhancement.json          |   7 +
 .../data/c/tags/enchantment/fortune.json      |   6 +
 .../data/c/tags/enchantment/looting.json      |   6 +
 .../weapon_damage_enhancement.json            |  10 +
 .../data/c/tags/entity_types/boats.json       |   7 +
 .../data/c/tags/entity_types/bosses.json      |   7 +
 .../data/c/tags/entity_types/minecarts.json   |  12 +
 .../resources/data/c/tags/fluids/lava.json    |   9 +
 .../resources/data/c/tags/fluids/water.json   |   9 +
 .../resources/data/c/tags/items/axes.json     |  15 +
 .../data/c/tags/items/black_dyes.json         |   6 +
 .../data/c/tags/items/blue_dyes.json          |   6 +
 .../resources/data/c/tags/items/bows.json     |   7 +
 .../data/c/tags/items/brown_dyes.json         |   6 +
 .../data/c/tags/items/bucket/empty.json       |   6 +
 .../data/c/tags/items/bucket/lava.json        |   6 +
 .../data/c/tags/items/bucket/milk.json        |   6 +
 .../data/c/tags/items/bucket/water.json       |  12 +
 .../resources/data/c/tags/items/coal.json     |   9 +
 .../data/c/tags/items/copper_ingots.json      |   6 +
 .../data/c/tags/items/cyan_dyes.json          |   6 +
 .../resources/data/c/tags/items/diamonds.json |   6 +
 .../resources/data/c/tags/items/dyes.json     |  69 ++++
 .../resources/data/c/tags/items/emeralds.json |   6 +
 .../resources/data/c/tags/items/foods.json    |  45 +++
 .../data/c/tags/items/glass_blocks.json       |  23 ++
 .../data/c/tags/items/glass_panes.json        |  22 ++
 .../data/c/tags/items/gold_ingots.json        |   6 +
 .../data/c/tags/items/gray_dyes.json          |   6 +
 .../data/c/tags/items/green_dyes.json         |   6 +
 .../resources/data/c/tags/items/hoes.json     |  15 +
 .../data/c/tags/items/iron_ingots.json        |   6 +
 .../resources/data/c/tags/items/lapis.json    |   6 +
 .../data/c/tags/items/light_blue_dyes.json    |   6 +
 .../data/c/tags/items/light_gray_dyes.json    |   6 +
 .../data/c/tags/items/lime_dyes.json          |   6 +
 .../data/c/tags/items/magenta_dyes.json       |   6 +
 .../data/c/tags/items/netherite_ingots.json   |   6 +
 .../data/c/tags/items/orange_dyes.json        |   6 +
 .../resources/data/c/tags/items/ores.json     |  41 +++
 .../resources/data/c/tags/items/pickaxes.json |  15 +
 .../data/c/tags/items/pink_dyes.json          |   6 +
 .../resources/data/c/tags/items/potions.json  |   8 +
 .../data/c/tags/items/purple_dyes.json        |   6 +
 .../resources/data/c/tags/items/quartz.json   |   6 +
 .../data/c/tags/items/quartz_ores.json        |   6 +
 .../data/c/tags/items/raw_copper_blocks.json  |   6 +
 .../data/c/tags/items/raw_copper_ores.json    |   6 +
 .../data/c/tags/items/raw_gold_blocks.json    |   6 +
 .../data/c/tags/items/raw_gold_ores.json      |   6 +
 .../data/c/tags/items/raw_iron_blocks.json    |   6 +
 .../data/c/tags/items/raw_iron_ores.json      |   6 +
 .../resources/data/c/tags/items/red_dyes.json |   6 +
 .../data/c/tags/items/redstone_dusts.json     |   6 +
 .../resources/data/c/tags/items/shears.json   |  10 +
 .../resources/data/c/tags/items/shovels.json  |  15 +
 .../data/c/tags/items/shulker_boxes.json      |  22 ++
 .../resources/data/c/tags/items/spears.json   |   6 +
 .../resources/data/c/tags/items/swords.json   |  15 +
 .../data/c/tags/items/white_dyes.json         |   6 +
 .../data/c/tags/items/yellow_dyes.json        |   6 +
 .../data/c/tags/worldgen/biome/aquatic.json   |  13 +
 .../data/c/tags/worldgen/biome/badlands.json  |  13 +
 .../data/c/tags/worldgen/biome/beach.json     |  10 +
 .../data/c/tags/worldgen/biome/caves.json     |   7 +
 .../c/tags/worldgen/biome/climate_cold.json   |  11 +
 .../c/tags/worldgen/biome/climate_dry.json    |  21 ++
 .../c/tags/worldgen/biome/climate_hot.json    |  30 ++
 .../worldgen/biome/climate_temperate.json     |  15 +
 .../c/tags/worldgen/biome/climate_wet.json    |  18 +
 .../data/c/tags/worldgen/biome/dead.json      |   4 +
 .../c/tags/worldgen/biome/deep_ocean.json     |   9 +
 .../data/c/tags/worldgen/biome/desert.json    |   6 +
 .../c/tags/worldgen/biome/end_islands.json    |   4 +
 .../c/tags/worldgen/biome/extreme_hills.json  |   7 +
 .../data/c/tags/worldgen/biome/floral.json    |   7 +
 .../c/tags/worldgen/biome/flower_forests.json |   6 +
 .../data/c/tags/worldgen/biome/forest.json    |   9 +
 .../data/c/tags/worldgen/biome/icy.json       |  10 +
 .../data/c/tags/worldgen/biome/in_nether.json |  14 +
 .../c/tags/worldgen/biome/in_overworld.json   |  55 +++
 .../c/tags/worldgen/biome/in_the_end.json     |  10 +
 .../data/c/tags/worldgen/biome/jungle.json    |   9 +
 .../data/c/tags/worldgen/biome/mesa.json      |   8 +
 .../data/c/tags/worldgen/biome/mountain.json  |   9 +
 .../c/tags/worldgen/biome/mountain_peak.json  |   8 +
 .../c/tags/worldgen/biome/mountain_slope.json |   6 +
 .../data/c/tags/worldgen/biome/mushroom.json  |   6 +
 .../c/tags/worldgen/biome/nether_forests.json |   7 +
 .../data/c/tags/worldgen/biome/ocean.json     |  17 +
 .../data/c/tags/worldgen/biome/plains.json    |   7 +
 .../data/c/tags/worldgen/biome/river.json     |   9 +
 .../data/c/tags/worldgen/biome/savanna.json   |   8 +
 .../c/tags/worldgen/biome/shallow_ocean.json  |  10 +
 .../data/c/tags/worldgen/biome/snowy.json     |   9 +
 .../c/tags/worldgen/biome/snowy_plains.json   |   6 +
 .../c/tags/worldgen/biome/stony_shores.json   |   6 +
 .../data/c/tags/worldgen/biome/swamp.json     |   6 +
 .../data/c/tags/worldgen/biome/taiga.json     |   9 +
 .../tags/worldgen/biome/tree_coniferous.json  |  10 +
 .../c/tags/worldgen/biome/tree_deciduous.json |  11 +
 .../c/tags/worldgen/biome/tree_jungle.json    |   9 +
 .../c/tags/worldgen/biome/tree_savanna.json   |   9 +
 .../c/tags/worldgen/biome/underground.json    |   9 +
 .../tags/worldgen/biome/vegetation_dense.json |  10 +
 .../worldgen/biome/vegetation_sparse.json     |  22 ++
 .../data/c/tags/worldgen/biome/void.json      |   6 +
 .../data/c/tags/worldgen/biome/wasteland.json |   4 +
 .../convention/v1/ConventionalBiomeTags.java  | 131 ++++++++
 .../convention/v1/ConventionalBlockTags.java  |  47 +++
 .../v1/ConventionalEnchantmentTags.java       |  51 +++
 .../v1/ConventionalEntityTypeTags.java        |  39 +++
 .../convention/v1/ConventionalFluidTags.java  |  37 ++
 .../convention/v1/ConventionalItemTags.java   |  96 ++++++
 .../impl/tag/convention/TagRegistration.java  |  50 +++
 .../assets/fabric-convention-tags-v1/icon.png | Bin 0 -> 1579 bytes
 .../src/main/resources/fabric.mod.json        |  26 ++
 fabric-data-generation-api-v1/build.gradle    |   2 +
 .../build.gradle                              |   2 +
 gradle.properties                             |   1 +
 settings.gradle                               |   1 +
 140 files changed, 2695 insertions(+)
 create mode 100644 fabric-convention-tags-v1/.gitignore
 create mode 100644 fabric-convention-tags-v1/build.gradle
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/DatagenEntrypoint.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BiomeTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BlockTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EnchantmentTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EntityTypeTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/FluidTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/ItemTagGenerator.java
 create mode 100644 fabric-convention-tags-v1/src/datagen/resources/fabric.mod.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/bookshelves.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/chests.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_blocks.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_panes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/quartz_ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/shulker_boxes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_defense_enhancement.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_movement_enhancement.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/fortune.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/looting.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/weapon_damage_enhancement.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/boats.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/bosses.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/minecarts.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/lava.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/water.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/axes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/black_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/blue_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bows.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/brown_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/empty.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/lava.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/milk.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/water.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/coal.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/copper_ingots.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/cyan_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/diamonds.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/emeralds.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/foods.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_blocks.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_panes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gold_ingots.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gray_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/green_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/hoes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/iron_ingots.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lapis.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_blue_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_gray_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lime_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/magenta_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/netherite_ingots.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/orange_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pickaxes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pink_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/potions.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/purple_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz_ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_blocks.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_blocks.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_blocks.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_ores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/red_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/redstone_dusts.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shears.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shovels.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shulker_boxes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/spears.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/swords.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/white_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/yellow_dyes.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/aquatic.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/badlands.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/beach.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/caves.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_cold.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_dry.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_hot.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_temperate.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_wet.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/dead.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/deep_ocean.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/desert.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/end_islands.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/extreme_hills.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/floral.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/flower_forests.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/forest.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/icy.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_nether.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_overworld.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_the_end.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/jungle.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mesa.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_peak.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_slope.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mushroom.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/nether_forests.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/ocean.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/plains.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/river.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/savanna.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/shallow_ocean.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy_plains.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/stony_shores.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/swamp.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/taiga.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_coniferous.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_deciduous.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_jungle.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_savanna.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/underground.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_dense.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_sparse.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/void.json
 create mode 100644 fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/wasteland.json
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBiomeTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBlockTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEnchantmentTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEntityTypeTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalFluidTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalItemTags.java
 create mode 100644 fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/impl/tag/convention/TagRegistration.java
 create mode 100644 fabric-convention-tags-v1/src/main/resources/assets/fabric-convention-tags-v1/icon.png
 create mode 100644 fabric-convention-tags-v1/src/main/resources/fabric.mod.json

diff --git a/build.gradle b/build.gradle
index 0a50461c1..f039525e8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -187,6 +187,11 @@ allprojects {
 			}
 		}
 	}
+
+	// Run this task after updating minecraft to regenerate any required resources
+	task generateResources {
+		group = "fabric"
+	}
 }
 
 // Apply auxiliary buildscripts to submodules
diff --git a/fabric-convention-tags-v1/.gitignore b/fabric-convention-tags-v1/.gitignore
new file mode 100644
index 000000000..f85202010
--- /dev/null
+++ b/fabric-convention-tags-v1/.gitignore
@@ -0,0 +1 @@
+/src/generated/resources/.cache/
diff --git a/fabric-convention-tags-v1/build.gradle b/fabric-convention-tags-v1/build.gradle
new file mode 100644
index 000000000..dd93c0a15
--- /dev/null
+++ b/fabric-convention-tags-v1/build.gradle
@@ -0,0 +1,44 @@
+archivesBaseName = "fabric-convention-tags-v1"
+version = getSubprojectVersion(project)
+
+moduleDependencies(project, [
+		'fabric-api-base'
+])
+
+sourceSets {
+	main {
+		resources {
+			srcDirs += [
+				'src/generated/resources'
+			]
+		}
+	}
+	datagen {
+		compileClasspath += main.compileClasspath
+		runtimeClasspath += main.runtimeClasspath
+		compileClasspath += main.output
+		runtimeClasspath += main.output
+	}
+}
+
+dependencies {
+	datagenImplementation project(path: ":fabric-data-generation-api-v1", configuration: 'namedElements')
+}
+
+loom {
+	runs {
+		datagen {
+			inherit server
+			name "Data Generation"
+			vmArg "-Dfabric-api.datagen"
+			vmArg "-Dfabric-api.datagen.output-dir=${file("src/generated/resources")}"
+			vmArg "-Dfabric-api.datagen.strict-validation"
+
+			ideConfigGenerated = true
+			runDir "build/datagen"
+			source sourceSets.datagen
+		}
+	}
+}
+
+generateResources.dependsOn runDatagen
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/DatagenEntrypoint.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/DatagenEntrypoint.java
new file mode 100644
index 000000000..09409662e
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/DatagenEntrypoint.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen;
+
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.BiomeTagGenerator;
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.BlockTagGenerator;
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.EnchantmentTagGenerator;
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.EntityTypeTagGenerator;
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.FluidTagGenerator;
+import net.fabricmc.fabric.impl.tag.convention.datagen.generators.ItemTagGenerator;
+import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+
+public class DatagenEntrypoint implements DataGeneratorEntrypoint {
+	@Override
+	public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
+		fabricDataGenerator.addProvider(ItemTagGenerator::new);
+		fabricDataGenerator.addProvider(FluidTagGenerator::new);
+		fabricDataGenerator.addProvider(EnchantmentTagGenerator::new);
+		fabricDataGenerator.addProvider(BlockTagGenerator::new);
+		fabricDataGenerator.addProvider(BiomeTagGenerator::new);
+		fabricDataGenerator.addProvider(EntityTypeTagGenerator::new);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BiomeTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BiomeTagGenerator.java
new file mode 100644
index 000000000..fd6e52f21
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BiomeTagGenerator.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.tag.BiomeTags;
+import net.minecraft.util.registry.Registry;
+import net.minecraft.world.biome.Biome;
+import net.minecraft.world.biome.BiomeKeys;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBiomeTags;
+
+public class BiomeTagGenerator extends FabricTagProvider.DynamicRegistryTagProvider<Biome> {
+	public BiomeTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator, Registry.BIOME_KEY, "worldgen/biome");
+	}
+
+	@Override
+	protected void generateTags() {
+		generateDimensionTags();
+		generateCategoryTags();
+		generateOtherBiomeTypes();
+		generateClimateAndVegetationTags();
+		generateTerrainDescriptorTags();
+	}
+
+	private void generateDimensionTags() {
+		getOrCreateTagBuilder(ConventionalBiomeTags.IN_NETHER)
+				.addOptionalTag(BiomeTags.IS_NETHER)
+				.add(BiomeKeys.CRIMSON_FOREST)
+				.add(BiomeKeys.WARPED_FOREST)
+				.add(BiomeKeys.NETHER_WASTES)
+				.add(BiomeKeys.SOUL_SAND_VALLEY)
+				.add(BiomeKeys.BASALT_DELTAS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.IN_THE_END)
+				.add(BiomeKeys.END_BARRENS)
+				.add(BiomeKeys.END_MIDLANDS)
+				.add(BiomeKeys.END_HIGHLANDS)
+				.add(BiomeKeys.THE_END)
+				.add(BiomeKeys.SMALL_END_ISLANDS);
+		// We avoid the vanilla group tags here as mods may add to them without actually spawning them in the overworld
+		getOrCreateTagBuilder(ConventionalBiomeTags.IN_OVERWORLD)
+				.add(BiomeKeys.RIVER).add(BiomeKeys.FROZEN_RIVER)
+				.add(BiomeKeys.COLD_OCEAN).add(BiomeKeys.DEEP_COLD_OCEAN)
+				.add(BiomeKeys.DEEP_FROZEN_OCEAN).add(BiomeKeys.DEEP_OCEAN)
+				.add(BiomeKeys.DEEP_LUKEWARM_OCEAN).add(BiomeKeys.WARM_OCEAN).add(BiomeKeys.LUKEWARM_OCEAN)
+				.add(BiomeKeys.FROZEN_OCEAN).add(BiomeKeys.OCEAN)
+				.add(BiomeKeys.BEACH).add(BiomeKeys.PLAINS)
+				.add(BiomeKeys.SUNFLOWER_PLAINS).add(BiomeKeys.SNOWY_PLAINS)
+				.add(BiomeKeys.ICE_SPIKES).add(BiomeKeys.DESERT)
+				.add(BiomeKeys.FOREST).add(BiomeKeys.FLOWER_FOREST)
+				.add(BiomeKeys.BIRCH_FOREST).add(BiomeKeys.DARK_FOREST)
+				.add(BiomeKeys.OLD_GROWTH_BIRCH_FOREST).add(BiomeKeys.OLD_GROWTH_PINE_TAIGA)
+				.add(BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA).add(BiomeKeys.TAIGA)
+				.add(BiomeKeys.SNOWY_TAIGA).add(BiomeKeys.SAVANNA)
+				.add(BiomeKeys.SAVANNA_PLATEAU).add(BiomeKeys.WINDSWEPT_HILLS)
+				.add(BiomeKeys.WINDSWEPT_GRAVELLY_HILLS).add(BiomeKeys.WINDSWEPT_FOREST)
+				.add(BiomeKeys.WINDSWEPT_SAVANNA).add(BiomeKeys.JUNGLE).add(BiomeKeys.SPARSE_JUNGLE)
+				.add(BiomeKeys.BAMBOO_JUNGLE).add(BiomeKeys.BADLANDS).add(BiomeKeys.ERODED_BADLANDS)
+				.add(BiomeKeys.WOODED_BADLANDS).add(BiomeKeys.MEADOW).add(BiomeKeys.GROVE)
+				.add(BiomeKeys.SNOWY_SLOPES).add(BiomeKeys.FROZEN_PEAKS).add(BiomeKeys.JAGGED_PEAKS)
+				.add(BiomeKeys.STONY_PEAKS).add(BiomeKeys.MUSHROOM_FIELDS).add(BiomeKeys.DRIPSTONE_CAVES)
+				.add(BiomeKeys.LUSH_CAVES).add(BiomeKeys.SNOWY_BEACH).add(BiomeKeys.SWAMP).add(BiomeKeys.STONY_SHORE);
+	}
+
+	private void generateCategoryTags() {
+		getOrCreateTagBuilder(ConventionalBiomeTags.TAIGA)
+				.addOptionalTag(BiomeTags.IS_TAIGA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.EXTREME_HILLS)
+				.add(BiomeKeys.WINDSWEPT_GRAVELLY_HILLS)
+				.add(BiomeKeys.WINDSWEPT_HILLS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.JUNGLE)
+				.addOptionalTag(BiomeTags.IS_JUNGLE);
+		getOrCreateTagBuilder(ConventionalBiomeTags.MESA)
+				.add(BiomeKeys.WOODED_BADLANDS)
+				.add(BiomeKeys.ERODED_BADLANDS)
+				.add(BiomeKeys.BADLANDS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.PLAINS)
+				.add(BiomeKeys.SUNFLOWER_PLAINS)
+				.add(BiomeKeys.PLAINS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.SAVANNA)
+				.add(BiomeKeys.SAVANNA_PLATEAU)
+				.add(BiomeKeys.WINDSWEPT_SAVANNA)
+				.add(BiomeKeys.SAVANNA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.ICY)
+				.add(BiomeKeys.FROZEN_RIVER)
+				.add(BiomeKeys.FROZEN_PEAKS)
+				.add(BiomeKeys.DEEP_FROZEN_OCEAN)
+				.add(BiomeKeys.ICE_SPIKES)
+				.add(BiomeKeys.FROZEN_OCEAN);
+		getOrCreateTagBuilder(ConventionalBiomeTags.SNOWY)
+				.add(BiomeKeys.SNOWY_BEACH)
+				.add(BiomeKeys.SNOWY_PLAINS)
+				.add(BiomeKeys.SNOWY_SLOPES)
+				.add(BiomeKeys.SNOWY_TAIGA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.BEACH)
+				.addOptionalTag(BiomeTags.IS_BEACH)
+				.add(BiomeKeys.STONY_SHORE);
+		getOrCreateTagBuilder(ConventionalBiomeTags.FOREST)
+				.addOptionalTag(BiomeTags.IS_FOREST);
+		getOrCreateTagBuilder(ConventionalBiomeTags.OCEAN)
+				.addOptionalTag(ConventionalBiomeTags.DEEP_OCEAN)
+				.addOptionalTag(ConventionalBiomeTags.SHALLOW_OCEAN)
+				.addOptionalTag(BiomeTags.IS_OCEAN);
+		getOrCreateTagBuilder(ConventionalBiomeTags.DESERT)
+				.add(BiomeKeys.DESERT);
+		getOrCreateTagBuilder(ConventionalBiomeTags.RIVER)
+				.addOptionalTag(BiomeTags.IS_RIVER);
+		getOrCreateTagBuilder(ConventionalBiomeTags.SWAMP)
+				.add(BiomeKeys.SWAMP);
+		getOrCreateTagBuilder(ConventionalBiomeTags.MUSHROOM)
+				.add(BiomeKeys.MUSHROOM_FIELDS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.UNDERGROUND)
+				.addOptionalTag(ConventionalBiomeTags.CAVES);
+		getOrCreateTagBuilder(ConventionalBiomeTags.MOUNTAIN)
+				.addOptionalTag(BiomeTags.IS_MOUNTAIN);
+	}
+
+	private void generateOtherBiomeTypes() {
+		getOrCreateTagBuilder(ConventionalBiomeTags.BADLANDS)
+				.addOptionalTag(ConventionalBiomeTags.MESA)
+				.addOptionalTag(BiomeTags.IS_BADLANDS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.CAVES)
+				.add(BiomeKeys.DRIPSTONE_CAVES)
+				.add(BiomeKeys.LUSH_CAVES);
+		getOrCreateTagBuilder(ConventionalBiomeTags.VOID)
+				.add(BiomeKeys.THE_VOID);
+		getOrCreateTagBuilder(ConventionalBiomeTags.DEEP_OCEAN)
+				.add(BiomeKeys.DEEP_FROZEN_OCEAN)
+				.add(BiomeKeys.DEEP_LUKEWARM_OCEAN)
+				.add(BiomeKeys.DEEP_COLD_OCEAN)
+				.add(BiomeKeys.DEEP_OCEAN);
+		getOrCreateTagBuilder(ConventionalBiomeTags.SHALLOW_OCEAN)
+				.add(BiomeKeys.OCEAN)
+				.add(BiomeKeys.LUKEWARM_OCEAN)
+				.add(BiomeKeys.FROZEN_OCEAN)
+				.add(BiomeKeys.COLD_OCEAN)
+				.add(BiomeKeys.WARM_OCEAN);
+	}
+
+	private void generateClimateAndVegetationTags() {
+		getOrCreateTagBuilder(ConventionalBiomeTags.CLIMATE_COLD)
+				.add(BiomeKeys.GROVE)
+				.add(BiomeKeys.JAGGED_PEAKS)
+				.addOptionalTag(ConventionalBiomeTags.ICY);
+		getOrCreateTagBuilder(ConventionalBiomeTags.CLIMATE_TEMPERATE)
+				.add(BiomeKeys.FOREST)
+				.add(BiomeKeys.SUNFLOWER_PLAINS)
+				.add(BiomeKeys.SWAMP)
+				.add(BiomeKeys.STONY_SHORE)
+				.add(BiomeKeys.DARK_FOREST)
+				.add(BiomeKeys.WINDSWEPT_FOREST)
+				.add(BiomeKeys.BIRCH_FOREST)
+				.add(BiomeKeys.OLD_GROWTH_BIRCH_FOREST)
+				.add(BiomeKeys.MEADOW)
+				.add(BiomeKeys.PLAINS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.CLIMATE_HOT)
+				.addOptionalTag(ConventionalBiomeTags.JUNGLE)
+				.addOptionalTag(ConventionalBiomeTags.SAVANNA)
+				.addOptionalTag(ConventionalBiomeTags.DESERT)
+				.addOptionalTag(ConventionalBiomeTags.BADLANDS)
+				.add(BiomeKeys.STONY_PEAKS)
+				.addOptionalTag(ConventionalBiomeTags.MUSHROOM)
+				.addOptionalTag(ConventionalBiomeTags.IN_NETHER);
+		getOrCreateTagBuilder(ConventionalBiomeTags.CLIMATE_WET)
+				.addOptionalTag(ConventionalBiomeTags.AQUATIC)
+				.addOptionalTag(ConventionalBiomeTags.SWAMP)
+				.add(BiomeKeys.LUSH_CAVES)
+				.addOptionalTag(ConventionalBiomeTags.JUNGLE);
+		getOrCreateTagBuilder(ConventionalBiomeTags.CLIMATE_DRY)
+				.addOptionalTag(ConventionalBiomeTags.IN_NETHER)
+				.addOptionalTag(ConventionalBiomeTags.BADLANDS)
+				.addOptionalTag(ConventionalBiomeTags.DESERT)
+				.addOptionalTag(ConventionalBiomeTags.SAVANNA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.VEGETATION_DENSE)
+				.addOptionalTag(ConventionalBiomeTags.JUNGLE)
+				.add(BiomeKeys.SUNFLOWER_PLAINS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.VEGETATION_SPARSE)
+				.addOptionalTag(ConventionalBiomeTags.SAVANNA)
+				.addOptionalTag(ConventionalBiomeTags.DESERT)
+				.addOptionalTag(ConventionalBiomeTags.DEAD)
+				.add(BiomeKeys.LUSH_CAVES)
+				.addOptionalTag(ConventionalBiomeTags.WASTELAND);
+		getOrCreateTagBuilder(ConventionalBiomeTags.TREE_CONIFEROUS)
+				.add(BiomeKeys.GROVE)
+				.addOptionalTag(ConventionalBiomeTags.TAIGA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.TREE_DECIDUOUS)
+				.add(BiomeKeys.FOREST)
+				.add(BiomeKeys.WINDSWEPT_FOREST)
+				.add(BiomeKeys.FLOWER_FOREST)
+				.add(BiomeKeys.BIRCH_FOREST)
+				.add(BiomeKeys.DARK_FOREST)
+				.add(BiomeKeys.OLD_GROWTH_BIRCH_FOREST);
+		getOrCreateTagBuilder(ConventionalBiomeTags.TREE_JUNGLE)
+				.addOptionalTag(ConventionalBiomeTags.JUNGLE);
+		getOrCreateTagBuilder(ConventionalBiomeTags.TREE_SAVANNA)
+				.addOptionalTag(ConventionalBiomeTags.SAVANNA);
+		getOrCreateTagBuilder(ConventionalBiomeTags.FLORAL)
+				.add(BiomeKeys.SUNFLOWER_PLAINS)
+				.add(BiomeKeys.FLOWER_FOREST);
+	}
+
+	private void generateTerrainDescriptorTags() {
+		getOrCreateTagBuilder(ConventionalBiomeTags.MOUNTAIN_PEAK)
+				.add(BiomeKeys.FROZEN_PEAKS)
+				.add(BiomeKeys.JAGGED_PEAKS)
+				.add(BiomeKeys.STONY_PEAKS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.MOUNTAIN_SLOPE)
+				.add(BiomeKeys.SNOWY_SLOPES);
+		getOrCreateTagBuilder(ConventionalBiomeTags.AQUATIC)
+				.addOptionalTag(ConventionalBiomeTags.OCEAN)
+				.addOptionalTag(ConventionalBiomeTags.RIVER);
+		getOrCreateTagBuilder(ConventionalBiomeTags.DEAD);
+		getOrCreateTagBuilder(ConventionalBiomeTags.WASTELAND);
+		getOrCreateTagBuilder(ConventionalBiomeTags.END_ISLANDS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.NETHER_FORESTS)
+				.add(BiomeKeys.WARPED_FOREST)
+				.add(BiomeKeys.CRIMSON_FOREST);
+		getOrCreateTagBuilder(ConventionalBiomeTags.SNOWY_PLAINS)
+				.add(BiomeKeys.SNOWY_PLAINS);
+		getOrCreateTagBuilder(ConventionalBiomeTags.STONY_SHORES)
+				.add(BiomeKeys.STONY_SHORE);
+		getOrCreateTagBuilder(ConventionalBiomeTags.FLOWER_FORESTS)
+				.add(BiomeKeys.FLOWER_FOREST);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BlockTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BlockTagGenerator.java
new file mode 100644
index 000000000..167d9ac45
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/BlockTagGenerator.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.block.Blocks;
+import net.minecraft.tag.BlockTags;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBlockTags;
+
+public class BlockTagGenerator extends FabricTagProvider.BlockTagProvider {
+	public BlockTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator);
+	}
+
+	@Override
+	protected void generateTags() {
+		getOrCreateTagBuilder(ConventionalBlockTags.QUARTZ_ORES)
+				.add(Blocks.NETHER_QUARTZ_ORE);
+		getOrCreateTagBuilder(ConventionalBlockTags.ORES)
+				.addOptionalTag(BlockTags.REDSTONE_ORES)
+				.addOptionalTag(BlockTags.COPPER_ORES)
+				.addOptionalTag(BlockTags.GOLD_ORES)
+				.addOptionalTag(BlockTags.IRON_ORES)
+				.addOptionalTag(BlockTags.COAL_ORES)
+				.addOptionalTag(BlockTags.EMERALD_ORES)
+				.addOptionalTag(BlockTags.LAPIS_ORES)
+				.addOptionalTag(BlockTags.DIAMOND_ORES)
+				.addOptionalTag(ConventionalBlockTags.QUARTZ_ORES);
+		getOrCreateTagBuilder(ConventionalBlockTags.CHESTS)
+				.add(Blocks.CHEST)
+				.add(Blocks.ENDER_CHEST)
+				.add(Blocks.TRAPPED_CHEST);
+		getOrCreateTagBuilder(ConventionalBlockTags.BOOKSHELVES)
+				.add(Blocks.BOOKSHELF);
+		generateGlassTags();
+		generateShulkerTag();
+	}
+
+	private void generateShulkerTag() {
+		getOrCreateTagBuilder(ConventionalBlockTags.SHULKER_BOXES)
+				.add(Blocks.SHULKER_BOX)
+				.add(Blocks.BLUE_SHULKER_BOX)
+				.add(Blocks.BROWN_SHULKER_BOX)
+				.add(Blocks.CYAN_SHULKER_BOX)
+				.add(Blocks.GRAY_SHULKER_BOX)
+				.add(Blocks.GREEN_SHULKER_BOX)
+				.add(Blocks.LIGHT_BLUE_SHULKER_BOX)
+				.add(Blocks.LIGHT_GRAY_SHULKER_BOX)
+				.add(Blocks.LIME_SHULKER_BOX)
+				.add(Blocks.MAGENTA_SHULKER_BOX)
+				.add(Blocks.ORANGE_SHULKER_BOX)
+				.add(Blocks.PINK_SHULKER_BOX)
+				.add(Blocks.PURPLE_SHULKER_BOX)
+				.add(Blocks.RED_SHULKER_BOX)
+				.add(Blocks.WHITE_SHULKER_BOX)
+				.add(Blocks.YELLOW_SHULKER_BOX)
+				.add(Blocks.BLACK_SHULKER_BOX);
+	}
+
+	private void generateGlassTags() {
+		getOrCreateTagBuilder(ConventionalBlockTags.GLASS_BLOCKS)
+				.add(Blocks.GLASS)
+				.add(Blocks.GRAY_STAINED_GLASS)
+				.add(Blocks.BLACK_STAINED_GLASS)
+				.add(Blocks.ORANGE_STAINED_GLASS)
+				.add(Blocks.BLUE_STAINED_GLASS)
+				.add(Blocks.BROWN_STAINED_GLASS)
+				.add(Blocks.CYAN_STAINED_GLASS)
+				.add(Blocks.GREEN_STAINED_GLASS)
+				.add(Blocks.LIGHT_BLUE_STAINED_GLASS)
+				.add(Blocks.LIGHT_GRAY_STAINED_GLASS)
+				.add(Blocks.LIME_STAINED_GLASS)
+				.add(Blocks.MAGENTA_STAINED_GLASS)
+				.add(Blocks.PINK_STAINED_GLASS)
+				.add(Blocks.PURPLE_STAINED_GLASS)
+				.add(Blocks.RED_STAINED_GLASS)
+				.add(Blocks.TINTED_GLASS)
+				.add(Blocks.WHITE_STAINED_GLASS)
+				.add(Blocks.YELLOW_STAINED_GLASS);
+		getOrCreateTagBuilder(ConventionalBlockTags.GLASS_PANES)
+				.add(Blocks.GLASS_PANE)
+				.add(Blocks.GRAY_STAINED_GLASS_PANE)
+				.add(Blocks.BLACK_STAINED_GLASS_PANE)
+				.add(Blocks.ORANGE_STAINED_GLASS_PANE)
+				.add(Blocks.BLUE_STAINED_GLASS_PANE)
+				.add(Blocks.BROWN_STAINED_GLASS_PANE)
+				.add(Blocks.CYAN_STAINED_GLASS_PANE)
+				.add(Blocks.GREEN_STAINED_GLASS_PANE)
+				.add(Blocks.LIGHT_BLUE_STAINED_GLASS_PANE)
+				.add(Blocks.LIGHT_GRAY_STAINED_GLASS_PANE)
+				.add(Blocks.LIME_STAINED_GLASS_PANE)
+				.add(Blocks.MAGENTA_STAINED_GLASS_PANE)
+				.add(Blocks.PINK_STAINED_GLASS_PANE)
+				.add(Blocks.PURPLE_STAINED_GLASS_PANE)
+				.add(Blocks.RED_STAINED_GLASS_PANE)
+				.add(Blocks.WHITE_STAINED_GLASS_PANE)
+				.add(Blocks.YELLOW_STAINED_GLASS_PANE);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EnchantmentTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EnchantmentTagGenerator.java
new file mode 100644
index 000000000..87859a02a
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EnchantmentTagGenerator.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.Enchantments;
+import net.minecraft.util.registry.Registry;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalEnchantmentTags;
+
+public class EnchantmentTagGenerator extends FabricTagProvider<Enchantment> {
+	public EnchantmentTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator, Registry.ENCHANTMENT);
+	}
+
+	@Override
+	protected void generateTags() {
+		getOrCreateTagBuilder(ConventionalEnchantmentTags.INCREASES_BLOCK_DROPS)
+				.add(Enchantments.FORTUNE);
+		getOrCreateTagBuilder(ConventionalEnchantmentTags.INCREASES_ENTITY_DROPS)
+				.add(Enchantments.LOOTING);
+		getOrCreateTagBuilder(ConventionalEnchantmentTags.WEAPON_DAMAGE_ENHANCEMENT)
+				.add(Enchantments.BANE_OF_ARTHROPODS)
+				.add(Enchantments.IMPALING)
+				.add(Enchantments.SMITE)
+				.add(Enchantments.POWER)
+				.add(Enchantments.SHARPNESS);
+		getOrCreateTagBuilder(ConventionalEnchantmentTags.ENTITY_MOVEMENT_ENHANCEMENT)
+				.add(Enchantments.DEPTH_STRIDER)
+				.add(Enchantments.SOUL_SPEED);
+		getOrCreateTagBuilder(ConventionalEnchantmentTags.ENTITY_DEFENSE_ENHANCEMENT)
+				.add(Enchantments.FEATHER_FALLING)
+				.add(Enchantments.PROTECTION)
+				.add(Enchantments.BLAST_PROTECTION)
+				.add(Enchantments.PROJECTILE_PROTECTION)
+				.add(Enchantments.FIRE_PROTECTION)
+				.add(Enchantments.RESPIRATION);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EntityTypeTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EntityTypeTagGenerator.java
new file mode 100644
index 000000000..de2ccfd25
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/EntityTypeTagGenerator.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.entity.EntityType;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalEntityTypeTags;
+
+public class EntityTypeTagGenerator extends FabricTagProvider.EntityTypeTagProvider {
+	public EntityTypeTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator);
+	}
+
+	@Override
+	protected void generateTags() {
+		getOrCreateTagBuilder(ConventionalEntityTypeTags.BOSSES)
+				.add(EntityType.ENDER_DRAGON)
+				.add(EntityType.WITHER);
+		getOrCreateTagBuilder(ConventionalEntityTypeTags.MINECARTS)
+				.add(EntityType.MINECART)
+				.add(EntityType.TNT_MINECART)
+				.add(EntityType.CHEST_MINECART)
+				.add(EntityType.FURNACE_MINECART)
+				.add(EntityType.COMMAND_BLOCK_MINECART)
+				.add(EntityType.HOPPER_MINECART)
+				.add(EntityType.SPAWNER_MINECART);
+		getOrCreateTagBuilder(ConventionalEntityTypeTags.BOATS)
+				.add(EntityType.BOAT)
+				.add(EntityType.CHEST_BOAT);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/FluidTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/FluidTagGenerator.java
new file mode 100644
index 000000000..01f4df229
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/FluidTagGenerator.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.tag.FluidTags;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalFluidTags;
+
+public class FluidTagGenerator extends FabricTagProvider.FluidTagProvider {
+	public FluidTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator);
+	}
+
+	@Override
+	protected void generateTags() {
+		getOrCreateTagBuilder(ConventionalFluidTags.WATER)
+				.addOptionalTag(FluidTags.WATER);
+		getOrCreateTagBuilder(ConventionalFluidTags.LAVA)
+				.addOptionalTag(FluidTags.LAVA);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/ItemTagGenerator.java b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/ItemTagGenerator.java
new file mode 100644
index 000000000..e41a9af9e
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/ItemTagGenerator.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention.datagen.generators;
+
+import net.minecraft.item.Items;
+import net.minecraft.tag.ItemTags;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+
+import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
+import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
+import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags;
+
+public class ItemTagGenerator extends FabricTagProvider.ItemTagProvider {
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#PICKAXES}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_PICKAXES = createFabricId("pickaxes");
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#SHOVELS}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_SHOVELS = createFabricId("shovels");
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#HOES}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_HOES = createFabricId("hoes");
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#AXES}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_AXES = createFabricId("axes");
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#SHEARS}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_SHEARS = createFabricId("shears");
+	/**
+	 * @deprecated Use {@link ConventionalItemTags#SWORDS}
+	 */
+	@Deprecated
+	private static final Identifier FABRIC_SWORDS = createFabricId("swords");
+
+	public ItemTagGenerator(FabricDataGenerator dataGenerator) {
+		super(dataGenerator);
+	}
+
+	@Override
+	protected void generateTags() {
+		generateToolTags();
+		generateBucketTags();
+		generateOreAndRelatedTags();
+		generateConsumableTags();
+		generateGlassTags();
+		generateShulkerTag();
+		generateDyeTags();
+	}
+
+	private void generateDyeTags() {
+		getOrCreateTagBuilder(ConventionalItemTags.DYES)
+				.addOptionalTag(ConventionalItemTags.BLACK_DYES)
+				.addOptionalTag(ConventionalItemTags.BLUE_DYES)
+				.addOptionalTag(ConventionalItemTags.BROWN_DYES)
+				.addOptionalTag(ConventionalItemTags.GREEN_DYES)
+				.addOptionalTag(ConventionalItemTags.RED_DYES)
+				.addOptionalTag(ConventionalItemTags.WHITE_DYES)
+				.addOptionalTag(ConventionalItemTags.YELLOW_DYES)
+				.addOptionalTag(ConventionalItemTags.LIGHT_GRAY_DYES)
+				.addOptionalTag(ConventionalItemTags.LIGHT_BLUE_DYES)
+				.addOptionalTag(ConventionalItemTags.LIME_DYES)
+				.addOptionalTag(ConventionalItemTags.MAGENTA_DYES)
+				.addOptionalTag(ConventionalItemTags.ORANGE_DYES)
+				.addOptionalTag(ConventionalItemTags.PINK_DYES)
+				.addOptionalTag(ConventionalItemTags.CYAN_DYES)
+				.addOptionalTag(ConventionalItemTags.GRAY_DYES)
+				.addOptionalTag(ConventionalItemTags.PURPLE_DYES);
+		getOrCreateTagBuilder(ConventionalItemTags.BLACK_DYES)
+				.add(Items.BLACK_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.BLUE_DYES)
+				.add(Items.BLUE_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.BROWN_DYES)
+				.add(Items.PURPLE_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.GREEN_DYES)
+				.add(Items.GREEN_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.RED_DYES)
+				.add(Items.RED_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.WHITE_DYES)
+				.add(Items.WHITE_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.YELLOW_DYES)
+				.add(Items.YELLOW_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.LIGHT_BLUE_DYES)
+				.add(Items.LIGHT_BLUE_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.LIGHT_GRAY_DYES)
+				.add(Items.LIGHT_GRAY_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.LIME_DYES)
+				.add(Items.LIME_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.MAGENTA_DYES)
+				.add(Items.MAGENTA_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.ORANGE_DYES)
+				.add(Items.ORANGE_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.PINK_DYES)
+				.add(Items.PINK_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.CYAN_DYES)
+				.add(Items.CYAN_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.GRAY_DYES)
+				.add(Items.GRAY_DYE);
+		getOrCreateTagBuilder(ConventionalItemTags.PURPLE_DYES)
+				.add(Items.PURPLE_DYE);
+	}
+
+	private void generateShulkerTag() {
+		getOrCreateTagBuilder(ConventionalItemTags.SHULKER_BOXES)
+				.add(Items.SHULKER_BOX)
+				.add(Items.BLUE_SHULKER_BOX)
+				.add(Items.BROWN_SHULKER_BOX)
+				.add(Items.CYAN_SHULKER_BOX)
+				.add(Items.GRAY_SHULKER_BOX)
+				.add(Items.GREEN_SHULKER_BOX)
+				.add(Items.LIGHT_BLUE_SHULKER_BOX)
+				.add(Items.LIGHT_GRAY_SHULKER_BOX)
+				.add(Items.LIME_SHULKER_BOX)
+				.add(Items.MAGENTA_SHULKER_BOX)
+				.add(Items.ORANGE_SHULKER_BOX)
+				.add(Items.PINK_SHULKER_BOX)
+				.add(Items.PURPLE_SHULKER_BOX)
+				.add(Items.RED_SHULKER_BOX)
+				.add(Items.WHITE_SHULKER_BOX)
+				.add(Items.YELLOW_SHULKER_BOX)
+				.add(Items.BLACK_SHULKER_BOX);
+	}
+
+	private void generateGlassTags() {
+		getOrCreateTagBuilder(ConventionalItemTags.GLASS_BLOCKS)
+				.add(Items.GLASS)
+				.add(Items.GRAY_STAINED_GLASS)
+				.add(Items.BLACK_STAINED_GLASS)
+				.add(Items.ORANGE_STAINED_GLASS)
+				.add(Items.BLUE_STAINED_GLASS)
+				.add(Items.BROWN_STAINED_GLASS)
+				.add(Items.CYAN_STAINED_GLASS)
+				.add(Items.GREEN_STAINED_GLASS)
+				.add(Items.LIGHT_BLUE_STAINED_GLASS)
+				.add(Items.LIGHT_GRAY_STAINED_GLASS)
+				.add(Items.LIME_STAINED_GLASS)
+				.add(Items.MAGENTA_STAINED_GLASS)
+				.add(Items.PINK_STAINED_GLASS)
+				.add(Items.PURPLE_STAINED_GLASS)
+				.add(Items.RED_STAINED_GLASS)
+				.add(Items.TINTED_GLASS)
+				.add(Items.WHITE_STAINED_GLASS)
+				.add(Items.YELLOW_STAINED_GLASS);
+		getOrCreateTagBuilder(ConventionalItemTags.GLASS_PANES)
+				.add(Items.GLASS_PANE)
+				.add(Items.GRAY_STAINED_GLASS_PANE)
+				.add(Items.BLACK_STAINED_GLASS_PANE)
+				.add(Items.ORANGE_STAINED_GLASS_PANE)
+				.add(Items.BLUE_STAINED_GLASS_PANE)
+				.add(Items.BROWN_STAINED_GLASS_PANE)
+				.add(Items.CYAN_STAINED_GLASS_PANE)
+				.add(Items.GREEN_STAINED_GLASS_PANE)
+				.add(Items.LIGHT_BLUE_STAINED_GLASS_PANE)
+				.add(Items.LIGHT_GRAY_STAINED_GLASS_PANE)
+				.add(Items.LIME_STAINED_GLASS_PANE)
+				.add(Items.MAGENTA_STAINED_GLASS_PANE)
+				.add(Items.PINK_STAINED_GLASS_PANE)
+				.add(Items.PURPLE_STAINED_GLASS_PANE)
+				.add(Items.RED_STAINED_GLASS_PANE)
+				.add(Items.WHITE_STAINED_GLASS_PANE)
+				.add(Items.YELLOW_STAINED_GLASS_PANE);
+	}
+
+	private void generateConsumableTags() {
+		Registry.ITEM.forEach(item -> {
+			if (item.getFoodComponent() != null) {
+				getOrCreateTagBuilder(ConventionalItemTags.FOODS).add(item);
+			}
+		});
+		getOrCreateTagBuilder(ConventionalItemTags.POTIONS)
+				.add(Items.LINGERING_POTION)
+				.add(Items.SPLASH_POTION)
+				.add(Items.POTION);
+	}
+
+	private void generateBucketTags() {
+		getOrCreateTagBuilder(ConventionalItemTags.EMPTY_BUCKET)
+				.add(Items.BUCKET);
+		getOrCreateTagBuilder(ConventionalItemTags.LAVA_BUCKET)
+				.add(Items.LAVA_BUCKET);
+		getOrCreateTagBuilder(ConventionalItemTags.WATER_BUCKET)
+				.add(Items.AXOLOTL_BUCKET)
+				.add(Items.COD_BUCKET)
+				.add(Items.PUFFERFISH_BUCKET)
+				.add(Items.TROPICAL_FISH_BUCKET)
+				.add(Items.SALMON_BUCKET)
+				.add(Items.TADPOLE_BUCKET)
+				.add(Items.WATER_BUCKET);
+		getOrCreateTagBuilder(ConventionalItemTags.MILK_BUCKET)
+				.add(Items.MILK_BUCKET);
+	}
+
+	private void generateOreAndRelatedTags() {
+		getOrCreateTagBuilder(ConventionalItemTags.ORES)
+				.addOptionalTag(ItemTags.IRON_ORES)
+				.addOptionalTag(ItemTags.COPPER_ORES)
+				.addOptionalTag(ItemTags.REDSTONE_ORES)
+				.addOptionalTag(ItemTags.GOLD_ORES)
+				.addOptionalTag(ItemTags.COAL_ORES)
+				.addOptionalTag(ItemTags.DIAMOND_ORES)
+				.addOptionalTag(ItemTags.LAPIS_ORES)
+				.addOptionalTag(ConventionalItemTags.QUARTZ_ORES)
+				.addOptionalTag(ItemTags.EMERALD_ORES);
+		getOrCreateTagBuilder(ConventionalItemTags.IRON_INGOTS)
+				.add(Items.IRON_INGOT);
+		getOrCreateTagBuilder(ConventionalItemTags.COPPER_INGOTS)
+				.add(Items.COPPER_INGOT);
+		getOrCreateTagBuilder(ConventionalItemTags.GOLD_INGOTS)
+				.add(Items.GOLD_INGOT);
+		getOrCreateTagBuilder(ConventionalItemTags.NETHERITE_INGOTS)
+				.add(Items.NETHERITE_INGOT);
+		getOrCreateTagBuilder(ConventionalItemTags.REDSTONE_DUSTS)
+				.add(Items.REDSTONE);
+		getOrCreateTagBuilder(ConventionalItemTags.QUARTZ_ORES)
+				.add(Items.NETHER_QUARTZ_ORE);
+		getOrCreateTagBuilder(ConventionalItemTags.QUARTZ)
+				.add(Items.QUARTZ);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_IRON_ORES)
+				.add(Items.RAW_IRON);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_COPPER_ORES)
+				.add(Items.RAW_COPPER);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_GOLD_ORES)
+				.add(Items.RAW_GOLD);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_IRON_BLOCKS)
+				.add(Items.RAW_IRON_BLOCK);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_COPPER_BLOCKS)
+				.add(Items.RAW_COPPER_BLOCK);
+		getOrCreateTagBuilder(ConventionalItemTags.RAW_GOLD_BLOCKS)
+				.add(Items.RAW_GOLD_BLOCK);
+		getOrCreateTagBuilder(ConventionalItemTags.COAL)
+				.addOptionalTag(ItemTags.COALS);
+		getOrCreateTagBuilder(ConventionalItemTags.EMERALDS)
+				.add(Items.EMERALD);
+		getOrCreateTagBuilder(ConventionalItemTags.LAPIS)
+				.add(Items.LAPIS_LAZULI);
+		getOrCreateTagBuilder(ConventionalItemTags.DIAMONDS)
+				.add(Items.DIAMOND);
+	}
+
+	private void generateToolTags() {
+		getOrCreateTagBuilder(ConventionalItemTags.AXES)
+				.addOptionalTag(FABRIC_AXES)
+				.add(Items.DIAMOND_AXE)
+				.add(Items.GOLDEN_AXE)
+				.add(Items.WOODEN_AXE)
+				.add(Items.STONE_AXE)
+				.add(Items.IRON_AXE)
+				.add(Items.NETHERITE_AXE);
+		getOrCreateTagBuilder(ConventionalItemTags.PICKAXES)
+				.addOptionalTag(FABRIC_PICKAXES)
+				.add(Items.DIAMOND_PICKAXE)
+				.add(Items.GOLDEN_PICKAXE)
+				.add(Items.WOODEN_PICKAXE)
+				.add(Items.STONE_PICKAXE)
+				.add(Items.IRON_PICKAXE)
+				.add(Items.NETHERITE_PICKAXE);
+		getOrCreateTagBuilder(ConventionalItemTags.HOES)
+				.addOptionalTag(FABRIC_HOES)
+				.add(Items.DIAMOND_HOE)
+				.add(Items.GOLDEN_HOE)
+				.add(Items.WOODEN_HOE)
+				.add(Items.STONE_HOE)
+				.add(Items.IRON_HOE)
+				.add(Items.NETHERITE_HOE);
+		getOrCreateTagBuilder(ConventionalItemTags.SWORDS)
+				.addOptionalTag(FABRIC_SWORDS)
+				.add(Items.DIAMOND_SWORD)
+				.add(Items.GOLDEN_SWORD)
+				.add(Items.WOODEN_SWORD)
+				.add(Items.STONE_SWORD)
+				.add(Items.IRON_SWORD)
+				.add(Items.NETHERITE_SWORD);
+		getOrCreateTagBuilder(ConventionalItemTags.SHOVELS)
+				.addOptionalTag(FABRIC_SHOVELS)
+				.add(Items.DIAMOND_SHOVEL)
+				.add(Items.GOLDEN_SHOVEL)
+				.add(Items.WOODEN_SHOVEL)
+				.add(Items.STONE_SHOVEL)
+				.add(Items.IRON_SHOVEL)
+				.add(Items.NETHERITE_SHOVEL);
+		getOrCreateTagBuilder(ConventionalItemTags.SHEARS)
+				.addOptionalTag(FABRIC_SHEARS)
+				.add(Items.SHEARS);
+		getOrCreateTagBuilder(ConventionalItemTags.SPEARS)
+				.add(Items.TRIDENT);
+		getOrCreateTagBuilder(ConventionalItemTags.BOWS)
+				.add(Items.CROSSBOW)
+				.add(Items.BOW);
+	}
+
+	private static Identifier createFabricId(String id) {
+		return new Identifier("fabric", id);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/datagen/resources/fabric.mod.json b/fabric-convention-tags-v1/src/datagen/resources/fabric.mod.json
new file mode 100644
index 000000000..613990364
--- /dev/null
+++ b/fabric-convention-tags-v1/src/datagen/resources/fabric.mod.json
@@ -0,0 +1,31 @@
+{
+  "schemaVersion": 1,
+  "id": "fabric-convention-tags-v1-datagen",
+  "name": "Fabric Convention Tags Datagen",
+  "version": "1.0.0",
+  "environment": "*",
+  "license": "Apache-2.0",
+  "icon": "assets/fabric-convention-tags-v1/icon.png",
+  "contact": {
+    "homepage": "https://fabricmc.net",
+    "irc": "irc://irc.esper.net:6667/fabric",
+    "issues": "https://github.com/FabricMC/fabric/issues",
+    "sources": "https://github.com/FabricMC/fabric"
+  },
+  "authors": [
+    "FabricMC"
+  ],
+  "depends": {
+    "fabricloader": ">=0.4.0",
+    "minecraft": ">=1.18.2"
+  },
+  "description": "Contains common tags used by mods for vanilla things.",
+  "custom": {
+    "fabric-api:module-lifecycle": "stable"
+  },
+  "entrypoints": {
+    "fabric-datagen": [
+      "net.fabricmc.fabric.impl.tag.convention.datagen.DatagenEntrypoint"
+    ]
+  }
+}
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/bookshelves.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/bookshelves.json
new file mode 100644
index 000000000..6cdb0ddac
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/bookshelves.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:bookshelf"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/chests.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/chests.json
new file mode 100644
index 000000000..7acec0ecc
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/chests.json
@@ -0,0 +1,8 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:chest",
+    "minecraft:ender_chest",
+    "minecraft:trapped_chest"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_blocks.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_blocks.json
new file mode 100644
index 000000000..7d701ab39
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_blocks.json
@@ -0,0 +1,23 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:glass",
+    "minecraft:gray_stained_glass",
+    "minecraft:black_stained_glass",
+    "minecraft:orange_stained_glass",
+    "minecraft:blue_stained_glass",
+    "minecraft:brown_stained_glass",
+    "minecraft:cyan_stained_glass",
+    "minecraft:green_stained_glass",
+    "minecraft:light_blue_stained_glass",
+    "minecraft:light_gray_stained_glass",
+    "minecraft:lime_stained_glass",
+    "minecraft:magenta_stained_glass",
+    "minecraft:pink_stained_glass",
+    "minecraft:purple_stained_glass",
+    "minecraft:red_stained_glass",
+    "minecraft:tinted_glass",
+    "minecraft:white_stained_glass",
+    "minecraft:yellow_stained_glass"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_panes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_panes.json
new file mode 100644
index 000000000..ced01be24
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/glass_panes.json
@@ -0,0 +1,22 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:glass_pane",
+    "minecraft:gray_stained_glass_pane",
+    "minecraft:black_stained_glass_pane",
+    "minecraft:orange_stained_glass_pane",
+    "minecraft:blue_stained_glass_pane",
+    "minecraft:brown_stained_glass_pane",
+    "minecraft:cyan_stained_glass_pane",
+    "minecraft:green_stained_glass_pane",
+    "minecraft:light_blue_stained_glass_pane",
+    "minecraft:light_gray_stained_glass_pane",
+    "minecraft:lime_stained_glass_pane",
+    "minecraft:magenta_stained_glass_pane",
+    "minecraft:pink_stained_glass_pane",
+    "minecraft:purple_stained_glass_pane",
+    "minecraft:red_stained_glass_pane",
+    "minecraft:white_stained_glass_pane",
+    "minecraft:yellow_stained_glass_pane"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/ores.json
new file mode 100644
index 000000000..ce1eb6df6
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/ores.json
@@ -0,0 +1,41 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:redstone_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:copper_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:gold_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:iron_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:coal_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:emerald_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:lapis_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:diamond_ores",
+      "required": false
+    },
+    {
+      "id": "#c:quartz_ores",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/quartz_ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/quartz_ores.json
new file mode 100644
index 000000000..6c65cff93
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/quartz_ores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:nether_quartz_ore"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/shulker_boxes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/shulker_boxes.json
new file mode 100644
index 000000000..8a9b7c8ed
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/blocks/shulker_boxes.json
@@ -0,0 +1,22 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:shulker_box",
+    "minecraft:blue_shulker_box",
+    "minecraft:brown_shulker_box",
+    "minecraft:cyan_shulker_box",
+    "minecraft:gray_shulker_box",
+    "minecraft:green_shulker_box",
+    "minecraft:light_blue_shulker_box",
+    "minecraft:light_gray_shulker_box",
+    "minecraft:lime_shulker_box",
+    "minecraft:magenta_shulker_box",
+    "minecraft:orange_shulker_box",
+    "minecraft:pink_shulker_box",
+    "minecraft:purple_shulker_box",
+    "minecraft:red_shulker_box",
+    "minecraft:white_shulker_box",
+    "minecraft:yellow_shulker_box",
+    "minecraft:black_shulker_box"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_defense_enhancement.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_defense_enhancement.json
new file mode 100644
index 000000000..b01fdddc4
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_defense_enhancement.json
@@ -0,0 +1,11 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:feather_falling",
+    "minecraft:protection",
+    "minecraft:blast_protection",
+    "minecraft:projectile_protection",
+    "minecraft:fire_protection",
+    "minecraft:respiration"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_movement_enhancement.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_movement_enhancement.json
new file mode 100644
index 000000000..9436a58ae
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/entity_movement_enhancement.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:depth_strider",
+    "minecraft:soul_speed"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/fortune.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/fortune.json
new file mode 100644
index 000000000..ce1c23ebc
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/fortune.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:fortune"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/looting.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/looting.json
new file mode 100644
index 000000000..8ee65b0c3
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/looting.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:looting"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/weapon_damage_enhancement.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/weapon_damage_enhancement.json
new file mode 100644
index 000000000..bdef43ba2
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/enchantment/weapon_damage_enhancement.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:bane_of_arthropods",
+    "minecraft:impaling",
+    "minecraft:smite",
+    "minecraft:power",
+    "minecraft:sharpness"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/boats.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/boats.json
new file mode 100644
index 000000000..3b361e175
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/boats.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:boat",
+    "minecraft:chest_boat"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/bosses.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/bosses.json
new file mode 100644
index 000000000..4b3521261
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/bosses.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:ender_dragon",
+    "minecraft:wither"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/minecarts.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/minecarts.json
new file mode 100644
index 000000000..99af75339
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/entity_types/minecarts.json
@@ -0,0 +1,12 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:minecart",
+    "minecraft:tnt_minecart",
+    "minecraft:chest_minecart",
+    "minecraft:furnace_minecart",
+    "minecraft:command_block_minecart",
+    "minecraft:hopper_minecart",
+    "minecraft:spawner_minecart"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/lava.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/lava.json
new file mode 100644
index 000000000..8d87ec53f
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/lava.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:lava",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/water.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/water.json
new file mode 100644
index 000000000..16f57ce2d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/fluids/water.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:water",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/axes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/axes.json
new file mode 100644
index 000000000..91802a057
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/axes.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:axes",
+      "required": false
+    },
+    "minecraft:diamond_axe",
+    "minecraft:golden_axe",
+    "minecraft:wooden_axe",
+    "minecraft:stone_axe",
+    "minecraft:iron_axe",
+    "minecraft:netherite_axe"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/black_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/black_dyes.json
new file mode 100644
index 000000000..c25071e21
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/black_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:black_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/blue_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/blue_dyes.json
new file mode 100644
index 000000000..e794506ca
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/blue_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:blue_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bows.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bows.json
new file mode 100644
index 000000000..cd7142c56
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bows.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:crossbow",
+    "minecraft:bow"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/brown_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/brown_dyes.json
new file mode 100644
index 000000000..cd6a8fef0
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/brown_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:purple_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/empty.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/empty.json
new file mode 100644
index 000000000..bbbc81a92
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/empty.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:bucket"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/lava.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/lava.json
new file mode 100644
index 000000000..cd86ce99c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/lava.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:lava_bucket"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/milk.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/milk.json
new file mode 100644
index 000000000..a3133b34b
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/milk.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:milk_bucket"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/water.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/water.json
new file mode 100644
index 000000000..3e6a4b210
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/bucket/water.json
@@ -0,0 +1,12 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:axolotl_bucket",
+    "minecraft:cod_bucket",
+    "minecraft:pufferfish_bucket",
+    "minecraft:tropical_fish_bucket",
+    "minecraft:salmon_bucket",
+    "minecraft:tadpole_bucket",
+    "minecraft:water_bucket"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/coal.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/coal.json
new file mode 100644
index 000000000..28404d441
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/coal.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:coals",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/copper_ingots.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/copper_ingots.json
new file mode 100644
index 000000000..4b0daa0db
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/copper_ingots.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:copper_ingot"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/cyan_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/cyan_dyes.json
new file mode 100644
index 000000000..384cb9c64
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/cyan_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:cyan_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/diamonds.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/diamonds.json
new file mode 100644
index 000000000..a0b7317d8
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/diamonds.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:diamond"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/dyes.json
new file mode 100644
index 000000000..d844993b1
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/dyes.json
@@ -0,0 +1,69 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:black_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:blue_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:brown_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:green_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:red_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:white_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:yellow_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:light_gray_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:light_blue_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:lime_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:magenta_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:orange_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:pink_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:cyan_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:gray_dyes",
+      "required": false
+    },
+    {
+      "id": "#c:purple_dyes",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/emeralds.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/emeralds.json
new file mode 100644
index 000000000..838caf0bd
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/emeralds.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:emerald"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/foods.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/foods.json
new file mode 100644
index 000000000..a9bb5716d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/foods.json
@@ -0,0 +1,45 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:apple",
+    "minecraft:mushroom_stew",
+    "minecraft:bread",
+    "minecraft:porkchop",
+    "minecraft:cooked_porkchop",
+    "minecraft:golden_apple",
+    "minecraft:enchanted_golden_apple",
+    "minecraft:cod",
+    "minecraft:salmon",
+    "minecraft:tropical_fish",
+    "minecraft:pufferfish",
+    "minecraft:cooked_cod",
+    "minecraft:cooked_salmon",
+    "minecraft:cookie",
+    "minecraft:melon_slice",
+    "minecraft:dried_kelp",
+    "minecraft:beef",
+    "minecraft:cooked_beef",
+    "minecraft:chicken",
+    "minecraft:cooked_chicken",
+    "minecraft:rotten_flesh",
+    "minecraft:spider_eye",
+    "minecraft:carrot",
+    "minecraft:potato",
+    "minecraft:baked_potato",
+    "minecraft:poisonous_potato",
+    "minecraft:golden_carrot",
+    "minecraft:pumpkin_pie",
+    "minecraft:rabbit",
+    "minecraft:cooked_rabbit",
+    "minecraft:rabbit_stew",
+    "minecraft:mutton",
+    "minecraft:cooked_mutton",
+    "minecraft:chorus_fruit",
+    "minecraft:beetroot",
+    "minecraft:beetroot_soup",
+    "minecraft:suspicious_stew",
+    "minecraft:sweet_berries",
+    "minecraft:glow_berries",
+    "minecraft:honey_bottle"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_blocks.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_blocks.json
new file mode 100644
index 000000000..7d701ab39
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_blocks.json
@@ -0,0 +1,23 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:glass",
+    "minecraft:gray_stained_glass",
+    "minecraft:black_stained_glass",
+    "minecraft:orange_stained_glass",
+    "minecraft:blue_stained_glass",
+    "minecraft:brown_stained_glass",
+    "minecraft:cyan_stained_glass",
+    "minecraft:green_stained_glass",
+    "minecraft:light_blue_stained_glass",
+    "minecraft:light_gray_stained_glass",
+    "minecraft:lime_stained_glass",
+    "minecraft:magenta_stained_glass",
+    "minecraft:pink_stained_glass",
+    "minecraft:purple_stained_glass",
+    "minecraft:red_stained_glass",
+    "minecraft:tinted_glass",
+    "minecraft:white_stained_glass",
+    "minecraft:yellow_stained_glass"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_panes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_panes.json
new file mode 100644
index 000000000..ced01be24
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/glass_panes.json
@@ -0,0 +1,22 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:glass_pane",
+    "minecraft:gray_stained_glass_pane",
+    "minecraft:black_stained_glass_pane",
+    "minecraft:orange_stained_glass_pane",
+    "minecraft:blue_stained_glass_pane",
+    "minecraft:brown_stained_glass_pane",
+    "minecraft:cyan_stained_glass_pane",
+    "minecraft:green_stained_glass_pane",
+    "minecraft:light_blue_stained_glass_pane",
+    "minecraft:light_gray_stained_glass_pane",
+    "minecraft:lime_stained_glass_pane",
+    "minecraft:magenta_stained_glass_pane",
+    "minecraft:pink_stained_glass_pane",
+    "minecraft:purple_stained_glass_pane",
+    "minecraft:red_stained_glass_pane",
+    "minecraft:white_stained_glass_pane",
+    "minecraft:yellow_stained_glass_pane"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gold_ingots.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gold_ingots.json
new file mode 100644
index 000000000..d88f9571a
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gold_ingots.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:gold_ingot"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gray_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gray_dyes.json
new file mode 100644
index 000000000..3b7b4389d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/gray_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:gray_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/green_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/green_dyes.json
new file mode 100644
index 000000000..096286bf2
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/green_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:green_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/hoes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/hoes.json
new file mode 100644
index 000000000..253e2b019
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/hoes.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:hoes",
+      "required": false
+    },
+    "minecraft:diamond_hoe",
+    "minecraft:golden_hoe",
+    "minecraft:wooden_hoe",
+    "minecraft:stone_hoe",
+    "minecraft:iron_hoe",
+    "minecraft:netherite_hoe"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/iron_ingots.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/iron_ingots.json
new file mode 100644
index 000000000..549adc471
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/iron_ingots.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:iron_ingot"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lapis.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lapis.json
new file mode 100644
index 000000000..e46a64722
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lapis.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:lapis_lazuli"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_blue_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_blue_dyes.json
new file mode 100644
index 000000000..f280f4fe7
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_blue_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:light_blue_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_gray_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_gray_dyes.json
new file mode 100644
index 000000000..82c02bce0
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/light_gray_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:light_gray_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lime_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lime_dyes.json
new file mode 100644
index 000000000..415993059
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/lime_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:lime_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/magenta_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/magenta_dyes.json
new file mode 100644
index 000000000..810b6e547
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/magenta_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:magenta_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/netherite_ingots.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/netherite_ingots.json
new file mode 100644
index 000000000..ff3f383d6
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/netherite_ingots.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:netherite_ingot"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/orange_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/orange_dyes.json
new file mode 100644
index 000000000..9939b6169
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/orange_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:orange_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/ores.json
new file mode 100644
index 000000000..53c89d8d2
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/ores.json
@@ -0,0 +1,41 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:iron_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:copper_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:redstone_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:gold_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:coal_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:diamond_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:lapis_ores",
+      "required": false
+    },
+    {
+      "id": "#c:quartz_ores",
+      "required": false
+    },
+    {
+      "id": "#minecraft:emerald_ores",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pickaxes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pickaxes.json
new file mode 100644
index 000000000..6ce8db5fd
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pickaxes.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:pickaxes",
+      "required": false
+    },
+    "minecraft:diamond_pickaxe",
+    "minecraft:golden_pickaxe",
+    "minecraft:wooden_pickaxe",
+    "minecraft:stone_pickaxe",
+    "minecraft:iron_pickaxe",
+    "minecraft:netherite_pickaxe"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pink_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pink_dyes.json
new file mode 100644
index 000000000..c5172b16b
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/pink_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:pink_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/potions.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/potions.json
new file mode 100644
index 000000000..3faa4304d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/potions.json
@@ -0,0 +1,8 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:lingering_potion",
+    "minecraft:splash_potion",
+    "minecraft:potion"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/purple_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/purple_dyes.json
new file mode 100644
index 000000000..cd6a8fef0
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/purple_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:purple_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz.json
new file mode 100644
index 000000000..49ac1fd15
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:quartz"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz_ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz_ores.json
new file mode 100644
index 000000000..6c65cff93
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/quartz_ores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:nether_quartz_ore"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_blocks.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_blocks.json
new file mode 100644
index 000000000..3a578a027
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_blocks.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_copper_block"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_ores.json
new file mode 100644
index 000000000..cb1b852f3
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_copper_ores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_copper"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_blocks.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_blocks.json
new file mode 100644
index 000000000..4ce9cc47d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_blocks.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_gold_block"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_ores.json
new file mode 100644
index 000000000..3ac772464
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_gold_ores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_gold"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_blocks.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_blocks.json
new file mode 100644
index 000000000..14f551c59
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_blocks.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_iron_block"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_ores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_ores.json
new file mode 100644
index 000000000..9c072749c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/raw_iron_ores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:raw_iron"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/red_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/red_dyes.json
new file mode 100644
index 000000000..68b06807f
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/red_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:red_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/redstone_dusts.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/redstone_dusts.json
new file mode 100644
index 000000000..2703f553a
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/redstone_dusts.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:redstone"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shears.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shears.json
new file mode 100644
index 000000000..3f0b173f9
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shears.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:shears",
+      "required": false
+    },
+    "minecraft:shears"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shovels.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shovels.json
new file mode 100644
index 000000000..d4f341457
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shovels.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:shovels",
+      "required": false
+    },
+    "minecraft:diamond_shovel",
+    "minecraft:golden_shovel",
+    "minecraft:wooden_shovel",
+    "minecraft:stone_shovel",
+    "minecraft:iron_shovel",
+    "minecraft:netherite_shovel"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shulker_boxes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shulker_boxes.json
new file mode 100644
index 000000000..8a9b7c8ed
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/shulker_boxes.json
@@ -0,0 +1,22 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:shulker_box",
+    "minecraft:blue_shulker_box",
+    "minecraft:brown_shulker_box",
+    "minecraft:cyan_shulker_box",
+    "minecraft:gray_shulker_box",
+    "minecraft:green_shulker_box",
+    "minecraft:light_blue_shulker_box",
+    "minecraft:light_gray_shulker_box",
+    "minecraft:lime_shulker_box",
+    "minecraft:magenta_shulker_box",
+    "minecraft:orange_shulker_box",
+    "minecraft:pink_shulker_box",
+    "minecraft:purple_shulker_box",
+    "minecraft:red_shulker_box",
+    "minecraft:white_shulker_box",
+    "minecraft:yellow_shulker_box",
+    "minecraft:black_shulker_box"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/spears.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/spears.json
new file mode 100644
index 000000000..939ae4541
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/spears.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:trident"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/swords.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/swords.json
new file mode 100644
index 000000000..a4e474652
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/swords.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#fabric:swords",
+      "required": false
+    },
+    "minecraft:diamond_sword",
+    "minecraft:golden_sword",
+    "minecraft:wooden_sword",
+    "minecraft:stone_sword",
+    "minecraft:iron_sword",
+    "minecraft:netherite_sword"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/white_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/white_dyes.json
new file mode 100644
index 000000000..1b92baa6a
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/white_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:white_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/yellow_dyes.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/yellow_dyes.json
new file mode 100644
index 000000000..343377909
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/items/yellow_dyes.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:yellow_dye"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/aquatic.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/aquatic.json
new file mode 100644
index 000000000..6429b2420
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/aquatic.json
@@ -0,0 +1,13 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:ocean",
+      "required": false
+    },
+    {
+      "id": "#c:river",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/badlands.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/badlands.json
new file mode 100644
index 000000000..3baae9ae6
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/badlands.json
@@ -0,0 +1,13 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:mesa",
+      "required": false
+    },
+    {
+      "id": "#minecraft:is_badlands",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/beach.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/beach.json
new file mode 100644
index 000000000..93913ce22
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/beach.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_beach",
+      "required": false
+    },
+    "minecraft:stony_shore"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/caves.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/caves.json
new file mode 100644
index 000000000..b6b3eb1cb
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/caves.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:dripstone_caves",
+    "minecraft:lush_caves"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_cold.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_cold.json
new file mode 100644
index 000000000..e13c0447d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_cold.json
@@ -0,0 +1,11 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:grove",
+    "minecraft:jagged_peaks",
+    {
+      "id": "#c:icy",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_dry.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_dry.json
new file mode 100644
index 000000000..3e3b2d093
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_dry.json
@@ -0,0 +1,21 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:in_nether",
+      "required": false
+    },
+    {
+      "id": "#c:badlands",
+      "required": false
+    },
+    {
+      "id": "#c:desert",
+      "required": false
+    },
+    {
+      "id": "#c:savanna",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_hot.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_hot.json
new file mode 100644
index 000000000..330e29947
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_hot.json
@@ -0,0 +1,30 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:jungle",
+      "required": false
+    },
+    {
+      "id": "#c:savanna",
+      "required": false
+    },
+    {
+      "id": "#c:desert",
+      "required": false
+    },
+    {
+      "id": "#c:badlands",
+      "required": false
+    },
+    "minecraft:stony_peaks",
+    {
+      "id": "#c:mushroom",
+      "required": false
+    },
+    {
+      "id": "#c:in_nether",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_temperate.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_temperate.json
new file mode 100644
index 000000000..683c6799c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_temperate.json
@@ -0,0 +1,15 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:forest",
+    "minecraft:sunflower_plains",
+    "minecraft:swamp",
+    "minecraft:stony_shore",
+    "minecraft:dark_forest",
+    "minecraft:windswept_forest",
+    "minecraft:birch_forest",
+    "minecraft:old_growth_birch_forest",
+    "minecraft:meadow",
+    "minecraft:plains"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_wet.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_wet.json
new file mode 100644
index 000000000..78d379c86
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/climate_wet.json
@@ -0,0 +1,18 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:aquatic",
+      "required": false
+    },
+    {
+      "id": "#c:swamp",
+      "required": false
+    },
+    "minecraft:lush_caves",
+    {
+      "id": "#c:jungle",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/dead.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/dead.json
new file mode 100644
index 000000000..5e8aecc98
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/dead.json
@@ -0,0 +1,4 @@
+{
+  "replace": false,
+  "values": []
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/deep_ocean.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/deep_ocean.json
new file mode 100644
index 000000000..7fb9f956d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/deep_ocean.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:deep_frozen_ocean",
+    "minecraft:deep_lukewarm_ocean",
+    "minecraft:deep_cold_ocean",
+    "minecraft:deep_ocean"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/desert.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/desert.json
new file mode 100644
index 000000000..ff757c036
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/desert.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:desert"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/end_islands.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/end_islands.json
new file mode 100644
index 000000000..5e8aecc98
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/end_islands.json
@@ -0,0 +1,4 @@
+{
+  "replace": false,
+  "values": []
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/extreme_hills.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/extreme_hills.json
new file mode 100644
index 000000000..834dcb1cc
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/extreme_hills.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:windswept_gravelly_hills",
+    "minecraft:windswept_hills"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/floral.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/floral.json
new file mode 100644
index 000000000..50a7116e3
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/floral.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:sunflower_plains",
+    "minecraft:flower_forest"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/flower_forests.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/flower_forests.json
new file mode 100644
index 000000000..4a69c610d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/flower_forests.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:flower_forest"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/forest.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/forest.json
new file mode 100644
index 000000000..21192434b
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/forest.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_forest",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/icy.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/icy.json
new file mode 100644
index 000000000..ac7973edf
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/icy.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:frozen_river",
+    "minecraft:frozen_peaks",
+    "minecraft:deep_frozen_ocean",
+    "minecraft:ice_spikes",
+    "minecraft:frozen_ocean"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_nether.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_nether.json
new file mode 100644
index 000000000..5fedecf58
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_nether.json
@@ -0,0 +1,14 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_nether",
+      "required": false
+    },
+    "minecraft:crimson_forest",
+    "minecraft:warped_forest",
+    "minecraft:nether_wastes",
+    "minecraft:soul_sand_valley",
+    "minecraft:basalt_deltas"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_overworld.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_overworld.json
new file mode 100644
index 000000000..cadc92434
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_overworld.json
@@ -0,0 +1,55 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:river",
+    "minecraft:frozen_river",
+    "minecraft:cold_ocean",
+    "minecraft:deep_cold_ocean",
+    "minecraft:deep_frozen_ocean",
+    "minecraft:deep_ocean",
+    "minecraft:deep_lukewarm_ocean",
+    "minecraft:warm_ocean",
+    "minecraft:lukewarm_ocean",
+    "minecraft:frozen_ocean",
+    "minecraft:ocean",
+    "minecraft:beach",
+    "minecraft:plains",
+    "minecraft:sunflower_plains",
+    "minecraft:snowy_plains",
+    "minecraft:ice_spikes",
+    "minecraft:desert",
+    "minecraft:forest",
+    "minecraft:flower_forest",
+    "minecraft:birch_forest",
+    "minecraft:dark_forest",
+    "minecraft:old_growth_birch_forest",
+    "minecraft:old_growth_pine_taiga",
+    "minecraft:old_growth_spruce_taiga",
+    "minecraft:taiga",
+    "minecraft:snowy_taiga",
+    "minecraft:savanna",
+    "minecraft:savanna_plateau",
+    "minecraft:windswept_hills",
+    "minecraft:windswept_gravelly_hills",
+    "minecraft:windswept_forest",
+    "minecraft:windswept_savanna",
+    "minecraft:jungle",
+    "minecraft:sparse_jungle",
+    "minecraft:bamboo_jungle",
+    "minecraft:badlands",
+    "minecraft:eroded_badlands",
+    "minecraft:wooded_badlands",
+    "minecraft:meadow",
+    "minecraft:grove",
+    "minecraft:snowy_slopes",
+    "minecraft:frozen_peaks",
+    "minecraft:jagged_peaks",
+    "minecraft:stony_peaks",
+    "minecraft:mushroom_fields",
+    "minecraft:dripstone_caves",
+    "minecraft:lush_caves",
+    "minecraft:snowy_beach",
+    "minecraft:swamp",
+    "minecraft:stony_shore"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_the_end.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_the_end.json
new file mode 100644
index 000000000..c7a5795ac
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/in_the_end.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:end_barrens",
+    "minecraft:end_midlands",
+    "minecraft:end_highlands",
+    "minecraft:the_end",
+    "minecraft:small_end_islands"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/jungle.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/jungle.json
new file mode 100644
index 000000000..a01171ae7
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/jungle.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_jungle",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mesa.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mesa.json
new file mode 100644
index 000000000..5ba66b228
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mesa.json
@@ -0,0 +1,8 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:wooded_badlands",
+    "minecraft:eroded_badlands",
+    "minecraft:badlands"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain.json
new file mode 100644
index 000000000..0645b033c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_mountain",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_peak.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_peak.json
new file mode 100644
index 000000000..2efc274e5
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_peak.json
@@ -0,0 +1,8 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:frozen_peaks",
+    "minecraft:jagged_peaks",
+    "minecraft:stony_peaks"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_slope.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_slope.json
new file mode 100644
index 000000000..82d188485
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mountain_slope.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:snowy_slopes"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mushroom.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mushroom.json
new file mode 100644
index 000000000..f97ef2644
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/mushroom.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:mushroom_fields"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/nether_forests.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/nether_forests.json
new file mode 100644
index 000000000..f78109de5
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/nether_forests.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:warped_forest",
+    "minecraft:crimson_forest"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/ocean.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/ocean.json
new file mode 100644
index 000000000..6858a9a7d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/ocean.json
@@ -0,0 +1,17 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:deep_ocean",
+      "required": false
+    },
+    {
+      "id": "#c:shallow_ocean",
+      "required": false
+    },
+    {
+      "id": "#minecraft:is_ocean",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/plains.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/plains.json
new file mode 100644
index 000000000..ce7fb70b5
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/plains.json
@@ -0,0 +1,7 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:sunflower_plains",
+    "minecraft:plains"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/river.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/river.json
new file mode 100644
index 000000000..c84bf06c4
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/river.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_river",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/savanna.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/savanna.json
new file mode 100644
index 000000000..992fb37dd
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/savanna.json
@@ -0,0 +1,8 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:savanna_plateau",
+    "minecraft:windswept_savanna",
+    "minecraft:savanna"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/shallow_ocean.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/shallow_ocean.json
new file mode 100644
index 000000000..03e9c44ee
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/shallow_ocean.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:ocean",
+    "minecraft:lukewarm_ocean",
+    "minecraft:frozen_ocean",
+    "minecraft:cold_ocean",
+    "minecraft:warm_ocean"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy.json
new file mode 100644
index 000000000..1df88f66c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:snowy_beach",
+    "minecraft:snowy_plains",
+    "minecraft:snowy_slopes",
+    "minecraft:snowy_taiga"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy_plains.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy_plains.json
new file mode 100644
index 000000000..54db173ca
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/snowy_plains.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:snowy_plains"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/stony_shores.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/stony_shores.json
new file mode 100644
index 000000000..f8b581ef7
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/stony_shores.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:stony_shore"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/swamp.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/swamp.json
new file mode 100644
index 000000000..cbcd00774
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/swamp.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:swamp"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/taiga.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/taiga.json
new file mode 100644
index 000000000..69cce78a6
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/taiga.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#minecraft:is_taiga",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_coniferous.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_coniferous.json
new file mode 100644
index 000000000..5beaf6f7d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_coniferous.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:grove",
+    {
+      "id": "#c:taiga",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_deciduous.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_deciduous.json
new file mode 100644
index 000000000..10acad281
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_deciduous.json
@@ -0,0 +1,11 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:forest",
+    "minecraft:windswept_forest",
+    "minecraft:flower_forest",
+    "minecraft:birch_forest",
+    "minecraft:dark_forest",
+    "minecraft:old_growth_birch_forest"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_jungle.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_jungle.json
new file mode 100644
index 000000000..f47b75d1a
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_jungle.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:jungle",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_savanna.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_savanna.json
new file mode 100644
index 000000000..3639d53cb
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/tree_savanna.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:savanna",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/underground.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/underground.json
new file mode 100644
index 000000000..48a0275e9
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/underground.json
@@ -0,0 +1,9 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:caves",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_dense.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_dense.json
new file mode 100644
index 000000000..8349d82c2
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_dense.json
@@ -0,0 +1,10 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:jungle",
+      "required": false
+    },
+    "minecraft:sunflower_plains"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_sparse.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_sparse.json
new file mode 100644
index 000000000..19aa4173d
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/vegetation_sparse.json
@@ -0,0 +1,22 @@
+{
+  "replace": false,
+  "values": [
+    {
+      "id": "#c:savanna",
+      "required": false
+    },
+    {
+      "id": "#c:desert",
+      "required": false
+    },
+    {
+      "id": "#c:dead",
+      "required": false
+    },
+    "minecraft:lush_caves",
+    {
+      "id": "#c:wasteland",
+      "required": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/void.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/void.json
new file mode 100644
index 000000000..76ee21125
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/void.json
@@ -0,0 +1,6 @@
+{
+  "replace": false,
+  "values": [
+    "minecraft:the_void"
+  ]
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/wasteland.json b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/wasteland.json
new file mode 100644
index 000000000..5e8aecc98
--- /dev/null
+++ b/fabric-convention-tags-v1/src/generated/resources/data/c/tags/worldgen/biome/wasteland.json
@@ -0,0 +1,4 @@
+{
+  "replace": false,
+  "values": []
+}
\ No newline at end of file
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBiomeTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBiomeTags.java
new file mode 100644
index 000000000..4b3e37d78
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBiomeTags.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.tag.TagKey;
+import net.minecraft.world.biome.Biome;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+/**
+ * See {@link net.minecraft.tag.BiomeTags} for vanilla tags.
+ * Note that addition to some vanilla tags implies having certain functionality,
+ * and as such certain biome tags exist to mirror vanilla tags, and should be preferred
+ * over vanilla unless its behavior is desired.
+ */
+public class ConventionalBiomeTags {
+	/**
+	 * Biomes that spawn in the Overworld.
+	 */
+	public static final TagKey<Biome> IN_OVERWORLD = register("in_overworld");
+	// The following are based on Biome categories, see Biome$Category for details
+	/**
+	 * Biomes that spawn in the End.
+	 */
+	public static final TagKey<Biome> IN_THE_END = register("in_the_end");
+	/**
+	 * Biomes that spawn in the Nether.
+	 */
+	public static final TagKey<Biome> IN_NETHER = register("in_nether");
+	public static final TagKey<Biome> TAIGA = register("taiga");
+	public static final TagKey<Biome> EXTREME_HILLS = register("extreme_hills");
+	public static final TagKey<Biome> JUNGLE = register("jungle");
+	public static final TagKey<Biome> MESA = register("mesa");
+	/**
+	 * For temperate or warmer plains-like biomes.
+	 * For snowy plains-like biomes, see {@link ConventionalBiomeTags#SNOWY_PLAINS}.
+	 */
+	public static final TagKey<Biome> PLAINS = register("plains");
+	public static final TagKey<Biome> SAVANNA = register("savanna");
+	/**
+	 * For biomes where ice naturally spawns.
+	 * For biomes where snow alone spawns, see {@link ConventionalBiomeTags#SNOWY}.
+	 */
+	public static final TagKey<Biome> ICY = register("icy");
+	/**
+	 * Biomes that exist on the shoreline of a body of water.
+	 */
+	public static final TagKey<Biome> BEACH = register("beach");
+	/**
+	 * Biomes densely populated with deciduous trees.
+	 */
+	public static final TagKey<Biome> FOREST = register("forest");
+	public static final TagKey<Biome> OCEAN = register("ocean");
+	public static final TagKey<Biome> DESERT = register("desert");
+	public static final TagKey<Biome> RIVER = register("river");
+	public static final TagKey<Biome> SWAMP = register("swamp");
+	public static final TagKey<Biome> MUSHROOM = register("mushroom");
+	public static final TagKey<Biome> UNDERGROUND = register("underground");
+	public static final TagKey<Biome> MOUNTAIN = register("mountain");
+
+	public static final TagKey<Biome> CLIMATE_HOT = register("climate_hot");
+	public static final TagKey<Biome> CLIMATE_TEMPERATE = register("climate_temperate");
+	public static final TagKey<Biome> CLIMATE_COLD = register("climate_cold");
+	public static final TagKey<Biome> CLIMATE_WET = register("climate_wet");
+	public static final TagKey<Biome> CLIMATE_DRY = register("climate_dry");
+	public static final TagKey<Biome> VEGETATION_SPARSE = register("vegetation_sparse");
+	public static final TagKey<Biome> VEGETATION_DENSE = register("vegetation_dense");
+	public static final TagKey<Biome> TREE_CONIFEROUS = register("tree_coniferous");
+	public static final TagKey<Biome> TREE_SAVANNA = register("tree_savanna");
+	public static final TagKey<Biome> TREE_JUNGLE = register("tree_jungle");
+	public static final TagKey<Biome> TREE_DECIDUOUS = register("tree_deciduous");
+	public static final TagKey<Biome> VOID = register("void");
+	public static final TagKey<Biome> MOUNTAIN_PEAK = register("mountain_peak");
+	public static final TagKey<Biome> MOUNTAIN_SLOPE = register("mountain_slope");
+	/**
+	 * Biomes consisting primarily of water.
+	 */
+	public static final TagKey<Biome> AQUATIC = register("aquatic");
+	/**
+	 * Barren biomes that lack vegetation.
+	 */
+	public static final TagKey<Biome> WASTELAND = register("wasteland");
+	/**
+	 * Biomes whose flora primarily consists of dead or decaying vegetation.
+	 */
+	public static final TagKey<Biome> DEAD = register("dead");
+	/**
+	 * Biomes with a large amount of flowers.
+	 */
+	public static final TagKey<Biome> FLORAL = register("floral");
+	/**
+	 * For biomes where snow, and not ice, naturally spawns as an predominant feature.
+	 * For biomes where ice is a predominant feature, see {@link ConventionalBiomeTags#ICY}.
+	 */
+	public static final TagKey<Biome> SNOWY = register("snowy");
+
+	public static final TagKey<Biome> BADLANDS = register("badlands");
+	public static final TagKey<Biome> CAVES = register("caves");
+	/**
+	 * Biomes that spawn as or on islands in the End.
+	 */
+	public static final TagKey<Biome> END_ISLANDS = register("end_islands");
+	public static final TagKey<Biome> NETHER_FORESTS = register("nether_forests");
+	/**
+	 * For snowy plains-like biomes.
+	 * For warmer plains-like biomes, see {@link ConventionalBiomeTags#PLAINS}.
+	 */
+	public static final TagKey<Biome> SNOWY_PLAINS = register("snowy_plains");
+	public static final TagKey<Biome> STONY_SHORES = register("stony_shores");
+	public static final TagKey<Biome> FLOWER_FORESTS = register("flower_forests");
+	public static final TagKey<Biome> DEEP_OCEAN = register("deep_ocean");
+	public static final TagKey<Biome> SHALLOW_OCEAN = register("shallow_ocean");
+
+	private static TagKey<Biome> register(String tagID) {
+		return TagRegistration.BIOME_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBlockTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBlockTags.java
new file mode 100644
index 000000000..747698585
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalBlockTags.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.Block;
+import net.minecraft.tag.TagKey;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+/**
+ * See {@link net.minecraft.tag.BlockTags} for vanilla tags.
+ * Note that addition to some vanilla tags implies having certain functionality.
+ */
+public class ConventionalBlockTags {
+	public static final TagKey<Block> QUARTZ_ORES = register("quartz_ores");
+	public static final TagKey<Block> ORES = register("ores");
+	public static final TagKey<Block> CHESTS = register("chests");
+	public static final TagKey<Block> BOOKSHELVES = register("bookshelves");
+	public static final TagKey<Block> GLASS_BLOCKS = register("glass_blocks");
+	public static final TagKey<Block> GLASS_PANES = register("glass_panes");
+	public static final TagKey<Block> SHULKER_BOXES = register("shulker_boxes");
+	/**
+	 * Blocks should be included in this tag if their movement can cause serious issues such as world corruption
+	 * upon being moved, such as chunk loaders or pipes,
+	 * for mods that move blocks but do not respect {@link AbstractBlock.AbstractBlockState#getPistonBehavior}.
+	 */
+	public static final TagKey<Block> MOVEMENT_RESTRICTED = register("movement_restricted");
+
+	private static TagKey<Block> register(String tagID) {
+		return TagRegistration.BLOCK_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEnchantmentTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEnchantmentTags.java
new file mode 100644
index 000000000..3361e461c
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEnchantmentTags.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.tag.TagKey;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+public class ConventionalEnchantmentTags {
+	/**
+	 * A tag containing enchantments that increase the amount or
+	 * quality of drops from blocks, such as {@link net.minecraft.enchantment.Enchantments#FORTUNE}.
+	 */
+	public static final TagKey<Enchantment> INCREASES_BLOCK_DROPS = register("fortune");
+	/**
+	 * A tag containing enchantments that increase the amount or
+	 * quality of drops from entities, such as {@link net.minecraft.enchantment.Enchantments#LOOTING}.
+	 */
+	public static final TagKey<Enchantment> INCREASES_ENTITY_DROPS = register("looting");
+	/**
+	 * For enchantments that increase the damage dealt by an item.
+	 */
+	public static final TagKey<Enchantment> WEAPON_DAMAGE_ENHANCEMENT = register("weapon_damage_enhancement");
+	/**
+	 * For enchantments that increase movement speed or otherwise benefit the entity wearing armor enchanted with it.
+	 */
+	public static final TagKey<Enchantment> ENTITY_MOVEMENT_ENHANCEMENT = register("entity_movement_enhancement");
+	/**
+	 * For enchantments that decrease damage taken or otherwise benefit, in regards to damage, the entity wearing armor enchanted with it.
+	 */
+	public static final TagKey<Enchantment> ENTITY_DEFENSE_ENHANCEMENT = register("entity_defense_enhancement");
+
+	private static TagKey<Enchantment> register(String tagID) {
+		return TagRegistration.ENCHANTMENT_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEntityTypeTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEntityTypeTags.java
new file mode 100644
index 000000000..918c6ade7
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalEntityTypeTags.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.entity.EntityType;
+import net.minecraft.tag.TagKey;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+/**
+ * See {@link net.minecraft.tag.EntityTypeTags} for vanilla tags.
+ * Note that addition to some vanilla tags implies having certain functionality.
+ */
+public class ConventionalEntityTypeTags {
+	/**
+	 * Tag containing entity types that display a boss health bar.
+	 */
+	public static final TagKey<EntityType<?>> BOSSES = register("bosses");
+	public static final TagKey<EntityType<?>> MINECARTS = register("minecarts");
+	public static final TagKey<EntityType<?>> BOATS = register("boats");
+
+	private static TagKey<EntityType<?>> register(String tagID) {
+		return TagRegistration.ENTITY_TYPE_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalFluidTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalFluidTags.java
new file mode 100644
index 000000000..54b61ddfe
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalFluidTags.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.fluid.Fluid;
+import net.minecraft.tag.TagKey;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+/**
+ * See {@link net.minecraft.tag.FluidTags} for vanilla tags.
+ * Note that addition to some vanilla tags implies having certain functionality.
+ */
+public class ConventionalFluidTags {
+	public static final TagKey<Fluid> LAVA = register("lava");
+	public static final TagKey<Fluid> WATER = register("water");
+	public static final TagKey<Fluid> MILK = register("milk");
+	public static final TagKey<Fluid> HONEY = register("honey");
+
+	private static TagKey<Fluid> register(String tagID) {
+		return TagRegistration.FLUID_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalItemTags.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalItemTags.java
new file mode 100644
index 000000000..06b6484e4
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/api/tag/convention/v1/ConventionalItemTags.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.api.tag.convention.v1;
+
+import net.minecraft.item.Item;
+import net.minecraft.tag.TagKey;
+
+import net.fabricmc.fabric.impl.tag.convention.TagRegistration;
+
+/**
+ * See {@link net.minecraft.tag.ItemTags} for vanilla tags.
+ * Note that addition to some vanilla tags implies having certain functionality.
+ */
+public class ConventionalItemTags {
+	// Tool tags
+	public static final TagKey<Item> PICKAXES = register("pickaxes");
+	public static final TagKey<Item> SHOVELS = register("shovels");
+	public static final TagKey<Item> HOES = register("hoes");
+	public static final TagKey<Item> AXES = register("axes");
+	public static final TagKey<Item> SHEARS = register("shears");
+	/**
+	 * For throwable weapons, like Minecraft tridents.
+	 */
+	public static final TagKey<Item> SPEARS = register("spears");
+	public static final TagKey<Item> SWORDS = register("swords");
+	public static final TagKey<Item> BOWS = register("bows");
+	// Ores and ingots
+	public static final TagKey<Item> IRON_INGOTS = register("iron_ingots");
+	public static final TagKey<Item> RAW_IRON_ORES = register("raw_iron_ores");
+	public static final TagKey<Item> RAW_IRON_BLOCKS = register("raw_iron_blocks");
+	public static final TagKey<Item> RAW_GOLD_ORES = register("raw_gold_ores");
+	public static final TagKey<Item> RAW_GOLD_BLOCKS = register("raw_gold_blocks");
+	public static final TagKey<Item> GOLD_INGOTS = register("gold_ingots");
+	public static final TagKey<Item> REDSTONE_DUSTS = register("redstone_dusts");
+	public static final TagKey<Item> COPPER_INGOTS = register("copper_ingots");
+	public static final TagKey<Item> RAW_COPPER_ORES = register("raw_copper_ores");
+	public static final TagKey<Item> RAW_COPPER_BLOCKS = register("raw_copper_blocks");
+	public static final TagKey<Item> ORES = register("ores");
+	public static final TagKey<Item> NETHERITE_INGOTS = register("netherite_ingots");
+	public static final TagKey<Item> QUARTZ_ORES = register("quartz_ores");
+	public static final TagKey<Item> QUARTZ = register("quartz");
+	public static final TagKey<Item> LAPIS = register("lapis");
+	public static final TagKey<Item> DIAMONDS = register("diamonds");
+	public static final TagKey<Item> EMERALDS = register("emeralds");
+	public static final TagKey<Item> COAL = register("coal");
+	// Consumables
+	public static final TagKey<Item> FOODS = register("foods");
+	public static final TagKey<Item> POTIONS = register("potions");
+	// Buckets
+	public static final TagKey<Item> WATER_BUCKET = register("bucket/water");
+	public static final TagKey<Item> LAVA_BUCKET = register("bucket/lava");
+	public static final TagKey<Item> MILK_BUCKET = register("bucket/milk");
+	public static final TagKey<Item> EMPTY_BUCKET = register("bucket/empty");
+
+	public static final TagKey<Item> GLASS_BLOCKS = register("glass_blocks");
+	public static final TagKey<Item> GLASS_PANES = register("glass_panes");
+
+	public static final TagKey<Item> SHULKER_BOXES = register("shulker_boxes");
+
+	// Dyes
+	public static final TagKey<Item> DYES = register("dyes");
+	public static final TagKey<Item> BLACK_DYES = register("black_dyes");
+	public static final TagKey<Item> BLUE_DYES = register("blue_dyes");
+	public static final TagKey<Item> BROWN_DYES = register("brown_dyes");
+	public static final TagKey<Item> CYAN_DYES = register("cyan_dyes");
+	public static final TagKey<Item> GRAY_DYES = register("gray_dyes");
+	public static final TagKey<Item> GREEN_DYES = register("green_dyes");
+	public static final TagKey<Item> LIGHT_BLUE_DYES = register("light_blue_dyes");
+	public static final TagKey<Item> LIGHT_GRAY_DYES = register("light_gray_dyes");
+	public static final TagKey<Item> LIME_DYES = register("lime_dyes");
+	public static final TagKey<Item> MAGENTA_DYES = register("magenta_dyes");
+	public static final TagKey<Item> ORANGE_DYES = register("orange_dyes");
+	public static final TagKey<Item> PINK_DYES = register("pink_dyes");
+	public static final TagKey<Item> PURPLE_DYES = register("purple_dyes");
+	public static final TagKey<Item> RED_DYES = register("red_dyes");
+	public static final TagKey<Item> WHITE_DYES = register("white_dyes");
+	public static final TagKey<Item> YELLOW_DYES = register("yellow_dyes");
+
+	private static TagKey<Item> register(String tagID) {
+		return TagRegistration.ITEM_TAG_REGISTRATION.registerCommon(tagID);
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/impl/tag/convention/TagRegistration.java b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/impl/tag/convention/TagRegistration.java
new file mode 100644
index 000000000..cbe719f83
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/java/net/fabricmc/fabric/impl/tag/convention/TagRegistration.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.impl.tag.convention;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.EntityType;
+import net.minecraft.fluid.Fluid;
+import net.minecraft.item.Item;
+import net.minecraft.tag.TagKey;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+import net.minecraft.util.registry.RegistryKey;
+import net.minecraft.world.biome.Biome;
+
+public class TagRegistration<T> {
+	public static final TagRegistration<Item> ITEM_TAG_REGISTRATION = new TagRegistration<>(Registry.ITEM_KEY);
+	public static final TagRegistration<Block> BLOCK_TAG_REGISTRATION = new TagRegistration<>(Registry.BLOCK_KEY);
+	public static final TagRegistration<Biome> BIOME_TAG_REGISTRATION = new TagRegistration<>(Registry.BIOME_KEY);
+	public static final TagRegistration<Fluid> FLUID_TAG_REGISTRATION = new TagRegistration<>(Registry.FLUID_KEY);
+	public static final TagRegistration<EntityType<?>> ENTITY_TYPE_TAG_REGISTRATION = new TagRegistration<>(Registry.ENTITY_TYPE_KEY);
+	public static final TagRegistration<Enchantment> ENCHANTMENT_TAG_REGISTRATION = new TagRegistration<>(Registry.ENCHANTMENT_KEY);
+	private final RegistryKey<Registry<T>> registryKey;
+
+	private TagRegistration(RegistryKey<Registry<T>> registry) {
+		registryKey = registry;
+	}
+
+	public TagKey<T> registerFabric(String tagId) {
+		return TagKey.of(registryKey, new Identifier("fabric", tagId));
+	}
+
+	public TagKey<T> registerCommon(String tagId) {
+		return TagKey.of(registryKey, new Identifier("c", tagId));
+	}
+}
diff --git a/fabric-convention-tags-v1/src/main/resources/assets/fabric-convention-tags-v1/icon.png b/fabric-convention-tags-v1/src/main/resources/assets/fabric-convention-tags-v1/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..2931efbf610873c0084debb8690902b0103d27fe
GIT binary patch
literal 1579
zcmbVMTWB0r7@iGm)TAXsYw<=rnU=;v=W=GRbL=!tc4Brl6GO7t2vVJ$IlDV#XU;e?
z+r2ymsZdMQqAyaFLLUo;RumtE8Z@?uf_*4nP^4;o6fOFoSkN<j8Kcx&2hN<!|DEr@
zod5ryo}Zi9I&|j{!!TP5d3Ax#ARIRj(!bws|3s%--25Xx!whc=M~pe~^6d;0zuPJ<
z1xwm2GKkIVCMjXQX}c87F#9H&u5K*j0F-dWauoLax87!fWh(5!lqPC!4p*&w+rx|P
zxuVftHe{2X*bnwK5hbv3po6Aeb9~fP*bXnE>+o1$K?f2nE9_*b5G-l)AV)k5Qhb^-
zU{V4ZnTKgnmXdpcB*Kg!W(1hvM2N&RO30x1u~eI9meGQGe@_?PDQq<eTqFpMMuTr8
zc;ZzAD9f@SN`fSD6v6o|C(xUm<L~S<sMt3=%MC2zfRIryk$Rx8)Y7gCwj0qpelJWk
zU_w)O1;~q`OC6wTL^!wZ)jG;eL%=m`V<+$_7DiaNN&@0n$=^^%;y)>%q1CiV$8~M7
z?MQ_mOdqCh^a65Sv|ntwSXjV5se1;VK1|Kr8G7TQoQL&*ctt{L{fC<Gn+$Tf@L{sx
z-h-B7l7_!$(;ckp0an;h&OwQT=^{*{R1(1qCuWf-cA*+Et#T`Z%AA<tq-;@w6o-;o
zy8Q!6v&Pf|{a?YRfy%_Qb?UQa>lG}xPK5<gBvFpkh({Gu>k^yK3%T69N6J=>3jBqc
zDNvZsrJ<Zoa}p0b=4u)$IDViz1}>-yOXI^^mWf1cmY^XST)CVzIGjvEPENowmy}ax
zvJ8_(Cf#+H-dBlH53`_u-~6BVAMz|(g?jCVdBWNZ(+A}(pFV7>S3QgPiQcMaflkIC
z-3Ti|VT~{au*vq0ts9O&m$p&Gl=L6+q6_m$IcVq}o~+Pl{g>1esQp4%wp~|*zk1n`
zZ7T6Toc4`y88s}riCP|ZXrJ?FLz@^KTcyqLje<H^TzdE0PhK5b5x2)LE6;s)`N3ZX
z2Cv?+vFqVy1|k2_cl$rw7=Ck$@N2wL$?9VEp7Gi35A3;$)g3FR_g;G8x7eAVQRC>y
zu95Yz%F&S{<0~f)Iomek?+hQ%MhCu%T^zsg>C_L`1`Br`xNY&))k9yTQb$JC>)w_f
zpU<A$%?N8BFlS$R^rq&-d+#&n&pq`bxOC;qliz$4TRVRI>(^tu^Q)y%W~lVz`jz;_
jF?g&s@Y=Qe&c#kW|JbvqK0Y=Rw)4XDoVqsk_>;c_`@;F@

literal 0
HcmV?d00001

diff --git a/fabric-convention-tags-v1/src/main/resources/fabric.mod.json b/fabric-convention-tags-v1/src/main/resources/fabric.mod.json
new file mode 100644
index 000000000..9fd425d38
--- /dev/null
+++ b/fabric-convention-tags-v1/src/main/resources/fabric.mod.json
@@ -0,0 +1,26 @@
+{
+  "schemaVersion": 1,
+  "id": "fabric-convention-tags-v1",
+  "name": "Fabric Convention Tags",
+  "version": "${version}",
+  "environment": "*",
+  "license": "Apache-2.0",
+  "icon": "assets/fabric-convention-tags-v1/icon.png",
+  "contact": {
+    "homepage": "https://fabricmc.net",
+    "irc": "irc://irc.esper.net:6667/fabric",
+    "issues": "https://github.com/FabricMC/fabric/issues",
+    "sources": "https://github.com/FabricMC/fabric"
+  },
+  "authors": [
+    "FabricMC"
+  ],
+  "depends": {
+    "fabricloader": ">=0.4.0",
+    "minecraft": ">=1.18.2"
+  },
+  "description": "Contains common tags used by mods for vanilla things.",
+  "custom": {
+    "fabric-api:module-lifecycle": "stable"
+  }
+}
diff --git a/fabric-data-generation-api-v1/build.gradle b/fabric-data-generation-api-v1/build.gradle
index 2b7365277..bd8c54409 100644
--- a/fabric-data-generation-api-v1/build.gradle
+++ b/fabric-data-generation-api-v1/build.gradle
@@ -110,3 +110,5 @@ ClassNode getClassNode(File input, String className) {
 		}
 	}
 }
+
+generateResources.dependsOn generateAccessWidener
diff --git a/fabric-transitive-access-wideners-v1/build.gradle b/fabric-transitive-access-wideners-v1/build.gradle
index 585443e00..36483de31 100644
--- a/fabric-transitive-access-wideners-v1/build.gradle
+++ b/fabric-transitive-access-wideners-v1/build.gradle
@@ -64,3 +64,5 @@ ClassNode loadClass(Path path) {
 
 	return node
 }
+
+generateResources.dependsOn generateAccessWidener
diff --git a/gradle.properties b/gradle.properties
index d81fe3ab1..0bfb486ec 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -51,3 +51,4 @@ fabric-screen-handler-api-v1-version=1.2.0
 fabric-textures-v0-version=1.0.12
 fabric-transfer-api-v1-version=1.6.0
 fabric-transitive-access-wideners-v1-version=1.0.2
+fabric-convention-tags-v1-version=1.0.0
diff --git a/settings.gradle b/settings.gradle
index 813b02b61..6028689eb 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -54,4 +54,5 @@ include 'fabric-screen-api-v1'
 include 'fabric-screen-handler-api-v1'
 include 'fabric-textures-v0'
 include 'fabric-transfer-api-v1'
+include 'fabric-convention-tags-v1'
 include 'fabric-transitive-access-wideners-v1'