diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 43bfe1a1..c23ec8e8 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -177,12 +177,10 @@ public class BiomeAPI { public static void registerWorldData(WorldData w){ worldData = w; if (worldData!=null){ - worldData.worldGenSettings().dimensions().forEach(dim->{ StructureSettingsAccessor a = (StructureSettingsAccessor)dim.generator().getSettings(); STRUCTURE_STARTS.entrySet().forEach(entry -> applyStructureStarts(a, entry.getValue())); }); - } } @@ -542,6 +540,7 @@ public class BiomeAPI { List> modifications = MODIFICATIONS.get(level.dimension()); if (modifications == null) { biomes.forEach(biome -> sortBiomeFeatures(biome)); + ((BiomeSourceAccessor) source).bclRebuildFeatures(); return; } @@ -898,8 +897,15 @@ public class BiomeAPI { public static void registerStructureEvents(){ DynamicRegistrySetupCallback.EVENT.register(registryManager -> { Optional> oGeneratorRegistry = registryManager.registry(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY); - Optional>> oBiomeSourceRegistry = registryManager.registry(Registry.BIOME_SOURCE_REGISTRY); - +// Optional>> oBiomeSourceRegistry = registryManager.registry(Registry.BIOME_SOURCE_REGISTRY); +// +// if (oBiomeSourceRegistry.isPresent()) { +// RegistryEntryAddedCallback +// .event(oBiomeSourceRegistry.get()) +// .register((rawId, id, source) -> { +// BCLib.LOGGER.info(" #### " + rawId + ", " + source + ", " + id); +// }); +// } if (oGeneratorRegistry.isPresent()) { oGeneratorRegistry.get().forEach(BiomeAPI::registerNoiseGeneratorAndChangeSurfaceRules); diff --git a/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java b/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java index 6e538ef3..c8127a0e 100644 --- a/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java +++ b/src/main/java/ru/bclib/blocks/BaseLeavesBlock.java @@ -23,6 +23,7 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.TagProvider; +import ru.bclib.items.tool.BaseShearsItem; import ru.bclib.util.MHelper; import java.util.Collections; @@ -31,12 +32,12 @@ import java.util.function.Consumer; public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider, RenderLayerProvider, TagProvider { protected final Block sapling; - + private static FabricBlockSettings makeLeaves(MaterialColor color) { return FabricBlockSettings .copyOf(Blocks.OAK_LEAVES) .mapColor(color) - .requiresTool() + //.requiresTool() .allowsSpawning((state, world, pos, type) -> false) .suffocates((state, world, pos) -> false) .blockVision((state, world, pos) -> false); @@ -72,7 +73,7 @@ public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider, public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); if (tool != null) { - if (tool.isCorrectToolForDrops(state) || EnchantmentHelper.getItemEnchantmentLevel( + if (BaseShearsItem.isShear(tool) || EnchantmentHelper.getItemEnchantmentLevel( Enchantments.SILK_TOUCH, tool ) > 0) { @@ -95,7 +96,7 @@ public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider, @Override public void addTags(List> blockTags, List> itemTags) { blockTags.add(FabricMineableTags.SHEARS_MINEABLE); - blockTags.add(TagAPI.MINEABLE_HOE); + //blockTags.add(TagAPI.MINEABLE_HOE); blockTags.add(BlockTags.LEAVES); } } diff --git a/src/main/java/ru/bclib/items/tool/BaseShearsItem.java b/src/main/java/ru/bclib/items/tool/BaseShearsItem.java index 90af703f..bdc5df08 100644 --- a/src/main/java/ru/bclib/items/tool/BaseShearsItem.java +++ b/src/main/java/ru/bclib/items/tool/BaseShearsItem.java @@ -10,7 +10,11 @@ public class BaseShearsItem extends ShearsItem { public BaseShearsItem(Properties properties) { super(properties); } - + + public static boolean isShear(ItemStack tool){ + return tool.is(Items.SHEARS) | tool.is(TagAPI.ITEM_COMMON_SHEARS) || tool.is(TagAPI.ITEM_SHEARS); + } + public static boolean isShear(ItemStack itemStack, Item item){ if (item == Items.SHEARS){ return itemStack.is(item) | itemStack.is(TagAPI.ITEM_COMMON_SHEARS) || itemStack.is(TagAPI.ITEM_SHEARS); diff --git a/src/main/java/ru/bclib/mixin/common/shears/ItemPredicateBuilderMixin.java b/src/main/java/ru/bclib/mixin/common/shears/ItemPredicateBuilderMixin.java new file mode 100644 index 00000000..4aad6dbd --- /dev/null +++ b/src/main/java/ru/bclib/mixin/common/shears/ItemPredicateBuilderMixin.java @@ -0,0 +1,34 @@ +package ru.bclib.mixin.common.shears; + +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.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.bclib.api.TagAPI; + +import java.util.Set; + +@Mixin(ItemPredicate.class) +public abstract class ItemPredicateBuilderMixin { + + @Shadow @Final private @Nullable Set items; + + @Inject(method = "matches", at = @At("HEAD"), cancellable = true) + void bclib_of(ItemStack itemStack, CallbackInfoReturnable cir) { + 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)){ + cir.setReturnValue(true); + } + } + } +} diff --git a/src/main/resources/bclib.mixins.common.json b/src/main/resources/bclib.mixins.common.json index 2a4f41c2..5c9565c3 100644 --- a/src/main/resources/bclib.mixins.common.json +++ b/src/main/resources/bclib.mixins.common.json @@ -7,6 +7,7 @@ "SimpleReloadableResourceManagerMixin", "BiomeGenerationSettingsAccessor", "shears.DiggingEnchantmentMixin", + "shears.ItemPredicateBuilderMixin", "LayerLightSectionStorageMixin", "NoiseBasedChunkGeneratorMixin", "NoiseGeneratorSettingsMixin",