aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Vent.java90
1 files changed, 84 insertions, 6 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Vent.java b/src/main/java/gregtech/common/covers/GT_Cover_Vent.java
index 64347d48e2..f6b9afa005 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Vent.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Vent.java
@@ -4,9 +4,22 @@ import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import static gregtech.api.enums.GT_Values.SIDE_UNKNOWN;
+import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
public class GT_Cover_Vent extends GT_CoverBehavior {
private final int mEfficiency;
+ private final Fluid IC2_HOT_COOLANT = FluidRegistry.getFluid("ic2hotcoolant");
+ private final Fluid IC2_COOLANT = FluidRegistry.getFluid("ic2coolant");
public GT_Cover_Vent(int aEfficiency) {
this.mEfficiency = aEfficiency;
@@ -19,14 +32,15 @@ public class GT_Cover_Vent extends GT_CoverBehavior {
@Override
public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ if (aSide == SIDE_UNKNOWN) return 0;
+ int ret = 0;
+ if (aTileEntity instanceof IFluidHandler) {
+ ret = doCoolFluid(aSide, aTileEntity);
+ }
if ((aTileEntity instanceof IMachineProgress)) {
- if ((((IMachineProgress) aTileEntity).hasThingsToDo()) && (aCoverVariable != ((IMachineProgress) aTileEntity).getProgress()) &&
- (!GT_Utility.hasBlockHitBox(aTileEntity.getWorld(), aTileEntity.getOffsetX(aSide, 1), aTileEntity.getOffsetY(aSide, 1), aTileEntity.getOffsetZ(aSide, 1)))) {
- ((IMachineProgress) aTileEntity).increaseProgress(this.mEfficiency);
- }
- return ((IMachineProgress) aTileEntity).getProgress();
+ ret = doProgressEfficiency(aSide, (IMachineProgress) aTileEntity, aCoverID);
}
- return 0;
+ return ret;
}
@Override
@@ -38,4 +52,68 @@ public class GT_Cover_Vent extends GT_CoverBehavior {
public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return 100;
}
+
+ protected int doProgressEfficiency(final byte aSide, final IMachineProgress aTileEntity, final int aCoverVariable) {
+ final int offsetX = aTileEntity.getOffsetX(aSide, 1);
+ final int offsetY = aTileEntity.getOffsetY(aSide, 1);
+ final int offsetZ = aTileEntity.getOffsetZ(aSide, 1);
+ final World world = aTileEntity.getWorld();
+ if (aTileEntity.hasThingsToDo()
+ && aCoverVariable != aTileEntity.getProgress()
+ && !GT_Utility.hasBlockHitBox(world, offsetX, offsetY, offsetZ)) {
+ aTileEntity.increaseProgress(this.mEfficiency);
+ }
+ return aTileEntity.getProgress();
+ }
+
+ protected int doCoolFluid(final byte aSide, final ICoverable aTileEntity) {
+ final int offsetX = aTileEntity.getOffsetX(aSide, 1);
+ final int offsetY = aTileEntity.getOffsetY(aSide, 1);
+ final int offsetZ = aTileEntity.getOffsetZ(aSide, 1);
+ final World world = aTileEntity.getWorld();
+ final IFluidHandler fluidHandler = (IFluidHandler) aTileEntity;
+ if (!fluidHandler.canDrain(ForgeDirection.UNKNOWN, IC2_HOT_COOLANT)) {
+ return 0;
+ }
+ final int chances; // 10000 = 100%
+ final Block blockAtSide = aTileEntity.getBlockAtSide(aSide);
+ if (blockAtSide == null) {
+ return 0;
+ }
+ if (blockAtSide == Blocks.water || blockAtSide == Blocks.flowing_water) {
+ switch (mEfficiency) {
+ case 2:
+ chances = 10000; // 100% chances for Diamond reactor vent with water
+ break;
+ case 1:
+ chances = 5000; // 50% chances for Gold and Overclocked reactor vents with water
+ break;
+ default:
+ chances = 2500; // 25% chances for Basic reactor vent with water
+ break;
+ }
+ } else if (blockAtSide.isAir(world, offsetX, offsetY, offsetZ)) {
+ switch (mEfficiency) {
+ case 2:
+ chances = 2500; // 25% chances for Diamond reactor vent with air
+ break;
+ case 1:
+ chances = 1250; // 12.5% chances for Gold and Overclocked reactor vents with air
+ break;
+ default:
+ return 0; // Basic reactor vent cannot be used with air
+ }
+ } else {
+ return 0; // Vent cover need water or air
+ }
+ if (chances > XSTR_INSTANCE.nextInt(10000)) {
+ final FluidStack hotFluidStack =
+ fluidHandler.drain(ForgeDirection.UNKNOWN, Integer.MAX_VALUE, true);
+ final FluidStack coldFluidStack =
+ new FluidStack(IC2_COOLANT, hotFluidStack.amount);
+ fluidHandler.fill(ForgeDirection.UNKNOWN, coldFluidStack, true);
+ return hotFluidStack.amount;
+ }
+ return 0;
+ }
}