aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java415
1 files changed, 347 insertions, 68 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
index 0a2464de5e..5551de0e40 100644
--- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
+++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java
@@ -26,12 +26,20 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZE
import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages;
import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Optional;
+
+import javax.annotation.Nonnull;
+
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler;
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
@@ -40,15 +48,22 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.RecipeMaps;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_OverclockCalculator;
+import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
+import gregtech.api.util.shutdown.ShutDownReasonRegistry;
+import gregtech.common.blocks.GT_Block_Casings_Abstract;
public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBlockBase<GT_TileEntity_MegaVacuumFreezer>
implements ISurvivalConstructable {
@@ -66,70 +81,153 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
return new GT_TileEntity_MegaVacuumFreezer(this.mName);
}
- private int mCasing = 0;
+ private int mCasingFrostProof = 0;
+ private int mTier = 1;
+
+ private static class SubspaceCoolingFluid {
+
+ public Materials material;
+ public int perfectOverclocks;
+ // Consumption per second of runtime
+ public long amount;
+
+ public SubspaceCoolingFluid(Materials material, int perfectOverclocks, long amount) {
+ this.material = material;
+ this.perfectOverclocks = perfectOverclocks;
+ this.amount = amount;
+ }
+
+ public FluidStack getStack() {
+ FluidStack stack = material.getFluid(amount);
+ // FUCK THIS FUCK THIS FUCK THIS
+ if (stack == null) {
+ return material.getMolten(amount);
+ }
+ return stack;
+ }
+ }
+
+ private static final ArrayList<SubspaceCoolingFluid> SUBSPACE_COOLING_FLUIDS = new ArrayList<>(
+ Arrays.asList(
+ new SubspaceCoolingFluid(MaterialsUEVplus.SpaceTime, 1, 7500),
+ new SubspaceCoolingFluid(MaterialsUEVplus.Space, 2, 5000),
+ new SubspaceCoolingFluid(MaterialsUEVplus.Eternity, 3, 2500)));
+
+ private SubspaceCoolingFluid currentCoolingFluid = null;
private static final int CASING_INDEX = 17;
+ private static final int CASING_INDEX_T2 = ((GT_Block_Casings_Abstract) GregTech_API.sBlockCasings8)
+ .getTextureIndex(14);
private static final String STRUCTURE_PIECE_MAIN = "main";
+ private static final String STRUCTURE_PIECE_MAIN_T2 = "main_t2";
+
+ private static final String[][] structure = transpose(
+ new String[][] {
+ { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
+ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
+ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAA~AAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
+ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
+ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" } });
+ private static final String[][] structure_tier2 = new String[][] {
+ { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA",
+ "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABA~ABABABA", "ABABABAAABABABA", "ABABABBBBBABABA",
+ "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B",
+ "B B", "B B", "B B", "B B", "B B",
+ "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B",
+ "B B", "B B", "B B", "B B", "B B",
+ "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "B B", "B B", "B B", "B B", "B B",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "B B", "A A", "A A", "A A", "B B",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "B B", "A A", "A A", "A A", "B B",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "B B", "A A", "A A", "A A", "B B",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "B B", "B B", "B B", "B B", "B B",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B",
+ "B B", "B B", "B B", "B B", "B B",
+ "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A",
+ "A A", "A A", "A A", "A A", "A A",
+ "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B",
+ "B B", "B B", "B B", "B B", "B B",
+ "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" },
+ { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA",
+ "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABBBBBABABA",
+ "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" } };
+
private static final IStructureDefinition<GT_TileEntity_MegaVacuumFreezer> STRUCTURE_DEFINITION = StructureDefinition
.<GT_TileEntity_MegaVacuumFreezer>builder()
- .addShape(
- STRUCTURE_PIECE_MAIN,
- transpose(
- new String[][] {
- { "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc",
- "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc",
- "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccc~ccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "c=============c",
- "c=============c", "c=============c", "c=============c", "c=============c", "ccccccccccccccc" },
- { "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc",
- "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc",
- "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc", "ccccccccccccccc",
- "ccccccccccccccc" } }))
- .addElement('=', StructureElementAirNoHint.getInstance())
+ .addShape(STRUCTURE_PIECE_MAIN, structure)
+ .addShape(STRUCTURE_PIECE_MAIN_T2, structure_tier2)
.addElement(
- 'c',
+ 'A',
buildHatchAdder(GT_TileEntity_MegaVacuumFreezer.class)
.atLeast(Energy.or(ExoticEnergy), InputHatch, InputBus, OutputHatch, OutputBus, Maintenance)
.casingIndex(CASING_INDEX)
.dot(1)
- .buildAndChain(onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 1))))
+ .buildAndChain(onElementPass(x -> x.mCasingFrostProof++, ofBlock(GregTech_API.sBlockCasings2, 1))))
+ // Infinity Cooled Casing
+ .addElement('B', ofBlock(GregTech_API.sBlockCasings8, 14))
.build();
@Override
@@ -139,15 +237,92 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
.addInfo("Controller Block for the Mega Vacuum Freezer")
.addInfo("Cools hot ingots and cells")
.addSeparator()
+ .addInfo("Upgrade to Tier 2 to unlock " + EnumChatFormatting.LIGHT_PURPLE + "Subspace Cooling.")
+ .addInfo(
+ "To activate " + EnumChatFormatting.LIGHT_PURPLE
+ + "Subspace Cooling "
+ + EnumChatFormatting.GRAY
+ + "supply a coolant while running recipes.")
+ .addInfo(
+ EnumChatFormatting.RED + "7500 L/s "
+ + EnumChatFormatting.DARK_PURPLE
+ + "Molten SpaceTime"
+ + EnumChatFormatting.GRAY
+ + ": "
+ + EnumChatFormatting.RED
+ + "1"
+ + EnumChatFormatting.GRAY
+ + " perfect overclock.")
+ .addInfo(
+ EnumChatFormatting.RED + "5000 L/s "
+ + EnumChatFormatting.DARK_PURPLE
+ + "Spatially Enlarged Fluid"
+ + EnumChatFormatting.GRAY
+ + ": "
+ + EnumChatFormatting.RED
+ + "2"
+ + EnumChatFormatting.GRAY
+ + " perfect overclocks.")
+ .addInfo(
+ EnumChatFormatting.RED + "2500 L/s "
+ + EnumChatFormatting.DARK_PURPLE
+ + "Molten Eternity"
+ + EnumChatFormatting.GRAY
+ + ": "
+ + EnumChatFormatting.RED
+ + "3"
+ + EnumChatFormatting.GRAY
+ + " perfect overclocks.")
+ .addSeparator()
+ .addInfo(
+ EnumChatFormatting.LIGHT_PURPLE + "Reinforcing the structure allows the injection of exotic coolants,")
+ .addInfo(
+ EnumChatFormatting.LIGHT_PURPLE
+ + "enabling the capture of heat energy in miniature tears in spacetime,")
+ .addInfo(EnumChatFormatting.LIGHT_PURPLE + "massively increasing the efficiency of the cooling process.")
+ .addSeparator()
.beginStructureBlock(15, 15, 15, true)
.addController("Front center")
- .addCasingInfoMin("Frost Proof Machine Casing", 900, false)
- .addEnergyHatch("Any casing", 1)
- .addMaintenanceHatch("Any casing", 1)
- .addInputHatch("Any casing", 1)
- .addOutputHatch("Any casing", 1)
- .addInputBus("Any casing", 1)
- .addOutputBus("Any casing", 1)
+ .addEnergyHatch("Any Frost Proof Machine Casing", 1)
+ .addMaintenanceHatch("Any Frost Proof Machine Casing", 1)
+ .addInputHatch("Any Frost Proof Machine Casing", 1)
+ .addOutputHatch("Any Frost Proof Machine Casing", 1)
+ .addInputBus("Any Frost Proof Machine Casing", 1)
+ .addOutputBus("Any Frost Proof Machine Casing", 1)
+ .addStructureInfo(
+ EnumChatFormatting.BLUE + "Base Multi (Tier "
+ + EnumChatFormatting.DARK_PURPLE
+ + 1
+ + EnumChatFormatting.BLUE
+ + "):")
+ .addCasingInfoMinColored(
+ "Frost Proof Machine Casing",
+ EnumChatFormatting.GRAY,
+ 800,
+ EnumChatFormatting.GOLD,
+ false)
+ .addStructureInfo(
+ EnumChatFormatting.BLUE + "Tier "
+ + EnumChatFormatting.DARK_PURPLE
+ + 2
+ + EnumChatFormatting.BLUE
+ + " (Upgrades from Tier "
+ + EnumChatFormatting.DARK_PURPLE
+ + 1
+ + EnumChatFormatting.BLUE
+ + "):")
+ .addCasingInfoMinColored(
+ "Frost Proof Machine Casing",
+ EnumChatFormatting.GRAY,
+ 800,
+ EnumChatFormatting.GOLD,
+ false)
+ .addCasingInfoExactlyColored(
+ "Infinity Cooled Casing",
+ EnumChatFormatting.GRAY,
+ 384,
+ EnumChatFormatting.GOLD,
+ false)
.toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS);
return tt;
}
@@ -159,15 +334,33 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
@Override
public void construct(ItemStack aStack, boolean aHintsOnly) {
- this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 7, 7, 0);
+ if (aStack.stackSize == 1) {
+ this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 7, 7, 0);
+ } else {
+ this.buildPiece(STRUCTURE_PIECE_MAIN_T2, aStack, aHintsOnly, 7, 7, 0);
+ }
}
@Override
public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
if (this.mMachine) return -1;
int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
- return this
- .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 7, 0, realBudget, source, actor, false, true);
+ if (stackSize.stackSize == 1) {
+ return this
+ .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 7, 0, realBudget, source, actor, false, true);
+ } else {
+ return this.survivialBuildPiece(
+ STRUCTURE_PIECE_MAIN_T2,
+ stackSize,
+ 7,
+ 7,
+ 0,
+ realBudget,
+ source,
+ actor,
+ false,
+ true);
+ }
}
@Override
@@ -184,6 +377,11 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
}
@Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ }
+
+ @Override
public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
float aX, float aY, float aZ) {
if (aPlayer.isSneaking()) {
@@ -198,18 +396,80 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
return false;
}
+ public SubspaceCoolingFluid findSubspaceCoolingFluid() {
+ // Loop over all hatches and find the first match with a valid fluid
+ for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) {
+ Optional<SubspaceCoolingFluid> fluid = SUBSPACE_COOLING_FLUIDS.stream()
+ .filter(candidate -> drain(hatch, candidate.getStack(), false))
+ .findFirst();
+ if (fluid.isPresent()) return fluid.get();
+ }
+ return null;
+ }
+
@Override
protected ProcessingLogic createProcessingLogic() {
- return new ProcessingLogic().setMaxParallel(ConfigHandler.megaMachinesMax);
+ return new ProcessingLogic() {
+
+ @Nonnull
+ @Override
+ protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) {
+ // Check if the freezer is T2
+ if (mTier == 1) return super.createOverclockCalculator(recipe);
+
+ // First try to detect the current fluid used for subspace cooling.
+ currentCoolingFluid = findSubspaceCoolingFluid();
+
+ return super.createOverclockCalculator(recipe)
+ .setMachineHeat(currentCoolingFluid == null ? 0 : currentCoolingFluid.perfectOverclocks * 1800)
+ .setRecipeHeat(0)
+ .setHeatOC(true)
+ .setHeatDiscount(false);
+ }
+ }.setMaxParallel(ConfigHandler.megaMachinesMax);
+ }
+
+ @Override
+ protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.runMachine(aBaseMetaTileEntity, aTick);
+ // Every second while running, consume subspace coolant fluid
+ if (mMaxProgresstime > 0 && aTick % 20 == 0) {
+ // Subspace cooling only allowed for T2 freezer
+ if (mTier == 2) {
+ // Try to drain the coolant fluid if it exists. If failed, stop the machine with an error
+ if (this.currentCoolingFluid != null) {
+ FluidStack fluid = this.currentCoolingFluid.getStack();
+ for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) {
+ if (drain(hatch, fluid, false)) {
+ drain(hatch, fluid, true);
+ return;
+ }
+ }
+ // If we exited this loop without returning from the function, no matching fluid was found, so
+ // stop the machine - we ran out of coolant
+ stopMachine(ShutDownReasonRegistry.outOfFluid(fluid));
+ }
+ }
+ }
}
// -------------- TEC TECH COMPAT ----------------
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
- this.mCasing = 0;
- if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 7, 7, 0)) return false;
- return this.mMaintenanceHatches.size() == 1 && this.mCasing >= 900;
+ this.mCasingFrostProof = 0;
+ this.mTier = 1;
+ // If check for T1 fails, also do a check for T2 structure
+ if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 7, 7, 0)) {
+ // Reset mCasing in between checks, so they don't count again
+ this.mCasingFrostProof = 0;
+ if (!this.checkPiece(STRUCTURE_PIECE_MAIN_T2, 7, 7, 0)) {
+ return false;
+ }
+ // Structure is Tier 2
+ this.mTier = 2;
+ }
+ return this.mMaintenanceHatches.size() == 1 && this.mCasingFrostProof >= 800;
}
@Override
@@ -245,6 +505,25 @@ public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBloc
}
@Override
+ public String[] getInfoData() {
+ ArrayList<String> info = new ArrayList<>(Arrays.asList(super.getInfoData()));
+ info.add("Tier: " + mTier);
+ if (mTier == 2) {
+ if (currentCoolingFluid != null) {
+ info.add(
+ "Subspace cooling: " + EnumChatFormatting.GREEN
+ + "Active ("
+ + currentCoolingFluid.getStack()
+ .getLocalizedName()
+ + ")");
+ } else {
+ info.add("Subspace cooling: " + EnumChatFormatting.RED + "Inactive");
+ }
+ }
+ return info.toArray(new String[] {});
+ }
+
+ @Override
public boolean supportsBatchMode() {
return true;
}