aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristina Berchtold <kekzdealer@gmail.com>2019-06-08 00:22:03 +0200
committerChristina Berchtold <kekzdealer@gmail.com>2019-06-08 00:22:03 +0200
commit528d3633ab5b7534325281759ffeec4772f68da9 (patch)
tree478a79f7eefa827f7e3752c6483a1880652ed96c /src
parent57c5da35a3a6b5cbf6cf36d6ab9e4886fc1e6342 (diff)
downloadGT5-Unofficial-528d3633ab5b7534325281759ffeec4772f68da9.tar.gz
GT5-Unofficial-528d3633ab5b7534325281759ffeec4772f68da9.tar.bz2
GT5-Unofficial-528d3633ab5b7534325281759ffeec4772f68da9.zip
I haven't commited in a while D;
Diffstat (limited to 'src')
-rw-r--r--src/main/java/fuelcell/GTMTE_SOFuelCellMK1.java172
-rw-r--r--src/main/java/fuelcell/GTMTE_SOFuelCellMK2.java172
-rw-r--r--src/main/java/kekztech/ErrorItem.java41
-rw-r--r--src/main/java/kekztech/GTMultiController.java300
-rw-r--r--src/main/java/kekztech/GTRecipe.java103
-rw-r--r--src/main/java/kekztech/Items.java43
-rw-r--r--src/main/java/kekztech/KekzCore.java93
-rw-r--r--src/main/java/kekztech/MetaItem_CraftingComponent.java103
-rw-r--r--src/main/java/kekztech/MetaItem_ReactorComponent.java139
-rw-r--r--src/main/java/kekztech/Util.java50
-rw-r--r--src/main/java/reactor/ButtonSlot.java14
-rw-r--r--src/main/java/reactor/Container_ModularNuclearReactor.java68
-rw-r--r--src/main/java/reactor/GTMTE_ModularNuclearReactor.java188
-rw-r--r--src/main/java/reactor/GUIContainer_ModularNuclearReactor.java53
-rw-r--r--src/main/java/reactor/items/CoolantCell.java26
-rw-r--r--src/main/java/reactor/items/FuelRod.java114
-rw-r--r--src/main/java/reactor/items/HeatExchanger.java60
-rw-r--r--src/main/java/reactor/items/HeatPipe.java29
-rw-r--r--src/main/java/reactor/items/HeatVent.java111
-rw-r--r--src/main/java/reactor/items/NeutronReflector.java26
-rw-r--r--src/main/resources/assets/kekztech/lang/en_US.lang74
-rw-r--r--src/main/resources/assets/kekztech/textures/gui/ReaktorGUI_background.pngbin0 -> 30399 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/AmineCarbamateDust.pngbin0 -> 255 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/BoronArsenideCrystal.pngbin0 -> 666 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/BoronArsenideDust.pngbin0 -> 266 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/BoronArsenideHeatPipe.pngbin0 -> 570 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/CeriaDust.pngbin0 -> 263 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/CopperHeatPipe.pngbin0 -> 508 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedMOXDualFuelRod.pngbin0 -> 906 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedMOXFuelRod.pngbin0 -> 563 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedMOXQuadFuelRod.pngbin0 -> 1048 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedNaquadahDualFuelRod.pngbin0 -> 722 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedNaquadahFuelRod.pngbin0 -> 438 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedNaquadahQuadFuelRod.pngbin0 -> 823 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedThoriumDualFuelRod.pngbin0 -> 990 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedThoriumFuelRod.pngbin0 -> 439 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedThoriumQuadFuelRod.pngbin0 -> 824 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedUraniumDualFuelRod.pngbin0 -> 725 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedUraniumFuelRod.pngbin0 -> 442 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DepletedUraniumQuadFuelRod.pngbin0 -> 830 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DiamondHeatPipe.pngbin0 -> 571 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Error.pngbin0 -> 6206 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/GDCCeramicDust.pngbin0 -> 276 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/GDCCeramicPlate.pngbin0 -> 316 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/HeliumCoolantCell360k.pngbin0 -> 712 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/IsotopicallyPureDiamondCrystal.pngbin0 -> 873 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/IsotopicallyPureDiamondDust.pngbin0 -> 277 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/MOXDualFuelRod.pngbin0 -> 905 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/MOXFuelRod.pngbin0 -> 563 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/MOXQuadFuelRod.pngbin0 -> 1041 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/NaKCoolantCell360k.pngbin0 -> 926 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/NaquadahDualFuelRod.pngbin0 -> 721 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/NaquadahFuelRod.pngbin0 -> 438 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/NaquadahQuadFuelRod.pngbin0 -> 1056 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/SilverHeatPipe.pngbin0 -> 506 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T1ComponentHeatVent.pngbin0 -> 1168 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T1HeatExchanger.pngbin0 -> 502 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T1HeatVent.pngbin0 -> 1276 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T1NeutronReflector.pngbin0 -> 1606 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T1OverclockedHeatVent.pngbin0 -> 1379 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T2ComponentHeatVent.pngbin0 -> 1284 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T2HeatExchanger.pngbin0 -> 486 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T2HeatVent.pngbin0 -> 1383 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T2NeutronReflector.pngbin0 -> 2435 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T2OverclockedHeatVent.pngbin0 -> 1369 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T3ComponentHeatVent.pngbin0 -> 1299 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T3HeatExchanger.pngbin0 -> 596 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T3HeatVent.pngbin0 -> 1378 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T3OverclockedHeatVent.pngbin0 -> 1386 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T4ComponentHeatVent.pngbin0 -> 1149 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T4HeatExchanger.pngbin0 -> 594 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T4HeatVent.pngbin0 -> 1289 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/T4OverclockedHeatVent.pngbin0 -> 1368 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_DepletedMOXDualFuelRod.pngbin0 -> 907 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_DepletedMOXFuelRod.pngbin0 -> 564 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_DepletedMOXQuadFuelRod.pngbin0 -> 1165 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_MOXDualFuelRod.pngbin0 -> 907 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_MOXFuelRod.pngbin0 -> 564 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/Th_MOXQuadFuelRod.pngbin0 -> 1031 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/ThoriumDualFuelRod.pngbin0 -> 724 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/ThoriumFuelRod.pngbin0 -> 441 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/ThoriumQuadFuelRod.pngbin0 -> 827 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/UraniumDualFuelRod.pngbin0 -> 724 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/UraniumQuadFuelRod.pngbin0 -> 828 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/YSZCeramicDust.pngbin0 -> 270 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/YSZCeramicPlate.pngbin0 -> 308 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/YttriaDust.pngbin0 -> 252 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/ZirconiaDust.pngbin0 -> 253 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/plate.pngbin0 -> 275 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/uraniumFuelRod.pngbin0 -> 441 bytes
90 files changed, 1979 insertions, 0 deletions
diff --git a/src/main/java/fuelcell/GTMTE_SOFuelCellMK1.java b/src/main/java/fuelcell/GTMTE_SOFuelCellMK1.java
new file mode 100644
index 0000000000..91acd82893
--- /dev/null
+++ b/src/main/java/fuelcell/GTMTE_SOFuelCellMK1.java
@@ -0,0 +1,172 @@
+package fuelcell;
+
+import gregtech.api.GregTech_API;
+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.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import reactor.GUIContainer_ModularNuclearReactor;
+
+public class GTMTE_SOFuelCellMK1 extends GT_MetaTileEntity_MultiBlockBase {
+
+ final Block CASING = GregTech_API.sBlockCasings4;
+ final int CASING_META = 1;
+ final int CASING_TEXTURE_ID = 49;
+
+ public GTMTE_SOFuelCellMK1(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+
+ }
+
+ public GTMTE_SOFuelCellMK1(String aName) {
+ super(aName);
+
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
+ return new GTMTE_SOFuelCellMK1(super.mName);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "Solid-oxide Fuel Cell MkI",
+ "------------------------------------------",
+ "Oxidizes gas fuels to generate electricity without polluting the environment",
+ "29,480EU worth of fuel are consumed each second",
+ "Outputs 1024EU/t and 18,000L/t Steam",
+ "Additionally requires 360L/s Oxygen gas",
+ "------------------------------------------",
+ "Dimensions: 3x3x5 (WxHxL)",
+ "Structure:",
+ " 3x Solid YSZ Ceramic Electrolyte Unit (center 1x1x3)",
+ " 12x Clean Stainless Steel Machine Casing (at least)",
+ " Controller front center",
+ " Dynamo Hatch back center",
+ " Maintenance Hatch, Input Hatches, Output Hatches"
+ };
+ }
+
+ //TODO
+ @Override
+ public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final byte aFacing,
+ final byte aColorIndex, final boolean aActive, final boolean aRedstone) {
+ return aSide == aFacing
+ ? new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID],
+ new GT_RenderedTexture(aActive ?
+ Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE
+ : Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER)}
+ : new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID]};
+ }
+
+ //TODO
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GUIContainer_ModularNuclearReactor(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
+ "MultiblockDisplay.png");
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack stack) {
+ return false;
+ }
+
+ //TODO
+ @Override
+ public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
+
+ final byte SIDE_LENGTH_W = 3;
+ final byte SIDE_LENGTH_L = 5;
+ final byte MAX_OFFSET = (byte) Math.floor(SIDE_LENGTH_W / 2);
+ final int XDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX * MAX_OFFSET;
+ final int ZDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ * MAX_OFFSET;
+
+ int minCasingAmount = 12;
+ boolean checklist = true; // if this is still true at the end, machine is good to go :)
+
+ for (int leftToRight = -MAX_OFFSET; leftToRight <= MAX_OFFSET; leftToRight++) {
+
+ for (int frontToBack = -MAX_OFFSET; frontToBack <= MAX_OFFSET; frontToBack++) {
+
+ for (int thisY = -MAX_OFFSET; thisY <= MAX_OFFSET; thisY++) {
+
+ // Center 3x3x3 air cube
+ if((leftToRight > -2 && leftToRight < 2) && (frontToBack > -2 && frontToBack < 2) && (thisY > -2 && thisY < 2)) {
+ if(!thisController.getAirOffset(XDIR_BACKFACE + leftToRight, thisY, ZDIR_BACKFACE + frontToBack)) {
+ checklist = false;
+ }
+ } else if (!(XDIR_BACKFACE + leftToRight == 0 && ZDIR_BACKFACE + frontToBack == 0 && thisY == 0)) { // Make sure this isn't the controller
+ // Get next TE
+ final int THIS_X = XDIR_BACKFACE + leftToRight;
+ final int THIS_Z = ZDIR_BACKFACE + frontToBack;
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(THIS_X, thisY, THIS_Z);// x, y ,z
+
+ // Tries to add TE as either of those kinds of hatches.
+ // The number is the texture index number for the texture that needs to be painted over the hatch texture (TAE for GT++)
+ if ( !super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addDynamoToMachineList(currentTE, CASING_TEXTURE_ID)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(THIS_X, thisY, THIS_Z) == CASING) && (thisController.getMetaIDOffset(THIS_X, thisY, THIS_Z) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ checklist = false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if(minCasingAmount > 0) {
+ checklist = false;
+ }
+
+ if(this.mDynamoHatches.size() < 1) {
+ System.out.println("At least one dynamo hatch is required!");
+ checklist = false;
+ }
+ if(this.mInputHatches.size() < 2) {
+ System.out.println("At least two input hatches are required!");
+ checklist = false;
+ }
+
+ return checklist;
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack stack) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerTick(ItemStack stack) {
+ return 0;
+ }
+
+ @Override
+ public int getDamageToComponent(ItemStack stack) {
+ return 0;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack stack) {
+ return false;
+ }
+
+}
diff --git a/src/main/java/fuelcell/GTMTE_SOFuelCellMK2.java b/src/main/java/fuelcell/GTMTE_SOFuelCellMK2.java
new file mode 100644
index 0000000000..dbe16c3795
--- /dev/null
+++ b/src/main/java/fuelcell/GTMTE_SOFuelCellMK2.java
@@ -0,0 +1,172 @@
+package fuelcell;
+
+import gregtech.api.GregTech_API;
+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.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import reactor.GUIContainer_ModularNuclearReactor;
+
+public class GTMTE_SOFuelCellMK2 extends GT_MetaTileEntity_MultiBlockBase {
+
+ final Block CASING = GregTech_API.sBlockCasings4;
+ final int CASING_META = 0;
+ final int CASING_TEXTURE_ID = 48;
+
+ public GTMTE_SOFuelCellMK2(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+
+ }
+
+ public GTMTE_SOFuelCellMK2(String aName) {
+ super(aName);
+
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
+ return new GTMTE_SOFuelCellMK2(super.mName);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "Solid-oxide Fuel Cell Mk2",
+ "------------------------------------------",
+ "Oxidizes gas fuels to generate electricity without polluting the environment",
+ "375,680EU worth of fuel are consumed each second",
+ "Outputs 16,384EU/t and 96,000L/t Steam",
+ "Additionally requires 1920L/s Oxygen gas",
+ "------------------------------------------",
+ "Dimensions: 3x3x5 (WxHxL)",
+ "Structure:",
+ " 3x Solid GDC Ceramic Electrolyte Unit (center 1x1x3)",
+ " 12x Robust Tungstensteel Machine Casing (at least)",
+ " Controller front center",
+ " Dynamo Hatch back center",
+ " Maintenance Hatch, Input Hatches, Output Hatches"
+ };
+ }
+
+ //TODO
+ @Override
+ public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final byte aFacing,
+ final byte aColorIndex, final boolean aActive, final boolean aRedstone) {
+ return aSide == aFacing
+ ? new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID],
+ new GT_RenderedTexture(aActive ?
+ Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE
+ : Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER)}
+ : new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID]};
+ }
+
+ //TODO
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GUIContainer_ModularNuclearReactor(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
+ "MultiblockDisplay.png");
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack stack) {
+ return false;
+ }
+
+ //TODO
+ @Override
+ public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
+
+ final byte SIDE_LENGTH_W = 3;
+ final byte SIDE_LENGTH_L = 5;
+ final byte MAX_OFFSET = (byte) Math.floor(SIDE_LENGTH_W / 2);
+ final int XDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX * MAX_OFFSET;
+ final int ZDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ * MAX_OFFSET;
+
+ int minCasingAmount = 12;
+ boolean checklist = true; // if this is still true at the end, machine is good to go :)
+
+ for (int leftToRight = -MAX_OFFSET; leftToRight <= MAX_OFFSET; leftToRight++) {
+
+ for (int frontToBack = -MAX_OFFSET; frontToBack <= MAX_OFFSET; frontToBack++) {
+
+ for (int thisY = -MAX_OFFSET; thisY <= MAX_OFFSET; thisY++) {
+
+ // Center 3x3x3 air cube
+ if((leftToRight > -2 && leftToRight < 2) && (frontToBack > -2 && frontToBack < 2) && (thisY > -2 && thisY < 2)) {
+ if(!thisController.getAirOffset(XDIR_BACKFACE + leftToRight, thisY, ZDIR_BACKFACE + frontToBack)) {
+ checklist = false;
+ }
+ } else if (!(XDIR_BACKFACE + leftToRight == 0 && ZDIR_BACKFACE + frontToBack == 0 && thisY == 0)) { // Make sure this isn't the controller
+ // Get next TE
+ final int THIS_X = XDIR_BACKFACE + leftToRight;
+ final int THIS_Z = ZDIR_BACKFACE + frontToBack;
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(THIS_X, thisY, THIS_Z);// x, y ,z
+
+ // Tries to add TE as either of those kinds of hatches.
+ // The number is the texture index number for the texture that needs to be painted over the hatch texture (TAE for GT++)
+ if ( !super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addDynamoToMachineList(currentTE, CASING_TEXTURE_ID)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(THIS_X, thisY, THIS_Z) == CASING) && (thisController.getMetaIDOffset(THIS_X, thisY, THIS_Z) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ checklist = false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if(minCasingAmount > 0) {
+ checklist = false;
+ }
+
+ if(this.mDynamoHatches.size() < 1) {
+ System.out.println("At least one dynamo hatch is required!");
+ checklist = false;
+ }
+ if(this.mInputHatches.size() < 2) {
+ System.out.println("At least two input hatches are required!");
+ checklist = false;
+ }
+
+ return checklist;
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack stack) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerTick(ItemStack stack) {
+ return 0;
+ }
+
+ @Override
+ public int getDamageToComponent(ItemStack stack) {
+ return 0;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack stack) {
+ return false;
+ }
+
+}
diff --git a/src/main/java/kekztech/ErrorItem.java b/src/main/java/kekztech/ErrorItem.java
new file mode 100644
index 0000000000..7047d3f057
--- /dev/null
+++ b/src/main/java/kekztech/ErrorItem.java
@@ -0,0 +1,41 @@
+package kekztech;
+
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+public class ErrorItem extends Item {
+
+ private static final ErrorItem instance = new ErrorItem();
+
+ private ErrorItem() {
+ // I am a singleton
+ }
+
+ public static ErrorItem getInstance() {
+ return instance;
+ }
+
+ public void registerItem() {
+ super.setHasSubtypes(false);
+ final String unlocalizedName = "kekztech_error_item";
+ super.setUnlocalizedName(unlocalizedName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setMaxStackSize(64);
+ super.setTextureName(KekzCore.MODID + ":" + "Error");
+ GameRegistry.registerItem(getInstance(), unlocalizedName);
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) {
+ list.add("Placeholder item in case something went wrong");
+ list.add("You may report this to:");
+ list.add("https://github.com/kekzdealer/KekzTech");
+ }
+
+}
diff --git a/src/main/java/kekztech/GTMultiController.java b/src/main/java/kekztech/GTMultiController.java
new file mode 100644
index 0000000000..e27c2c39bd
--- /dev/null
+++ b/src/main/java/kekztech/GTMultiController.java
@@ -0,0 +1,300 @@
+package kekztech;
+
+import java.util.ArrayList;
+
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metati