diff --git a/src/main/java/cy/jdkdigital/productivebees/ProductiveBeesConfig.java b/src/main/java/cy/jdkdigital/productivebees/ProductiveBeesConfig.java index 67e016cd1..5e1703dc9 100644 --- a/src/main/java/cy/jdkdigital/productivebees/ProductiveBeesConfig.java +++ b/src/main/java/cy/jdkdigital/productivebees/ProductiveBeesConfig.java @@ -172,6 +172,7 @@ public static class Bees public final ModConfigSpec.DoubleValue kamikazBeeChance; public final ModConfigSpec.BooleanValue disableWanderGoal; public final ModConfigSpec.BooleanValue enableResinBeeEncasing; + public final ModConfigSpec.IntValue minimumMbForFlowering; public Bees(ModConfigSpec.Builder builder) { builder.push("Bees"); @@ -212,6 +213,10 @@ public Bees(ModConfigSpec.Builder builder) { enableResinBeeEncasing = builder .comment("Allow resin bees to encase mobs in amber. With this disabled it's only possible with an amber bee and it's also not as fun.") .define("enableResinBeeEncasing", true); + + minimumMbForFlowering = builder + .comment("The minimum amount of Mb of a fluid for bees that require a fluid to be able to pollinate") + .defineInRange("minimumMbForFlowering", 1000, 0, Integer.MAX_VALUE); builder.pop(); } diff --git a/src/main/java/cy/jdkdigital/productivebees/common/block/entity/FeederBlockEntity.java b/src/main/java/cy/jdkdigital/productivebees/common/block/entity/FeederBlockEntity.java index 51597b8be..336afd4cd 100644 --- a/src/main/java/cy/jdkdigital/productivebees/common/block/entity/FeederBlockEntity.java +++ b/src/main/java/cy/jdkdigital/productivebees/common/block/entity/FeederBlockEntity.java @@ -1,5 +1,6 @@ package cy.jdkdigital.productivebees.common.block.entity; +import cy.jdkdigital.productivebees.ProductiveBeesConfig; import cy.jdkdigital.productivebees.common.block.Feeder; import cy.jdkdigital.productivebees.container.FeederContainer; import cy.jdkdigital.productivebees.init.ModBlockEntityTypes; @@ -33,6 +34,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.phys.AABB; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.fluids.capability.IFluidHandler; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.IItemHandlerModifiable; @@ -65,6 +68,11 @@ public Block getRandomBlockFromInventory(TagKey tag, RandomSource random) if (tag == null || itemBlock.builtInRegistryHolder().is(tag)) { possibleBlocks.add(itemBlock); } + } else { + IFluidHandler stackFluidTank = stack.getCapability(Capabilities.FluidHandler.ITEM); + if (stackFluidTank != null && stackFluidTank.getFluidInTank(0).getAmount() >= ProductiveBeesConfig.BEES.minimumMbForFlowering.get()) { + possibleBlocks.add(stackFluidTank.getFluidInTank(0).getFluid().defaultFluidState().createLegacyBlock().getBlock()); + } } } return possibleBlocks.size() > 0 ? possibleBlocks.get(random.nextInt(possibleBlocks.size())) : Blocks.AIR; diff --git a/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ConfigurableBee.java b/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ConfigurableBee.java index 4c72ee2ae..0bb00490d 100644 --- a/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ConfigurableBee.java +++ b/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ConfigurableBee.java @@ -1,6 +1,7 @@ package cy.jdkdigital.productivebees.common.entity.bee; import cy.jdkdigital.productivebees.ProductiveBees; +import cy.jdkdigital.productivebees.ProductiveBeesConfig; import cy.jdkdigital.productivebees.client.particle.NectarParticleType; import cy.jdkdigital.productivebees.common.block.entity.AdvancedBeehiveBlockEntity; import cy.jdkdigital.productivebees.common.block.entity.AmberBlockEntity; @@ -55,8 +56,10 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.event.EventHooks; import net.neoforged.neoforge.event.entity.EntityTeleportEvent; +import net.neoforged.neoforge.fluids.capability.IFluidHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -454,6 +457,16 @@ public boolean isFlowerItem(ItemStack flowerItem) { if (nbt.contains("flowerItem")) { return flowerItem.is(BuiltInRegistries.ITEM.get(ResourceLocation.parse(nbt.getString("flowerItem")))); } + if (nbt.contains("flowerFluid")) { + IFluidHandler flowerFluid = flowerItem.getCapability(Capabilities.FluidHandler.ITEM); + if (flowerFluid != null && flowerFluid.getFluidInTank(0).getAmount() >= ProductiveBeesConfig.BEES.minimumMbForFlowering.get()) { + if (nbt.getString("flowerFluid").contains("#")) { + return flowerFluid.getFluidInTank(0).is(new TagKey(BuiltInRegistries.FLUID.key(), ResourceLocation.parse(nbt.getString("flowerFluid").replace("#", "")))); + } else { + return flowerFluid.getFluidInTank(0).is(BuiltInRegistries.FLUID.get(ResourceLocation.parse(nbt.getString("flowerFluid")))); + } + } + } } if (flowerItem.getItem() instanceof BlockItem blockItem && BeeHelper.hasBlockConversionRecipe(this, blockItem.getBlock().defaultBlockState())) { return true; diff --git a/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ProductiveBee.java b/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ProductiveBee.java index af124da1f..cd87cf2d3 100644 --- a/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ProductiveBee.java +++ b/src/main/java/cy/jdkdigital/productivebees/common/entity/bee/ProductiveBee.java @@ -59,6 +59,8 @@ import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.HitResult; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.fluids.capability.IFluidHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -561,6 +563,10 @@ public boolean isFlowerItem(ItemStack flowerItem) { if (flowerItem.getItem() instanceof BlockItem blockItem && isFlowerBlock(blockItem.getBlock().defaultBlockState())) { return true; } + IFluidHandler flowerFluid = flowerItem.getCapability(Capabilities.FluidHandler.ITEM); + if (flowerFluid != null && flowerFluid.getFluidInTank(0).getAmount() >= ProductiveBeesConfig.BEES.minimumMbForFlowering.get()) { + return true; + } return BeeHelper.hasItemConversionRecipe(this, flowerItem); }