From 4c02055503fadd8a0a36690a369d88eb34dba609 Mon Sep 17 00:00:00 2001
From: Johannes Gäßler <updrn@student.kit.edu>
Date: Thu, 25 May 2017 18:34:00 +0200
Subject: Rewrote parts of the Oil Cracker so that it's in line with the new
 recipes

---
 .../multi/GT_MetaTileEntity_OilCracker.java        | 107 ++++++++++++---------
 1 file changed, 63 insertions(+), 44 deletions(-)

(limited to 'src/main/java/gregtech/common/tileentities/machines')

diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
index 0a4168c7ce..7dc2dfa2c6 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java
@@ -9,6 +9,7 @@ import gregtech.api.gui.GT_GUIContainer_MultiMachine;
 import gregtech.api.interfaces.ITexture;
 import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
 import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
 import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
 import gregtech.api.objects.GT_RenderedTexture;
 import gregtech.api.util.GT_ModHandler;
@@ -20,10 +21,9 @@ import net.minecraftforge.common.util.ForgeDirection;
 import net.minecraftforge.fluids.FluidStack;
 
 public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_MultiBlockBase {
-    private final FluidStack fluidToDecreaseEu = GT_ModHandler.getSteam(128);
-    private final FluidStack fluidToIncreaseOutput = Materials.Hydrogen.getGas(64);
-
-
+	private ForgeDirection orientation;
+	private int controllerX, controllerZ;
+	
     public GT_MetaTileEntity_OilCracker(int aID, String aName, String aNameRegional) {
         super(aID, aName, aNameRegional);
     }
@@ -35,16 +35,15 @@ public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_MultiBlockBa
     public String[] getDescription() {
         return new String[]{
                 "Controller Block for the Oil Cracking Unit",
-                "Cracks heavy oil into lighter parts",
+                "Thermally cracks heavy hydrocarbons into lighter fractions",
                 "Size(WxHxD): 5x3x3 (Hollow), Controller (Front center)",
                 "Ring of 8 Cupronickel Coils (Each side of Controller)",
-                "1x Input Hatch (Any left side casing)",
-                "1x Input Hatch (Any middle ring casing)",
-                "1x Output Hatch (Any right side casing)",
+                "1x Hydrocarbon Input Bus/Hatch (Any left side casing)",
+                "1x Steam/Hydrogen Input Hatch (Any middle ring casing)",
+                "1x Cracked Hydrocarbon Output Hatch (Any right side casing)",
                 "1x Maintenance Hatch (Any middle ring casing)",
                 "1x Energy Hatch (Any middle ring casing)",
-                "Clean Stainless Steel Machine Casings for the rest (18 at least!)",
-                "Optional Steam(50% less EU/t) or Hydrogen(30% more output)"};
+                "Clean Stainless Steel Machine Casings for the rest (18 at least!)"};
     }
 
     public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) {
@@ -62,47 +61,38 @@ public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_MultiBlockBa
     @Override
     public boolean checkRecipe(ItemStack aStack) {
         ArrayList<FluidStack> tInputList = getStoredFluids();
-        for (FluidStack tInput : tInputList) {
-            long tVoltage = getMaxInputVoltage();
-            byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
-
-            GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sCrakingRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], new FluidStack[]{tInput}, new ItemStack[]{});
-            if (tRecipe != null) {
-                if (tRecipe.isRecipeInputEqual(true, new FluidStack[]{tInput}, new ItemStack[]{})) {
-                    boolean needDecreaseEu = depleteInput(fluidToDecreaseEu);
-                    boolean needIncreaseOutput = !needDecreaseEu && depleteInput(fluidToIncreaseOutput);
-
-                    this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
-                    this.mEfficiencyIncrease = 10000;
-                    if (tRecipe.mEUt <= 16) {
-                        this.mEUt = (tRecipe.mEUt * (1 << tTier - 1) * (1 << tTier - 1));
-                        this.mMaxProgresstime = (tRecipe.mDuration / (1 << tTier - 1));
-                    } else {
-                        this.mEUt = tRecipe.mEUt;
-                        this.mMaxProgresstime = tRecipe.mDuration;
-                        while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)]) {
-                            this.mEUt *= 4;
-                            this.mMaxProgresstime /= 2;
-                        }
-                    }
-                    if (needDecreaseEu) this.mEUt = this.mEUt / 2;
-                    if (this.mEUt > 0) {
-                        this.mEUt = (-this.mEUt);
-                    }
-                    this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
-                    this.mOutputFluids = new FluidStack[]{tRecipe.getFluidOutput(0)};
-                    if (needIncreaseOutput) this.mOutputFluids[0].amount = this.mOutputFluids[0].amount * 130 / 100;
-                    return true;
-                }
+        FluidStack[] tFluidInputs = tInputList.toArray(new FluidStack[tInputList.size()]);
+        long tVoltage = getMaxInputVoltage();
+        byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+
+        GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sCrakingRecipes.findRecipe(
+        		getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], tFluidInputs ,new ItemStack[]{mInventory[1]});
+        if (tRecipe != null && tRecipe.isRecipeInputEqual(true, tFluidInputs, new ItemStack[]{mInventory[1]})) {
+            this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+            this.mEfficiencyIncrease = 10000;
+            this.mEUt = tRecipe.mEUt;
+            this.mMaxProgresstime = tRecipe.mDuration;
+            while (this.mEUt <= gregtech.api.enums.GT_Values.V[(tTier - 1)]) {
+                this.mEUt *= 4;
+                this.mMaxProgresstime /= 2;
+            }
+            if (this.mEUt > 0) {
+                this.mEUt = (-this.mEUt);
             }
+            this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+            this.mOutputFluids = new FluidStack[]{tRecipe.getFluidOutput(0)};
+            return true;
         }
         return false;
     }
 
     @Override
     public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
