diff --git a/common/src/main/java/dev/architectury/tags/BiomeTags.java b/common/src/main/java/dev/architectury/tags/BiomeTags.java
index ccaa604d..5b6d7094 100644
--- a/common/src/main/java/dev/architectury/tags/BiomeTags.java
+++ b/common/src/main/java/dev/architectury/tags/BiomeTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.biome.Biome;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for biomes.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalBiomeTags
+ * @see net.neoforged.neoforge.common.Tags.Biomes
+ */
+@SuppressWarnings("unused")
public class BiomeTags {
public static TagKey NO_DEFAULT_MONSTERS = impl_NO_DEFAULT_MONSTERS();
public static TagKey HIDDEN_FROM_LOCATOR_SELECTION = impl_HIDDEN_FROM_LOCATOR_SELECTION();
diff --git a/common/src/main/java/dev/architectury/tags/BlockTags.java b/common/src/main/java/dev/architectury/tags/BlockTags.java
index 479531b1..11ce8947 100644
--- a/common/src/main/java/dev/architectury/tags/BlockTags.java
+++ b/common/src/main/java/dev/architectury/tags/BlockTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for blocks.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalBlockTags
+ * @see net.neoforged.neoforge.common.Tags.Blocks
+ */
+@SuppressWarnings("unused")
public class BlockTags {
public static TagKey STONES = impl_STONES();
public static TagKey COBBLESTONES = impl_COBBLESTONES();
diff --git a/common/src/main/java/dev/architectury/tags/EnchantmentTags.java b/common/src/main/java/dev/architectury/tags/EnchantmentTags.java
index 00c648d3..4f62adac 100644
--- a/common/src/main/java/dev/architectury/tags/EnchantmentTags.java
+++ b/common/src/main/java/dev/architectury/tags/EnchantmentTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.enchantment.Enchantment;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for enchantments.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalEnchantmentTags
+ * @see net.neoforged.neoforge.common.Tags.Enchantments
+ */
+@SuppressWarnings("unused")
public class EnchantmentTags {
public static TagKey INCREASE_BLOCK_DROPS = impl_INCREASE_BLOCK_DROPS();
public static TagKey INCREASE_ENTITY_DROPS = impl_INCREASE_ENTITY_DROPS();
diff --git a/common/src/main/java/dev/architectury/tags/EntityTypeTags.java b/common/src/main/java/dev/architectury/tags/EntityTypeTags.java
index 2a74ef86..1011193f 100644
--- a/common/src/main/java/dev/architectury/tags/EntityTypeTags.java
+++ b/common/src/main/java/dev/architectury/tags/EntityTypeTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.EntityType;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for entity types.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalEntityTypeTags
+ * @see net.neoforged.neoforge.common.Tags.EntityTypes
+ */
+@SuppressWarnings("unused")
public class EntityTypeTags {
public static TagKey> BOSSES = impl_BOSSES();
public static TagKey> MINECARTS = impl_MINECARTS();
diff --git a/common/src/main/java/dev/architectury/tags/FluidTags.java b/common/src/main/java/dev/architectury/tags/FluidTags.java
index 660fb787..126088c5 100644
--- a/common/src/main/java/dev/architectury/tags/FluidTags.java
+++ b/common/src/main/java/dev/architectury/tags/FluidTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.material.Fluid;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for fluids.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalFluidTags
+ * @see net.neoforged.neoforge.common.Tags.Fluids
+ */
+@SuppressWarnings("unused")
public class FluidTags {
public static TagKey LAVA = impl_LAVA();
public static TagKey WATER = impl_WATER();
diff --git a/common/src/main/java/dev/architectury/tags/ItemTags.java b/common/src/main/java/dev/architectury/tags/ItemTags.java
index 1c1ad77e..828880c9 100644
--- a/common/src/main/java/dev/architectury/tags/ItemTags.java
+++ b/common/src/main/java/dev/architectury/tags/ItemTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for items.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags
+ * @see net.neoforged.neoforge.common.Tags.Items
+ */
+@SuppressWarnings("unused")
public class ItemTags {
public static TagKey- STONES = impl_STONES();
public static TagKey
- COBBLESTONES = impl_COBBLESTONES();
diff --git a/common/src/main/java/dev/architectury/tags/StructureTags.java b/common/src/main/java/dev/architectury/tags/StructureTags.java
index d65c30e3..945b172b 100644
--- a/common/src/main/java/dev/architectury/tags/StructureTags.java
+++ b/common/src/main/java/dev/architectury/tags/StructureTags.java
@@ -19,13 +19,19 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.levelgen.structure.Structure;
-// Only available on Fabric and NeoForge
-@SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+/**
+ * Convention Tags for structures.
+ * WARNING! This class will not work on Forge!
+ * @see net.fabricmc.fabric.api.tag.convention.v2.ConventionalStructureTags
+ * @see net.neoforged.neoforge.common.Tags.Structures
+ */
+@SuppressWarnings("unused")
public class StructureTags {
public static TagKey HIDDEN_FROM_DISPLAYERS = impl_HIDDEN_FROM_DISPLAYERS();
public static TagKey HIDDEN_FROM_LOCATOR_SELECTION = impl_HIDDEN_FROM_LOCATOR_SELECTION();
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/BiomeTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/BiomeTagsImpl.java
index fdeee74f..8162bdbc 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/BiomeTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/BiomeTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.biome.Biome;
+@SuppressWarnings("unused")
public class BiomeTagsImpl {
public static TagKey impl_NO_DEFAULT_MONSTERS() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalBiomeTags.NO_DEFAULT_MONSTERS;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/BlockTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/BlockTagsImpl.java
index 1a8adec3..f97a68bc 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/BlockTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/BlockTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;
+@SuppressWarnings("unused")
public class BlockTagsImpl {
public static TagKey impl_STONES() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalBlockTags.STONES;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/ConventionalTagsClassGen.java b/fabric/src/main/java/dev/architectury/tags/fabric/ConventionalTagsClassGen.java
index 5a1b16c1..9ce9c725 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/ConventionalTagsClassGen.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/ConventionalTagsClassGen.java
@@ -122,32 +122,45 @@ public static void generateStubClass() throws IOException {
String importRegistryName = registryClass.getName().replaceAll("\\$", "/").replace("/", ".");
String[] temp = entry.getKey().getPath().split("/");
String categoryShortName = WordUtils.capitalize(temp[temp.length-1].replaceAll("_", " ")).replaceAll(" ", "");
+ Pair masterPair = entry.getValue().get(0);
+ String leftName = masterPair.getFirst().tagClassName.replaceAll("\\$", ".");
+ String rightName = masterPair.getSecond().tagClassName.replaceAll("\\$", ".");
commonClass.append(String.format("""
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags;
+
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.injectables.annotations.PlatformOnly;
import net.minecraft.tags.TagKey;
import %s;
- // Only available on Fabric and NeoForge
- @SuppressWarnings({"UnimplementedExpectPlatform", "unused"})
+ /**
+ * Convention Tags for %s.
+ * WARNING! This class will not work on Forge!
+ * @see %s
+ * @see %s
+ */
+ @SuppressWarnings("unused")
public class %sTags {
- """, importRegistryName, categoryShortName));
+ """, importRegistryName, temp[temp.length-1].replaceAll("_", " ") + "s", leftName, rightName, categoryShortName));
fabricClass.append(String.format("""
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import %s;
+ @SuppressWarnings("unused")
public class %sTagsImpl {
""", importRegistryName, categoryShortName));
neoForgeClass.append(String.format("""
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import %s;
+ @SuppressWarnings("unused")
public class %sTagsImpl {
""", importRegistryName, categoryShortName));
StringBuilder commonClassEnd = new StringBuilder();
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/EnchantmentTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/EnchantmentTagsImpl.java
index bfbfc6aa..82c0d9f1 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/EnchantmentTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/EnchantmentTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.enchantment.Enchantment;
+@SuppressWarnings("unused")
public class EnchantmentTagsImpl {
public static TagKey impl_INCREASE_BLOCK_DROPS() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalEnchantmentTags.INCREASE_BLOCK_DROPS;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/EntityTypeTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/EntityTypeTagsImpl.java
index 15c6b29b..56064a96 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/EntityTypeTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/EntityTypeTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.EntityType;
+@SuppressWarnings("unused")
public class EntityTypeTagsImpl {
public static TagKey> impl_BOSSES() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalEntityTypeTags.BOSSES;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/FluidTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/FluidTagsImpl.java
index 904b3c9a..1c8d3618 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/FluidTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/FluidTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.material.Fluid;
+@SuppressWarnings("unused")
public class FluidTagsImpl {
public static TagKey impl_LAVA() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalFluidTags.LAVA;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/ItemTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/ItemTagsImpl.java
index 0a9f89e9..78f47fe0 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/ItemTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/ItemTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
+@SuppressWarnings("unused")
public class ItemTagsImpl {
public static TagKey- impl_STONES() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags.STONES;
diff --git a/fabric/src/main/java/dev/architectury/tags/fabric/StructureTagsImpl.java b/fabric/src/main/java/dev/architectury/tags/fabric/StructureTagsImpl.java
index 6a8e18b2..b132cdb6 100644
--- a/fabric/src/main/java/dev/architectury/tags/fabric/StructureTagsImpl.java
+++ b/fabric/src/main/java/dev/architectury/tags/fabric/StructureTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.fabric;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.levelgen.structure.Structure;
+@SuppressWarnings("unused")
public class StructureTagsImpl {
public static TagKey impl_HIDDEN_FROM_DISPLAYERS() {
return net.fabricmc.fabric.api.tag.convention.v2.ConventionalStructureTags.HIDDEN_FROM_DISPLAYERS;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/BiomeTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/BiomeTagsImpl.java
index 52f52219..58f1f9ed 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/BiomeTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/BiomeTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.biome.Biome;
+@SuppressWarnings("unused")
public class BiomeTagsImpl {
public static TagKey impl_NO_DEFAULT_MONSTERS() {
return net.neoforged.neoforge.common.Tags.Biomes.NO_DEFAULT_MONSTERS;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/BlockTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/BlockTagsImpl.java
index 2eb71ba8..6cf47448 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/BlockTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/BlockTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;
+@SuppressWarnings("unused")
public class BlockTagsImpl {
public static TagKey impl_STONES() {
return net.neoforged.neoforge.common.Tags.Blocks.STONES;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/EnchantmentTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/EnchantmentTagsImpl.java
index 2e899104..0d6752f3 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/EnchantmentTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/EnchantmentTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.enchantment.Enchantment;
+@SuppressWarnings("unused")
public class EnchantmentTagsImpl {
public static TagKey impl_INCREASE_BLOCK_DROPS() {
return net.neoforged.neoforge.common.Tags.Enchantments.INCREASE_BLOCK_DROPS;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/EntityTypeTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/EntityTypeTagsImpl.java
index cfd83424..eb467c27 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/EntityTypeTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/EntityTypeTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.EntityType;
+@SuppressWarnings("unused")
public class EntityTypeTagsImpl {
public static TagKey> impl_BOSSES() {
return net.neoforged.neoforge.common.Tags.EntityTypes.BOSSES;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/FluidTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/FluidTagsImpl.java
index 62f7c150..2291fab7 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/FluidTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/FluidTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.material.Fluid;
+@SuppressWarnings("unused")
public class FluidTagsImpl {
public static TagKey impl_LAVA() {
return net.neoforged.neoforge.common.Tags.Fluids.LAVA;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/ItemTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/ItemTagsImpl.java
index 1cef401e..816970cc 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/ItemTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/ItemTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
+@SuppressWarnings("unused")
public class ItemTagsImpl {
public static TagKey
- impl_STONES() {
return net.neoforged.neoforge.common.Tags.Items.STONES;
diff --git a/neoforge/src/main/java/dev/architectury/tags/forge/StructureTagsImpl.java b/neoforge/src/main/java/dev/architectury/tags/forge/StructureTagsImpl.java
index ce3b3698..0c1a3e21 100644
--- a/neoforge/src/main/java/dev/architectury/tags/forge/StructureTagsImpl.java
+++ b/neoforge/src/main/java/dev/architectury/tags/forge/StructureTagsImpl.java
@@ -19,9 +19,11 @@
// AUTO GENERATED CLASS, DO NOT MANUALLY EDIT
package dev.architectury.tags.forge;
+
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.levelgen.structure.Structure;
+@SuppressWarnings("unused")
public class StructureTagsImpl {
public static TagKey impl_HIDDEN_FROM_DISPLAYERS() {
return net.neoforged.neoforge.common.Tags.Structures.HIDDEN_FROM_DISPLAYERS;