aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod/gregtech/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech/common')
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java6
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java62
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java20
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java1245
6 files changed, 1324 insertions, 13 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java
index f71805784b..3c55d2fa95 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java
@@ -58,7 +58,7 @@ public class GregtechMetaCasingBlocks2 extends GregtechMetaCasingBlocksAbstract
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Cyclotron Coil");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Cyclotron Outer Casing");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Thermal Containment Casing");
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Autocrafter Frame");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Bulk Production Frame");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Cutting Factory Frame");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", ""); // Unused
GT_LanguageManager.addStringLocalization(
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java
index 5456aa27a2..8256f1aa64 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java
@@ -24,7 +24,8 @@ public class GregtechMetaCasingBlocks4 extends GregtechMetaCasingBlocksAbstract
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Reactor Piping");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Naquadah Containment Chamber");
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Tempered Arc Furnace Casing");
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(
+ this.getUnlocalizedName() + ".4.name", "Quantum Force Transformer Coil Casings"); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", ""); // Unused
GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", ""); // Unused
@@ -40,6 +41,7 @@ public class GregtechMetaCasingBlocks4 extends GregtechMetaCasingBlocksAbstract
GregtechItemList.Casing_Naq_Reactor_B.set(new ItemStack(this, 1, 1));
GregtechItemList.Casing_Naq_Reactor_C.set(new ItemStack(this, 1, 2));
GregtechItemList.Casing_Industrial_Arc_Furnace.set(new ItemStack(this, 1, 3));
+ GregtechItemList.Casing_Coil_QuantumForceTransformer.set(new ItemStack(this, 1, 4));
GregtechItemList.Casing_Vacuum_Furnace.set(new ItemStack(this, 1, 10));
GregtechItemList.Casing_RocketEngine.set(new ItemStack(this, 1, 11));
}
@@ -71,7 +73,7 @@ public class GregtechMetaCasingBlocks4 extends GregtechMetaCasingBlocksAbstract
case 3:
return TexturesGtBlock.TEXTURE_METAL_PANEL_A.getIcon();
case 4:
- return Textures.BlockIcons.RENDERING_ERROR.getIcon();
+ return TexturesGtBlock.Casing_Coil_QFT.getIcon();
case 5:
return Textures.BlockIcons.RENDERING_ERROR.getIcon();
case 6:
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
index 834fb2c186..68d8349ef3 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java
@@ -42,15 +42,17 @@ public class GregtechMetaCasingBlocks5 extends GregtechMetaCasingBlocksAbstract
GT_LanguageManager.addStringLocalization(
this.getUnlocalizedName() + ".6.name", "Forge Casing"); // Forge Hammer Casing
TAE.registerTexture(1, 11, new GTPP_CopiedBlockTexture(this, 6, 6));
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", ""); // Unused
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", ""); // Unused
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Neutron Pulse Manipulator");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Cosmic Fabric Manipulator");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Infinity Infused Manipulator");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "SpaceTime Continuum Ripper");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Neutron Shielding Core");
+ GT_LanguageManager.addStringLocalization(
+ this.getUnlocalizedName() + ".12.name", "Cosmic Fabric Shielding Core");
+ GT_LanguageManager.addStringLocalization(
+ this.getUnlocalizedName() + ".13.name", "Infinity Infused Shielding Core");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "SpaceTime Bending Core");
+ GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Force Field Glass");
GregtechItemList.Casing_IsaMill_Casing.set(new ItemStack(this, 1, 0));
GregtechItemList.Casing_IsaMill_Pipe.set(new ItemStack(this, 1, 1));
@@ -59,6 +61,15 @@ public class GregtechMetaCasingBlocks5 extends GregtechMetaCasingBlocksAbstract
GregtechItemList.Casing_Sparge_Tower_Exterior.set(new ItemStack(this, 1, 4));
GregtechItemList.Casing_IndustrialAutoChisel.set(new ItemStack(this, 1, 5));
GregtechItemList.Casing_IndustrialForgeHammer.set(new ItemStack(this, 1, 6));
+ GregtechItemList.NeutronPulseManipulator.set(new ItemStack(this, 1, 7));
+ GregtechItemList.CosmicFabricManipulator.set(new ItemStack(this, 1, 8));
+ GregtechItemList.InfinityInfusedManipulator.set(new ItemStack(this, 1, 9));
+ GregtechItemList.SpaceTimeContinuumRipper.set(new ItemStack(this, 1, 10));
+ GregtechItemList.NeutronShieldingCore.set(new ItemStack(this, 1, 11));
+ GregtechItemList.CosmicFabricShieldingCore.set(new ItemStack(this, 1, 12));
+ GregtechItemList.InfinityInfusedShieldingCore.set(new ItemStack(this, 1, 13));
+ GregtechItemList.SpaceTimeBendingCore.set(new ItemStack(this, 1, 14));
+ GregtechItemList.ForceFieldGlass.set(new ItemStack(this, 1, 15));
}
@Override
@@ -83,6 +94,39 @@ public class GregtechMetaCasingBlocks5 extends GregtechMetaCasingBlocksAbstract
return TexturesGtBlock.Casing_Machine_Metal_Sheet_I.getIcon();
case 6:
return TexturesGtBlock.TEXTURE_TECH_PANEL_H.getIcon();
+ case 7:
+ if (aSide == 0 || aSide == 1) {
+ return TexturesGtBlock.Manipulator_Top.getIcon();
+ }
+ return TexturesGtBlock.NeutronPulseManipulator.getIcon();
+ case 8:
+ if (aSide == 0 || aSide == 1) {
+ return TexturesGtBlock.Manipulator_Top.getIcon();
+ }
+ return TexturesGtBlock.CosmicFabricManipulator.getIcon();
+ case 9:
+ if (aSide == 0 || aSide == 1) {
+ return TexturesGtBlock.Manipulator_Top.getIcon();
+ }
+ return TexturesGtBlock.InfinityInfusedManipulator.getIcon();
+ case 10:
+ if (aSide == 0 || aSide == 1) {
+ return TexturesGtBlock.Manipulator_Top.getIcon();
+ }
+ return TexturesGtBlock.SpaceTimeContinuumRipper.getIcon();
+ case 11:
+ return TexturesGtBlock.NeutronShieldingCore.getIcon();
+ case 12:
+ return TexturesGtBlock.CosmicFabricShieldingCore.getIcon();
+ case 13:
+ return TexturesGtBlock.InfinityInfusedShieldingCore.getIcon();
+ case 14:
+ return TexturesGtBlock.SpaceTimeBendingCore.getIcon();
+ case 15:
+ if (aSide == 0 || aSide == 1) {
+ return TexturesGtBlock.Blank.getIcon();
+ }
+ return TexturesGtBlock.ForceFieldGlass.getIcon();
}
}
return Textures.BlockIcons.RENDERING_ERROR.getIcon();
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
index d92c9fb7e1..9ee32bcaa6 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java
@@ -13,6 +13,8 @@ import net.minecraft.util.ResourceLocation;
public class TexturesGtBlock {
+ private static boolean mAnimated = CORE.ConfigSwitches.enableAnimatedTextures;
+
private static AutoMap<Runnable> mCustomiconMap = new AutoMap<Runnable>();
static {
@@ -289,6 +291,24 @@ public class TexturesGtBlock {
new CustomIcon("TileEntities/MACHINE_CASING_CENTRIFUGE");
public static final CustomIcon Casing_Material_Centrifuge = Internal_Casing_Centrifuge;
+ // Quantum Force Transformer Casing
+ // spotless:off
+ private static final CustomIcon Internal_Casing_QFT = mAnimated ? new CustomIcon("TileEntities/MACHINE_CASING_QFT_COIL") : new CustomIcon("TileEntites/MACHINE_CASING_QFT_COIL");
+ public static final CustomIcon Casing_Coil_QFT = Internal_Casing_QFT;
+ public static final CustomIcon NeutronPulseManipulator = mAnimated ? new CustomIcon("NeutronPulseManipulator") : new CustomIcon("NeutronPulseManipulatorStatic");
+ public static final CustomIcon CosmicFabricManipulator = mAnimated ? new CustomIcon("CosmicFabricManipulator") : new CustomIcon("CosmicFabricManipulatorStatic");
+ public static final CustomIcon InfinityInfusedManipulator = mAnimated ? new CustomIcon("InfinityInfusedManipulator") : new CustomIcon("InfinityInfusedManipulatorStatic");
+ public static final CustomIcon SpaceTimeContinuumRipper = mAnimated ? new CustomIcon("SpaceTimeContinuumRipper") : new CustomIcon("SpaceTimeContinuumRipperStatic");
+ public static final CustomIcon Manipulator_Top = new CustomIcon("Manipulator_Top");
+ public static final CustomIcon NeutronShieldingCore = mAnimated ? new CustomIcon("NeutronShieldingCore") : new CustomIcon("NeutronShieldingCoreStatic");
+ public static final CustomIcon CosmicFabricShieldingCore = mAnimated ? new CustomIcon("CosmicFabricShieldingCore") : new CustomIcon("CosmicFabricShieldingCoreStatic");
+ public static final CustomIcon InfinityInfusedShieldingCore = mAnimated ? new CustomIcon("InfinityInfusedShieldingCore") : new CustomIcon("InfinityInfusedShieldingCoreStatic");
+ public static final CustomIcon SpaceTimeBendingCore = mAnimated ? new CustomIcon("SpaceTimeBendingCore") : new CustomIcon("SpaceTimeBendingCoreStatic");
+ public static final CustomIcon ForceFieldGlass = new CustomIcon("ForceFieldGlass");
+ public static final CustomIcon ForceField = new CustomIcon("rendering/ForceField");
+ public static final CustomIcon Blank = new CustomIcon("Blank");
+ //spotless:on
+
// MACHINE_CASING_FARM_MANAGER_STRUCTURAL
// Farm Manager Casings
private static final CustomIcon Internal_Casing_Machine_Farm_Manager =
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java
index 82631d81bf..f701b23e92 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java
@@ -141,7 +141,7 @@ public class GT4Entity_AutoCrafter extends GregtechMeta_MultiBlockBase<GT4Entity
.addSeparator()
.beginStructureBlock(3, 3, 3, true)
.addController("Front Center")
- .addCasingInfo("Autocrafter Frame", 10)
+ .addCasingInfo("Bulk Production Frame", 10)
.addInputBus("Any Casing", 1)
.addOutputBus("Any Casing", 1)
.addInputHatch("Any Casing", 1)
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java
new file mode 100644
index 0000000000..b5fc3b6ebb
--- /dev/null
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java
@@ -0,0 +1,1245 @@
+package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
+import static gregtech.api.enums.GT_HatchElement.*;
+import static gregtech.api.util.GT_OreDictUnificator.getAssociation;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
+
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.*;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.TAE;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.objects.ItemData;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.*;
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.core.material.ELEMENT;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+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.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.IBlockAccess;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import org.apache.commons.lang3.tuple.Pair;
+import org.lwjgl.opengl.GL11;
+
+public class GregtechMetaTileEntity_QuantumForceTransformer
+ extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<GregtechMetaTileEntity_QuantumForceTransformer>
+ implements ISurvivalConstructable {
+
+ private int mCasing;
+ protected int mCraftingTier = 0;
+ protected int mFocusingTier = 0;
+ private boolean mSeparateInputBusses = false;
+ private boolean mFluidMode = false, doFermium = false, doNeptunium = false;
+ private static final Fluid mNeptunium = ELEMENT.getInstance().NEPTUNIUM.getPlasma();
+ private static final Fluid mFermium = ELEMENT.getInstance().FERMIUM.getPlasma();
+ private static final String MAIN_PIECE = "main";
+ private GT_MetaTileEntity_Hatch_Input mNeptuniumHatch;
+ private GT_MetaTileEntity_Hatch_Input mFermiumHatch;
+ private static final IStructureDefinition<GregtechMetaTileEntity_QuantumForceTransformer> STRUCTURE_DEFINITION =
+ StructureDefinition.<GregtechMetaTileEntity_QuantumForceTransformer>builder()
+ .addShape(MAIN_PIECE, new String[][] { // A - 142, B - 234, C - 177, D - 96, E - 224, H - 36, M - 21
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " BBBBABBBB ",
+ " BAAAAAAAB ",
+ " BABBABBAB ",
+ " BA AB ",
+ " A A ",
+ " A A ",
+ " A A "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " AAABBBAAA ",
+ " BAAAAAAAAAB ",
+ " B B ",
+ " A A ",
+ " A A ",
+ " ",
+ " ",
+ " "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " AA AA ",
+ " AA AA ",
+ " BAA AAB ",
+ " B B ",
+ " A A ",
+ " A A ",
+ " ",
+ " ",
+ " "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAAAB ",
+ " AA AA ",
+ " AA AA ",
+ "BAA AAB",
+ "B B",
+ "A A",
+ "A A",
+ "A A",
+ "A A",
+ "A A"
+ },
+ {
+ " TTT ",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " DDD ",
+ " EEE ",
+ " DDD ",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " DDD ",
+ " BAEEEAB ",
+ " AA EEE AA ",
+ " A EEE A ",
+ "BA DDD AB",
+ "B EEE B",
+ "B DDD B",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " Z~X "
+ },
+ {
+ " TTTTT ",
+ " ECCCE ",
+ " ECCCE ",
+ " ECCCE ",
+ " D D ",
+ " ECCCE ",
+ " D D ",
+ " ECCCE ",
+ " ECCCE ",
+ " ECCCE ",
+ " D D ",
+ " BAECCCEAB ",
+ " A ECCCE A ",
+ " A ECCCE A ",
+ "BA D D AB",
+ "B ECCCE B",
+ "B D D B",
+ "B ECCCE B",
+ " ECCCE ",
+ " ECCCE ",
+ " HHHHH "
+ },
+ {
+ " TTTTTTT ",
+ " ECCCCCE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " BAEC CEAB ",
+ " B EC CE B ",
+ "BB EC CE BB",
+ "BA D D AB",
+ "A EC CE A",
+ "A D D A",
+ "A EC CE A",
+ " EC CE ",
+ " EC CE ",
+ " HHHHHHH "
+ },
+ {
+ " TTTTTTT ",
+ " ECCCCCE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " AAEC CEAA ",
+ " A EC CE A ",
+ "AB EC CE BA",
+ "AA D D AA",
+ "A EC CE A",
+ "A D D A",
+ " EC CE ",
+ " EC CE ",
+ " EC CE ",
+ " HHHHHHH "
+ },
+ {
+ " TTTTTTT ",
+ " ECCCCCE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " D D ",
+ " EC CE ",
+ " EC CE ",
+ " EC CE ",
+ " D D ",
+ " BAEC CEAB ",
+ " B EC CE B ",
+ "BB EC CE BB",
+ "BA D D AB",
+ "A EC CE A",
+ "A D D A",
+ "A EC CE A",
+ " EC CE ",
+ " EC CE ",
+ " HHHHHHH "
+ },
+ {
+ " TTTTT ",
+ " ECCCE ",
+ " ECCCE ",
+ " ECCCE ",
+ " D D ",
+ " ECCCE ",
+ " D D ",
+ " ECCCE ",
+ " ECCCE ",
+ " ECCCE ",
+ " D D ",
+ " BAECCCEAB ",
+ " A ECCCE A ",
+ " A ECCCE A ",
+ "BA D D AB",
+ "B ECCCE B",
+ "B D D B",
+ "B ECCCE B",
+ " ECCCE ",
+ " ECCCE ",
+ " HHHHH "
+ },
+ {
+ " TTT ",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " DDD ",
+ " EEE ",
+ " DDD ",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " DDD ",
+ " BAEEEAB ",
+ " AA EEE AA ",
+ " A EEE A ",
+ "BA DDD AB",
+ "B EEE B",
+ "B DDD B",
+ " EEE ",
+ " EEE ",
+ " EEE ",
+ " HHH "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAAAB ",
+ " AA AA ",
+ " AA AA ",
+ "BAA AB",
+ "B B",
+ "A A",
+ "A A",
+ "A A",
+ "A A",
+ "A A"
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " AA AA ",
+ " AA AA ",
+ " BA AB ",
+ " B B ",
+ " A A ",
+ " A A ",
+ " ",
+ " ",
+ " "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " AAABBBAAA ",
+ " BAAAAAAAAAB ",
+ " B B ",
+ " A A ",
+ " A A ",
+ " ",
+ " ",
+ " "
+ },
+ {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BAB ",
+ " BBBBABBBB ",
+ " BBBAAABBB ",
+ " ABBAAABBA ",
+ " A BA AB A ",
+ " A A ",
+ " A A ",
+ " A A "
+ },
+ })
+ .addElement(
+ 'A',
+ StructureUtility.ofBlocksTiered(
+ craftingTierConverter(),
+ getAllCraftingTiers(),
+ 0,
+ GregtechMetaTileEntity_QuantumForceTransformer::setCraftingTier,
+ GregtechMetaTileEntity_QuantumForceTransformer::getCraftingTier))
+ .addElement(
+ 'B',
+ StructureUtility.ofBlocksTiered(
+ focusingTierConverter(),
+ getAllFocusingTiers(),
+ 0,
+ GregtechMetaTileEntity_QuantumForceTransformer::setFocusingTier,
+ GregtechMetaTileEntity_QuantumForceTransformer::getFocusingTier))
+ .addElement('C', ofBlock(ModBlocks.blockCasings4Misc, 4))
+ .addElement('D', ofBlock(ModBlocks.blockCasings2Misc, 12))
+ .addElement('E', lazy(t -> ofBlock(t.getCasingBlock1(), t.getCasingMeta1())))
+ .addElement(
+ 'H',
+ buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class)
+ .atLeast(InputBus, InputHatch, Maintenance, Energy.or(ExoticEnergy))
+ .casingIndex(TAE.getIndexFromPage(0, 10))
+ .dot(4)
+ .buildAndChain(
+ onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12))))
+ .addElement(
+ 'T',
+ buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class)
+ .atLeast(OutputBus, OutputHatch, Maintenance)
+ .casingIndex(TAE.getIndexFromPage(0, 10))
+ .dot(5)
+ .buildAndChain(
+ onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12))))
+ .addElement(
+ 'Z',
+ buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class)
+ .hatchClass(GT_MetaTileEntity_Hatch_Input.class)
+ .adder(GregtechMetaTileEntity_QuantumForceTransformer::addNeptuniumHatch)
+ .casingIndex(TAE.getIndexFromPage(0, 10))
+ .dot(5)
+ .buildAndChain(
+ onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12))))
+ .addElement(
+ 'X',
+ buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class)
+ .hatchClass(GT_MetaTileEntity_Hatch_Input.class)
+ .adder(GregtechMetaTileEntity_QuantumForceTransformer::addFermiumHatch)
+ .casingIndex(TAE.getIndexFromPage(0, 10))
+ .dot(5)
+ .buildAndChain(
+ onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12))))
+ .build();
+
+ public GregtechMetaTileEntity_QuantumForceTransformer(
+ final int aID, final String aName, final String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GregtechMetaTileEntity_QuantumForceTransformer(final String aName) {
+ super(aName);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) {
+ return new GregtechMetaTileEntity_QuantumForceTransformer(this.mName);
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Quantum Force Transformer")
+ .addInfo("Controller Block for the Quantum Force Transformer")
+ .addInfo("Allows Complex chemical lines to be performed instantly in one step")
+ .addInfo("Every recipe requires a catalyst, each catalyst adds 1 parallel and lasts forever")
+ .addInfo("Accepts TecTech Energy and Laser Hatches")
+ .addInfo("All inputs go on the bottom, all outputs go on the top")
+ .addInfo("Put a circuit in the controller to specify the focused output")
+ .addInfo("Check NEI to see the order of outputs, and which circuit number you need.")
+ .addInfo("Uses FocusTier*4*sqrt(parallels) Neptunium Plasma if focusing")
+ .addInfo("Can use FocusTier*4*sqrt(parallels) Fermium Plasma for additional chance output")
+ .addInfo("This multi gets improved when all casings of some types are upgraded")
+ .addInfo("Casing functions:")
+ .addInfo("Pulse Manipulators: Recipe Tier Allowed (check NEI for the tier of each recipe)")
+ .addInfo("Shielding Cores: Focusing Tier (equal to or higher than recipe tier to allow focus)")
+ .addPollutionAmount(getPollutionPerSecond(null))
+ .addSeparator()
+ .beginStructureBlock(15, 21, 15, true)
+ .addController("Bottom Center")
+ .addCasingInfo("Bulk Production Frame", 80)
+ .addCasingInfo("Quantum Force Conductor", 177)
+ .addCasingInfo("Particle Containment Casing", 224)
+ .addCasingInfo("Neutron Pulse Manipulators", 233)
+ .addCasingInfo("Neutron Shielding Cores", 142)
+ .addInputBus("Bottom Layer", 4)
+ .addInputHatch("Bottom Layer", 4)
+ .addOutputHatch("Top Layer", 5)
+ .addOutputBus("Top Layer", 5)
+ .addEnergyHatch("Bottom Layer", 4)
+ .addMaintenanceHatch("Bottom Layer", 4)
+ .addStructureInfo("Neptunium Plasma Hatch: Left side of Controller")
+ .addStructureInfo("Fermium Plasma Hatch: Right side of Controller")
+ .toolTipFinisher(GT_Values.AuthorBlueWeabo + EnumChatFormatting.RESET + EnumChatFormatting.GREEN
+ + " + Steelux" + EnumChatFormatting.RESET + " - [GT++]");
+ return tt;
+ }
+
+ @Override
+ public IStructureDefinition<GregtechMetaTileEntity_QuantumForceTransformer> getStructureDefinition() {
+ return STRUCTURE_DEFINITION;
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ this.mCasing = 0;
+ if (!checkPiece(MAIN_PIECE, 7, 20, 4)) {
+ return false;
+ }
+
+ if (mMaintenanceHatches.size() != 1
+ || mOutputBusses.size() < 1
+ || mInputBusses.size() < 1
+ || mInputHatches.size() < 1
+ || mOutputHatches.size() < 1) {
+ return false;
+ }
+
+ // Makes sure that the multi can accept only 1 TT Energy Hatch OR up to 2 Normal Energy Hatches. Deform if both
+ // present or more than 1 TT Hatch.
+ if (mExoticEnergyHatches.isEmpty() && mEnergyHatches.isEmpty()) {
+ return false;
+ }
+
+ if (mExoticEnergyHatches.size() >= 1) {
+ if (!mEnergyHatches.isEmpty()) {
+ return false;
+ }
+
+ if (mExoticEnergyHatches.size() != 1) {
+ return false;
+ }
+ }
+
+ if (mEnergyHatches.size() > 2) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public void construct(ItemStack stackSize, boolean hintsOnly) {
+ buildPiece(MAIN_PIECE, stackSize, hintsOnly, 7, 20, 4);
+ }
+
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
+ if (mMachine) return -1;
+ return survivialBuildPiece(MAIN_PIECE, stackSize, 7, 20, 4, elementBudget, env, false, true);
+ }
+
+ public static List<Pair<Block, Integer>> getAllCraftingTiers() {
+ return new ArrayList<Pair<Block, Integer>>() {
+ {
+ add(Pair.of(ModBlocks.blockCasings5Misc, 7));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 8));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 9));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 10));
+ }
+ };
+ }
+
+ public static List<Pair<Block, Integer>> getAllFocusingTiers() {
+ return new ArrayList<Pair<Block, Integer>>() {
+ {
+ add(Pair.of(ModBlocks.blockCasings5Misc, 11));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 12));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 13));
+ add(Pair.of(ModBlocks.blockCasings5Misc, 14));
+ }
+ };
+ }
+
+ public static ITierConverter<Integer> craftingTierConverter() {
+ return (block, meta) -> {
+ if (block == null) {
+ return -1;
+ } else if (block == ModBlocks.blockCasings5Misc) { // Resonance Chambers
+ switch (meta) {
+ case 7:
+ return 1;
+ case 8:
+ return 2;
+ case 9:
+ return 3;
+ case 10:
+ return 4;
+ }
+ }
+ return -1;
+ };
+ }
+
+ public static ITierConverter<Integer> focusingTierConverter() {
+ return (block, meta) -> {
+ if (block == null) {
+ return -1;
+ } else if (block == ModBlocks.blockCasings5Misc) { // Generation Coils
+ switch (meta) {
+ case 11:
+ return 1;
+ case 12:
+ return 2;
+ case 13:
+ return 3;
+ case 14:
+ return 4;
+ }
+ }
+ return -1;
+ };
+ }
+
+ private void setCraftingTier(int tier) {
+ mCraftingTier = tier;
+ }
+
+ private void setFocusingTier(int tier) {
+ mFocusingTier = tier;
+ }
+
+ private int getCraftingTier() {
+ return mCraftingTier;
+ }
+
+ private int getFocusingTier() {
+ return mFocusingTier;
+ }
+
+ public String getSound() {
+ return GregTech_API.sSoundList.get(Integer.valueOf(208));
+ }
+
+ protected IIconContainer getActiveOverlay() {
+ return TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active;
+ }
+
+ protected IIconContainer getInactiveOverlay() {
+ return TexturesGtBlock.Overlay_Machine_Controller_Advanced;
+ }
+
+ protected int getCasingTextureId() {
+ return TAE.getIndexFromPage(0, 10);
+ }
+
+ @Override
+ public GT_Recipe.GT_Recipe_Map getRecipeMap() {
+ return GTPP_Recipe.GTPP_Recipe_Map.sQuantumForceTransformerRecipes;
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(final ItemStack aStack) {
+ return true;
+ }
+
+ private static int mMaxParallel = 64;
+ private int mCurrentParallel = 0;
+
+ @Override
+ public boolean checkRecipe(final ItemStack aStack) {
+ mCurrentParallel = 0;
+ this.lEUt = 0;
+ this.mMaxProgresstime = 0;
+ this.mOutputItems = null;
+ this.mOutputFluids = null;
+ doFermium = false;
+ doNeptunium = false;
+ FluidStack[] tFluidList = getStoredFluids().toArray(new FluidStack[0]);
+ if (mSeparateInputBusses) {
+ ArrayList<ItemStack> tInputList = new ArrayList<ItemStack>();
+ for (GT_MetaTileEntity_Hatch_InputBus tBus : mInputBusses) {
+ for (int i = tBus.getSizeInventory() - 1; i >= 0; i--) {
+ if (tBus.getStackInSlot(i) != null) {
+ tInputList.add(tBus.getStackInSlot(i));
+ }
+ }
+ ItemStack[] tInputs = tInputList.toArray(new ItemStack[0]);
+ if (processRecipe(tInputs, tFluidList, getRecipeMap(), aStack)) return true;
+ else tInputList.clear();
+ }
+ } else {
+ ItemStack[] tInputList = getStoredInputs().toArray(new ItemStack[0]);
+ return processRecipe(tInputList, tFluidList, getRecipeMap(), aStack);
+ }
+ this.mEfficiency = 0;
+ this.mEfficiencyIncrease = 0;
+ return false;
+ }
+
+ private boolean processRecipe(
+ ItemStack[] aItemInputs, FluidStack[] aFluidInputs, GT_Recipe.GT_Recipe_Map aRecipeMap, ItemStack aStack) {
+ long tVoltage =
+ getMaxInputVoltage() / getExoticAndNormalEnergyHatchList().size();
+ long tAmps = (long) Math.floor(getMaxInputAmps() * 0.80);
+ long tTotalEUt = tVoltage * tAmps;
+ byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+ GT_Recipe tRecipe = aRecipeMap
+ .findRecipe(
+ getBaseMetaTileEntity(),
+ false,
+ gregtech.api.enums.GT_Values.V[tTier],
+ aFluidInputs,
+ aItemInputs)
+ .copy();
+
+ if (tRecipe != null && tRecipe.mSpecialValue <= getCraftingTier()) {
+ ItemStack aRecipeCatalyst = null;
+ for (ItemStack tItem : tRecipe.mInputs) {
+ if (ItemUtils.isCatalyst(tItem)) {
+ aRecipeCatalyst = tItem;
+ break;
+ }
+ }
+
+ if (aRecipeCatalyst == null) {
+ return false;
+ }
+
+ int mCurrentMaxParallel = 0;
+ for (ItemStack tItem : aItemInputs) {
+ if (ItemUtils.isCatalyst(tItem) && tItem.isItemEqual(aRecipeCatalyst)) {
+ mCurrentMaxParallel += tItem.stackSize;
+ }
+
+ if (mCurrentMaxParallel >= mMaxParallel) {
+ mCurrentMaxParallel = mMaxParallel;
+ break;
+ }
+ }
+
+ if (mFermiumHatch != null) {
+ if (mFermiumHatch.getFluid() != null
+ && mFermiumHatch.getFluid().isFluidEqual(new FluidStack(mFermium, 1))) {
+ doFermium = true;
+ } else {
+ doFermium = false;
+ }
+ } else {
+ doFermium = false;
+ }
+
+ while (mCurrentParallel < mCurrentMaxParallel
+ && tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) {
+ mCurrentParallel++;
+ }
+
+ this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
+ this.mEfficiencyIncrease = 10000;
+
+ mMaxProgresstime = tRecipe.mDuration;
+ lEUt = -tRecipe.mEUt * mCurrentParallel;
+
+ calculateOverclockedNessMultiInternal(
+ tRecipe.mEUt * mCurrentParallel, tRecipe.mDuration, 1, tTotalEUt, false);
+
+ if (mMaxProgresstime == Integer.MAX_VALUE - 1 || lEUt == Long.MAX_VALUE - 1) return false;
+
+ if (this.lEUt > 0) {
+ this.lEUt = (-this.lEUt);
+ }
+
+ int[] tChances;
+ if (aStack == null
+ || aStack.getItemDamage() == 0
+ || mNeptuniumHatch.getFluid() == null
+ || !mNeptuniumHatch.getFluid().isFluidEqual(new FluidStack(mNeptunium, 1))) {
+ doNeptunium = false;
+ tChances = GetChanceOutputs(tRecipe, -1);
+ } else {
+ doNeptunium = true;
+ tChances = GetChanceOutputs(tRecipe, aStack.getItemDamage() - 1);
+ }
+
+ ArrayList<ItemStack> tItemOutputs = new ArrayList<ItemStack>();
+ ArrayList<FluidStack> tFluidOutputs = new ArrayList<FluidStack>();
+
+ if (mFluidMode) {
+ for (int i = 0; i < tChances.length; i++) {
+ if (getBaseMetaTileEntity().getRandomNumber(10000) < tChances[i]) {
+ ItemData data = getAssociation(tRecipe.getOutput(i));
+ Materials mat = data == null ? null : data.mMaterial.mMaterial;
+ if (i < tRecipe.mOutputs.length) {
+ if (mat != null) {
+ if (mat.getMolten(0) != null) {
+ tFluidOutputs.add(
+ mat.getMolten(tRecipe.getOutput(i).stackSize * 144 * mCurrentParallel));
+ } else if (mat.getFluid(0) != null) {
+ tFluidOutputs.add(
+ mat.getFluid(tRecipe.getOutput(i).stackSize * 1000 * mCurrentParallel));
+ } else {
+ ItemStack aItem = tRecipe.getOutput(i);
+ tItemOutputs.add(
+ GT_Utility.copyAmountUnsafe(aItem.stackSize * mCurrentParallel, aItem));
+ }
+ } else {
+ ItemStack aItem = tRecipe.getOutput(i);
+ tItemOutputs.add(
+ GT_Utility.copyAmountUnsafe(aItem.stackSize * mCurrentParallel, aItem));
+ }
+ } else {
+ FluidStack aFluid = tRecipe.getFluidOutput(i - tRecipe.mOutputs.length)
+ .copy();
+ aFluid.amount *= mCurrentParallel;
+ tFluidOutputs.add(aFluid);
+ }
+ }
+ }
+ } else {
+ for (int i = 0; i < tChances.length; i++) {
+ if (getBaseMetaTileEntity().getRandomNumber(10000) < tChances[i]) {
+ if (i < tRecipe.mOutputs.length) {
+ ItemStack aItem = tRecipe.getOutput(i).copy();
+ aItem.stackSize *= mCurrentParallel;
+ tItemOutputs.add(aItem);
+ } else {
+ FluidStack aFluid = tRecipe.getFluidOutput(i - tRecipe.mOutputs.length)
+ .copy();
+ aFluid.amount *= mCurrentParallel;
+ tFluidOutputs.add(aFluid);
+ }
+ }
+ }
+ }
+
+ mOutputItems = tItemOutputs.toArray(new ItemStack[0]);
+ mOutputFluids = tFluidOutputs.toArray(new FluidStack[0]);
+ this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime);
+ updateSlots();
+
+ return true;
+ }
+ return false;
+ }
+
+ private byte runningTick = 0;
+
+ @Override
+ public boolean onRunningTick(ItemStack aStack) {
+ if (!super.onRunningTick(aStack)) {
+ criticalStopMachine();
+ return false;
+ }
+
+ if (runningTick % 20 == 0) {
+ if (doFermium) {
+ FluidStack tFluid =
+ new FluidStack(mFermium, (int) (getFocusingTier() * 4 * Math.sqrt(mCurrentParallel)));
+ FluidStack tLiquid = mFermiumHatch.drain(tFluid.amount, true);
+ if (tLiquid == null || tLiquid.amount < tFluid.amount) {
+ doFermium = false;
+ criticalStopMachine();
+ return false;
+ }
+ }
+
+ if (doNeptunium) {
+ FluidStack tFluid =
+ new FluidStack(mNeptunium, (int) (getFocusingTier() * 4 * Math.sqrt(mCurrentParallel)));
+ FluidStack tLiquid = mNeptuniumHatch.drain(tFluid.amount, true);
+ if (tLiquid == null || tLiquid.amount < tFluid.amount) {
+ doNeptunium = false;
+ criticalStopMachine();
+ return false;
+ }
+ }
+
+ runningTick = 1;
+ } else {
+ runningTick++;
+ }
+
+ return true;
+ }
+
+ public int getMaxParallelRecipes() {
+ return 64;
+ }
+
+ public int getEuDiscountForParallelism() {
+ return 0;
+ }
+
+ @Override
+ public int getMaxEfficiency(final ItemStack aStack) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerSecond(final ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public int getDamageToComponent(final ItemStack aStack) {
+ return 0;
+ }
+
+ public int getAmountOfOutputs() {
+ return 2;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(final ItemStack aStack) {
+ return false;
+ }
+
+ private int[] GetChanceOutputs(GT_Recipe tRecipe, int aChanceIncreased) {
+ int difference = getFocusingTier() - tRecipe.mSpecialValue;
+ int aOutputsAmount = tRecipe.mOutputs.length + tRecipe.mFluidOutputs.length;
+ int aChancePerOutput = 10000 / aOutputsAmount;
+ int[] tChances = new int[aOutputsAmount];
+ Arrays.fill(tChances, aChancePerOutput);
+
+ switch (difference) {
+ case 0:
+ for (int i = 0; i < tChances.length; i++) {
+ if (doNeptunium) {
+ if (i == aChanceIncreased) {
+ tChances[i] = aChancePerOutput / 2 * (aOutputsAmount - 1);
+ } else {
+ tChances[i] /= 2;
+ }
+ }
+
+ if (doFermium) {
+ tChances[i] += (10000 - tChances[i]) / 4;
+ }
+ }
+ break;
+ case 1:
+ for (int i = 0; i < tChances.length; i++) {
+ if (doNeptunium) {
+ if (i == aChanceIncreased) {
+ tChances[i] = aChancePerOutput * 3 / 4 * (aOutputsAmount - 1);
+ } else {
+ tChances[i] /= 4;
+ }
+ }
+
+ if (doFermium) {
+ tChances[i] += (10000 - tChances[i]) / 3;
+ }
+ }
+ break;
+ case 2:
+ case 3:
+ for (int i = 0; i < tChances.length; i++) {
+ if (doNeptunium) {
+ if (i == aChanceIncreased) {
+ tChances[i] = 10000;
+ } else {
+ tChances[i] = 0;
+ }
+ }
+
+ if (doFermium) {
+ tChances[i] += (10000 - tChances[i]) / 2;
+ }
+ }
+ break;
+ }
+ return tChances;
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(
+ byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ mSeparateInputBusses = !mSeparateInputBusses;
+ GT_Utility.sendChatToPlayer(
+ aPlayer, StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + mSeparateInputBusses);
+ return true;
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ mFluidMode = !mFluidMode;
+ GT_Utility.sendChatToPlayer(
+ aPlayer, StatCollector.translateToLocal("miscutils.machines.QFTFluidMode") + " " + mFluidMode);
+ }
+
+ public boolean addNeptuniumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null;
+ mNeptuniumHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity;
+ return true;
+ }
+ return false;
+ }
+
+ public boolean addFermiumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) {
+ if (aTileEntity == null) return false;
+ IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();
+ if (aMetaTileEntity == null) return false;
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null;
+ mFermiumHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity;
+ return true;
+ }
+ return false;
+ }
+
+ public Block getCasingBlock1() {
+ return ModBlocks.blockCasings5Misc;
+ }
+
+ public byte getCasingMeta1() {
+ return 15;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ aNBT.setBoolean("mSeparateInputBusses", mSeparateInputBusses);
+ aNBT.setBoolean("mFluidMode", mFluidMode);
+ aNBT.setBoolean("doFermium", doFermium);
+ super.saveNBTData(aNBT);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ this.mSeparateInputBusses = aNBT.getBoolean("mSeparateInputBusses");
+ this.mFluidMode = aNBT.getBoolean("mFluidMode");
+ this.doFermium = aNBT.getBoolean("doFermium");
+ super.loadNBTData(aNBT);
+ }
+
+ @Override
+ public ITexture[] getTexture(
+ IGregTechTileEntity aBaseMetaTileEntity,
+ byte aSide,
+ byte aFacing,
+ byte aColorIndex,
+ boolean aActive,
+ boolean aRedstone) {
+ if (aSide == aFacing) {
+ if (aActive)
+ return new ITexture[] {
+ getCasingTexture(),
+ TextureFactory.builder()
+ .addIcon(getActiveOverlay())
+ .extFacing()
+ .build()
+ };
+ return new ITexture[] {
+ getCasingTexture(),
+ TextureFactory.builder()
+ .addIcon(getInactiveOverlay())
+ .extFacing()
+ .build()
+ };
+ }
+ return new ITexture[] {getCasingTexture()};
+ }
+
+ private ITexture getCasingTexture() {
+ return Textures.BlockIcons.getCasingTextureForId(getCasingTextureId());
+ }
+
+ @Override
+ protected void calculateOverclockedNessMultiInternal(
+ long aEUt, int aDuration, int mAmperage, long maxInputVoltage, boolean perfectOC) {
+ // 5% space for cable loss
+ long zMaxInputVoltage = maxInputVoltage / 100L * 95L;
+ long zTime = aDuration;
+ long zEUt = aEUt;
+ while (zEUt << 2 < zMaxInputVoltage) {
+ zEUt = zEUt << 2;
+ zTime = zTime >> (perfectOC ? 2 : 1);
+ if (zTime <= 0) {
+ break;
+ }
+ }
+ if (zTime <= 0) {
+ zTime = 1;
+ }
+
+ if (zTime > Integer.MAX_VALUE - 1) {
+ zTime = Integer.MAX_VALUE - 1;
+ }
+ this.lEUt = zEUt;
+ this.mMaxProgresstime = (int) zTime;
+ }
+
+ @SideOnly(Side.CLIENT)
+ private void renderForceField(
+ double x, double y, double z, int side, double minU, double maxU, double minV, double maxV) {
+ // spotless:off
+ Tessellator tes = Tessellator.instance;
+ switch (side) {
+ case 0:
+ tes.addVertexWithUV(x + 3 - 0.5, y , z + 7, maxU, maxV);
+ tes.addVertexWithUV(x + 3 - 0.5, y + 4, z + 7, maxU, minV);
+ tes.addVertexWithUV(x - 3 + 0.5, y + 4, z + 7, minU, minV);
+ tes.addVertexWithUV(x - 3 + 0.5, y , z + 7, minU, maxV);
+ tes.addVertexWithUV(x - 3 + 0.5, y , z + 7, minU, maxV);
+ tes.addVertexWithUV(x - 3 + 0.5, y + 4, z + 7, minU, minV);
+ tes.addVertexWithUV(x + 3 - 0.5, y + 4, z + 7, maxU, minV);
+ tes.addVertexWithUV(x + 3 - 0.5, y , z + 7, maxU, maxV);
+ break;
+ case 1:
+ tes.addVertexWithUV(x + 7, y , z + 4 - 0.5, maxU, maxV);
+ tes.addVertexWithUV(x + 7, y + 4, z + 4 - 0.5, maxU, minV);
+ tes.addVertexWithUV(x + 7, y + 4, z - 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x + 7, y , z - 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7, y , z - 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7, y + 4, z - 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x + 7, y + 4, z + 4 - 0.5, maxU, minV);
+ tes.addVertexWithUV(x + 7, y , z + 4 - 0.5, maxU, maxV);
+ break;
+ case 2:
+ tes.addVertexWithUV(x + 3 + 0.5, y , z - 7, maxU, maxV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z - 7, maxU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z - 7, minU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y , z - 7, minU, maxV);
+ tes.addVertexWithUV(x - 3 - 0.5, y , z - 7, minU, maxV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z - 7, minU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z - 7, maxU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y , z - 7, maxU, maxV);
+ break;
+ case 3:
+ tes.addVertexWithUV(x - 7, y , z + 4 - 0.5, maxU, maxV);
+ tes.addVertexWithUV(x - 7, y + 4, z + 4 - 0.5, maxU, minV);
+ tes.addVertexWithUV(x - 7, y + 4, z - 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x - 7, y , z - 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7, y , z - 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7, y + 4, z - 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x - 7, y + 4, z + 4 - 0.5, maxU, minV);
+ tes.addVertexWithUV(x - 7, y , z + 4 - 0.5, maxU, maxV);
+ break;
+ case 4:
+ tes.addVertexWithUV(x - 3 - 0.5, y , z + 7 , maxU, maxV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z + 7 , maxU, minV);
+ tes.addVertexWithUV(x - 7 , y + 4, z + 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x - 7 , y , z + 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7 , y , z + 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7 , y + 4, z + 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z + 7 , maxU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y , z + 7 , maxU, maxV);
+ break;
+ case 5:
+ tes.addVertexWithUV(x - 3 - 0.5, y , z - 7 , maxU, maxV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z - 7 , maxU, minV);
+ tes.addVertexWithUV(x - 7 , y + 4, z - 4 - 0.5, minU, minV);
+ tes.addVertexWithUV(x - 7 , y , z - 4 - 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7 , y , z - 4 - 0.5, minU, maxV);
+ tes.addVertexWithUV(x - 7 , y + 4, z - 4 - 0.5, minU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y + 4, z - 7 , maxU, minV);
+ tes.addVertexWithUV(x - 3 - 0.5, y , z - 7 , maxU, maxV);
+ break;
+ case 6:
+ tes.addVertexWithUV(x + 3 + 0.5, y , z + 7 , maxU, maxV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z + 7 , maxU, minV);
+ tes.addVertexWithUV(x + 7 , y + 4, z + 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x + 7 , y , z + 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7 , y , z + 4 + 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7 , y + 4, z + 4 + 0.5, minU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z + 7 , maxU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y , z + 7 , maxU, maxV);
+ break;
+ case 7:
+ tes.addVertexWithUV(x + 3 + 0.5, y , z - 7 , maxU, maxV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z - 7 , maxU, minV);
+ tes.addVertexWithUV(x + 7 , y + 4, z - 4 - 0.5, minU, minV);
+ tes.addVertexWithUV(x + 7 , y , z - 4 - 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7 , y , z - 4 - 0.5, minU, maxV);
+ tes.addVertexWithUV(x + 7 , y + 4, z - 4 - 0.5, minU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y + 4, z - 7 , maxU, minV);
+ tes.addVertexWithUV(x + 3 + 0.5, y , z - 7 , maxU, maxV);
+ break;
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public boolean renderInWorld(IBlockAccess aWorld, int x, int y, int z, Block block, RenderBlocks renderer) {
+ Tessellator tes = Tessellator.instance;
+ IIcon forceField = TexturesGtBlock.ForceField.getIcon();
+ if (getBaseMetaTileEntity().isActive()) {
+ double minU = forceField.getMinU();
+ double maxU = forceField.getMaxU();
+ double minV = forceField.getMinV();
+ double maxV = forceField.getMaxV();
+ double xBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX;
+ double zBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ;
+ GL11.glPushMatrix();
+ GL11.glDisable(GL11.GL_CULL_FACE);
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL11.GL_BLEND);
+ tes.setColorOpaque_F(1f, 1f, 1f);
+ tes.setBrightness(15728880);
+ //Center O: 0, 0 1 ------- 8
+ //Corner 1: 7, -2 / \
+ //Corner 2: 3, -6 2 / \ 7
+ //Corner 3: -2, -6 | |
+ //Corner 4: -6, -2 | O |
+ //Corner 5: -6, 3 | |
+ //Corner 6: -2, 7 3 \ / 6
+ //Corner 7: 3, 7 \ /
+ //Corner 8: 7, 3 4 ------- 5
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 0, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 1, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 2, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 3, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 4, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 5, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 6, minU, maxU, minV, maxV);
+ renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 7, minU, maxU, minV, maxV);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL11.GL_CULL_FACE);
+ GL11.glPopMatrix();
+
+ }
+ // Needs to be false to render the controller
+ return false;
+ //spotless:on
+ }
+}