diff options
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech/common')
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 + } +} |