diff options
author | Steelux <70096037+Steelux8@users.noreply.github.com> | 2022-12-22 18:20:15 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-22 19:20:15 +0100 |
commit | a5a444ebc4a2488ca850b3cf3eae3659a81659e2 (patch) | |
tree | e28ee42aed46a02c1ab7bc9f07dbe201bdd999f4 /src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities | |
parent | 44be046709c7e997698992973f9a28b897d5a24c (diff) | |
download | GT5-Unofficial-a5a444ebc4a2488ca850b3cf3eae3659a81659e2.tar.gz GT5-Unofficial-a5a444ebc4a2488ca850b3cf3eae3659a81659e2.tar.bz2 GT5-Unofficial-a5a444ebc4a2488ca850b3cf3eae3659a81659e2.zip |
Add the Quantum Force Transformer (Endgame Chemline Skipper) (#399)
* First Code Implementation
* First Textures Implementation
* Texture Name Fixes
* spotlessApply (#400)
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* Controller ID Fix
* spotlessApply (#401)
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* Reworked Recipe Map, Started Rework on recipes
* spotless
* fix recipe to actually use eternal singularity, make sure we can have a null fluid output
* add new blocks and some new textures
* Spotless apply for branch Chem_Line_Skipper for #399 (#406)
* fix material localization (#395)
* fix material localization
* spotlessApply
* Revert the Nerf to Algae Farm Casing Cost (#397)
- Changed the Algae Farm casing tier to the low tier it was supposed to be at, this time at MV and with no dirt. The casing is shared with the TGS, which was the reason for the nerf, but the controller can gate that multi;
- Adjusted the controller recipe for the Farm to also be MV.
* Fix Amount of Infinite Mutation Catalyst Output (#398)
- Changed output from 1 to 5 catalysts, to match the input of 5 carriers.
* Fix Sterile Farm Casing Recipe (No Tumbaga Pipe) (#402)
* fix frame box and block cant localized (#404)
* fix double plate and long rod cant localized (#405)
* fix double plate and long rod cant localized
* sa
* spotlessApply
Co-authored-by: iouter <62897714+iouter@users.noreply.github.com>
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* First Changes to Add Chemplant Catalysts
* Spotless apply for branch Chem_Line_Skipper for #399 (#407)
* fix material localization (#395)
* fix material localization
* spotlessApply
* Revert the Nerf to Algae Farm Casing Cost (#397)
- Changed the Algae Farm casing tier to the low tier it was supposed to be at, this time at MV and with no dirt. The casing is shared with the TGS, which was the reason for the nerf, but the controller can gate that multi;
- Adjusted the controller recipe for the Farm to also be MV.
* Fix Amount of Infinite Mutation Catalyst Output (#398)
- Changed output from 1 to 5 catalysts, to match the input of 5 carriers.
* Fix Sterile Farm Casing Recipe (No Tumbaga Pipe) (#402)
* fix frame box and block cant localized (#404)
* fix double plate and long rod cant localized (#405)
* fix double plate and long rod cant localized
* sa
* spotlessApply
Co-authored-by: iouter <62897714+iouter@users.noreply.github.com>
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* Multi Forms with Catalyst Housing and Recipes in NEI
* spotless
* Remove Mufflers and Pollution
* New textures and make new casing to be used in the multi
* Make a working recipe check, add a Fluid only output mode
* Do not allow the ME Input Bus bug again. fixing it early
* replace the current glass with a new one
a real texture needs to be made
* fix catalysts being able to be used in the input bus and fix recipes not start from a second input bus
* Spotless apply for branch Chem_Line_Skipper for #399 (#412)
* fix material localization (#395)
* fix material localization
* spotlessApply
* Revert the Nerf to Algae Farm Casing Cost (#397)
- Changed the Algae Farm casing tier to the low tier it was supposed to be at, this time at MV and with no dirt. The casing is shared with the TGS, which was the reason for the nerf, but the controller can gate that multi;
- Adjusted the controller recipe for the Farm to also be MV.
* Fix Amount of Infinite Mutation Catalyst Output (#398)
- Changed output from 1 to 5 catalysts, to match the input of 5 carriers.
* Fix Sterile Farm Casing Recipe (No Tumbaga Pipe) (#402)
* fix frame box and block cant localized (#404)
* fix double plate and long rod cant localized (#405)
* fix double plate and long rod cant localized
* sa
* Update chemplant manual for TPV (#409)
* Update chemplant manual for TPV
* update BS
Co-authored-by: Martin Robertz <dream-master@gmx.net>
* fix crop manager log spam (#408)
* Recipe fixes 2022/10/25 (#410)
* Remove reflection from RTG Hatch (#411)
* Fix Material Progression and Semifluid Gen Cost (#403)
- Changed some materials used in GT++ material tier progression, because they require EBF coils above what is possible for the tier;
- Changed fluid input on LV Semifluid Generator recipe from Bronze to Tin, since Bronze cannot be fluid extracted in LV;
- Reduced the input count of items for those recipes, to bring it closer to the other generators.
* spotlessApply
Co-authored-by: iouter <62897714+iouter@users.noreply.github.com>
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: miozune <miozune@gmail.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Guinea Wheek <guineawheek@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* fix overclocking with 1 energy hatch
* fix merging from master
* allow tectech energy hatches
* Update GT
* NEI migration & cleanup
Deprecate GTPP_Recipe_Map_Internal#sMappingsEx and delegate to GT_Recipe_Map#sMappings instead
Remove recipe modification check
* allow for parallel crafting in the QFT
* Plasma consumption and their respective hatches
* Initial Placeholders for QFT Recipes
* spotless
* get the fluids the correct way and make sure focusing requires neptunium
* Boiler
* New Plasma Recipes
* Remove Unused Catalyst Code
* Remove More Unused Code for Catalyst and Glass
* Refactor Crafting and Focusing Tiers
* spotlessApply (#441)
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* remove useless code, make the structure definition static and final.
* it works.
* address review
* spotlessApply (#442)
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* there are no catalyst housing, no mufflers either. and no need to override more than needed
* Crafting Casings Texture Update
* address more reviews. also preemptive fix for constant neptunium consumption
i am not doing more until tomorrow
* Small cleanups
* Programmed Circuit & Super Bus
* I dare you use mName for shapes again.
* Lower the number of fluid slots for multi mixer NEI
* Updated Focusing Textures and Added Statics
* Implementation of New Catalysts
* Recipes for Everything
* Spotless apply for branch Chem_Line_Skipper for #399 (#444)
* make structure definition fields static (#443)
* spotlessApply
Co-authored-by: Glease <4586901+Glease@users.noreply.github.com>
Co-authored-by: Steelux <70096037+Steelux8@users.noreply.github.com>
Co-authored-by: GitHub GTNH Actions <>
* add in a config option to change between animated and static textures
* More Recipe Additions
* spotless again
* merge dev fixes. maybe this was it?
this is hell
* update how fluid mode works
* update NEI
* update gt dep
* update gt version to the correct one. We need MUI god damnit
* set animated textures on by default
* BS+SA+fix
* just a normal gt++ pr
* Add Remaining Catalysts
* FIXES
* miozune request
* update dependencies
* add dense plates to be auto-genned
* rework recipes of the QFT, make the recipe map accept it as a catalyst
* add missed items to recipes
* change around some recipes. fix NEI. fix some localization
* do not set the recipe map for those hatches oops
* hatches are pain
* life a circle of pain
* change the placement of the Fermium and Neptunium Hatch. add tooltip information about it
* Add Kevlar recipe using bee comb
Adds additional bonus and solely for kevlar
* Fixed controller texture
* do some fixes. updata dependencies
* fix a small oopsie
* wait what
* Fix catalyst recipes
* fix not building
* quick spotless
* Some tooltip fixes
* Increase Fluid Input p/Tier on Recipe Tier Casings
* Buff t1 costs
* Increase Catalyst Costs to Near the QFT Cost
* Some last bug fixes
* Minimum energy hatches fix
* Change last return statement
* Spotless
* Oil is not required in the QFT
* Spotless again
* prepare texture names for Sampsa
* Sampsa's textures
* Restore Old Unused Texture Changes
* Update build.gradle
* force field renderer and some fixes
* forgot to make it render when working
* make client side
* remove uneeded things. add variables as local
* fix parallels
* spotless
* fix parallels
* quick thing to fix and prevent in the future
* forgot to use the same item damage oops
* fix to fluid mode. just edit the stacksize
* use copyAmountUnsafe
* update dependencies. fix overclocking
* correct overclocking
* lower amps you can use by 1/5th instead of 1/20th
* Update dependencies.gradle
* update BS
* remove jitpack
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: BlueWeabo <76872108+BlueWeabo@users.noreply.github.com>
Co-authored-by: iouter <62897714+iouter@users.noreply.github.com>
Co-authored-by: miozune <miozune@gmail.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Guinea Wheek <guineawheek@users.noreply.github.com>
Co-authored-by: Glease <4586901+Glease@users.noreply.github.com>
Co-authored-by: Runakai1 <Runatson@gmail.com>
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities')
2 files changed, 1246 insertions, 1 deletions
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 + } +} |