aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator/blocks/tileEntity
diff options
context:
space:
mode:
authorRaven Szewczyk <git@eigenraven.me>2024-05-25 14:13:58 +0100
committerRaven Szewczyk <git@eigenraven.me>2024-05-25 14:13:58 +0100
commit91b1909427bb0cab0f72505c325b07f8fb39c62e (patch)
treed6570897b7150afd4f3cb1470202af11e3e9ece3 /src/main/java/goodgenerator/blocks/tileEntity
parent40efa0d238677418071b658b11b0a1a7c9e0d864 (diff)
downloadGT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.tar.gz
GT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.tar.bz2
GT5-Unofficial-91b1909427bb0cab0f72505c325b07f8fb39c62e.zip
Move GoodGen sources
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity')
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java403
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java225
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java244
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java179
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java150
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java416
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java376
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java214
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java48
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java277
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java470
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java511
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java558
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java170
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java171
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java172
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java227
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java231
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java471
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java515
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java491
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java184
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java393
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java709
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java345
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java62
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java733
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java53
28 files changed, 8998 insertions, 0 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java
new file mode 100644
index 0000000000..618477d09c
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java
@@ -0,0 +1,403 @@
+package goodgenerator.blocks.tileEntity;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.GT_HatchElement.*;
+import static gregtech.api.enums.Textures.BlockIcons.*;
+
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import net.minecraft.entity.player.EntityPlayer;
+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 org.apache.commons.lang3.tuple.Pair;
+import org.jetbrains.annotations.NotNull;
+
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+
+import goodgenerator.api.recipe.GoodGeneratorRecipeMaps;
+import goodgenerator.loader.Loaders;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+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_ExtendedPowerMultiBlockBase;
+import gregtech.api.recipe.RecipeMap;
+import gregtech.api.recipe.check.CheckRecipeResult;
+import gregtech.api.recipe.check.CheckRecipeResultRegistry;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_StructureUtility;
+import gregtech.api.util.GT_Utility;
+
+public class ComponentAssemblyLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<ComponentAssemblyLine>
+ implements ISurvivalConstructable {
+
+ private int casingTier;
+ protected static final String STRUCTURE_PIECE_MAIN = "main";
+ private static final IStructureDefinition<ComponentAssemblyLine> STRUCTURE_DEFINITION = StructureDefinition
+ .<ComponentAssemblyLine>builder()
+ .addShape(
+ STRUCTURE_PIECE_MAIN,
+ new String[][] {
+ { " ", " III ", " HHI~IHH ", "HH III HH", "H H", "H H", "H JJJ H",
+ "H JJJ H", "H N N H", "HHHHHHHHH" },
+ { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA",
+ "AG HHH GA", "AG GA", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH",
+ "HG HHH GH", "HG GH", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA",
+ "AG HHH GA", "AG GA", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH",
+ "HG HHH GH", "HG GH", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA",
+ "AG HHH GA", "AG GA", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH",
+ "HG HHH GH", "HG GH", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA",
+ "AG HHH GA", "AG GA", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A n n A", "MHHHHHHHM" },
+ { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A",
+ "A HHH A", "A A", "MHHHHHHHM" },
+ { " ", " ", " HHHHHHH ", "HH HH", "H H", "H H", "H H",
+ "H H", "H KKK H", "HHHHHHHHH" } })
+ .addElement(
+ 'A',
+ ofChain(
+ ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 5),
+ ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 13),
+ ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 14),
+ ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 15),
+ ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks2", 0)))
+ .addElement('H', ofBlock(GregTech_API.sBlockCasings8, 7))
+ .addElement('C', ofBlock(GregTech_API.sBlockCasings2, 5))
+ .addElement('D', ofBlock(GregTech_API.sBlockCasings2, 9))
+ .addElement('G', ofBlock(GregTech_API.sBlockCasings9, 0))
+ .addElement('E', ofBlock(GregTech_API.sBlockCasings9, 1))
+ .addElement('F', ofBlock(GregTech_API.sBlockCasings4, 1))
+ .addElement(
+ 'B',
+ ofBlocksTiered(
+ (block, meta) -> block == Loaders.componentAssemblylineCasing ? meta : -1,
+ IntStream.range(0, 14)
+ .mapToObj(i -> Pair.of(Loaders.componentAssemblylineCasing, i))
+ .collect(Collectors.toList()),
+ -2,
+ (t, meta) -> t.casingTier = meta,
+ t -> t.casingTier))
+ .addElement(
+ 'J',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(InputBus)
+ .dot(1)
+ .casingIndex(183)
+ .buildAndChain(GregTech_API.sBlockCasings8, 7))
+ .addElement(
+ 'N',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(InputBus)
+ .dot(1)
+ .casingIndex(183)
+ .buildAndChain(GT_StructureUtility.ofFrame(Materials.TungstenSteel)))
+ .addElement(
+ 'K',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(OutputBus)
+ .dot(2)
+ .casingIndex(183)
+ .buildAndChain(GregTech_API.sBlockCasings8, 7))
+ .addElement(
+ 'L',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(Energy, ExoticEnergy)
+ .dot(3)
+ .casingIndex(183)
+ .buildAndChain(GregTech_API.sBlockCasings8, 7))
+ .addElement(
+ 'I',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(Maintenance)
+ .dot(4)
+ .casingIndex(183)
+ .buildAndChain(GregTech_API.sBlockCasings8, 7))
+ .addElement(
+ 'M',
+ GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class)
+ .atLeast(InputHatch)
+ .dot(5)
+ .casingIndex(183)
+ .buildAndChain(GregTech_API.sBlockCasings8, 7))
+ .addElement('n', GT_StructureUtility.ofFrame(Materials.TungstenSteel))
+ .build();
+
+ public ComponentAssemblyLine(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public ComponentAssemblyLine(String aName) {
+ super(aName);
+ }
+
+ @Override
+ public void construct(ItemStack stackSize, boolean hintsOnly) {
+ buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 2, 0);
+ }
+
+ @Override
+ public IStructureDefinition<ComponentAssemblyLine> getStructureDefinition() {
+ return STRUCTURE_DEFINITION;
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("High-Capacity Component Assembler")
+ .addInfo("Controller block for the Component Assembly Line.")
+ .addInfo("Assembles basic components (motors, pumps, etc.) in large batches.")
+ .addInfo(
+ "The " + EnumChatFormatting.BOLD
+ + EnumChatFormatting.YELLOW
+ + "Component Assembly Line Casing "
+ + EnumChatFormatting.RESET
+ + EnumChatFormatting.GRAY
+ + "limits the recipes the machine can perform. See the NEI pages for details.")
+ .addInfo(
+ "Supports " + EnumChatFormatting.BLUE
+ + "Tec"
+ + EnumChatFormatting.DARK_BLUE
+ + "Tech"
+ + EnumChatFormatting.GRAY
+ + " laser and multi-amp hatches!")
+ .addInfo("Supports overclocking beyond MAX!")
+ .addInfo(EnumChatFormatting.ITALIC + "Much more efficient than other competing brands!")
+ .addInfo("The structure is too complex!")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .beginStructureBlock(9, 10, 33, false)
+ .addStructureInfo("This structure is too complex! See schematic for details.")
+ .addOtherStructurePart("Borosilicate Glass", "Can be UV tier or higher")
+ .addInputBus("Start of conveyor belt", 1)
+ .addOutputBus("End of conveyor belt", 2)
+ .addEnergyHatch("Second-top layer", 3)
+ .addMaintenanceHatch("Around the controller", 4)
+ .addInputHatch("Bottom left and right corners", 5)
+ .toolTipFinisher(
+ EnumChatFormatting.AQUA + "MadMan310"
+ + EnumChatFormatting.GRAY
+ + " via "
+ + EnumChatFormatting.GREEN
+ + "Good Generator");
+
+ return tt;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new ComponentAssemblyLine(mName);
+ }
+
+ /**
+ * Changes and adds new information to the default info data for the scanner.
+ */
+ @Override
+ public String[] getInfoData() {
+ String[] origin = super.getInfoData();
+ String[] ret = new String[origin.length + 1];
+ System.arraycopy(origin, 0, ret, 0, origin.length);
+ ret[origin.length] = StatCollector.translateToLocal("scanner.info.CASS.tier")
+ + (casingTier >= 0 ? GT_Values.VN[casingTier + 1] : "None!");
+ return ret;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
+ int colorIndex, boolean aActive, boolean aRedstone) {
+ if (side == facing) {
+ if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183),
+ TextureFactory.builder()
+ .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), TextureFactory.builder()
+ .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY)
+ .extFacing()
+ .build(),
+ TextureFactory.builder()
+ .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW)
+ .extFacing()
+ .glow()
+ .build() };
+ }
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183) };
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ protected ProcessingLogic createProcessingLogic() {
+ return new ProcessingLogic() {
+
+ @NotNull
+ @Override
+ protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) {
+ if (recipe.mSpecialValue > casingTier + 1) {
+ return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue);
+ }
+ return CheckRecipeResultRegistry.SUCCESSFUL;
+ }
+ };
+ }
+
+ @Override
+ protected void setProcessingLogicPower(ProcessingLogic logic) {
+ logic.setAvailableVoltage(getMaxInputEu());
+ logic.setAvailableAmperage(1);
+ }
+
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
+ if (mMachine) return -1;
+ int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);
+ return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 2, 0, realBudget, env, false, true);
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ casingTier = -2;
+ return checkPiece(STRUCTURE_PIECE_MAIN, 4, 2, 0);
+ }
+
+ @Override
+ public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ inputSeparation = !inputSeparation;
+ GT_Utility.sendChatToPlayer(
+ aPlayer,
+ StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation);
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ, ItemStack aTool) {
+ if (aPlayer.isSneaking()) {
+ batchMode = !batchMode;
+ if (batchMode) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Batch recipes.");
+ } else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Don't batch recipes.");
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean supportsInputSeparation() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsBatchMode() {
+ return true;
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack aStack) {
+ return 10000;
+ }
+
+ @Override
+ public int getDamageToComponent(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public RecipeMap<?> getRecipeMap() {
+ return GoodGeneratorRecipeMaps.componentAssemblyLineRecipes;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("casingTier", casingTier);
+ }
+
+ @Override
+ public void loadNBTData(final NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ casingTier = aNBT.getInteger("casingTier");
+ if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) {
+ inputSeparation = aNBT.getBoolean("mSeparate");
+ }
+ }
+}
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java b/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java
new file mode 100644
index 0000000000..ae3395ffb9
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java
@@ -0,0 +1,225 @@
+package goodgenerator.blocks.tileEntity;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.Textures.BlockIcons.*;
+import static gregtech.api.util.GT_StructureUtility.*;
+import static gregtech.api.util.GT_Utility.filterValidMTEs;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM;
+import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+
+import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM;
+import goodgenerator.util.DescTextLocalization;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_HatchElement;
+import gregtech.api.enums.Materials;
+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_Hatch_MultiInput;
+import gregtech.api.recipe.check.CheckRecipeResult;
+import gregtech.api.recipe.check.CheckRecipeResultRegistry;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_Utility;
+
+public class CoolantTower extends GT_MetaTileEntity_TooltipMultiBlockBase_EM
+ implements IConstructable, ISurvivalConstructable {
+
+ protected IStructureDefinition<CoolantTower> multiDefinition = null;
+ private final int CASING_INDEX = 1542;
+
+ public CoolantTower(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public CoolantTower(String name) {
+ super(name);
+ }
+
+ @Override
+ public IStructureDefinition<? extends GT_MetaTileEntity_MultiblockBase_EM> getStructure_EM() {
+ if (multiDefinition == null) {
+ multiDefinition = StructureDefinition.<CoolantTower>builder()
+ .addShape(
+ mName,
+ transpose(
+ new String[][] {
+ { " ", " ", " BBB ", " B B ", " B B ", " B B ",
+ " B B ", " B B ", " BBB ", " ", " " },
+ { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ",
+ " BB BB ", " BBBBB ", " BBB ", " ", " " },
+ { " ", " ", " ", " BBB ", " B B ", " B B ",
+ " B B ", " BBB ", " ", " ", " " },
+ { " ", " ", " ", " BBB ", " B B ", " B B ",
+ " B B ", " BBB ", " ", " ", " " },
+ { " ", " ", " ", " BBB ", " B B ", " B B ",
+ " B B ", " BBB ", " ", " ", " " },
+ { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ",
+ " BB BB ", " BBBBB ", " BBB ", " ", " " },
+ { " ", " ", " BBB ", " B B ", " B B ", " B B ",
+ " B B ", " B B ", " BBB ", " ", " " },
+ { " ", " ", " BBB ", " B B ", " B B ", " B B ",
+ " B B ", " B B ", " BBB ", " ", " " },
+ { " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", " BB BB ",
+ " BB BB ", " BB BB ", " BBBBB ", " BBB ", " " },
+ { " ", " BBB ", " B B ", " B B ", " B B ", " B B ",
+ " B B ", " B B ", " B B ", " BBB ", " " },
+ { " ", " BBBBB ", " BB BB ", " BB BB ", " B B ", " B B ",
+ " B B ", " BB BB ", " BB BB ", " BBBBB ", " " },
+ { " HH~HH ", " HBBBBBH ", " HB BH ", "HB BH", "HB BH", "HB BH",
+ "HB BH", "HB BH", " HB BH ", " HBBBBBH ", " HHHHH " },
+ { " CCCCC ", " C C ", " C C ", "C C", "C C", "C C",
+ "C C", "C C", " C C ", " C C ", " CCCCC " }, }))
+ .addElement('B', ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8))
+ .addElement('C', ofFrame(Materials.TungstenCarbide))
+ .addElement(
+ 'H',
+ buildHatchAdder(CoolantTower.class).atLeast(GT_HatchElement.InputHatch, GT_HatchElement.OutputHatch)
+ .casingIndex(CASING_INDEX)
+ .dot(1)
+ .buildAndChain(ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8)))
+ .build();
+ }
+ return multiDefinition;
+ }
+
+ @Override
+ public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mWrench = true;
+ mScrewdriver = true;
+ mSoftHammer = true;
+ mHardHammer = true;
+ mSolderingTool = true;
+ mCrowbar = true;
+ return structureCheck_EM(mName, 5, 11, 0);
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Coolant Tower")
+ .addInfo("Controller block for the Coolant Tower.")
+ .addInfo("Turn Steam back to Distilled Water.")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .addController("Mid of the second layer.")
+ .addInputHatch("Input Hatch", 1)
+ .addOutputHatch("Output Hatch", 1)
+ .toolTipFinisher("Good Generator");
+ return tt;
+ }
+
+ @Override
+ public void construct(ItemStack stackSize, boolean hintsOnly) {
+ structureBuild_EM(mName, 5, 11, 0, stackSize, hintsOnly);
+ }
+
+ @Override
+ public String[] getStructureDescription(ItemStack stackSize) {
+ return DescTextLocalization.addText("CoolantTower.hint", 3);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new CoolantTower(mName);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (aTick % 72000 == 0) {
+ mWrench = true;
+ mScrewdriver = true;
+ mSoftHammer = true;
+ mHardHammer = true;
+ mSolderingTool = true;
+ mCrowbar = true;
+ }
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack aStack) {
+ return 10000;
+ }
+
+ @Override
+ public boolean onRunningTick(ItemStack aStack) {
+ return true;
+ }
+
+ @Override
+ protected @NotNull CheckRecipeResult checkProcessing_EM() {
+ this.mMaxProgresstime = 20;
+ int steam = 0;
+
+ for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) {
+ steam += maybeDrainHatch(tHatch);
+ }
+ addOutput(GT_ModHandler.getDistilledWater(steam / 160));
+ return CheckRecipeResultRegistry.SUCCESSFUL;
+ }
+
+ private int maybeDrainHatch(GT_MetaTileEntity_Hatch_Input tHatch) {
+ if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) {
+ int drained = 0;
+ for (FluidStack maybeSteam : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) {
+ drained += maybeDrainSteam(tHatch, maybeSteam);
+ }
+ return drained;
+ }
+ return maybeDrainSteam(tHatch, tHatch.getFillableStack());
+ }
+
+ private int maybeDrainSteam(GT_MetaTileEntity_Hatch_Input tHatch, FluidStack maybeSteam) {
+ if (maybeSteam == null) return 0;
+ if (!GT_Utility.areFluidsEqual(maybeSteam, GT_ModHandler.getSteam(1))) return 0;
+ FluidStack defoSteam = tHatch.drain(ForgeDirection.UNKNOWN, maybeSteam, true);
+ return defoSteam.amount;
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechT