More enhancements
This commit is contained in:
parent
7b96cfee10
commit
0594b9f420
1 changed files with 97 additions and 101 deletions
|
@ -151,60 +151,18 @@ public class TagAPI {
|
|||
return tag == null ? (Named<Item>) TagRegistry.item(id) : (Named<Item>) tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds {@link Block} to NETHER_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||
*
|
||||
* @param block - {@link Block}.
|
||||
*/
|
||||
public static void addNetherGround(Block block) {
|
||||
addTag(BLOCK_NETHER_GROUND, block);
|
||||
addTag(BLOCK_GEN_TERRAIN, block);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds {@link Block} to END_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||
*
|
||||
* @param block - {@link Block}.
|
||||
*/
|
||||
public static void addEndGround(Block block) {
|
||||
addTag(BLOCK_GEN_TERRAIN, block);
|
||||
addTag(BLOCK_END_GROUND, block);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.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.
|
||||
* <p>
|
||||
* Example:
|
||||
* <pre>{@code Tag.Named<Block> DIMENSION_STONE = makeBlockTag("mymod", "dim_stone");
|
||||
* addTag(DIMENSION_STONE, Blocks.END_STONE, Blocks.NETHERRACK);}</pre>
|
||||
* <p>
|
||||
* The call will reserve the Tag. The Tag is added to the blocks once
|
||||
* {@link #apply(String, Map)} was executed.
|
||||
*
|
||||
* @param tag The new Tag
|
||||
* @param blocks One or more blocks that should receive the Tag.
|
||||
*/
|
||||
@Deprecated
|
||||
public static void addTag(Tag.Named<Block> tag, Block... blocks) {
|
||||
ResourceLocation tagID = tag.getName();
|
||||
addTag(tagID, blocks);
|
||||
addBlockTag(BLOCK_BOOKSHELVES.getName(), Blocks.BOOKSHELF);
|
||||
addBlockTag(BLOCK_GEN_TERRAIN.getName(), Blocks.END_STONE, Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL);
|
||||
addBlockTag(BLOCK_NETHER_GROUND.getName(), Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL);
|
||||
addBlockTag(BLOCK_END_GROUND.getName(), Blocks.END_STONE);
|
||||
addBlockTag(BLOCK_CHEST.getName(), Blocks.CHEST);
|
||||
addItemTag(ITEM_CHEST.getName(), Items.CHEST);
|
||||
addItemTag(ITEM_IRON_INGOTS.getName(), Items.IRON_INGOT);
|
||||
addItemTag(ITEM_FURNACES.getName(), Blocks.FURNACE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -212,7 +170,7 @@ public class TagAPI {
|
|||
* @param tagID {@link ResourceLocation} tag ID.
|
||||
* @param blocks array of {@link Block} to add into tag.
|
||||
*/
|
||||
public static void addTag(ResourceLocation tagID, Block... blocks) {
|
||||
public static void addBlockTag(ResourceLocation tagID, Block... blocks) {
|
||||
Set<ResourceLocation> set = TAGS_BLOCK.computeIfAbsent(tagID, k -> Sets.newHashSet());
|
||||
for (Block block : blocks) {
|
||||
ResourceLocation id = Registry.BLOCK.getKey(block);
|
||||
|
@ -222,6 +180,60 @@ 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 addItemTag(ResourceLocation tagID, ItemLike... items) {
|
||||
Set<ResourceLocation> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically called in {@link net.minecraft.tags.TagLoader#loadAndBuild(ResourceManager)}.
|
||||
* <p>
|
||||
* In most cases there is no need to call this Method manually.
|
||||
*
|
||||
* @param directory The name of the Tag-directory. Should be either <i>"tags/blocks"</i> or
|
||||
* <i>"tags/items"</i>.
|
||||
* @param tagsMap The map that will hold the registered Tags
|
||||
* @return The {@code tagsMap} Parameter.
|
||||
*/
|
||||
public static Map<ResourceLocation, Tag.Builder> apply(String directory, Map<ResourceLocation, Tag.Builder> tagsMap) {
|
||||
Map<ResourceLocation, Set<ResourceLocation>> tagMap = null;
|
||||
if ("tags/blocks".equals(directory)) {
|
||||
tagMap = TAGS_BLOCK;
|
||||
}
|
||||
else if ("tags/items".equals(directory)) {
|
||||
tagMap = TAGS_ITEM;
|
||||
}
|
||||
if (tagMap != null) {
|
||||
tagMap.forEach((id, ids) -> apply(tagsMap.computeIfAbsent(id, key -> Tag.Builder.tag()), ids));
|
||||
}
|
||||
return tagsMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds all {@code ids} to the {@code builder}.
|
||||
*
|
||||
* @param builder
|
||||
* @param ids
|
||||
* @return The Builder passed as {@code builder}.
|
||||
*/
|
||||
public static Tag.Builder apply(Tag.Builder builder, Set<ResourceLocation> ids) {
|
||||
ids.forEach(value -> builder.addElement(value, "BCLib Code"));
|
||||
return builder;
|
||||
}
|
||||
|
||||
// DEPRECATED SECTION //
|
||||
// WILL BE REMOVED IN 1.3.0 //
|
||||
|
||||
/**
|
||||
* Deprecated due to low compatibility. Use addTag({@link ResourceLocation}, {@link ItemLike}... items) instead.
|
||||
*
|
||||
|
@ -239,29 +251,7 @@ public class TagAPI {
|
|||
*/
|
||||
@Deprecated
|
||||
public static void addTag(Tag.Named<Item> tag, ItemLike... items) {
|
||||
ResourceLocation tagID = tag.getName();
|
||||
Set<ResourceLocation> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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<ResourceLocation> 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);
|
||||
}
|
||||
}
|
||||
addItemTag(tag.getName(), items);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -279,7 +269,7 @@ public class TagAPI {
|
|||
@SafeVarargs
|
||||
public static void addTags(ItemLike item, Tag.Named<Item>... tags) {
|
||||
for (Tag.Named<Item> tag : tags) {
|
||||
addTag(tag, item);
|
||||
addItemTag(tag.getName(), item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -303,38 +293,44 @@ public class TagAPI {
|
|||
}
|
||||
|
||||
/**
|
||||
* Adds all {@code ids} to the {@code builder}.
|
||||
* Deprecated due to low compatibility. Use addTag({@link ResourceLocation}, {@link Block}... blocks) instead.
|
||||
*
|
||||
* @param builder
|
||||
* @param ids
|
||||
* @return The Builder passed as {@code builder}.
|
||||
* Adds one Tag to multiple Blocks.
|
||||
* <p>
|
||||
* Example:
|
||||
* <pre>{@code Tag.Named<Block> DIMENSION_STONE = makeBlockTag("mymod", "dim_stone");
|
||||
* addTag(DIMENSION_STONE, Blocks.END_STONE, Blocks.NETHERRACK);}</pre>
|
||||
* <p>
|
||||
* The call will reserve the Tag. The Tag is added to the blocks once
|
||||
* {@link #apply(String, Map)} was executed.
|
||||
*
|
||||
* @param tag The new Tag
|
||||
* @param blocks One or more blocks that should receive the Tag.
|
||||
*/
|
||||
public static Tag.Builder apply(Tag.Builder builder, Set<ResourceLocation> ids) {
|
||||
ids.forEach(value -> builder.addElement(value, "Better End Code"));
|
||||
return builder;
|
||||
@Deprecated
|
||||
public static void addTag(Tag.Named<Block> tag, Block... blocks) {
|
||||
addBlockTag(tag.getName(), blocks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically called in {@link net.minecraft.tags.TagLoader#loadAndBuild(ResourceManager)}.
|
||||
* <p>
|
||||
* In most cases there is no need to call this Method manually.
|
||||
* Adds {@link Block} to NETHER_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||
*
|
||||
* @param directory The name of the Tag-directory. Should be either <i>"tags/blocks"</i> or
|
||||
* <i>"tags/items"</i>.
|
||||
* @param tagsMap The map that will hold the registered Tags
|
||||
* @return The {@code tagsMap} Parameter.
|
||||
* @param block - {@link Block}.
|
||||
*/
|
||||
public static Map<ResourceLocation, Tag.Builder> apply(String directory, Map<ResourceLocation, Tag.Builder> tagsMap) {
|
||||
Map<ResourceLocation, Set<ResourceLocation>> endTags = null;
|
||||
if ("tags/blocks".equals(directory)) {
|
||||
endTags = TAGS_BLOCK;
|
||||
}
|
||||
else if ("tags/items".equals(directory)) {
|
||||
endTags = TAGS_ITEM;
|
||||
}
|
||||
if (endTags != null) {
|
||||
endTags.forEach((id, ids) -> apply(tagsMap.computeIfAbsent(id, key -> Tag.Builder.tag()), ids));
|
||||
}
|
||||
return tagsMap;
|
||||
@Deprecated
|
||||
public static void addNetherGround(Block block) {
|
||||
addTag(BLOCK_NETHER_GROUND, block);
|
||||
addTag(BLOCK_GEN_TERRAIN, block);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds {@link Block} to END_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
|
||||
*
|
||||
* @param block - {@link Block}.
|
||||
*/
|
||||
@Deprecated
|
||||
public static void addEndGround(Block block) {
|
||||
addTag(BLOCK_GEN_TERRAIN, block);
|
||||
addTag(BLOCK_END_GROUND, block);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue