aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/tileentities
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/tileentities')
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java47
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Cleanroom.java26
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Heater.java21
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Insulator.java22
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java93
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Laser.java26
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java61
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/Wireless.java26
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java508
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalReactor.java434
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/CokeOven.java43
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java174
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java305
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/LayeredCokeBattery.java295
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/Macerator.java80
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/AdvChemicalProcessorProcessingLogic.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/CokeOvenProcessingLogic.java49
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/DistillationTowerProcessingLogic.java7
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/LaserEngraverProcessingLogic.java7
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/LayeredCokeBatteryProcessingLogic.java7
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/MaceratorProcessingLogic.java7
22 files changed, 1673 insertions, 583 deletions
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java
new file mode 100644
index 0000000000..1644f8fde0
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java
@@ -0,0 +1,47 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+import gregtech.api.util.GT_Utility;
+
+public class Ampere extends UpgradeCasing {
+
+ private long amperage;
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.functional.amperage";
+ }
+
+ @Override
+ public void readMultiTileNBT(NBTTagCompound aNBT) {
+ super.readMultiTileNBT(aNBT);
+ amperage = aNBT.getInteger(GT_Values.NBT.UPGRADE_AMPERAGE);
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ target.setMaxAmperage(amperage);
+ }
+
+ @Override
+ public boolean breakBlock() {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.setMaxAmperage(2);
+ }
+ return super.breakBlock();
+ }
+
+ @Override
+ public void addToolTips(List<String> list, ItemStack stack, boolean f3_h) {
+ super.addToolTips(list, stack, f3_h);
+ list.add("Increases allowed amperage to " + GT_Utility.formatNumbers(amperage));
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Cleanroom.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Cleanroom.java
new file mode 100644
index 0000000000..641327b427
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Cleanroom.java
@@ -0,0 +1,26 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+
+public class Cleanroom extends UpgradeCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.functional.cleanroom";
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ target.setCleanroom(true);
+ }
+
+ @Override
+ public boolean breakBlock() {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.setCleanroom(false);
+ }
+ return super.breakBlock();
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Heater.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Heater.java
new file mode 100644
index 0000000000..6d8bd81d0f
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Heater.java
@@ -0,0 +1,21 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.interfaces.UpgradableModularMuTE;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+import gregtech.api.util.GT_StructureUtilityMuTE.UpgradeCasings;
+
+public class Heater extends UpgradeCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.modular.heater";
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ if (target instanceof UpgradableModularMuTE upgradable) {
+ upgradable.increaseMucCount(UpgradeCasings.Heater, this.tier);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Insulator.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Insulator.java
new file mode 100644
index 0000000000..6cb0b630d6
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Insulator.java
@@ -0,0 +1,22 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.interfaces.UpgradableModularMuTE;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+import gregtech.api.util.GT_StructureUtilityMuTE.UpgradeCasings;
+
+public class Insulator extends UpgradeCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.modular.insulator";
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ if (target instanceof UpgradableModularMuTE upgradable) {
+ upgradable.increaseMucCount(UpgradeCasings.Insulator, this.tier);
+ }
+ }
+
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java
index e42f0bfb86..5087c7f09e 100644
--- a/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java
@@ -1,7 +1,9 @@
package gregtech.common.tileentities.casings.upgrade;
+import java.util.List;
import java.util.UUID;
+import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
@@ -10,35 +12,45 @@ import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
import gregtech.api.enums.GT_Values.NBT;
+import gregtech.api.enums.InventoryType;
import gregtech.api.multitileentity.interfaces.IMultiBlockController;
import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
import gregtech.api.net.GT_Packet_MultiTileEntity;
public class Inventory extends UpgradeCasing {
- public UUID mInventoryID;
- public static final int INPUT = 0;
- public static final int OUTPUT = 1;
- public static final int BOTH = 2;
- private String mInventoryName = "inventory";
- private int mInventorySize;
- private final int mType = BOTH;
+ public UUID inventoryID;
- public String getInventoryName() {
- return mInventoryName;
+ private String inventoryName = "inventory";
+ private int inventorySize;
+ private InventoryType type = InventoryType.Both;
+
+ public String getCustomInventoryName() {
+ return inventoryName;
+ }
+
+ public String getInventoryID() {
+ return inventoryID.toString();
}
public void setInventoryName(String aInventoryName) {
- mInventoryName = aInventoryName;
+ inventoryName = aInventoryName;
+ }
+
+ public InventoryType getType() {
+ return type;
}
@Override
- protected void customWork(IMultiBlockController aTarget) {
- int tInvSize = mInventorySize;
- if (mType == BOTH) {
- tInvSize /= 2;
+ protected void customWork(IMultiBlockController target) {
+ int invSize = inventorySize;
+ if (type == InventoryType.Both) {
+ invSize /= 2;
+ }
+ target.registerItemInventory(invSize, tier, type, true);
+ if (isServerSide()) {
+ issueClientUpdate();
}
- aTarget.registerInventory(mInventoryName, mInventoryID.toString(), tInvSize, mType);
}
@Override
@@ -49,34 +61,28 @@ public class Inventory extends UpgradeCasing {
@Override
public void readMultiTileNBT(NBTTagCompound aNBT) {
super.readMultiTileNBT(aNBT);
- if (aNBT.hasKey(NBT.UPGRADE_INVENTORY_UUID)) {
- mInventoryID = UUID.fromString(aNBT.getString(NBT.UPGRADE_INVENTORY_UUID));
+ if (aNBT.hasKey(NBT.UPGRADE_INVENTORY_NAME)) {
+ inventoryName = aNBT.getString(NBT.UPGRADE_INVENTORY_NAME);
} else {
- mInventoryID = UUID.randomUUID();
+ inventoryName = "inventory";
}
- mInventorySize = aNBT.getInteger(NBT.UPGRADE_INVENTORY_SIZE);
- mInventoryName = aNBT.getString(NBT.UPGRADE_INVENTORY_NAME);
-
+ inventorySize = aNBT.getInteger(NBT.UPGRADE_INVENTORY_SIZE);
}
@Override
public void writeMultiTileNBT(NBTTagCompound aNBT) {
super.writeMultiTileNBT(aNBT);
- aNBT.setString(NBT.UPGRADE_INVENTORY_UUID, mInventoryID.toString());
- aNBT.setString(NBT.UPGRADE_INVENTORY_NAME, mInventoryName);
+ aNBT.setString(NBT.UPGRADE_INVENTORY_UUID, inventoryID.toString());
+ aNBT.setString(NBT.UPGRADE_INVENTORY_NAME, inventoryName);
}
@Override
- protected void onBaseTEDestroyed() {
- super.onBaseTEDestroyed();
- unregisterInventories();
- }
-
- private void unregisterInventories() {
+ public boolean breakBlock() {
final IMultiBlockController controller = getTarget(false);
if (controller != null) {
- controller.unregisterInventory(mInventoryName, mInventoryID.toString(), mType);
+ controller.unregisterItemInventory(inventoryID, type);
}
+ return super.breakBlock();
}
@Override
@@ -87,12 +93,12 @@ public class Inventory extends UpgradeCasing {
@Override
public void addUIWidgets(Builder builder, UIBuildContext buildContext) {
builder.widget(
- new TextFieldWidget().setGetter(() -> mInventoryName)
+ new TextFieldWidget().setGetter(() -> inventoryName)
.setSetter((val) -> {
- mInventoryName = val;
+ inventoryName = val;
final IMultiBlockController controller = getTarget(false);
if (controller != null) {
- controller.changeInventoryName(mInventoryName, mInventoryID.toString(), mType);
+ controller.changeItemInventoryDisplayName(inventoryID, inventoryName, type);
}
})
.setSize(100, 25)
@@ -100,10 +106,27 @@ public class Inventory extends UpgradeCasing {
}
@Override
+ protected boolean canOpenControllerGui() {
+ return false;
+ }
+
+ @Override
public GT_Packet_MultiTileEntity getClientDataPacket() {
final GT_Packet_MultiTileEntity packet = super.getClientDataPacket();
- String name = getInventoryName();
- packet.setInventoryName(name);
+ String name = getCustomInventoryName();
+ packet.setInventoryName(name, inventoryID.toString());
return packet;
}
+
+ @Override
+ public void addToolTips(List<String> list, ItemStack stack, boolean f3_h) {
+ super.addToolTips(list, stack, f3_h);
+ list.add("Adds another item inventory");
+ list.add("Inventory size: " + inventorySize);
+ list.add("Inventory Type: " + type);
+ }
+
+ public void setInventoryId(String inventoryID) {
+ this.inventoryID = UUID.fromString(inventoryID);
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Laser.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Laser.java
new file mode 100644
index 0000000000..ab66281f54
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Laser.java
@@ -0,0 +1,26 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+
+public class Laser extends UpgradeCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.functional.laser";
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ target.setLaserSupport(true);
+ }
+
+ @Override
+ public boolean breakBlock() {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.setLaserSupport(false);
+ }
+ return super.breakBlock();
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java
new file mode 100644
index 0000000000..ebc84be38a
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java
@@ -0,0 +1,61 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import java.util.List;
+import java.util.UUID;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+import gregtech.api.util.GT_Utility;
+
+public class Tank extends UpgradeCasing {
+
+ private int tankCount;
+ private int tankCapacity;
+ public UUID tankID;
+ public static final int INPUT = 0;
+ public static final int OUTPUT = 1;
+ public static final int BOTH = 2;
+ private String tankName = "tank";
+ private int type = BOTH;
+
+ @Override
+ protected void customWork(IMultiBlockController aTarget) {
+
+ }
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.tank";
+ }
+
+ public String getCustomTankName() {
+ return tankName;
+ }
+
+ public String getTankID() {
+ return tankID.toString();
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ @Override
+ public void readMultiTileNBT(NBTTagCompound aNBT) {
+ super.readMultiTileNBT(aNBT);
+ tankCount = aNBT.getInteger(GT_Values.NBT.UPGRADE_TANK_COUNT);
+ tankCapacity = aNBT.getInteger(GT_Values.NBT.UPGRADE_TANK_CAPACITY);
+ }
+
+ @Override
+ public void addToolTips(List<String> list, ItemStack stack, boolean f3_h) {
+ super.addToolTips(list, stack, f3_h);
+ list.add("Adds another tank inventory");
+ list.add("Number of tanks: " + tankCount);
+ list.add("Tank capacity: " + GT_Utility.formatNumbers(tankCapacity) + " L");
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Wireless.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Wireless.java
new file mode 100644
index 0000000000..0cb6a595bf
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Wireless.java
@@ -0,0 +1,26 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+
+public class Wireless extends UpgradeCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.functional.wireless";
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController target) {
+ target.setWirelessSupport(true);
+ }
+
+ @Override
+ public boolean breakBlock() {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.setWirelessSupport(false);
+ }
+ return super.breakBlock();
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java
index e4873f6d9d..58b42eca7f 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java
@@ -11,6 +11,9 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW;
import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages;
import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
+import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
+import static gregtech.common.misc.WirelessNetworkManager.getUserEU;
+import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings;
import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_BRIDGE_CASING;
import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_INJECTION_CASING;
import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_TRANS_CASING;
@@ -34,7 +37,6 @@ import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import gregtech.api.GregTech_API;
-import gregtech.api.interfaces.IGlobalWirelessEnergy;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
@@ -52,7 +54,7 @@ import gregtech.common.items.GT_IntegratedCircuit_Item;
public class GT_MetaTileEntity_TranscendentPlasmaMixer
extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_TranscendentPlasmaMixer>
- implements IGlobalWirelessEnergy, ISurvivalConstructable {
+ implements ISurvivalConstructable {
private static final String[][] structure = new String[][] {
{ " CAC ", " ABA ", " ABA ", " A~A ", " ABA ", " ABA ", " CAC " },
diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java
new file mode 100644
index 0000000000..a253f6ac1e
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java
@@ -0,0 +1,508 @@
+package gregtech.common.tileentities.machines.multiblock;
+
+import static com.google.common.primitives.Ints.saturatedCast;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ENERGY_IN;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.FLUID_IN;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.FLUID_OUT;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ITEM_IN;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ITEM_OUT;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.NOTHING;
+import static gregtech.api.util.GT_StructureUtilityMuTE.MOTOR_CASINGS;
+import static gregtech.api.util.GT_StructureUtilityMuTE.ofMuTECasings;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraftforge.common.util.Constants;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidTank;
+
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.api.math.Color;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.MultiChildWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.HeatingCoilLevel;
+import gregtech.api.enums.Materials;
+import gregtech.api.fluid.FluidTankGT;
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.multitileentity.enums.GT_MultiTileCasing;
+import gregtech.api.multitileentity.multiblock.base.ComplexParallelController;
+import gregtech.api.multitileentity.multiblock.casing.Glasses;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_StructureUtility;
+import gregtech.api.util.GT_StructureUtilityMuTE;
+import gregtech.common.tileentities.machines.multiblock.logic.AdvChemicalProcessorProcessingLogic;
+
+public class AdvChemicalProcessor
+ extends ComplexParallelController<AdvChemicalProcessor, AdvChemicalProcessorProcessingLogic> {
+
+ private static IStructureDefinition<AdvChemicalProcessor> STRUCTURE_DEFINITION = null;
+ protected static final String STRUCTURE_PIECE_T1 = "T1";
+ protected static final String STRUCTURE_PIECE_T2 = "T2";
+ protected static final String STRUCTURE_PIECE_T3 = "T3";
+ protected static final String STRUCTURE_PIECE_T4 = "T4";
+ protected static final String STRUCTURE_PIECE_T5_6 = "T5_6";
+ protected static final String STRUCTURE_PIECE_T7_8 = "T7_8";
+ protected static final Vec3Impl STRUCTURE_OFFSET_T1 = new Vec3Impl(3, 1, 0);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T2 = new Vec3Impl(1, 4, -3);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T3 = new Vec3Impl(8, 0, 5);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T4 = new Vec3Impl(-14, 0, 0);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T5 = new Vec3Impl(14, 0, -6);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T6 = new Vec3Impl(-16, 0, 0);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T7 = new Vec3Impl(16, 0, 15);
+ protected static final Vec3Impl STRUCTURE_OFFSET_T8 = new Vec3Impl(-16, 0, 0);
+ protected static final int PROCESS_WINDOW_BASE_ID = 100;
+ protected static final int ITEM_WHITELIST_SLOTS = 8;
+ protected static final int FLUID_WHITELIST_SLOTS = 8;
+ protected static final int MAX_PROCESSES = 8;
+ protected HeatingCoilLevel coilTier;
+ protected final ArrayList<HashSet<String>> processWhitelists = new ArrayList<>(MAX_PROCESSES);
+ protected final ArrayList<ItemStackHandler> processWhitelistInventoryHandlers = new ArrayList<>(MAX_PROCESSES);
+ protected final ArrayList<ArrayList<IFluidTank>> processFluidWhiteLists = new ArrayList<>(MAX_PROCESSES);
+ protected boolean wasWhitelistOpened = false;
+
+ public AdvChemicalProcessor() {
+ super();
+ for (int i = 0; i < MAX_PROCESSES; i++) {
+ processWhitelists.add(null);
+ processWhitelistInventoryHandlers.add(new ItemStackHandler(ITEM_WHITELIST_SLOTS));
+ ArrayList<IFluidTank> processFluidTanks = new ArrayList<>(FLUID_WHITELIST_SLOTS);
+ for (int j = 0; j < FLUID_WHITELIST_SLOTS; j++) {
+ processFluidTanks.add(new FluidTankGT());
+ }
+ processFluidWhiteLists.add(processFluidTanks);
+ }
+ setMaxComplexParallels(1, false);
+ }
+
+ @Override
+ public void readMultiTileNBT(NBTTagCompound nbt) {
+ super.readMultiTileNBT(nbt);
+ setMaxComplexParallels(nbt.getInteger("processors"), false);
+ final NBTTagCompound processWhiteLists = nbt.getCompoundTag("whiteLists");
+ long capacity = 1000;
+ if (nbt.hasKey(GT_Values.NBT.TANK_CAPACITY)) {
+ capacity = saturatedCast(nbt.getLong(GT_Values.NBT.TANK_CAPACITY));
+ }
+ for (int i = 0; i < MAX_PROCESSES; i++) {
+
+ if (processWhiteLists == null) {
+ continue;
+ }
+
+ final NBTTagCompound itemList = processWhiteLists.getCompoundTag("items" + i);
+ if (itemList != null) {
+ processWhitelistInventoryHandlers.get(i)
+ .deserializeNBT(itemList);
+ }
+ final NBTTagList fluidList = processWhiteLists.getTagList("fluids" + i, Constants.NBT.TAG_COMPOUND);
+
+ if (fluidList == null) {
+ continue;
+ }
+
+ for (int j = 0; j < fluidList.tagCount(); j++) {
+ final NBTTagCompound fluid = fluidList.getCompoundTagAt(j);
+
+ if (fluid == null) {
+ continue;
+ }
+
+ short index = fluid.getShort("s");
+ FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(fluid);
+ if (fluidStack != null) {
+ processFluidWhiteLists.get(i)
+ .get(index)
+ .fill(fluidStack, true);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void writeMultiTileNBT(NBTTagCompound nbt) {
+ super.writeMultiTileNBT(nbt);
+ nbt.setInteger("processors", maxComplexParallels);
+ final NBTTagCompound processWhiteLists = new NBTTagCompound();
+ for (int i = 0; i < MAX_PROCESSES; i++) {
+ processWhiteLists.setTag(
+ "items" + i,
+ processWhitelistInventoryHandlers.get(i)
+ .serializeNBT());
+ final NBTTagList fluidList = new NBTTagList();
+ for (int j = 0; j < FLUID_WHITELIST_SLOTS; j++) {
+ final FluidStack fluidStack = processFluidWhiteLists.get(i)
+ .get(j)
+ .getFluid();
+ if (fluidStack != null) {
+ final NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("s", (byte) j);
+ fluidStack.writeToNBT(tag);
+ fluidList.appendTag(tag);
+ }
+ }
+ processWhiteLists.setTag("fluids" + i, fluidList);
+ }
+ nbt.setTag("whiteLists", processWhiteLists);
+ }
+
+ @Override
+ public short getCasingRegistryID() {
+ return GT_MultiTileCasing.Chemical.getRegistryId();
+ }
+
+ @Override
+ public int getCasingMeta() {
+ return GT_MultiTileCasing.Chemical.getId();
+ }
+
+ @Override
+ public GT_Multiblock_Tooltip_Builder createTooltip() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Chemical Reactor")
+ .addInfo("Controller block for the Advanced Chemical Processor")
+ .addInfo("Does not lose efficiency when overclocked")
+ .addInfo("Accepts fluids instead of fluid cells")
+ .addInfo("Can do multiple different recipes at once")
+ .addInfo("By using the whitelist filter a recipe can push its output")
+ .addInfo("to a different recipes input to chain them")
+ .addInfo("Disclaimer: Still WIP - Use at your own risk")
+ .addInfo(GT_Values.Authorminecraft7771)
+ .addSeparator()
+ .beginStructureBlock(5, 3, 3, false)
+ .addController("Front center")
+ .addCasingInfoExactly("PTFE Pipe Machine Casing", 8, false)
+ .addCasingInfoExactly("Heating Coils", 3, true)
+ .addCasingInfoExactly("EV+ Glass", 3, true)
+ .addCasingInfoExactly("Motor Casing", 3, true)
+ .addCasingInfoExactly("Chemical Casing", 27, false)
+ .toolTipFinisher("Gregtech");
+ return tt;
+ }
+
+ @Override
+ public Vec3Impl getStartingStructureOffset() {
+ return STRUCTURE_OFFSET_T1;
+ }
+
+ @Override
+ public boolean checkMachine() {
+ setCoilTier(HeatingCoilLevel.None);
+ buildState.startBuilding(getStartingStructureOffset());
+ if (!checkPiece(STRUCTURE_PIECE_T1, buildState.getCurrentOffset())) return buildState.failBuilding();
+ if (maxComplexParallels > 1) {
+ buildState.addOffset(STRUCTURE_OFFSET_T2);
+ if (!checkPiece(STRUCTURE_PIECE_T2, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 2) {
+ buildState.addOffset(STRUCTURE_OFFSET_T3);
+ if (!checkPiece(STRUCTURE_PIECE_T3, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 3) {
+ buildState.addOffset(STRUCTURE_OFFSET_T4);
+ if (!checkPiece(STRUCTURE_PIECE_T4, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 4) {
+ buildState.addOffset(STRUCTURE_OFFSET_T5);
+ if (!checkPiece(STRUCTURE_PIECE_T5_6, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 5) {
+ buildState.addOffset(STRUCTURE_OFFSET_T6);
+ if (!checkPiece(STRUCTURE_PIECE_T5_6, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 6) {
+ buildState.addOffset(STRUCTURE_OFFSET_T7);
+ if (!checkPiece(STRUCTURE_PIECE_T7_8, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ if (maxComplexParallels > 7) {
+ buildState.addOffset(STRUCTURE_OFFSET_T8);
+ if (!checkPiece(STRUCTURE_PIECE_T7_8, buildState.getCurrentOffset())) return buildState.failBuilding();
+ }
+ buildState.stopBuilding();
+ return super.checkMachine();
+ }
+
+ @Override
+ public void construct(ItemStack trigger, boolean hintsOnly) {
+ buildState.startBuilding(getStartingStructureOffset());
+ buildPiece(STRUCTURE_PIECE_T1, trigger, hintsOnly, buildState.getCurrentOffset());
+ if (maxComplexParallels > 1) {
+ buildState.addOffset(STRUCTURE_OFFSET_T2);
+ buildPiece(STRUCTURE_PIECE_T2, trigger, hintsOnly, buildState.getCurrentOffset());
+ }
+ if (maxComplexParallels > 2) {
+ buildState.addOffset(STRUCTURE_OFFSET_T3);
+ buildPiece(STRUCTURE_PIECE_T3, trigger, hintsOnly, buildState.getCurrentOffset());
+ }