Updated Tag API and tag constants

This commit is contained in:
paulevsGitch 2022-01-21 14:56:37 +03:00
parent 7ab5377a03
commit db082ef1be
35 changed files with 308 additions and 385 deletions

View file

@ -6,9 +6,9 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseBarrelBlock;
import ru.bclib.blocks.BaseChestBlock; import ru.bclib.blocks.BaseChestBlock;
@ -28,8 +28,8 @@ import java.util.function.Consumer;
public class PostInitAPI { public class PostInitAPI {
private static List<Consumer<Boolean>> postInitFunctions = Lists.newArrayList(); private static List<Consumer<Boolean>> postInitFunctions = Lists.newArrayList();
private static List<Tag.Named<Block>> blockTags = Lists.newArrayList(); private static List<TagLocation<Block>> blockTags = Lists.newArrayList();
private static List<Tag.Named<Item>> itemTags = Lists.newArrayList(); private static List<TagLocation<Item>> itemTags = Lists.newArrayList();
/** /**
* Register a new function which will be called after all mods are initiated. Will be called on both client and server. * Register a new function which will be called after all mods are initiated. Will be called on both client and server.
@ -94,8 +94,8 @@ public class PostInitAPI {
} }
if (block instanceof TagProvider) { if (block instanceof TagProvider) {
TagProvider.class.cast(block).addTags(blockTags, itemTags); TagProvider.class.cast(block).addTags(blockTags, itemTags);
blockTags.forEach(tag -> TagAPI.addTag(tag, block)); blockTags.forEach(tag -> TagAPI.addBlockTag(tag, block));
itemTags.forEach(tag -> TagAPI.addTag(tag, block)); itemTags.forEach(tag -> TagAPI.addItemTag(tag, block));
blockTags.clear(); blockTags.clear();
itemTags.clear(); itemTags.clear();
} }

View file

@ -3,7 +3,6 @@ package ru.bclib.api;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import net.fabricmc.fabric.api.tag.TagFactory; import net.fabricmc.fabric.api.tag.TagFactory;
import net.fabricmc.fabric.api.tag.TagRegistry;
import net.fabricmc.fabric.impl.tag.extension.TagDelegate; import net.fabricmc.fabric.impl.tag.extension.TagDelegate;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -18,7 +17,6 @@ import net.minecraft.world.item.Items;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import ru.bclib.BCLib;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -30,61 +28,143 @@ public class TagAPI {
private static final Map<ResourceLocation, Set<ResourceLocation>> TAGS_BLOCK = Maps.newConcurrentMap(); private static final Map<ResourceLocation, Set<ResourceLocation>> TAGS_BLOCK = Maps.newConcurrentMap();
private static final Map<ResourceLocation, Set<ResourceLocation>> TAGS_ITEM = Maps.newConcurrentMap(); private static final Map<ResourceLocation, Set<ResourceLocation>> TAGS_ITEM = Maps.newConcurrentMap();
// Vanilla Block Tags // LOCATIONS //
public static final TagLocation<Block> NAMED_SOUL_SPEED_BLOCKS = new TagLocation<>("soul_speed_blocks");
public static final TagLocation<Block> NAMED_SOUL_FIRE_BASE_BLOCKS = new TagLocation<>("soul_fire_base_blocks"); // Mineable Block Tags
public static final TagLocation<Block> NAMED_CLIMBABLE = new TagLocation<>("climbable");
public static final TagLocation<Block> NAMED_NYLIUM = new TagLocation<>("nylium");
public static final TagLocation<Block> NAMED_ANVIL = new TagLocation<>("anvil");
public static final TagLocation<Block> NAMED_WALLS = new TagLocation<>("walls");
public static final TagLocation<Block> LEAVES = new TagLocation<>("leaves");
public static final TagLocation<Block> NAMED_MINEABLE_AXE = new TagLocation<>("mineable/axe"); public static final TagLocation<Block> NAMED_MINEABLE_AXE = new TagLocation<>("mineable/axe");
public static final TagLocation<Block> NAMED_MINEABLE_PICKAXE = new TagLocation<>("mineable/pickaxe");
public static final TagLocation<Block> NAMED_MINEABLE_SHOVEL = new TagLocation<>("mineable/shovel");
public static final TagLocation<Block> NAMED_MINEABLE_HOE = new TagLocation<>("mineable/hoe"); public static final TagLocation<Block> NAMED_MINEABLE_HOE = new TagLocation<>("mineable/hoe");
public static final TagLocation<Block> NAMED_MINEABLE_PICKAXE = new TagLocation<>("mineable/pickaxe");
public static final TagLocation<Block> NAMED_MINEABLE_SHEARS = new TagLocation<>("fabric", "mineable/shears");
public static final TagLocation<Block> NAMED_MINEABLE_SHOVEL = new TagLocation<>("mineable/shovel");
public static final TagLocation<Block> NAMED_MINEABLE_SWORD = new TagLocation<>("fabric", "mineable/sword");
// Block Tags // Fabric Tools
public static final TagNamed<Block> BLOCK_BOOKSHELVES = makeCommonBlockTag("bookshelves"); public static final TagLocation<Item> NAMED_FABRIC_AXES = new TagLocation<>("fabric", "axes");
public static final TagNamed<Block> BLOCK_GEN_TERRAIN = makeBlockTag(BCLib.MOD_ID, "gen_terrain"); public static final TagLocation<Item> NAMED_FABRIC_HOES = new TagLocation<>("fabric", "hoes");
public static final TagNamed<Block> BLOCK_NETHER_GROUND = makeBlockTag(BCLib.MOD_ID, "nether_ground"); public static final TagLocation<Item> NAMED_FABRIC_PICKAXES = new TagLocation<>("fabric", "pickaxes");
public static final TagNamed<Block> BLOCK_END_GROUND = makeBlockTag(BCLib.MOD_ID, "end_ground"); public static final TagLocation<Item> NAMED_FABRIC_SHEARS = new TagLocation<>("fabric", "shears");
public static final TagLocation<Item> NAMED_FABRIC_SHOVELS = new TagLocation<>("fabric", "shovels");
public static final TagLocation<Item> NAMED_FABRIC_SWORDS = new TagLocation<>("fabric", "swords");
public static final TagNamed<Block> BLOCK_CHEST = makeCommonBlockTag("chest"); // Vanilla Block Tags
public static final TagNamed<Block> BLOCK_WOODEN_CHEST = makeCommonBlockTag("wooden_chests"); public static final TagLocation<Block> NAMED_BLOCK_ANVIL = new TagLocation<>("anvil");
public static final TagNamed<Block> BLOCK_BARREL = makeCommonBlockTag("barrel"); public static final TagLocation<Block> NAMED_BLOCK_BUTTONS = new TagLocation<>("buttons");
public static final TagNamed<Block> BLOCK_WOODEN_BARREL = makeCommonBlockTag("wooden_barrels"); public static final TagLocation<Block> NAMED_BLOCK_CLIMBABLE = new TagLocation<>("climbable");
public static final TagNamed<Block> BLOCK_END_STONES = makeCommonBlockTag("end_stones"); public static final TagLocation<Block> NAMED_BLOCK_DOORS = new TagLocation<>("doors");
public static final TagNamed<Block> BLOCK_NETHER_STONES = makeCommonBlockTag("nether_stones"); public static final TagLocation<Block> NAMED_BLOCK_FENCES = new TagLocation<>("fences");
public static final TagNamed<Block> BLOCK_NETHER_PORTAL_FRAME = makeCommonBlockTag("nether_pframe"); public static final TagLocation<Block> NAMED_BLOCK_FENCE_GATES = new TagLocation<>("fence_gates");
public static final TagNamed<Block> BLOCK_WORKBENCHES = makeCommonBlockTag("workbench"); public static final TagLocation<Block> NAMED_BLOCK_LEAVES = new TagLocation<>("leaves");
public static final TagNamed<Block> BLOCK_SAPLINGS = makeCommonBlockTag("saplings"); public static final TagLocation<Block> NAMED_BLOCK_LOGS = new TagLocation<>("logs");
public static final TagNamed<Block> BLOCK_LEAVES = makeCommonBlockTag("leaves"); public static final TagLocation<Block> NAMED_BLOCK_LOGS_THAT_BURN = new TagLocation<>("logs_that_burn");
public static final TagNamed<Block> BLOCK_IMMOBILE = makeCommonBlockTag("immobile"); public static final TagLocation<Block> NAMED_BLOCK_NYLIUM = new TagLocation<>("nylium");
public static final TagNamed<Block> BLOCK_SOUL_GROUND = makeCommonBlockTag("soul_ground"); public static final TagLocation<Block> NAMED_BLOCK_PLANKS = new TagLocation<>("planks");
public static final TagNamed<Block> BLOCK_NETHERRACK = makeCommonBlockTag("netherrack"); public static final TagLocation<Block> NAMED_BLOCK_PRESSURE_PLATES = new TagLocation<>("pressure_plates");
public static final TagNamed<Block> BLOCK_NETHER_MYCELIUM = makeCommonBlockTag("nether_mycelium"); public static final TagLocation<Block> NAMED_BLOCK_SAPLINGS = new TagLocation<>("saplings");
public static final TagLocation<Block> NAMED_BLOCK_SIGNS = new TagLocation<>("signs");
public static final TagLocation<Block> NAMED_BLOCK_SLABS = new TagLocation<>("slabs");
public static final TagLocation<Block> NAMED_BLOCK_STAIRS = new TagLocation<>("stairs");
public static final TagLocation<Block> NAMED_BLOCK_STONE_PRESSURE_PLATES = new TagLocation<>("stone_pressure_plates");
public static final TagLocation<Block> NAMED_BLOCK_TRAPDOORS = new TagLocation<>("trapdoors");
public static final TagLocation<Block> NAMED_BLOCK_WALLS = new TagLocation<>("walls");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_BUTTONS = new TagLocation<>("wooden_buttons");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_DOORS = new TagLocation<>("wooden_doors");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_FENCES = new TagLocation<>("wooden_fences");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_PRESSURE_PLATES = new TagLocation<>("wooden_pressure_plates");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_SLABS = new TagLocation<>("wooden_slabs");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_STAIRS = new TagLocation<>("wooden_stairs");
public static final TagLocation<Block> NAMED_BLOCK_WOODEN_TRAPDOORS = new TagLocation<>("wooden_trapdoors");
public static final TagLocation<Block> NAMED_SOUL_FIRE_BASE_BLOCKS = new TagLocation<>("soul_fire_base_blocks");
public static final TagLocation<Block> NAMED_SOUL_SPEED_BLOCKS = new TagLocation<>("soul_speed_blocks");
public static final TagNamed<Block> BLOCK_DRAGON_IMMUNE = getMCBlockTag("dragon_immune"); // Vanilla Item Tags
public static final TagLocation<Item> NAMED_ITEM_BUTTONS = new TagLocation<>("buttons");
public static final TagLocation<Item> NAMED_ITEM_DOORS = new TagLocation<>("doors");
public static final TagLocation<Item> NAMED_ITEM_FENCES = new TagLocation<>("fences");
public static final TagLocation<Item> NAMED_ITEM_FENCE_GATES = new TagLocation<>("fence_gates");
public static final TagLocation<Item> NAMED_ITEM_LEAVES = new TagLocation<>("leaves");
public static final TagLocation<Item> NAMED_ITEM_LOGS = new TagLocation<>("logs");
public static final TagLocation<Item> NAMED_ITEM_LOGS_THAT_BURN = new TagLocation<>("logs_that_burn");
public static final TagLocation<Item> NAMED_ITEM_PLANKS = new TagLocation<>("planks");
public static final TagLocation<Item> NAMED_ITEM_PRESSURE_PLATES = new TagLocation<>("pressure_plates");
public static final TagLocation<Item> NAMED_ITEM_SAPLINGS = new TagLocation<>("saplings");
public static final TagLocation<Item> NAMED_ITEM_SHEARS = new TagLocation<>("shears");
public static final TagLocation<Item> NAMED_ITEM_SIGNS = new TagLocation<>("signs");
public static final TagLocation<Item> NAMED_ITEM_SLABS = new TagLocation<>("slabs");
public static final TagLocation<Item> NAMED_ITEM_STAIRS = new TagLocation<>("stairs");
public static final TagLocation<Item> NAMED_ITEM_STONE_PRESSURE_PLATES = new TagLocation<>("stone_pressure_plates");
public static final TagLocation<Item> NAMED_ITEM_TRAPDOORS = new TagLocation<>("trapdoors");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_BUTTONS = new TagLocation<>("wooden_buttons");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_DOORS = new TagLocation<>("wooden_doors");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_FENCES = new TagLocation<>("wooden_fences");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_PRESSURE_PLATES = new TagLocation<>("wooden_pressure_plates");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_SLABS = new TagLocation<>("wooden_slabs");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_STAIRS = new TagLocation<>("wooden_stairs");
public static final TagLocation<Item> NAMED_ITEM_WOODEN_TRAPDOORS = new TagLocation<>("wooden_trapdoors");
public static final TagNamed<Block> MINEABLE_AXE = getMCBlockTag("mineable/axe"); // Common Block Tags
public static final TagNamed<Block> MINEABLE_PICKAXE = getMCBlockTag("mineable/pickaxe"); public static final TagLocation<Block> NAMED_BLOCK_DRAGON_IMMUNE = new TagLocation<>("c", "dragon_immune");
public static final TagNamed<Block> MINEABLE_SHOVEL = getMCBlockTag("mineable/shovel"); public static final TagLocation<Block> NAMED_COMMON_BLOCK_BARREL = new TagLocation<>("c", "barrel");
public static final TagNamed<Block> MINEABLE_HOE = getMCBlockTag("mineable/hoe"); public static final TagLocation<Block> NAMED_COMMON_BLOCK_BOOKSHELVES = new TagLocation<>("c", "bookshelves");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_CHEST = new TagLocation<>("c", "chest");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_END_STONES = new TagLocation<>("c", "end_stones");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_IMMOBILE = new TagLocation<>("c", "immobile");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_LEAVES = new TagLocation<>("c", "leaves");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_NETHERRACK = new TagLocation<>("c", "netherrack");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_NETHER_MYCELIUM = new TagLocation<>("c", "nether_mycelium");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_NETHER_PORTAL_FRAME = new TagLocation<>("c", "nether_pframe");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_NETHER_STONES = new TagLocation<>("c", "nether_stones");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_SAPLINGS = new TagLocation<>("c", "saplings");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_SOUL_GROUND = new TagLocation<>("c", "soul_ground");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_WOODEN_BARREL = new TagLocation<>("c", "wooden_barrels");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_WOODEN_CHEST = new TagLocation<>("c", "wooden_chests");
public static final TagLocation<Block> NAMED_COMMON_BLOCK_WORKBENCHES = new TagLocation<>("c", "workbench");
// Item Tags // Common Item Tags
public static final TagNamed<Item> ITEM_CHEST = makeCommonItemTag("chest"); public static final TagLocation<Item> NAMED_COMMON_ITEM_BARREL = new TagLocation<>("c", "barrel");
public static final TagNamed<Item> ITEM_WOODEN_CHEST = makeCommonItemTag("wooden_chests"); public static final TagLocation<Item> NAMED_COMMON_ITEM_CHEST = new TagLocation<>("c", "chest");
public static final TagNamed<Item> ITEM_BARREL = makeCommonItemTag("barrel"); public static final TagLocation<Item> NAMED_COMMON_ITEM_FURNACES = new TagLocation<>("c", "furnaces");
public static final TagNamed<Item> ITEM_WOODEN_BARREL = makeCommonItemTag("wooden_barrels"); public static final TagLocation<Item> NAMED_COMMON_ITEM_HAMMERS = new TagLocation<>("c", "hammers");
public static final TagNamed<Item> ITEM_IRON_INGOTS = makeCommonItemTag("iron_ingots"); public static final TagLocation<Item> NAMED_COMMON_ITEM_IRON_INGOTS = new TagLocation<>("c", "iron_ingots");
public static final TagNamed<Item> ITEM_FURNACES = makeCommonItemTag("furnaces"); public static final TagLocation<Item> NAMED_COMMON_ITEM_LEAVES = new TagLocation<>("c", "leaves");
public static final TagNamed<Item> ITEM_WORKBENCHES = makeCommonItemTag("workbench"); public static final TagLocation<Item> NAMED_COMMON_ITEM_SAPLINGS = new TagLocation<>("c", "saplings");
public final static TagNamed<Item> ITEM_HAMMERS = makeCommonItemTag("hammers"); public static final TagLocation<Item> NAMED_COMMON_ITEM_SHEARS = new TagLocation<>("c", "shears");
public static final TagNamed<Item> ITEM_SAPLINGS = makeCommonItemTag("saplings"); public static final TagLocation<Item> NAMED_COMMON_ITEM_SOUL_GROUND = new TagLocation<>("c", "soul_ground");
public static final TagNamed<Item> ITEM_LEAVES = makeCommonItemTag("leaves"); public static final TagLocation<Item> NAMED_COMMON_ITEM_WOODEN_BARREL = new TagLocation<>("c", "wooden_barrels");
public static final TagNamed<Item> ITEM_SHEARS = getMCItemTag("shears"); public static final TagLocation<Item> NAMED_COMMON_ITEM_WOODEN_CHEST = new TagLocation<>("c", "wooden_chests");
public static final TagNamed<Item> ITEM_COMMON_SHEARS = makeCommonItemTag("shears"); public static final TagLocation<Item> NAMED_COMMON_ITEM_WORKBENCHES = new TagLocation<>("c", "workbench");
public static final TagNamed<Item> ITEM_SOUL_GROUND = makeCommonItemTag("soul_ground");
// TAGS //
// Common Block Tags
public static final TagNamed<Block> COMMON_BLOCK_BARREL = makeCommonBlockTag("barrel");
public static final TagNamed<Block> COMMON_BLOCK_BOOKSHELVES = makeCommonBlockTag("bookshelves");
public static final TagNamed<Block> COMMON_BLOCK_CHEST = makeCommonBlockTag("chest");
public static final TagNamed<Block> COMMON_BLOCK_END_STONES = makeCommonBlockTag("end_stones");
public static final TagNamed<Block> COMMON_BLOCK_IMMOBILE = makeCommonBlockTag("immobile");
public static final TagNamed<Block> COMMON_BLOCK_LEAVES = makeCommonBlockTag("leaves");
public static final TagNamed<Block> COMMON_BLOCK_NETHERRACK = makeCommonBlockTag("netherrack");
public static final TagNamed<Block> COMMON_BLOCK_NETHER_MYCELIUM = makeCommonBlockTag("nether_mycelium");
public static final TagNamed<Block> COMMON_BLOCK_NETHER_PORTAL_FRAME = makeCommonBlockTag("nether_pframe");
public static final TagNamed<Block> COMMON_BLOCK_NETHER_STONES = makeCommonBlockTag("nether_stones");
public static final TagNamed<Block> COMMON_BLOCK_SAPLINGS = makeCommonBlockTag("saplings");
public static final TagNamed<Block> COMMON_BLOCK_SOUL_GROUND = makeCommonBlockTag("soul_ground");
public static final TagNamed<Block> COMMON_BLOCK_WOODEN_BARREL = makeCommonBlockTag("wooden_barrels");
public static final TagNamed<Block> COMMON_BLOCK_WOODEN_CHEST = makeCommonBlockTag("wooden_chests");
public static final TagNamed<Block> COMMON_BLOCK_WORKBENCHES = makeCommonBlockTag("workbench");
// Common Item Tags
public final static TagNamed<Item> COMMON_ITEM_HAMMERS = makeCommonItemTag("hammers");
public static final TagNamed<Item> COMMON_ITEM_BARREL = makeCommonItemTag("barrel");
public static final TagNamed<Item> COMMON_ITEM_CHEST = makeCommonItemTag("chest");
public static final TagNamed<Item> COMMON_ITEM_SHEARS = makeCommonItemTag("shears");
public static final TagNamed<Item> COMMON_ITEM_FURNACES = makeCommonItemTag("furnaces");
public static final TagNamed<Item> COMMON_ITEM_IRON_INGOTS = makeCommonItemTag("iron_ingots");
public static final TagNamed<Item> COMMON_ITEM_LEAVES = makeCommonItemTag("leaves");
public static final TagNamed<Item> COMMON_ITEM_SAPLINGS = makeCommonItemTag("saplings");
public static final TagNamed<Item> COMMON_ITEM_SOUL_GROUND = makeCommonItemTag("soul_ground");
public static final TagNamed<Item> COMMON_ITEM_WOODEN_BARREL = makeCommonItemTag("wooden_barrels");
public static final TagNamed<Item> COMMON_ITEM_WOODEN_CHEST = makeCommonItemTag("wooden_chests");
public static final TagNamed<Item> COMMON_ITEM_WORKBENCHES = makeCommonItemTag("workbench");
/** /**
* Get or create {@link Tag.Named}. * Get or create {@link Tag.Named}.
@ -148,36 +228,22 @@ public class TagAPI {
* @param name - {@link String} tag name. * @param name - {@link String} tag name.
* @return {@link Block} {@link Tag.Named}. * @return {@link Block} {@link Tag.Named}.
*/ */
@Deprecated(forRemoval = true)
public static TagNamed<Block> getMCBlockTag(String name) { public static TagNamed<Block> getMCBlockTag(String name) {
ResourceLocation id = new ResourceLocation(name); ResourceLocation id = new ResourceLocation(name);
Tag<Block> tag = BlockTags.getAllTags().getTag(id); Tag<Block> tag = BlockTags.getAllTags().getTag(id);
return CommonDelegate.proxy(tag == null ? (Named<Block>) TagFactory.BLOCK.create(id): (Named<Block>) tag); return CommonDelegate.proxy(tag == null ? (Named<Block>) TagFactory.BLOCK.create(id): (Named<Block>) tag);
} }
/**
* Get or create Minecraft {@link Item} {@link Tag.Named}.
*
* @param name - {@link String} tag name.
* @return {@link Item} {@link Tag.Named}.
*/
public static TagNamed<Item> getMCItemTag(String name) {
ResourceLocation id = new ResourceLocation(name);
Tag<Item> tag = ItemTags.getAllTags().getTag(id);
return CommonDelegate.proxy(tag == null ? (Named<Item>) TagRegistry.item(id) : (Named<Item>) tag);
}
/** /**
* Initializes basic tags. Should be called only in BCLib main class. * Initializes basic tags. Should be called only in BCLib main class.
*/ */
public static void init() { public static void init() {
addBlockTag(BLOCK_BOOKSHELVES.getName(), Blocks.BOOKSHELF); addBlockTag(COMMON_BLOCK_BOOKSHELVES.getName(), Blocks.BOOKSHELF);
addBlockTag(BLOCK_GEN_TERRAIN.getName(), Blocks.END_STONE, Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); addBlockTag(COMMON_BLOCK_CHEST.getName(), Blocks.CHEST);
addBlockTag(BLOCK_NETHER_GROUND.getName(), Blocks.NETHERRACK, Blocks.SOUL_SAND, Blocks.SOUL_SOIL); addItemTag(COMMON_ITEM_CHEST.getName(), Items.CHEST);
addBlockTag(BLOCK_END_GROUND.getName(), Blocks.END_STONE); addItemTag(COMMON_ITEM_IRON_INGOTS.getName(), Items.IRON_INGOT);
addBlockTag(BLOCK_CHEST.getName(), Blocks.CHEST); addItemTag(COMMON_ITEM_FURNACES.getName(), Blocks.FURNACE);
addItemTag(ITEM_CHEST.getName(), Items.CHEST);
addItemTag(ITEM_IRON_INGOTS.getName(), Items.IRON_INGOT);
addItemTag(ITEM_FURNACES.getName(), Blocks.FURNACE);
} }
/** /**
@ -288,109 +354,6 @@ public class TagAPI {
return builder; return builder;
} }
// DEPRECATED SECTION //
// WILL BE REMOVED IN 1.3.0 //
/**
* Deprecated due to low compatibility. Use addTag({@link ResourceLocation}, {@link ItemLike}... items) instead.
*
* Adds one Tag to multiple Items.
* <p>
* Example:
* <pre>{@code Tag.Named<Item> METALS = makeBlockTag("mymod", "metals");
* addTag(METALS, Items.IRON_INGOT, Items.GOLD_INGOT, Items.COPPER_INGOT);}</pre>
* <p>
* The call will reserve the Tag. The Tag is added to the items once
* {@link #apply(String, Map)} was executed.
*
* @param tag The new Tag
* @param items One or more item that should receive the Tag.
*/
@Deprecated
public static void addTag(Tag.Named<Item> tag, ItemLike... items) {
addItemTagUntyped(tag.getName(), items);
}
/**
* Deprecated, use addTag({@link ResourceLocation}, {@link ItemLike}... items) instead.
*
* Adds multiple Tags to one Item.
* <p>
* The call will reserve the Tags. The Tags are added to the Item once
* * {@link #apply(String, Map)} was executed.
*
* @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<Item>... tags) {
for (Tag.Named<Item> tag : tags) {
addItemTagUntyped(tag.getName(), item);
}
}
/**
* Deprecated, use addTag({@link ResourceLocation}, {@link Block}... blocks) instead.
*
* Adds multiple Tags to one Block.
* <p>
* The call will reserve the Tags. The Tags are added to the Block once
* * {@link #apply(String, Map)} was executed.
*
* @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<Block>... tags) {
for (Tag.Named<Block> tag : tags) {
addTag(tag, block);
}
}
/**
* 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) {
addBlockTagUntyped(tag.getName(), blocks);
}
/**
* Adds {@link Block} to NETHER_GROUND and GEN_TERRAIN tags to process it properly in terrain generators and block logic.
*
* @param block - {@link Block}.
*/
@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);
}
/** /**
* Extends {@link Tag.Named} to return a type safe {@link TagLocation}. This Type was introduced to * Extends {@link Tag.Named} to return a type safe {@link TagLocation}. This Type was introduced to
* allow type-safe definition of Tags using their ResourceLocation. * allow type-safe definition of Tags using their ResourceLocation.
@ -413,6 +376,10 @@ public class TagAPI {
public TagLocation(String string, String string2) { public TagLocation(String string, String string2) {
super(string, string2); super(string, string2);
} }
public TagLocation(ResourceLocation location) {
super(location.getNamespace(), location.getPath());
}
} }
private abstract static class CommonDelegate<T> implements TagNamed<T> { private abstract static class CommonDelegate<T> implements TagNamed<T> {

View file

@ -37,7 +37,6 @@ import ru.bclib.util.ColorUtil;
import ru.bclib.util.TriFunction; import ru.bclib.util.TriFunction;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.biomes.BCLBiomeSettings; import ru.bclib.world.biomes.BCLBiomeSettings;
import ru.bclib.world.biomes.BCLBiomeSettings.Builder;
import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.BCLFeature;
import ru.bclib.world.structures.BCLStructureFeature; import ru.bclib.world.structures.BCLStructureFeature;

View file

@ -7,7 +7,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.mojang.serialization.Codec;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback; import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback;
@ -56,7 +55,6 @@ import net.minecraft.world.level.storage.WorldData;
import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.mutable.MutableInt;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.BCLib; import ru.bclib.BCLib;
import ru.bclib.config.Configs;
import ru.bclib.entity.BCLEntityWrapper; import ru.bclib.entity.BCLEntityWrapper;
import ru.bclib.interfaces.BiomeSourceAccessor; import ru.bclib.interfaces.BiomeSourceAccessor;
import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.bclib.interfaces.SurfaceMaterialProvider;
@ -69,7 +67,6 @@ import ru.bclib.mixin.common.StructureSettingsAccessor;
import ru.bclib.util.CollectionsUtil; import ru.bclib.util.CollectionsUtil;
import ru.bclib.util.MHelper; import ru.bclib.util.MHelper;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.biomes.BCLBiomeSettings;
import ru.bclib.world.biomes.FabricBiomesData; import ru.bclib.world.biomes.FabricBiomesData;
import ru.bclib.world.biomes.VanillaBiomeSettings; import ru.bclib.world.biomes.VanillaBiomeSettings;
import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.BCLFeature;

View file

@ -1,6 +1,5 @@
package ru.bclib.api.surface.rules; package ru.bclib.api.surface.rules;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.mixin.common.SurfaceRulesContextAccessor;

View file

@ -1,9 +1,6 @@
package ru.bclib.api.surface.rules; package ru.bclib.api.surface.rules;
import com.mojang.serialization.Codec;
import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.SurfaceRules.Condition; import net.minecraft.world.level.levelgen.SurfaceRules.Condition;
import net.minecraft.world.level.levelgen.SurfaceRules.ConditionSource;
import net.minecraft.world.level.levelgen.SurfaceRules.Context; import net.minecraft.world.level.levelgen.SurfaceRules.Context;
import net.minecraft.world.level.levelgen.SurfaceRules.LazyXZCondition; import net.minecraft.world.level.levelgen.SurfaceRules.LazyXZCondition;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.mixin.common.SurfaceRulesContextAccessor;

View file

@ -1,24 +1,17 @@
package ru.bclib.api.surface.rules; package ru.bclib.api.surface.rules;
import com.mojang.datafixers.kinds.Applicative;
import com.mojang.datafixers.kinds.K1;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.SurfaceRules.Context; import net.minecraft.world.level.levelgen.SurfaceRules.Context;
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
import net.minecraft.world.level.levelgen.SurfaceRules.SurfaceRule; import net.minecraft.world.level.levelgen.SurfaceRules.SurfaceRule;
import net.minecraft.world.level.levelgen.VerticalAnchor;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.interfaces.NumericProvider; import ru.bclib.interfaces.NumericProvider;
import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.mixin.common.SurfaceRulesContextAccessor;
import java.util.List; import java.util.List;
import java.util.function.Function;
// //
public record SwitchRuleSource(NumericProvider selector, List<RuleSource> collection) implements RuleSource { public record SwitchRuleSource(NumericProvider selector, List<RuleSource> collection) implements RuleSource {

View file

@ -1,7 +1,6 @@
package ru.bclib.api.surface.rules; package ru.bclib.api.surface.rules;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.world.level.levelgen.SurfaceRules;
import net.minecraft.world.level.levelgen.SurfaceRules.Condition; import net.minecraft.world.level.levelgen.SurfaceRules.Condition;
import net.minecraft.world.level.levelgen.SurfaceRules.ConditionSource; import net.minecraft.world.level.levelgen.SurfaceRules.ConditionSource;
import net.minecraft.world.level.levelgen.SurfaceRules.Context; import net.minecraft.world.level.levelgen.SurfaceRules.Context;

View file

@ -8,9 +8,6 @@ import net.minecraft.client.resources.model.BlockModelRotation;
import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag.Named;
import net.minecraft.util.StringRepresentable; import net.minecraft.util.StringRepresentable;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -22,6 +19,8 @@ import net.minecraft.world.level.block.state.properties.DoorHingeSide;
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.models.BasePatterns; import ru.bclib.client.models.BasePatterns;
import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.models.ModelsHelper;
import ru.bclib.client.models.PatternsHelper; import ru.bclib.client.models.PatternsHelper;
@ -151,9 +150,9 @@ public class BaseDoorBlock extends DoorBlock implements RenderLayerProvider, Blo
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(BlockTags.DOORS); blockTags.add(TagAPI.NAMED_BLOCK_DOORS);
itemTags.add(ItemTags.DOORS); itemTags.add(TagAPI.NAMED_ITEM_DOORS);
} }
protected enum DoorType implements StringRepresentable { protected enum DoorType implements StringRepresentable {

View file

@ -1,12 +1,9 @@
package ru.bclib.blocks; package ru.bclib.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
@ -19,6 +16,7 @@ import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.BlockModelProvider;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.RenderLayerProvider;
@ -94,9 +92,10 @@ public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider,
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(FabricMineableTags.SHEARS_MINEABLE); blockTags.add(TagAPI.NAMED_MINEABLE_SHEARS);
//blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(TagAPI.NAMED_MINEABLE_HOE);
blockTags.add(BlockTags.LEAVES); blockTags.add(TagAPI.NAMED_BLOCK_LEAVES);
itemTags.add(TagAPI.NAMED_ITEM_LEAVES);
} }
} }

View file

@ -25,7 +25,6 @@ import ru.bclib.util.MHelper;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.function.Supplier; import java.util.function.Supplier;
public class BaseOreBlock extends OreBlock implements BlockModelProvider { public class BaseOreBlock extends OreBlock implements BlockModelProvider {

View file

@ -3,7 +3,6 @@ package ru.bclib.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
@ -11,7 +10,6 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -35,6 +33,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.models.BasePatterns; import ru.bclib.client.models.BasePatterns;
import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.models.ModelsHelper;
import ru.bclib.client.models.PatternsHelper; import ru.bclib.client.models.PatternsHelper;
@ -170,8 +169,8 @@ public abstract class BasePlantBlock extends BaseBlockNotFull implements RenderL
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(FabricMineableTags.SHEARS_MINEABLE); blockTags.add(TagAPI.NAMED_MINEABLE_SHEARS);
blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(TagAPI.NAMED_MINEABLE_HOE);
} }
} }

View file

@ -1,9 +1,6 @@
package ru.bclib.blocks; package ru.bclib.blocks;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
@ -11,6 +8,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.RenderLayerProvider;
import ru.bclib.interfaces.TagProvider; import ru.bclib.interfaces.TagProvider;
@ -57,9 +55,10 @@ public class SimpleLeavesBlock extends BaseBlockNotFull implements RenderLayerPr
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(FabricMineableTags.SHEARS_MINEABLE); blockTags.add(TagAPI.NAMED_MINEABLE_SHEARS);
blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(TagAPI.NAMED_MINEABLE_HOE);
blockTags.add(BlockTags.LEAVES); blockTags.add(TagAPI.NAMED_BLOCK_LEAVES);
itemTags.add(TagAPI.NAMED_ITEM_LEAVES);
} }
} }

View file

@ -1,13 +1,11 @@
package ru.bclib.blocks; package ru.bclib.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -34,6 +32,7 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.RenderLayerProvider;
import ru.bclib.interfaces.TagProvider; import ru.bclib.interfaces.TagProvider;
@ -161,8 +160,8 @@ public abstract class UnderwaterPlantBlock extends BaseBlockNotFull implements R
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(FabricMineableTags.SHEARS_MINEABLE); blockTags.add(TagAPI.NAMED_MINEABLE_SHEARS);
blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(TagAPI.NAMED_MINEABLE_HOE);
} }
} }

View file

@ -1,12 +1,10 @@
package ru.bclib.blocks; package ru.bclib.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -28,6 +26,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.RenderLayerProvider;
import ru.bclib.interfaces.TagProvider; import ru.bclib.interfaces.TagProvider;
@ -107,8 +106,8 @@ public abstract class UpDownPlantBlock extends BaseBlockNotFull implements Rende
} }
@Override @Override
public void addTags(List<Named<Block>> blockTags, List<Named<Item>> itemTags) { public void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags) {
blockTags.add(FabricMineableTags.SHEARS_MINEABLE); blockTags.add(TagAPI.NAMED_MINEABLE_SHEARS);
blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(TagAPI.NAMED_MINEABLE_HOE);
} }
} }

View file

@ -4,9 +4,6 @@ import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
@ -14,6 +11,7 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.BCLib; import ru.bclib.BCLib;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.blocks.BaseBarkBlock; import ru.bclib.blocks.BaseBarkBlock;
import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseBarrelBlock;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
@ -98,112 +96,92 @@ public class WoodenComplexMaterial extends ComplexMaterial {
} }
final protected void initBase(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) { final protected void initBase(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) {
Tag.Named<Block> tagBlockLog = getBlockTag(TAG_LOGS); TagLocation<Block> tagBlockLog = new TagLocation<>(getBlockTag(TAG_LOGS).getName());
Tag.Named<Item> tagItemLog = getItemTag(TAG_LOGS); TagLocation<Item> tagItemLog = new TagLocation<>(getItemTag(TAG_LOGS).getName());
addBlockEntry( addBlockEntry(
new BlockEntry(BLOCK_STRIPPED_LOG, (complexMaterial, settings) -> { new BlockEntry(BLOCK_STRIPPED_LOG, (complexMaterial, settings) -> new BaseRotatedPillarBlock(settings))
return new BaseRotatedPillarBlock(settings); .setBlockTags(TagAPI.NAMED_BLOCK_LOGS, TagAPI.NAMED_BLOCK_LOGS_THAT_BURN, tagBlockLog)
}) .setItemTags(TagAPI.NAMED_ITEM_LOGS, TagAPI.NAMED_ITEM_LOGS_THAT_BURN, tagItemLog)
.setBlockTags(BlockTags.LOGS, BlockTags.LOGS_THAT_BURN, tagBlockLog)
.setItemTags(ItemTags.LOGS, ItemTags.LOGS_THAT_BURN, tagItemLog)
); );
addBlockEntry( addBlockEntry(
new BlockEntry(BLOCK_STRIPPED_BARK, (complexMaterial, settings) -> { new BlockEntry(BLOCK_STRIPPED_BARK, (complexMaterial, settings) -> new BaseBarkBlock(settings))
return new BaseBarkBlock(settings); .setBlockTags(TagAPI.NAMED_BLOCK_LOGS, TagAPI.NAMED_BLOCK_LOGS_THAT_BURN, tagBlockLog)
}) .setItemTags(TagAPI.NAMED_ITEM_LOGS, TagAPI.NAMED_ITEM_LOGS_THAT_BURN, tagItemLog)
.setBlockTags(BlockTags.LOGS, BlockTags.LOGS_THAT_BURN, tagBlockLog)
.setItemTags(ItemTags.LOGS, ItemTags.LOGS_THAT_BURN, tagItemLog)
); );
addBlockEntry( addBlockEntry(
new BlockEntry(BLOCK_LOG, (complexMaterial, settings) -> { new BlockEntry(BLOCK_LOG, (complexMaterial, settings) -> new BaseStripableLogBlock(woodColor, getBlock(BLOCK_STRIPPED_LOG)))
return new BaseStripableLogBlock(woodColor, getBlock(BLOCK_STRIPPED_LOG)); .setBlockTags(TagAPI.NAMED_BLOCK_LOGS, TagAPI.NAMED_BLOCK_LOGS_THAT_BURN, tagBlockLog)
}) .setItemTags(TagAPI.NAMED_ITEM_LOGS, TagAPI.NAMED_ITEM_LOGS_THAT_BURN, tagItemLog)
.setBlockTags(BlockTags.LOGS, BlockTags.LOGS_THAT_BURN, tagBlockLog)
.setItemTags(ItemTags.LOGS, ItemTags.LOGS_THAT_BURN, tagItemLog)
); );
addBlockEntry( addBlockEntry(
new BlockEntry(BLOCK_BARK, (complexMaterial, settings) -> { new BlockEntry(BLOCK_BARK, (complexMaterial, settings) -> new StripableBarkBlock(woodColor, getBlock(BLOCK_STRIPPED_BARK)))
return new StripableBarkBlock(woodColor, getBlock(BLOCK_STRIPPED_BARK)); .setBlockTags(TagAPI.NAMED_BLOCK_LOGS, TagAPI.NAMED_BLOCK_LOGS_THAT_BURN, tagBlockLog)
}) .setItemTags(TagAPI.NAMED_ITEM_LOGS, TagAPI.NAMED_ITEM_LOGS_THAT_BURN, tagItemLog)
.setBlockTags(BlockTags.LOGS, BlockTags.LOGS_THAT_BURN, tagBlockLog)
.setItemTags(ItemTags.LOGS, ItemTags.LOGS_THAT_BURN, tagItemLog)
); );
addBlockEntry(new BlockEntry(BLOCK_PLANKS, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_PLANKS, (complexMaterial, settings) -> new BaseBlock(settings))
return new BaseBlock(settings); .setBlockTags(TagAPI.NAMED_BLOCK_PLANKS)
}).setBlockTags(BlockTags.PLANKS) .setItemTags(TagAPI.NAMED_ITEM_PLANKS));
.setItemTags(ItemTags.PLANKS));
addBlockEntry(new BlockEntry(BLOCK_STAIRS, (complexMaterial, settings) -> {
return new BaseStairsBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.WOODEN_STAIRS, BlockTags.STAIRS)
.setItemTags(ItemTags.WOODEN_STAIRS, ItemTags.STAIRS));
addBlockEntry(new BlockEntry(BLOCK_SLAB, (complexMaterial, settings) -> {
return new BaseSlabBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.WOODEN_SLABS, BlockTags.SLABS)
.setItemTags(ItemTags.WOODEN_SLABS, ItemTags.SLABS));
addBlockEntry(new BlockEntry(BLOCK_FENCE, (complexMaterial, settings) -> {
return new BaseFenceBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.FENCES, BlockTags.WOODEN_FENCES)
.setItemTags(ItemTags.FENCES, ItemTags.WOODEN_FENCES));
addBlockEntry(new BlockEntry(BLOCK_GATE, (complexMaterial, settings) -> {
return new BaseGateBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.FENCE_GATES));
addBlockEntry(new BlockEntry(BLOCK_BUTTON, (complexMaterial, settings) -> {
return new BaseWoodenButtonBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.BUTTONS, BlockTags.WOODEN_BUTTONS)
.setItemTags(ItemTags.BUTTONS, ItemTags.WOODEN_BUTTONS));
addBlockEntry(new BlockEntry(BLOCK_PRESSURE_PLATE, (complexMaterial, settings) -> {
return new WoodenPressurePlateBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.PRESSURE_PLATES, BlockTags.WOODEN_PRESSURE_PLATES)
.setItemTags(ItemTags.WOODEN_PRESSURE_PLATES));
addBlockEntry(new BlockEntry(BLOCK_TRAPDOOR, (complexMaterial, settings) -> {
return new BaseTrapdoorBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.TRAPDOORS, BlockTags.WOODEN_TRAPDOORS)
.setItemTags(ItemTags.TRAPDOORS, ItemTags.WOODEN_TRAPDOORS));
addBlockEntry(new BlockEntry(BLOCK_DOOR, (complexMaterial, settings) -> {
return new BaseDoorBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.DOORS, BlockTags.WOODEN_DOORS)
.setItemTags(ItemTags.DOORS, ItemTags.WOODEN_DOORS));
addBlockEntry(new BlockEntry(BLOCK_LADDER, (complexMaterial, settings) -> {
return new BaseLadderBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.CLIMBABLE));
addBlockEntry(new BlockEntry(BLOCK_SIGN, (complexMaterial, settings) -> {
return new BaseSignBlock(getBlock(BLOCK_PLANKS));
}).setBlockTags(BlockTags.SIGNS)
.setItemTags(ItemTags.SIGNS));
addBlockEntry(new BlockEntry(BLOCK_STAIRS, (complexMaterial, settings) -> new BaseStairsBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_WOODEN_STAIRS, TagAPI.NAMED_BLOCK_STAIRS)
.setItemTags(TagAPI.NAMED_ITEM_WOODEN_STAIRS, TagAPI.NAMED_ITEM_STAIRS));
addBlockEntry(new BlockEntry(BLOCK_SLAB, (complexMaterial, settings) -> new BaseSlabBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_WOODEN_SLABS, TagAPI.NAMED_BLOCK_SLABS)
.setItemTags(TagAPI.NAMED_ITEM_WOODEN_SLABS, TagAPI.NAMED_ITEM_SLABS));
addBlockEntry(new BlockEntry(BLOCK_FENCE, (complexMaterial, settings) -> new BaseFenceBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_FENCES, TagAPI.NAMED_BLOCK_WOODEN_FENCES)
.setItemTags(TagAPI.NAMED_ITEM_FENCES, TagAPI.NAMED_ITEM_WOODEN_FENCES));
addBlockEntry(new BlockEntry(BLOCK_GATE, (complexMaterial, settings) -> new BaseGateBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_FENCE_GATES));
addBlockEntry(new BlockEntry(BLOCK_BUTTON, (complexMaterial, settings) -> new BaseWoodenButtonBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_BUTTONS, TagAPI.NAMED_BLOCK_WOODEN_BUTTONS)
.setItemTags(TagAPI.NAMED_ITEM_BUTTONS, TagAPI.NAMED_ITEM_WOODEN_BUTTONS));
addBlockEntry(new BlockEntry(BLOCK_PRESSURE_PLATE, (complexMaterial, settings) -> new WoodenPressurePlateBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_PRESSURE_PLATES, TagAPI.NAMED_BLOCK_WOODEN_PRESSURE_PLATES)
.setItemTags(TagAPI.NAMED_ITEM_WOODEN_PRESSURE_PLATES));
addBlockEntry(new BlockEntry(BLOCK_TRAPDOOR, (complexMaterial, settings) -> new BaseTrapdoorBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_TRAPDOORS, TagAPI.NAMED_BLOCK_WOODEN_TRAPDOORS)
.setItemTags(TagAPI.NAMED_ITEM_TRAPDOORS, TagAPI.NAMED_ITEM_WOODEN_TRAPDOORS));
addBlockEntry(new BlockEntry(BLOCK_DOOR, (complexMaterial, settings) -> new BaseDoorBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_DOORS, TagAPI.NAMED_BLOCK_WOODEN_DOORS)
.setItemTags(TagAPI.NAMED_ITEM_DOORS, TagAPI.NAMED_ITEM_WOODEN_DOORS));
addBlockEntry(new BlockEntry(BLOCK_LADDER, (complexMaterial, settings) -> new BaseLadderBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_CLIMBABLE));
addBlockEntry(new BlockEntry(BLOCK_SIGN, (complexMaterial, settings) -> new BaseSignBlock(getBlock(BLOCK_PLANKS)))
.setBlockTags(TagAPI.NAMED_BLOCK_SIGNS)
.setItemTags(TagAPI.NAMED_ITEM_SIGNS));
} }
final protected void initStorage(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) { final protected void initStorage(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) {
addBlockEntry(new BlockEntry(BLOCK_CHEST, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_CHEST, (complexMaterial, settings) -> new BaseChestBlock(getBlock(BLOCK_PLANKS)))
return new BaseChestBlock(getBlock(BLOCK_PLANKS)); .setBlockTags(TagAPI.NAMED_COMMON_BLOCK_CHEST, TagAPI.NAMED_COMMON_BLOCK_WOODEN_CHEST)
}).setBlockTags(TagAPI.BLOCK_CHEST, TagAPI.BLOCK_WOODEN_CHEST) .setItemTags(TagAPI.NAMED_COMMON_ITEM_CHEST, TagAPI.NAMED_COMMON_ITEM_WOODEN_CHEST));
.setItemTags(TagAPI.ITEM_CHEST, TagAPI.ITEM_WOODEN_CHEST));
addBlockEntry(new BlockEntry(BLOCK_BARREL, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_BARREL, (complexMaterial, settings) -> new BaseBarrelBlock(getBlock(BLOCK_PLANKS)))
return new BaseBarrelBlock(getBlock(BLOCK_PLANKS)); .setBlockTags(TagAPI.NAMED_COMMON_BLOCK_BARREL, TagAPI.NAMED_COMMON_BLOCK_WOODEN_BARREL)
}).setBlockTags(TagAPI.BLOCK_BARREL, TagAPI.BLOCK_WOODEN_BARREL) .setItemTags(TagAPI.NAMED_COMMON_ITEM_BARREL, TagAPI.NAMED_COMMON_ITEM_WOODEN_BARREL));
.setItemTags(TagAPI.ITEM_BARREL, TagAPI.ITEM_WOODEN_BARREL));
} }
final protected void initDecorations(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) { final protected void initDecorations(FabricBlockSettings blockSettings, FabricItemSettings itemSettings) {
addBlockEntry(new BlockEntry(BLOCK_CRAFTING_TABLE, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_CRAFTING_TABLE, (complexMaterial, settings) -> new BaseCraftingTableBlock(getBlock(BLOCK_PLANKS)))
return new BaseCraftingTableBlock(getBlock(BLOCK_PLANKS)); .setBlockTags(TagAPI.NAMED_COMMON_BLOCK_WORKBENCHES)
}).setBlockTags(TagAPI.BLOCK_WORKBENCHES) .setItemTags(TagAPI.NAMED_COMMON_ITEM_WORKBENCHES));
.setItemTags(TagAPI.ITEM_WORKBENCHES));
addBlockEntry(new BlockEntry(BLOCK_BOOKSHELF, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_BOOKSHELF, (complexMaterial, settings) -> new BaseBookshelfBlock(getBlock(BLOCK_PLANKS)))
return new BaseBookshelfBlock(getBlock(BLOCK_PLANKS)); .setBlockTags(TagAPI.NAMED_COMMON_BLOCK_BOOKSHELVES));
}).setBlockTags(TagAPI.BLOCK_BOOKSHELVES));
addBlockEntry(new BlockEntry(BLOCK_COMPOSTER, (complexMaterial, settings) -> { addBlockEntry(new BlockEntry(BLOCK_COMPOSTER, (complexMaterial, settings) -> new BaseComposterBlock(getBlock(BLOCK_PLANKS))));
return new BaseComposterBlock(getBlock(BLOCK_PLANKS));
}));
} }
@Override @Override

View file

@ -2,10 +2,10 @@ package ru.bclib.complexmaterials.entry;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.complexmaterials.ComplexMaterial; import ru.bclib.complexmaterials.ComplexMaterial;
import ru.bclib.registry.BlockRegistry; import ru.bclib.registry.BlockRegistry;
@ -15,8 +15,8 @@ public class BlockEntry extends ComplexMaterialEntry {
final BiFunction<ComplexMaterial, FabricBlockSettings, Block> initFunction; final BiFunction<ComplexMaterial, FabricBlockSettings, Block> initFunction;
final boolean hasItem; final boolean hasItem;
Tag.Named<Block>[] blockTags; TagLocation<Block>[] blockTags;
Tag.Named<Item>[] itemTags; TagLocation<Item>[] itemTags;
public BlockEntry(String suffix, BiFunction<ComplexMaterial, FabricBlockSettings, Block> initFunction) { public BlockEntry(String suffix, BiFunction<ComplexMaterial, FabricBlockSettings, Block> initFunction) {
this(suffix, true, initFunction); this(suffix, true, initFunction);
@ -28,12 +28,12 @@ public class BlockEntry extends ComplexMaterialEntry {
this.hasItem = hasItem; this.hasItem = hasItem;
} }
public BlockEntry setBlockTags(Tag.Named<Block>... blockTags) { public BlockEntry setBlockTags(TagLocation<Block>... blockTags) {
this.blockTags = blockTags; this.blockTags = blockTags;
return this; return this;
} }
public BlockEntry setItemTags(Tag.Named<Item>... itemTags) { public BlockEntry setItemTags(TagLocation<Item>... itemTags) {
this.itemTags = itemTags; this.itemTags = itemTags;
return this; return this;
} }
@ -44,14 +44,14 @@ public class BlockEntry extends ComplexMaterialEntry {
if (hasItem) { if (hasItem) {
registry.register(location, block); registry.register(location, block);
if (itemTags != null) { if (itemTags != null) {
TagAPI.addTags(block, itemTags); TagAPI.addItemTags(block, itemTags);
} }
} }
else { else {
registry.registerBlockOnly(location, block); registry.registerBlockOnly(location, block);
} }
if (blockTags != null) { if (blockTags != null) {
TagAPI.addTags(block, blockTags); TagAPI.addBlockTags(block, blockTags);
} }
return block; return block;
} }

View file

@ -2,9 +2,9 @@ package ru.bclib.complexmaterials.entry;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.api.TagAPI.TagLocation;
import ru.bclib.complexmaterials.ComplexMaterial; import ru.bclib.complexmaterials.ComplexMaterial;
import ru.bclib.registry.ItemRegistry; import ru.bclib.registry.ItemRegistry;
@ -13,14 +13,14 @@ import java.util.function.BiFunction;
public class ItemEntry extends ComplexMaterialEntry { public class ItemEntry extends ComplexMaterialEntry {
final BiFunction<ComplexMaterial, FabricItemSettings, Item> initFunction; final BiFunction<ComplexMaterial, FabricItemSettings, Item> initFunction;
Tag.Named<Item>[] itemTags; TagLocation<Item>[] itemTags;
public ItemEntry(String suffix, BiFunction<ComplexMaterial, FabricItemSettings, Item> initFunction) { public ItemEntry(String suffix, BiFunction<ComplexMaterial, FabricItemSettings, Item> initFunction) {
super(suffix); super(suffix);
this.initFunction = initFunction; this.initFunction = initFunction;
} }
public ItemEntry setItemTags(Tag.Named<Item>[] itemTags) { public ItemEntry setItemTags(TagLocation<Item>[] itemTags) {
this.itemTags = itemTags; this.itemTags = itemTags;
return this; return this;
} }
@ -30,7 +30,7 @@ public class ItemEntry extends ComplexMaterialEntry {
Item item = initFunction.apply(material, itemSettings); Item item = initFunction.apply(material, itemSettings);
registry.register(location, item); registry.register(location, item);
if (itemTags != null) { if (itemTags != null) {
TagAPI.addTags(item, itemTags); TagAPI.addItemTags(item, itemTags);
} }
return item; return item;
} }

View file

@ -1,12 +1,11 @@
package ru.bclib.interfaces; package ru.bclib.interfaces;
import net.minecraft.tags.Tag;
import net.minecraft.tags.Tag.Named;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.bclib.api.TagAPI.TagLocation;
import java.util.List; import java.util.List;
public interface TagProvider { public interface TagProvider {
void addTags(List<Named<Block>> blockTags, List<Tag.Named<Item>> itemTags); void addTags(List<TagLocation<Block>> blockTags, List<TagLocation<Item>> itemTags);
} }

View file

@ -1,5 +1,6 @@
package ru.bclib.items.tool; package ru.bclib.items.tool;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
@ -12,12 +13,12 @@ public class BaseShearsItem extends ShearsItem {
} }
public static boolean isShear(ItemStack tool){ public static boolean isShear(ItemStack tool){
return tool.is(Items.SHEARS) | tool.is(TagAPI.ITEM_COMMON_SHEARS) || tool.is(TagAPI.ITEM_SHEARS); return tool.is(Items.SHEARS) | tool.is(TagAPI.COMMON_ITEM_SHEARS) || tool.is(FabricToolTags.SHEARS);
} }
public static boolean isShear(ItemStack itemStack, Item item){ public static boolean isShear(ItemStack itemStack, Item item){
if (item == Items.SHEARS){ if (item == Items.SHEARS){
return itemStack.is(item) | itemStack.is(TagAPI.ITEM_COMMON_SHEARS) || itemStack.is(TagAPI.ITEM_SHEARS); return itemStack.is(item) | itemStack.is(TagAPI.COMMON_ITEM_SHEARS) || itemStack.is(FabricToolTags.SHEARS);
} else { } else {
return itemStack.is(item); return itemStack.is(item);
} }

View file

@ -20,6 +20,6 @@ public abstract class EnchantingTableBlockMixin extends Block {
target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//, target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//,
) )
private boolean bclib_isBookshelf(BlockState state, Block block) { private boolean bclib_isBookshelf(BlockState state, Block block) {
return block == Blocks.BOOKSHELF ? state.is(TagAPI.BLOCK_BOOKSHELVES) : state.is(block); return block == Blocks.BOOKSHELF ? state.is(TagAPI.COMMON_BLOCK_BOOKSHELVES) : state.is(block);
} }
} }

View file

@ -23,7 +23,7 @@ public abstract class CraftingMenuMixin {
private void bclib_stillValid(Player player, CallbackInfoReturnable<Boolean> info) { private void bclib_stillValid(Player player, CallbackInfoReturnable<Boolean> info) {
if (access.evaluate((world, pos) -> { if (access.evaluate((world, pos) -> {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
return state.getBlock() instanceof CraftingTableBlock || state.is(TagAPI.BLOCK_WORKBENCHES); return state.getBlock() instanceof CraftingTableBlock || state.is(TagAPI.COMMON_BLOCK_WORKBENCHES);
}, true)) { }, true)) {
info.setReturnValue(true); info.setReturnValue(true);
} }

View file

@ -22,6 +22,6 @@ public abstract class EnchantmentMenuMixin extends AbstractContainerMenu {
target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//, target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z")//,
) )
private boolean bclib_isBookshelf(BlockState state, Block block) { private boolean bclib_isBookshelf(BlockState state, Block block) {
return block == Blocks.BOOKSHELF ? state.is(TagAPI.BLOCK_BOOKSHELVES) : state.is(block); return block == Blocks.BOOKSHELF ? state.is(TagAPI.COMMON_BLOCK_BOOKSHELVES) : state.is(block);
} }
} }

View file

@ -21,7 +21,6 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.bclib.BCLib;
import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.DataExchangeAPI;
import ru.bclib.recipes.BCLRecipeManager; import ru.bclib.recipes.BCLRecipeManager;

View file

@ -15,7 +15,7 @@ import ru.bclib.api.TagAPI;
public class PistonBaseBlockMixin { public class PistonBaseBlockMixin {
@Inject(method="isPushable", at=@At("HEAD"), cancellable = true) @Inject(method="isPushable", at=@At("HEAD"), cancellable = true)
private static void bclib_isPushable(BlockState blockState, Level level, BlockPos blockPos, Direction direction, boolean bl, Direction direction2, CallbackInfoReturnable<Boolean> cir){ private static void bclib_isPushable(BlockState blockState, Level level, BlockPos blockPos, Direction direction, boolean bl, Direction direction2, CallbackInfoReturnable<Boolean> cir){
if (blockState.is(TagAPI.BLOCK_IMMOBILE)){ if (blockState.is(TagAPI.COMMON_BLOCK_IMMOBILE)){
cir.setReturnValue(false); cir.setReturnValue(false);
cir.cancel(); cir.cancel();
} }

View file

@ -28,6 +28,6 @@ public class PortalShapeMixin {
} }
private static boolean be_FRAME(StatePredicate FRAME, BlockState state, BlockGetter getter, BlockPos pos){ private static boolean be_FRAME(StatePredicate FRAME, BlockState state, BlockGetter getter, BlockPos pos){
return state.is(TagAPI.BLOCK_NETHER_PORTAL_FRAME) || FRAME.test(state, getter, pos); return state.is(TagAPI.COMMON_BLOCK_NETHER_PORTAL_FRAME) || FRAME.test(state, getter, pos);
} }
} }

View file

@ -1,12 +1,10 @@
package ru.bclib.mixin.common.shears; package ru.bclib.mixin.common.shears;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.ItemPredicate.Builder;
import net.minecraft.tags.Tag;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.ItemLike;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -26,7 +24,7 @@ public abstract class ItemPredicateBuilderMixin {
@Inject(method = "matches", at = @At("HEAD"), cancellable = true) @Inject(method = "matches", at = @At("HEAD"), cancellable = true)
void bclib_of(ItemStack itemStack, CallbackInfoReturnable<Boolean> cir) { void bclib_of(ItemStack itemStack, CallbackInfoReturnable<Boolean> cir) {
if (this.items != null && this.items.size() == 1 && this.items.contains(Items.SHEARS)) { if (this.items != null && this.items.size() == 1 && this.items.contains(Items.SHEARS)) {
if (itemStack.is(TagAPI.ITEM_COMMON_SHEARS) || itemStack.is(TagAPI.ITEM_SHEARS)){ if (itemStack.is(TagAPI.COMMON_ITEM_SHEARS) || itemStack.is(FabricToolTags.SHEARS)){
cir.setReturnValue(true); cir.setReturnValue(true);
} }
} }

View file

@ -116,7 +116,7 @@ public class AnvilRecipe implements Recipe<Container>, UnknownReceipBookCategory
public boolean matches(Container craftingInventory) { public boolean matches(Container craftingInventory) {
ItemStack hammer = craftingInventory.getItem(1); ItemStack hammer = craftingInventory.getItem(1);
if (hammer.isEmpty() || !TagAPI.ITEM_HAMMERS.contains(hammer.getItem())) { if (hammer.isEmpty() || !TagAPI.COMMON_ITEM_HAMMERS.contains(hammer.getItem())) {
return false; return false;
} }
ItemStack material = craftingInventory.getItem(0); ItemStack material = craftingInventory.getItem(0);
@ -140,7 +140,7 @@ public class AnvilRecipe implements Recipe<Container>, UnknownReceipBookCategory
@Override @Override
public NonNullList<Ingredient> getIngredients() { public NonNullList<Ingredient> getIngredients() {
NonNullList<Ingredient> defaultedList = NonNullList.create(); NonNullList<Ingredient> defaultedList = NonNullList.create();
defaultedList.add(Ingredient.of(TagAPI.ITEM_HAMMERS defaultedList.add(Ingredient.of(TagAPI.COMMON_ITEM_HAMMERS
.getValues() .getValues()
.stream() .stream()
.filter(hammer -> ((TieredItem) hammer).getTier().getLevel() >= toolLevel) .filter(hammer -> ((TieredItem) hammer).getTier().getLevel() >= toolLevel)

View file

@ -12,23 +12,23 @@ public class CraftingRecipes {
GridRecipe.make(BCLib.MOD_ID, "tag_smith_table", Blocks.SMITHING_TABLE) GridRecipe.make(BCLib.MOD_ID, "tag_smith_table", Blocks.SMITHING_TABLE)
.setShape("II", "##", "##") .setShape("II", "##", "##")
.addMaterial('#', ItemTags.PLANKS) .addMaterial('#', ItemTags.PLANKS)
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_cauldron", Blocks.CAULDRON) GridRecipe.make(BCLib.MOD_ID, "tag_cauldron", Blocks.CAULDRON)
.setShape("I I", "I I", "III") .setShape("I I", "I I", "III")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_hopper", Blocks.HOPPER) GridRecipe.make(BCLib.MOD_ID, "tag_hopper", Blocks.HOPPER)
.setShape("I I", "ICI", " I ") .setShape("I I", "ICI", " I ")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('C', TagAPI.ITEM_CHEST) .addMaterial('C', TagAPI.COMMON_ITEM_CHEST)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_piston", Blocks.PISTON) GridRecipe.make(BCLib.MOD_ID, "tag_piston", Blocks.PISTON)
.setShape("WWW", "CIC", "CDC") .setShape("WWW", "CIC", "CDC")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('D', Items.REDSTONE) .addMaterial('D', Items.REDSTONE)
.addMaterial('C', Items.COBBLESTONE) .addMaterial('C', Items.COBBLESTONE)
.addMaterial('W', ItemTags.PLANKS) .addMaterial('W', ItemTags.PLANKS)
@ -37,50 +37,50 @@ public class CraftingRecipes {
GridRecipe.make(BCLib.MOD_ID, "tag_rail", Blocks.RAIL) GridRecipe.make(BCLib.MOD_ID, "tag_rail", Blocks.RAIL)
.setOutputCount(16) .setOutputCount(16)
.setShape("I I", "ISI", "I I") .setShape("I I", "ISI", "I I")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('S', Items.STICK) .addMaterial('S', Items.STICK)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_stonecutter", Blocks.STONECUTTER) GridRecipe.make(BCLib.MOD_ID, "tag_stonecutter", Blocks.STONECUTTER)
.setShape(" I ", "SSS") .setShape(" I ", "SSS")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('S', Items.STONE) .addMaterial('S', Items.STONE)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_bucket", Items.BUCKET) GridRecipe.make(BCLib.MOD_ID, "tag_bucket", Items.BUCKET)
.setShape("I I", " I ") .setShape("I I", " I ")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_compass", Items.COMPASS) GridRecipe.make(BCLib.MOD_ID, "tag_compass", Items.COMPASS)
.setShape(" I ", "IDI", " I ") .setShape(" I ", "IDI", " I ")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('D', Items.REDSTONE) .addMaterial('D', Items.REDSTONE)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_minecart", Items.MINECART) GridRecipe.make(BCLib.MOD_ID, "tag_minecart", Items.MINECART)
.setShape("I I", "III") .setShape("I I", "III")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_shield", Items.SHIELD) GridRecipe.make(BCLib.MOD_ID, "tag_shield", Items.SHIELD)
.setShape("WIW", "WWW", " W ") .setShape("WIW", "WWW", " W ")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('W', ItemTags.PLANKS) .addMaterial('W', ItemTags.PLANKS)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_hopper", Blocks.HOPPER) GridRecipe.make(BCLib.MOD_ID, "tag_hopper", Blocks.HOPPER)
.setShape("I I", "ICI", " I ") .setShape("I I", "ICI", " I ")
.addMaterial('I', TagAPI.ITEM_IRON_INGOTS) .addMaterial('I', TagAPI.COMMON_ITEM_IRON_INGOTS)
.addMaterial('C', TagAPI.ITEM_CHEST) .addMaterial('C', TagAPI.COMMON_ITEM_CHEST)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
GridRecipe.make(BCLib.MOD_ID, "tag_shulker_box", Blocks.SHULKER_BOX) GridRecipe.make(BCLib.MOD_ID, "tag_shulker_box", Blocks.SHULKER_BOX)
.setShape("S", "C", "S") .setShape("S", "C", "S")
.addMaterial('S', Items.SHULKER_SHELL) .addMaterial('S', Items.SHULKER_SHELL)
.addMaterial('C', TagAPI.ITEM_CHEST) .addMaterial('C', TagAPI.COMMON_ITEM_CHEST)
.checkConfig(Configs.RECIPE_CONFIG) .checkConfig(Configs.RECIPE_CONFIG)
.build(); .build();
} }

View file

@ -1,6 +1,5 @@
package ru.bclib.registry; package ru.bclib.registry;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -43,16 +42,22 @@ public class BlockRegistry extends BaseRegistry<Block> {
getModBlocks(id.getNamespace()).add(block); getModBlocks(id.getNamespace()).add(block);
if (block instanceof BaseLeavesBlock){ if (block instanceof BaseLeavesBlock){
TagAPI.addTags(block, TagAPI.BLOCK_LEAVES, TagAPI.MINEABLE_HOE, FabricMineableTags.SHEARS_MINEABLE); TagAPI.addBlockTags(
block,
TagAPI.NAMED_BLOCK_LEAVES,
TagAPI.NAMED_COMMON_BLOCK_LEAVES,
TagAPI.NAMED_MINEABLE_HOE,
TagAPI.NAMED_MINEABLE_SHEARS
);
if (item != null){ if (item != null){
TagAPI.addTags(item, TagAPI.ITEM_LEAVES); TagAPI.addItemTags(item, TagAPI.NAMED_COMMON_ITEM_LEAVES, TagAPI.NAMED_ITEM_LEAVES);
} }
} else if (block instanceof BaseOreBlock){ } else if (block instanceof BaseOreBlock){
TagAPI.addTags(block, TagAPI.MINEABLE_PICKAXE); TagAPI.addBlockTags(block, TagAPI.NAMED_MINEABLE_PICKAXE);
} else if (block instanceof FeatureSaplingBlock){ } else if (block instanceof FeatureSaplingBlock){
TagAPI.addTags(block, TagAPI.BLOCK_SAPLINGS); TagAPI.addBlockTags(block, TagAPI.NAMED_COMMON_BLOCK_SAPLINGS, TagAPI.NAMED_BLOCK_SAPLINGS);
if (item != null){ if (item != null){
TagAPI.addTags(item, TagAPI.ITEM_SAPLINGS); TagAPI.addItemTags(item, TagAPI.NAMED_COMMON_ITEM_SAPLINGS, TagAPI.NAMED_ITEM_SAPLINGS);
} }
} }

View file

@ -1,6 +1,5 @@
package ru.bclib.registry; package ru.bclib.registry;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.core.BlockSource; import net.minecraft.core.BlockSource;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -8,7 +7,6 @@ import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
import net.minecraft.core.dispenser.ShearsDispenseItemBehavior; import net.minecraft.core.dispenser.ShearsDispenseItemBehavior;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.Tag;
import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.Mob;
@ -71,22 +69,22 @@ public class ItemRegistry extends BaseRegistry<Item> {
registerItem(itemId, item); registerItem(itemId, item);
if (item instanceof ShovelItem) { if (item instanceof ShovelItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.SHOVELS, item); TagAPI.addItemTag(TagAPI.NAMED_FABRIC_SHOVELS, item);
} }
else if (item instanceof SwordItem) { else if (item instanceof SwordItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.SWORDS, item); TagAPI.addItemTag(TagAPI.NAMED_FABRIC_SWORDS, item);
} }
else if (item instanceof BasePickaxeItem) { else if (item instanceof BasePickaxeItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.PICKAXES, item); TagAPI.addItemTag(TagAPI.NAMED_FABRIC_PICKAXES, item);
} }
else if (item instanceof BaseAxeItem) { else if (item instanceof BaseAxeItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.AXES, item); TagAPI.addItemTag(TagAPI.NAMED_FABRIC_AXES, item);
} }
else if (item instanceof BaseHoeItem) { else if (item instanceof BaseHoeItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.HOES, item); TagAPI.addItemTag(TagAPI.NAMED_FABRIC_HOES, item);
} }
else if (item instanceof BaseShearsItem) { else if (item instanceof BaseShearsItem) {
TagAPI.addTags(item, (Tag.Named<Item>) FabricToolTags.SHEARS, TagAPI.ITEM_SHEARS, TagAPI.ITEM_COMMON_SHEARS); TagAPI.addItemTags(item, TagAPI.NAMED_FABRIC_SHEARS, TagAPI.NAMED_COMMON_ITEM_SHEARS);
DispenserBlock.registerBehavior(item.asItem(), new ShearsDispenseItemBehavior()); DispenserBlock.registerBehavior(item.asItem(), new ShearsDispenseItemBehavior());
} }

View file

@ -15,7 +15,6 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.BCLib; import ru.bclib.BCLib;
import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.config.Configs;
import ru.bclib.util.WeightedList; import ru.bclib.util.WeightedList;
import java.util.HashMap; import java.util.HashMap;

View file

@ -2,7 +2,6 @@ package ru.bclib.world.biomes;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import ru.bclib.config.Configs; import ru.bclib.config.Configs;
import ru.bclib.world.biomes.VanillaBiomeSettings.Builder;
public class BCLBiomeSettings { public class BCLBiomeSettings {
public static Builder createBCL(){ public static Builder createBCL(){

View file

@ -106,9 +106,10 @@ public abstract class NBTStructureFeature extends DefaultFeature {
center = center.offset(0, getYOffset(structure, world, center, random) + 0.5, 0); center = center.offset(0, getYOffset(structure, world, center, random) + 0.5, 0);
BoundingBox bounds = makeBox(center); BoundingBox bounds = makeBox(center);
StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation) StructurePlaceSettings placementData = new StructurePlaceSettings()
.setMirror(mirror) .setRotation(rotation)
.setBoundingBox(bounds); .setMirror(mirror)
.setBoundingBox(bounds);
addStructureData(placementData); addStructureData(placementData);
center = center.offset(-offset.getX() * 0.5, 0, -offset.getZ() * 0.5); center = center.offset(-offset.getX() * 0.5, 0, -offset.getZ() * 0.5);
structure.placeInWorld(world, center, center, placementData, random, 4); structure.placeInWorld(world, center, center, placementData, random, 4);
@ -140,11 +141,11 @@ public abstract class NBTStructureFeature extends DefaultFeature {
mut.setZ(z); mut.setZ(z);
mut.setY(surfMax); mut.setY(surfMax);
BlockState state = world.getBlockState(mut); BlockState state = world.getBlockState(mut);
if (!state.is(TagAPI.BLOCK_GEN_TERRAIN) && state.isFaceSturdy(world, mut, Direction.DOWN)) { if (!isTerrain(state) && state.isFaceSturdy(world, mut, Direction.DOWN)) {
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
mut.setY(mut.getY() - 1); mut.setY(mut.getY() - 1);
BlockState stateSt = world.getBlockState(mut); BlockState stateSt = world.getBlockState(mut);
if (!stateSt.is(TagAPI.BLOCK_GEN_TERRAIN)) { if (!isTerrain(stateSt)) {
if (merge == TerrainMerge.SURFACE) { if (merge == TerrainMerge.SURFACE) {
boolean isTop = mut.getY() == surfMax && state.getMaterial().isSolidBlocking(); boolean isTop = mut.getY() == surfMax && state.getMaterial().isSolidBlocking();
Biome b = world.getBiome(mut); Biome b = world.getBiome(mut);
@ -156,7 +157,7 @@ public abstract class NBTStructureFeature extends DefaultFeature {
} }
} }
else { else {
if (stateSt.is(TagAPI.BLOCK_END_GROUND) && state.getMaterial().isSolidBlocking()) { if (isTerrain(state) && state.getMaterial().isSolidBlocking()) {
if (merge == TerrainMerge.SURFACE) { if (merge == TerrainMerge.SURFACE) {
Biome b = world.getBiome(mut); Biome b = world.getBiome(mut);
BlockState bottom = BiomeAPI.findUnderMaterial(b).orElse(defaultBlock); BlockState bottom = BiomeAPI.findUnderMaterial(b).orElse(defaultBlock);
@ -178,6 +179,10 @@ public abstract class NBTStructureFeature extends DefaultFeature {
return true; return true;
} }
private boolean isTerrain(BlockState state) {
return state.is(TagAPI.COMMON_BLOCK_END_STONES) || state.is(TagAPI.COMMON_BLOCK_NETHER_STONES);
}
protected BoundingBox makeBox(BlockPos pos) { protected BoundingBox makeBox(BlockPos pos) {
int sx = ((pos.getX() >> 4) << 4) - 16; int sx = ((pos.getX() >> 4) << 4) - 16;
int sz = ((pos.getZ() >> 4) << 4) - 16; int sz = ((pos.getZ() >> 4) << 4) - 16;
@ -210,7 +215,7 @@ public abstract class NBTStructureFeature extends DefaultFeature {
return template; return template;
} }
public static enum TerrainMerge { public enum TerrainMerge {
NONE, SURFACE, OBJECT; NONE, SURFACE, OBJECT;
public static TerrainMerge getFromString(String type) { public static TerrainMerge getFromString(String type) {

View file

@ -4,8 +4,6 @@ import net.minecraft.core.Registry;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.biomes.BCLBiomeSettings;
import java.util.List; import java.util.List;