From 925a7b4c0ab88ba49649ebf838aae558f5449688 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 3 Apr 2019 21:48:44 +0100 Subject: [PATCH] Add tank support for Fluid Replicator, fixes https://github.com/TechReborn/TechReborn/issues/1698 --- .../FluidReplicatorRecipe.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/techreborn/api/fluidreplicator/FluidReplicatorRecipe.java b/src/main/java/techreborn/api/fluidreplicator/FluidReplicatorRecipe.java index 2ddf67e2b..b320cf93b 100644 --- a/src/main/java/techreborn/api/fluidreplicator/FluidReplicatorRecipe.java +++ b/src/main/java/techreborn/api/fluidreplicator/FluidReplicatorRecipe.java @@ -25,9 +25,14 @@ package techreborn.api.fluidreplicator; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import reborncore.common.util.FluidUtils; import techreborn.init.ModItems; import techreborn.tiles.multiblock.TileFluidReplicator; @@ -112,6 +117,9 @@ public class FluidReplicatorRecipe implements Cloneable { return false; } final BlockPos hole = tile.getPos().offset(tile.getFacing().getOpposite(), 2); + if(hasValidTank(tile.getWorld(), hole)){ + return true; + } final Fluid fluid = FluidRegistry.lookupFluidForBlock(tile.getWorld().getBlockState(hole).getBlock()); if (fluid == null) { return false; @@ -126,6 +134,19 @@ public class FluidReplicatorRecipe implements Cloneable { return true; } + + private boolean hasValidTank(World world, BlockPos pos){ + TileEntity tileEntity = world.getTileEntity(pos); + if(tileEntity == null){ + return false; + } + IFluidHandler fluidHandler = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + if(fluidHandler != null){ + FluidStack containedStack = fluidHandler.drain(1000, false); + return containedStack != null && FluidUtils.fluidEquals(containedStack.getFluid(), output); + } + return false; + } public boolean onCraft(TileFluidReplicator tile) { return true;