-        int xDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetX;
-        int zDir = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing()).offsetZ;
+    	this.orientation = ForgeDirection.getOrientation(aBaseMetaTileEntity.getBackFacing());
+    	this.controllerX = aBaseMetaTileEntity.getXCoord();
+    	this.controllerZ = aBaseMetaTileEntity.getZCoord();
+        int xDir = this.orientation.offsetX;
+        int zDir = this.orientation.offsetZ;
         int amount = 0;
         replaceDeprecatedCoils(aBaseMetaTileEntity);
         if (xDir != 0) {
@@ -252,4 +242,33 @@ public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_MultiBlockBa
             }
         }
     }
+    
+    @Override
+    public ArrayList<FluidStack> getStoredFluids() {
+        ArrayList<FluidStack> rList = new ArrayList<FluidStack>();
+        for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) {
+            tHatch.mRecipeMap = getRecipeMap();
+            if (isValidMetaTileEntity(tHatch) && tHatch.getFillableStack() != null) {
+            	FluidStack tStack = tHatch.getFillableStack();
+            	if (tStack.isFluidEqual(GT_ModHandler.getSteam(1000)) || tStack.isFluidEqual(Materials.Hydrogen.getGas(1000))) {
+            		if (isHatchInMiddleRing(tHatch)) {
+                        rList.add(tStack);            			
+            		}
+            	} else {
+            		if (!isHatchInMiddleRing(tHatch)) {
+            			rList.add(tStack);
+            		}
+            	}
+            }
+        }
+        return rList;
+    }
+
+    private boolean isHatchInMiddleRing(GT_MetaTileEntity_Hatch_Input inputHatch){
+    	if (orientation == ForgeDirection.NORTH || orientation == ForgeDirection.SOUTH) {
+    		return inputHatch.getBaseMetaTileEntity().getXCoord() == this.controllerX;
+    	} else {
+    		return inputHatch.getBaseMetaTileEntity().getZCoord() == this.controllerZ;
+    	}
+    }
 }
-- 
cgit