From be64c38293da8dbde49d082ffdfd83de9903c614 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 16 Jan 2022 16:34:15 +0300 Subject: [PATCH] TagAPI enhancements --- src/main/java/ru/bclib/api/TagAPI.java | 57 ++++++++++++++++++++------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/bclib/api/TagAPI.java b/src/main/java/ru/bclib/api/TagAPI.java index 069a2f59..ab75a30b 100644 --- a/src/main/java/ru/bclib/api/TagAPI.java +++ b/src/main/java/ru/bclib/api/TagAPI.java @@ -70,8 +70,6 @@ public class TagAPI { public static final Tag.Named ITEM_SHEARS = getMCItemTag("shears"); public static final Tag.Named ITEM_COMMON_SHEARS = makeCommonItemTag("shears"); public static final Tag.Named ITEM_SOUL_GROUND = makeCommonItemTag("soul_ground"); - - /** * Get or create {@link Tag.Named}. @@ -82,7 +80,6 @@ public class TagAPI { */ public static Tag.Named makeTag(Supplier> containerSupplier, ResourceLocation id) { Tag tag = containerSupplier.get().getTag(id); - //return tag == null ? TagRegistry.create(id, containerSupplier) : (Named) tag; return tag == null ? new TagDelegate<>(id, containerSupplier) : (Named) tag; } @@ -139,7 +136,6 @@ public class TagAPI { public static Tag.Named getMCBlockTag(String name) { ResourceLocation id = new ResourceLocation(name); Tag tag = BlockTags.getAllTags().getTag(id); - //return tag == null ? (Named) TagRegistry.block(id) : (Named) tag; return tag == null ? (Named) TagFactory.BLOCK.create(id): (Named) tag; } @@ -178,18 +174,21 @@ public class TagAPI { /** * Initializes basic tags. Should be called only in BCLib main class. */ + // TODO replace getName with actual IDs to improve compat public static void init() { - addTag(BLOCK_BOOKSHELVES, Blocks.BOOKSHELF); - addTag(BLOCK_GEN_TERRAIN, Blocks.END_STONE, Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); - addTag(BLOCK_NETHER_GROUND, Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); - addTag(BLOCK_END_GROUND, Blocks.END_STONE); - addTag(BLOCK_CHEST, Blocks.CHEST); - addTag(ITEM_CHEST, Items.CHEST); - addTag(ITEM_IRON_INGOTS, Items.IRON_INGOT); - addTag(ITEM_FURNACES, Blocks.FURNACE); + addTag(BLOCK_BOOKSHELVES.getName(), Blocks.BOOKSHELF); + addTag(BLOCK_GEN_TERRAIN.getName(), Blocks.END_STONE, Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); + addTag(BLOCK_NETHER_GROUND.getName(), Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); + addTag(BLOCK_END_GROUND.getName(), Blocks.END_STONE); + addTag(BLOCK_CHEST.getName(), Blocks.CHEST); + addTag(ITEM_CHEST.getName(), Items.CHEST); + addTag(ITEM_IRON_INGOTS.getName(), Items.IRON_INGOT); + addTag(ITEM_FURNACES.getName(), Blocks.FURNACE); } /** + * Deprecated due to low compatibility. Use addTag({@link ResourceLocation}, {@link Block}... blocks) instead. + * * Adds one Tag to multiple Blocks. *

* Example: @@ -202,8 +201,18 @@ public class TagAPI { * @param tag The new Tag * @param blocks One or more blocks that should receive the Tag. */ + @Deprecated public static void addTag(Tag.Named tag, Block... blocks) { ResourceLocation tagID = tag.getName(); + addTag(tagID, blocks); + } + + /** + * Adds one Tag to multiple Blocks. + * @param tagID {@link ResourceLocation} tag ID. + * @param blocks array of {@link Block} to add into tag. + */ + public static void addTag(ResourceLocation tagID, Block... blocks) { Set set = TAGS_BLOCK.computeIfAbsent(tagID, k -> Sets.newHashSet()); for (Block block : blocks) { ResourceLocation id = Registry.BLOCK.getKey(block); @@ -214,6 +223,8 @@ public class TagAPI { } /** + * Deprecated due to low compatibility. Use addTag({@link ResourceLocation}, {@link ItemLike}... items) instead. + * * Adds one Tag to multiple Items. *

* Example: @@ -226,6 +237,7 @@ public class TagAPI { * @param tag The new Tag * @param items One or more item that should receive the Tag. */ + @Deprecated public static void addTag(Tag.Named tag, ItemLike... items) { ResourceLocation tagID = tag.getName(); Set set = TAGS_ITEM.computeIfAbsent(tagID, k -> Sets.newHashSet()); @@ -238,6 +250,23 @@ public class TagAPI { } /** + * Adds one Tag to multiple Items. + * @param tagID {@link ResourceLocation} tag ID. + * @param items array of {@link ItemLike} to add into tag. + */ + public static void addTag(ResourceLocation tagID, ItemLike... items) { + Set set = TAGS_ITEM.computeIfAbsent(tagID, k -> Sets.newHashSet()); + for (ItemLike item : items) { + ResourceLocation id = Registry.ITEM.getKey(item.asItem()); + if (id != Registry.ITEM.getDefaultKey()) { + set.add(id); + } + } + } + + /** + * Deprecated, use addTag({@link ResourceLocation}, {@link ItemLike}... items) instead. + * * Adds multiple Tags to one Item. *

* The call will reserve the Tags. The Tags are added to the Item once @@ -246,6 +275,7 @@ public class TagAPI { * @param item The Item that will receive all Tags * @param tags One or more Tags */ + @Deprecated @SafeVarargs public static void addTags(ItemLike item, Tag.Named... tags) { for (Tag.Named tag : tags) { @@ -254,6 +284,8 @@ public class TagAPI { } /** + * Deprecated, use addTag({@link ResourceLocation}, {@link Block}... blocks) instead. + * * Adds multiple Tags to one Block. *

* The call will reserve the Tags. The Tags are added to the Block once @@ -262,6 +294,7 @@ public class TagAPI { * @param block The Block that will receive all Tags * @param tags One or more Tags */ + @Deprecated @SafeVarargs public static void addTags(Block block, Tag.Named... tags) { for (Tag.Named tag : tags) {