From 30a4dcb85cfc39b56401b1254cf6499a22895d84 Mon Sep 17 00:00:00 2001 From: kirjorjos Date: Sun, 19 Jan 2025 00:44:35 -0500 Subject: [PATCH 1/2] Add support for fluid tanks in feeding slabs --- .../productivebees/ProductiveBeesConfig.java | 5 +++++ .../common/block/entity/FeederBlockEntity.java | 8 ++++++++ .../common/entity/bee/ConfigurableBee.java | 11 ++++++++++- .../common/entity/bee/ProductiveBee.java | 6 ++++++ 4 files changed, 29 insertions(+), 1 deletion(-) 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..22496b090 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; @@ -428,7 +431,7 @@ public boolean isFlowerBlock(BlockState flowerBlock) { return flowerBlock.is(flowerTag); } else if (nbt.contains("flowerBlock")) { return BuiltInRegistries.BLOCK.getKey(flowerBlock.getBlock()).toString().equals(nbt.getString("flowerBlock")); - } else if (nbt.contains("flowerFluid") && !flowerBlock.getFluidState().isEmpty()) { + } else if (nbt.contains("flowerFluid") && (!flowerBlock.getFluidState().isEmpty())) { if (nbt.getString("flowerFluid").contains("#")) { TagKey flowerFluid = ModTags.getFluidTag(ResourceLocation.parse(nbt.getString("flowerFluid").replace("#", ""))); return flowerBlock.getFluidState().is(flowerFluid); @@ -454,6 +457,12 @@ 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()) { + 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); } From 7d63ebb218c91354e9f871c44663de878bf2567f Mon Sep 17 00:00:00 2001 From: kirjorjos Date: Mon, 10 Feb 2025 21:25:28 -0500 Subject: [PATCH 2/2] remove accidental parentheses addition and add support for tags in fluid containers --- .../productivebees/common/entity/bee/ConfigurableBee.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 22496b090..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 @@ -431,7 +431,7 @@ public boolean isFlowerBlock(BlockState flowerBlock) { return flowerBlock.is(flowerTag); } else if (nbt.contains("flowerBlock")) { return BuiltInRegistries.BLOCK.getKey(flowerBlock.getBlock()).toString().equals(nbt.getString("flowerBlock")); - } else if (nbt.contains("flowerFluid") && (!flowerBlock.getFluidState().isEmpty())) { + } else if (nbt.contains("flowerFluid") && !flowerBlock.getFluidState().isEmpty()) { if (nbt.getString("flowerFluid").contains("#")) { TagKey flowerFluid = ModTags.getFluidTag(ResourceLocation.parse(nbt.getString("flowerFluid").replace("#", ""))); return flowerBlock.getFluidState().is(flowerFluid); @@ -460,7 +460,11 @@ public boolean isFlowerItem(ItemStack flowerItem) { if (nbt.contains("flowerFluid")) { IFluidHandler flowerFluid = flowerItem.getCapability(Capabilities.FluidHandler.ITEM); if (flowerFluid != null && flowerFluid.getFluidInTank(0).getAmount() >= ProductiveBeesConfig.BEES.minimumMbForFlowering.get()) { - return flowerFluid.getFluidInTank(0).is(BuiltInRegistries.FLUID.get(ResourceLocation.parse(nbt.getString("flowerFluid")))); + 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")))); + } } } }