aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator
diff options
context:
space:
mode:
authorYang Xizhi <60341015+GlodBlock@users.noreply.github.com>2022-02-20 20:34:52 +0800
committerGitHub <noreply@github.com>2022-02-20 13:34:52 +0100
commitc713272a48dcc5091b680d2a5b41b82c411e2ab6 (patch)
tree35ab71a061edc7356ae1a3c3e6f7da3e6c3993c5 /src/main/java/goodgenerator
parent9e3ad3d03eb4b854353549316f9a5b438e95a6da (diff)
downloadGT5-Unofficial-c713272a48dcc5091b680d2a5b41b82c411e2ab6.tar.gz
GT5-Unofficial-c713272a48dcc5091b680d2a5b41b82c411e2ab6.tar.bz2
GT5-Unofficial-c713272a48dcc5091b680d2a5b41b82c411e2ab6.zip
Large Fusion (#16)
* large fusion structure * gui stuff for large fusion * minor fix * more fusion and coils * new structure block * redesign the sturcture * mk4 compact * recipes * oversight * fix crash with latest tt * fix PA recipe buttom * casing tooltip * nerf the controler and coil recipe * remove the origin glass * fix casing amount * compact mk5 * remove shit * cache * no null positionstack * fix OF in mk5 and balance * balance
Diffstat (limited to 'src/main/java/goodgenerator')
-rw-r--r--src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java6
-rw-r--r--src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java14
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer.java83
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java143
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java144
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java145
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java216
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java198
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java693
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java679
-rw-r--r--src/main/java/goodgenerator/client/GUI/LargeFusionComputerGUIClient.java25
-rw-r--r--src/main/java/goodgenerator/client/render/BlockRenderHandler.java12
-rw-r--r--src/main/java/goodgenerator/crossmod/nei/IMCForNEI.java2
-rw-r--r--src/main/java/goodgenerator/crossmod/nei/NEI_Config.java1
-rw-r--r--src/main/java/goodgenerator/crossmod/nei/PreciseAssemblerHandler.java31
-rw-r--r--src/main/java/goodgenerator/items/MyMaterial.java29
-rw-r--r--src/main/java/goodgenerator/loader/Loaders.java16
-rw-r--r--src/main/java/goodgenerator/loader/RecipeLoader_02.java221
-rw-r--r--src/main/java/goodgenerator/util/CharExchanger.java9
-rw-r--r--src/main/java/goodgenerator/util/ItemRefer.java10
-rw-r--r--src/main/java/goodgenerator/util/MyRecipeAdder.java5
21 files changed, 2571 insertions, 111 deletions
diff --git a/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java b/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java
index d889c0f69c..eba7c2c890 100644
--- a/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java
+++ b/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java
@@ -6,8 +6,12 @@ import net.minecraft.world.IBlockAccess;
public interface ITextureBlock {
- ITexture[] getTexture(Block aBlock, byte aSide);
+ default ITexture[] getTexture(Block aBlock, byte aSide) {
+ return getTexture(aBlock, 0, aSide);
+ }
ITexture[] getTexture(Block aBlock, byte aSide, IBlockAccess aWorld, int xCoord, int yCoord, int zCoord);
+ ITexture[] getTexture(Block aBlock, int aMeta, byte aSide);
+
}
diff --git a/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java
index f0fc14f28f..6fd25af048 100644
--- a/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java
+++ b/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java
@@ -48,13 +48,6 @@ public class TurbineCasing extends Casing implements ITextureBlock{
}
@Override
- public ITexture[] getTexture(Block aBlock, byte aSide) {
- return new ITexture[] {
- TextureFactory.of(base)
- };
- }
-
- @Override
public ITexture[] getTexture(Block aBlock, byte aSide, IBlockAccess aWorld, int xCoord, int yCoord, int zCoord) {
int tInvertLeftRightMod = aSide % 2 * 2 - 1;
switch (aSide / 2) {
@@ -99,6 +92,13 @@ public class TurbineCasing extends Casing implements ITextureBlock{
}
@Override
+ public ITexture[] getTexture(Block aBlock, int aMeta, byte aSide) {
+ return new ITexture[] {
+ TextureFactory.of(base)
+ };
+ }
+
+ @Override
public int getRenderType() {
if (BlockRenderHandler.INSTANCE == null) {
return super.getRenderType();
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer.java
deleted file mode 100644
index 807e0af620..0000000000
--- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package goodgenerator.blocks.tileEntity;
-
-import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM;
-import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
-import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
-import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.objects.GT_ChunkManager;
-import net.minecraft.item.ItemStack;
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.ChunkCoordIntPair;
-
-public class LargeFusionComputer extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable {
-
- private boolean isLoadedChunk;
-
- public LargeFusionComputer(String name) {
- super(name);
- }
-
- @Override
- public IStructureDefinition<? extends GT_MetaTileEntity_MultiblockBase_EM> getStructure_EM() {
- return null;
- }
-
- public LargeFusionComputer(int id, String name, String nameRegional) {
- super(id,name,nameRegional);
- }
-
- @Override
- public void construct(ItemStack itemStack, boolean b) {
-
- }
-
- @Override
- public String[] getStructureDescription(ItemStack itemStack) {
- return new String[0];
- }
-
- @Override
- public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
- return null;
- }
-
- @Override
- public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
- super.onPostTick(aBaseMetaTileEntity, aTick);
- if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) {
- // if machine has stopped, stop chunkloading
- GT_ChunkManager.releaseTicket((TileEntity)aBaseMetaTileEntity);
- this.isLoadedChunk = false;
- }
- else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !this.isLoadedChunk) {
- //load a 3x3 area when machine is running
- GT_ChunkManager.releaseTicket((TileEntity)aBaseMetaTileEntity);
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() + 1, getChunkZ() + 1));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() + 1, getChunkZ()));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() + 1, getChunkZ() - 1));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() - 1, getChunkZ() + 1));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() - 1, getChunkZ()));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX() - 1, getChunkZ() - 1));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX(), getChunkZ() + 1));
- GT_ChunkManager.requestChunkLoad((TileEntity)aBaseMetaTileEntity, new ChunkCoordIntPair(getChunkX(), getChunkZ() - 1));
- this.isLoadedChunk = true;
- }
- }
-
- @Override
- public void onRemoval() {
- if (this.isLoadedChunk)
- GT_ChunkManager.releaseTicket((TileEntity)getBaseMetaTileEntity());
- super.onRemoval();
- }
-
- public int getChunkX() {
- return getBaseMetaTileEntity().getXCoord() >> 4;
- }
-
- public int getChunkZ() {
- return getBaseMetaTileEntity().getZCoord() >> 4;
- }
-
-}
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java
new file mode 100644
index 0000000000..805bfd73e7
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java
@@ -0,0 +1,143 @@
+package goodgenerator.blocks.tileEntity;
+
+import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry;
+import goodgenerator.blocks.tileEntity.base.LargeFusionComputer;
+import goodgenerator.loader.Loaders;
+import goodgenerator.util.DescTextLocalization;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import org.lwjgl.input.Keyboard;
+
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW;
+
+public class LargeFusionComputer1 extends LargeFusionComputer {
+
+ private static final ITexture textureOverlay = TextureFactory.of(
+ TextureFactory.builder().addIcon(OVERLAY_FUSION1).extFacing().build(),
+ TextureFactory.builder().addIcon(OVERLAY_FUSION1_GLOW).extFacing().glow().build());
+
+ public LargeFusionComputer1(int id, String name, String nameRegional) {
+ super(id,name,nameRegional);
+ }
+
+ public LargeFusionComputer1(String name) {
+ super(name);
+ }
+
+ @Override
+ public String[] getDescription() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Fusion Reactor")
+ .addInfo("Millions of nuclear.")
+ .addInfo("Controller block for the Compact Fusion Reactor MK-I Prototype.")
+ .addInfo("131,072EU/t and 5M EU capacity per Energy Hatch")
+ .addInfo("If the recipe has a startup cost greater than the")
+ .addInfo("number of energy hatches * cap, you can't do it")
+ .addInfo("Make sure the whole structure is built in the 3x3")
+ .addInfo("chuck area of the ring center (not controller).")
+ .addInfo("It can run 64x recipes at most.")
+ .addInfo("Support" + EnumChatFormatting.BLUE + " Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.GRAY + " Energy/Laser Hatches!")
+ .addInfo("The structure is too complex!")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .addCasingInfo("LuV Machine Casing", 1666)
+ .addCasingInfo("Ameliorated Superconduct Coil", 558)
+ .addCasingInfo("Naquadah Alloy Frame Boxes", 128)
+ .addCasingInfo("Chrome Reinforced Borosilicate Glass Block", 63)
+ .addEnergyHatch("1-32, Hint block with dot 3", 3)
+ .addInputHatch("2-16, Hint block with dot 1", 1)
+ .addOutputHatch("1-16, Hint block with dot 2", 2)
+ .addStructureInfo("ALL Hatches must be LuV or better")
+ .toolTipFinisher("Good Generator");
+ if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
+ return tt.getInformation();
+ } else {
+ return tt.getStructureInformation();
+ }
+ }
+
+ @Override
+ public long maxEUStore() {
+ return 160008000L * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L;
+ }
+
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings1;
+ }
+
+ @Override
+ public int getCasingMeta() {
+ return 6;
+ }
+
+ @Override
+ public Block getCoilBlock() {
+ return Loaders.compactFusionCoil;
+ }
+
+ @Override
+ public int getCoilMeta() {
+ return 0;
+ }
+
+ @Override
+ public Block getGlassBlock() {
+ return ItemRegistry.bw_realglas;
+ }
+
+ @Override
+ public int getGlassMeta() {
+ return 3;
+ }
+
+ @Override
+ public int hatchTier() {
+ return 6;
+ }
+
+ @Override
+ public Materials getFrameBox() {
+ return Materials.NaquadahAlloy;
+ }
+
+ @Override
+ public int getMaxPara() {
+ return 64;
+ }
+
+ @Override
+ public int extraPara(int startEnergy) {
+ return 1;
+ }
+
+ @Override
+ public ITexture getTextureOverlay() {
+ return textureOverlay;
+ }
+
+ @Override
+ public int tierOverclock() {
+ return 1;
+ }
+
+ @Override
+ public String[] getStructureDescription(ItemStack stackSize) {
+ return DescTextLocalization.addText("LargeFusion1.hint", 9);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new LargeFusionComputer1(mName);
+ }
+}
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java
new file mode 100644
index 0000000000..a1dad85531
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java
@@ -0,0 +1,144 @@
+package goodgenerator.blocks.tileEntity;
+
+import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry;
+import goodgenerator.blocks.tileEntity.base.LargeFusionComputer;
+import goodgenerator.loader.Loaders;
+import goodgenerator.util.DescTextLocalization;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import org.lwjgl.input.Keyboard;
+
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW;
+
+public class LargeFusionComputer2 extends LargeFusionComputer {
+
+ private static final ITexture textureOverlay = TextureFactory.of(
+ TextureFactory.builder().addIcon(OVERLAY_FUSION2).extFacing().build(),
+ TextureFactory.builder().addIcon(OVERLAY_FUSION2_GLOW).extFacing().glow().build());
+
+ public LargeFusionComputer2(int id, String name, String nameRegional) {
+ super(id,name,nameRegional);
+ }
+
+ public LargeFusionComputer2(String name) {
+ super(name);
+ }
+
+ @Override
+ public String[] getDescription() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Fusion Reactor")
+ .addInfo("Millions of nuclear.")
+ .addInfo("Controller block for the Compact Fusion Reactor MK-II.")
+ .addInfo("524,288EU/t and 10M EU capacity per Energy Hatch")
+ .addInfo("If the recipe has a startup cost greater than the")
+ .addInfo("number of energy hatches * cap, you can't do it")
+ .addInfo("Make sure the whole structure is built in the 3x3")
+ .addInfo("chuck area of the ring center (not controller).")
+ .addInfo("Startup < 160,000,000 EU: 128x Parallel")
+ .addInfo("Startup < 320,000,000 EU: 64x Parallel")
+ .addInfo("Support" + EnumChatFormatting.BLUE + " Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.GRAY + " Energy/Laser Hatches!")
+ .addInfo("The structure is too complex!")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .addCasingInfo("Fusion Machine Casing", 1666)
+ .addCasingInfo("Compact Fusion Coil", 558)
+ .addCasingInfo("Duranium Frame Box", 128)
+ .addCasingInfo("Iridium Reinforced Borosilicate Glass Block", 63)
+ .addEnergyHatch("1-32, Hint block with dot 3", 3)
+ .addInputHatch("2-16, Hint block with dot 1", 1)
+ .addOutputHatch("1-16, Hint block with dot 2", 2)
+ .addStructureInfo("ALL Hatches must be ZPM or better")
+ .toolTipFinisher("Good Generator");
+ if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
+ return tt.getInformation();
+ } else {
+ return tt.getStructureInformation();
+ }
+ }
+
+ @Override
+ public long maxEUStore() {
+ return 320006000L * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L;
+ }
+
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ @Override
+ public int getCasingMeta() {
+ return 6;
+ }
+
+ @Override
+ public Block getCoilBlock() {
+ return Loaders.compactFusionCoil;
+ }
+
+ @Override
+ public int getCoilMeta() {
+ return 1;
+ }
+
+ @Override
+ public Block getGlassBlock() {
+ return ItemRegistry.bw_realglas;
+ }
+
+ @Override
+ public int getGlassMeta() {
+ return 4;
+ }
+
+ @Override
+ public int hatchTier() {
+ return 7;
+ }
+
+ @Override
+ public Materials getFrameBox() {
+ return Materials.Duranium;
+ }
+
+ @Override
+ public int getMaxPara() {
+ return 64;
+ }
+
+ @Override
+ public int extraPara(int startEnergy) {
+ return startEnergy < 160000000 ? 2 : 1;
+ }
+
+ @Override
+ public ITexture getTextureOverlay() {
+ return textureOverlay;
+ }
+
+ @Override
+ public int tierOverclock() {
+ return 2;
+ }
+
+ @Override
+ public String[] getStructureDescription(ItemStack stackSize) {
+ return DescTextLocalization.addText("LargeFusion2.hint", 9);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new LargeFusionComputer2(mName);
+ }
+}
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java
new file mode 100644
index 0000000000..30e141bece
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java
@@ -0,0 +1,145 @@
+package goodgenerator.blocks.tileEntity;
+
+import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry;
+import goodgenerator.blocks.tileEntity.base.LargeFusionComputer;
+import goodgenerator.loader.Loaders;
+import goodgenerator.util.DescTextLocalization;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import org.lwjgl.input.Keyboard;
+
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW;
+
+public class LargeFusionComputer3 extends LargeFusionComputer {
+
+ private static final ITexture textureOverlay = TextureFactory.of(
+ TextureFactory.builder().addIcon(OVERLAY_FUSION3).extFacing().build(),
+ TextureFactory.builder().addIcon(OVERLAY_FUSION3_GLOW).extFacing().glow().build());
+
+ public LargeFusionComputer3(int id, String name, String nameRegional) {
+ super(id,name,nameRegional);
+ }
+
+ public LargeFusionComputer3(String name) {
+ super(name);
+ }
+
+ @Override
+ public String[] getDescription() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Fusion Reactor")
+ .addInfo("Millions of nuclear.")
+ .addInfo("Controller block for the Compact Fusion Reactor MK-III.")
+ .addInfo("1,572,864EU/t and 20M EU capacity per Energy Hatch")
+ .addInfo("If the recipe has a startup cost greater than the")
+ .addInfo("number of energy hatches * cap, you can't do it")
+ .addInfo("Make sure the whole structure is built in the 3x3")
+ .addInfo("chuck area of the ring center (not controller).")
+ .addInfo("Startup < 160,000,000 EU: 192x Parallel")
+ .addInfo("Startup < 320,000,000 EU: 128x Parallel")
+ .addInfo("Startup < 640,000,000 EU: 64x Parallel")
+ .addInfo("Support" + EnumChatFormatting.BLUE + " Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.GRAY + " Energy/Laser Hatches!")
+ .addInfo("The structure is too complex!")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .addCasingInfo("Fusion Machine Casing MK II", 1666)
+ .addCasingInfo("Advanced Compact Fusion Coil", 558)
+ .addCasingInfo("Neutronium Frame Box", 128)
+ .addCasingInfo("Osmium Reinforced Borosilicate Glass Block", 63)
+ .addEnergyHatch("1-32, Hint block with dot 3", 3)
+ .addInputHatch("2-16, Hint block with dot 1", 1)
+ .addOutputHatch("1-16, Hint block with dot 2", 2)
+ .addStructureInfo("ALL Hatches must be UV or better")
+ .toolTipFinisher("Good Generator");
+ if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
+ return tt.getInformation();
+ } else {
+ return tt.getStructureInformation();
+ }
+ }
+
+ @Override
+ public long maxEUStore() {
+ return 640060000L * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L;
+ }
+
+ @Override
+ public Block getCasingBlock() {
+ return GregTech_API.sBlockCasings4;
+ }
+
+ @Override
+ public int getCasingMeta() {
+ return 8;
+ }
+
+ @Override
+ public Block getCoilBlock() {
+ return Loaders.compactFusionCoil;
+ }
+
+ @Override
+ public int getCoilMeta() {
+ return 2;
+ }
+
+ @Override
+ public Block getGlassBlock() {
+ return ItemRegistry.bw_realglas;
+ }
+
+ @Override
+ public int getGlassMeta() {
+ return 5;
+ }
+
+ @Override
+ public int hatchTier() {
+ return 8;
+ }
+
+ @Override
+ public Materials getFrameBox() {
+ return Materials.Neutronium;
+ }
+
+ @Override
+ public int getMaxPara() {
+ return 64;
+ }
+
+ @Override
+ public int extraPara(int startEnergy) {
+ return (startEnergy < 160000000 ? 3 : (startEnergy < 320000000 ? 2 : 1));
+ }
+
+ @Override
+ public ITexture getTextureOverlay() {
+ return textureOverlay;
+ }
+
+ @Override
+ public int tierOverclock() {
+ return 4;
+ }
+
+ @Override
+ public String[] getStructureDescription(ItemStack stackSize) {
+ return DescTextLocalization.addText("LargeFusion3.hint", 9);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new LargeFusionComputer3(mName);
+ }
+}
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java
new file mode 100644
index 0000000000..76ff59d65d
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java
@@ -0,0 +1,216 @@
+package goodgenerator.blocks.tileEntity;
+
+import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry;
+import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti;
+import goodgenerator.blocks.tileEntity.base.LargeFusionComputerPP;
+import goodgenerator.loader.Loaders;
+import goodgenerator.util.DescTextLocalization;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.TAE;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gtPlusPlus.core.block.ModBlocks;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import org.lwjgl.input.Keyboard;
+
+import java.lang.reflect.Field;
+
+import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO;
+import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS;
+
+public class LargeFusionComputer4 extends LargeFusionComputerPP {
+
+ public LargeFusionComputer4(int id, String name, String nameRegional) {
+ super(id,name,nameRegional);
+ }
+
+ public LargeFusionComputer4(String name) {
+ super(name);
+ }
+
+ //Some hacky shit
+ public static Block mMK4Casing = null;
+ public static int mMK4CasingMeta;
+
+ @Override
+ public String[] getDescription() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Fusion Reactor")
+ .addInfo("Galaxy Collapse.")
+ .addInfo("Controller block for the Compact Fusion Reactor MK-IV Prototype.")
+ .addInfo("33,554,432EU/t and 80M EU capacity per Energy Hatch")
+ .addInfo("If the recipe has a startup cost greater than the")
+ .addInfo("number of energy hatches * cap, you can't do it")
+ .addInfo("Make sure the whole structure is built in the 3x3")
+ .addInfo("chuck area of the ring center (not controller).")
+ .addInfo("Performs 4/4 overclock.")
+ .addInfo("Startup < 160,000,000 EU: 256x Parallel")
+ .addInfo("Startup < 320,000,000 EU: 192x Parallel")
+ .addInfo("Startup < 640,000,000 EU: 128x Parallel")
+ .addInfo("Startup < 1,200,000,000 EU: 64x Parallel")
+ .addInfo("Support" + EnumChatFormatting.BLUE + " Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.GRAY + " Energy/Laser Hatches!")
+ .addInfo("The structure is too complex!")
+ .addInfo(BLUE_PRINT_INFO)
+ .addSeparator()
+ .addCasingInfo("Fusion Machine Casing MK III", 1666)
+ .addCasingInfo("Compact Fusion Coil MK-II Prototype", 558)
+ .addCasingInfo("Infinity Catalyst Frame Box", 128)
+ .addCasingInfo("Uranium Reinforced Borosilicate Glass Block", 63)
+ .addEnergyHatch("1-32, Hint block with dot 3", 3)
+ .addInputHatch("2-16, Hint block with dot 1", 1)
+ .addOutputHatch("1-16, Hint block with dot 2", 2)
+ .addStructureInfo("ALL Hatches must be UHV or better")
+ .toolTipFinisher("Good Generator");
+ if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
+ return tt.getInformation();
+ } else {
+ return tt.getStructureInformation();
+ }
+ }
+
+ @Override
+ public long maxEUStore() {
+ return 2560060000L * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L;
+ }
+
+ @Override
+ public Block getCasingBlock() {
+ if (mMK4Casing == null)
+ doCasingInit();
+ return mMK4Casing;
+ }
+
+ @Override
+ public int getCasingMeta() {
+ if (mMK4Casing == null)
+ doCasingInit();
+ return mMK4CasingMeta;
+ }
+
+ private void doCasingInit() {
+ try {
+ Field f = ModBlocks.class.getDeclaredField("blockCasings6Misc");
+ mMK4Casing = (Block) f.get(null);
+ mMK4CasingMeta = 0;
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ mMK4Casing = ModBlocks.blockCasings3Misc;
+ mMK4CasingMeta = 12;
+ }
+ }
+
+ @Override
+ public Block getCoilBlock() {
+ return Loaders.compactFusionCoil;
+ }
+
+ @Override
+ public int getCoilMeta() {
+ return 3;
+ }
+
+ @Override
+ public Block getGlassBlock() {
+ return ItemRegistry.bw_realglas;
+ }
+
+ @Override
+ public int getGlassMeta() {
+ return 13;
+ }
+
+ @Override
+ public int hatchTier() {
+ return 9;
+ }
+
+ @Override
+ public Materials getFrameBox() {
+ return Materials.InfinityCatalyst;
+ }
+
+ @Override
+ public ITexture getTextureOverlay() {
+ if (this.mMaxProgresstime > 0)
+ return TextureFactory.of(TextureFactory.builder().addIcon(TexturesGtBlock.Casing_Machine_Screen_3).extFacing().build());
+ else
+ return TextureFactory.of(TextureFactory.builder().addIcon(TexturesGtBlock.Casing_Machine_Screen_1).extFacing().build());
+ }
+
+ @Override
+ public int getMaxPara() {
+ return 64;
+ }
+
+ @Override
+ public int tierOverclock() {
+ return 64;
+ }
+
+ @Override
+ public int overclock(int mStartEnergy) {
+ return (mStartEnergy < 160000000) ? 64 : ((mStartEnergy < 320000000) ? 16 : (mStartEnergy < 640000000) ? 4 : 1);
+ }
+
+ @Override
+ public int extraPara(int startEnergy) {
+ if (startEnergy < 160000000)
+ return 4;
+ if (startEnergy < 320000000)
+ return 3;
+ if (startEnergy < 640000000)
+ return 2;
+ return 1;
+ }
+
+ @Override
+ public String[] getStructureDescription(ItemStack stackSize) {
+ return DescTextLocalization.addText("LargeFusion4.hint", 9);
+ }
+
+ @Override
+ public boolean turnCasingActive(boolean status) {
+ if (this.mEnergyHatches != null) {
+ for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) {
+ hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53);
+ }