diff options
7 files changed, 2885 insertions, 16 deletions
diff --git a/dependencies.gradle b/dependencies.gradle index c2bde2eded..fc80700899 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ dependencies { shadowImplementation('com.github.GTNewHorizons:AVRcore:1.0.1') - compile('com.github.GTNewHorizons:GT5-Unofficial:5.09.41.259-pre:dev') + compile("com.github.GTNewHorizons:GT5-Unofficial:5.09.41.259-pre:dev") compile('com.github.GTNewHorizons:ModularUI:1.0.38:dev') compile('com.github.GTNewHorizons:Yamcl:0.5.84:dev') compile('com.github.GTNewHorizons:NotEnoughItems:2.3.20-GTNH:dev') diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java index 5f5a73c71c..fe4e0227d0 100644 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java +++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java @@ -14,6 +14,9 @@ import gregtech.api.enums.Materials; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; + +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_OreDictUnificator; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; @@ -103,12 +106,15 @@ public class EyeOfHarmonyRecipe { this.recipeTriggerItem = new ItemStack(block); this.outputItems = validDustGenerator(materialList); - this.outputItems.sort(Comparator.comparingLong(ItemStackLong::getStackSize)); - Collections.reverse(this.outputItems); this.sumOfItems = this.outputItems.stream().map(ItemStackLong::getStackSize).reduce(0L, Long::sum); + this.outputItems.add(new ItemStackLong(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1), this.sumOfItems * 3)); + this.outputItems.sort(Comparator.comparingLong(ItemStackLong::getStackSize)); + Collections.reverse(this.outputItems); + + for (ItemStackLong itemStackLong : outputItems) { double stackSize = (double) itemStackLong.getStackSize(); double probability = Math.round(100_000 * stackSize / sumOfItems) / 1000.0; @@ -126,9 +132,33 @@ public class EyeOfHarmonyRecipe { } // Add a bonus fluid of compressed star matter. - // todo replace with Bonus star matter when added to GT5. fluidStackArrayList.add(Materials.RawStarMatter.getFluid((this.spacetimeCasingTierRequired + 1) * 100_000)); + // Tier 0 - 576 White + // Tier 1 - 2304 White + // Tier 2 - 9216 White + // Tier 3 - 36864 White + + // Tier 4 - 576 Black + // Tier 5 - 2304 Black + // Tier 6 - 9216 Black + // Tier 7 - 36864 Black + + // Tier 8 - 576 Universium + // Tier 9 - 2304 Universium + + if (rocketTierOfRecipe <= 3) { + fluidStackArrayList.add(Materials.WhiteDwarfMatter.getMolten(576L * pow(4, (int) rocketTierOfRecipe))); + } + + if ((4 <= rocketTierOfRecipe) && (rocketTierOfRecipe <= 7)) { + fluidStackArrayList.add(Materials.BlackDwarfMatter.getMolten(576L * pow(4, (int) rocketTierOfRecipe - 4))); + } + + if (rocketTierOfRecipe >= 8) { + fluidStackArrayList.add(Materials.Universium.getMolten(576L * pow(4, (int) (rocketTierOfRecipe - 8)))); + } + outputFluids = fluidStackArrayList; // End fluid processing. diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java index 091ec4f7f5..f9c5cfeed5 100644 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java +++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java @@ -38,15 +38,27 @@ public class EyeOfHarmonyRecipeStorage { BlockDimensionDisplay blockDimensionDisplay = (BlockDimensionDisplay) ModBlocks.blocks.get(dimAbbreviation); - try { - if (dimAbbreviation.equals("DD")) { - specialDeepDarkRecipe(this, blockDimensionDisplay); - } else { + if (dimAbbreviation.equals("DD")) { + specialDeepDarkRecipe(this, blockDimensionDisplay); + } else { + + GT5OreLayerHelper.NormalOreDimensionWrapper normalOre = + GT5OreLayerHelper.dimToOreWrapper.getOrDefault(dimAbbreviation, null); + GT5OreSmallHelper.SmallOreDimensionWrapper smallOre = + GT5OreSmallHelper.dimToSmallOreWrapper.getOrDefault(dimAbbreviation, null); + + if ((normalOre == null) || (smallOre == null)) { + System.out.println(dimAbbreviation + + " dimension not found in dimToOreWrapper. Report error to GTNH team."); + continue; + } + + try { put( dimAbbreviation, new EyeOfHarmonyRecipe( - GT5OreLayerHelper.dimToOreWrapper.get(dimAbbreviation), - GT5OreSmallHelper.dimToSmallOreWrapper.get(dimAbbreviation), + normalOre, + smallOre, blockDimensionDisplay, 0.6 + blockDimensionDisplay.getDimensionRocketTier() / 10.0, BILLION * (blockDimensionDisplay.getDimensionRocketTier() + 1), @@ -54,11 +66,9 @@ public class EyeOfHarmonyRecipeStorage { timeCalculator(blockDimensionDisplay.getDimensionRocketTier()), blockDimensionDisplay.getDimensionRocketTier(), 1.0 - blockDimensionDisplay.getDimensionRocketTier() / 10.0)); + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); - System.out.println( - dimAbbreviation + " dimension not found in dimToOreWrapper. Report error to GTNH team."); } } } diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java new file mode 100644 index 0000000000..2717a95425 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java @@ -0,0 +1,107 @@ +package com.github.technus.tectech.thing.block; + +import static com.github.technus.tectech.Reference.MODID; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.blocks.BlockBase; +import java.util.ArrayList; +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +/** + * Created by danie_000 on 17.12.2016. + */ +public final class QuantumStuffBlock extends BlockBase { + public static IIcon stuff; + public static int renderID; + public static QuantumStuffBlock INSTANCE; + + public QuantumStuffBlock() { + super(Material.iron); + setBlockBounds(0, 0, 0, 1, 1, 1); + setBlockName("quantumStuff"); + setHarvestLevel("wrench", 0); + setHardness(500); + setResistance(1); + setLightOpacity(0); + setBlockTextureName(MODID + ":blockQuantumStuff"); + } + + @Override + public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister p_149651_1_) { + super.registerBlockIcons(p_149651_1_); + stuff = blockIcon; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean getCanBlockGrass() { + return false; + } + + // @Override + // public boolean canRenderInPass(int pass) { + // return true; + // } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered( + IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { + return false; + } + + @Override + public int getRenderType() { + return renderID; + } + + public static void run() { + INSTANCE = new QuantumStuffBlock(); + GameRegistry.registerBlock(INSTANCE, INSTANCE.getUnlocalizedName()); + } + + @Override + public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return new ArrayList<>(); + } + + @Override + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { + return null; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java new file mode 100644 index 0000000000..1c974a1510 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java @@ -0,0 +1,111 @@ +package com.github.technus.tectech.thing.block; + +import com.github.technus.tectech.TecTech; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import org.lwjgl.opengl.GL11; + +/** + * Created by danie_000 on 19.12.2016. + */ +public final class QuantumStuffRender implements ISimpleBlockRenderingHandler { + private static Tessellator tes = Tessellator.instance; + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + GL11.glPushMatrix(); + // Get icons from custom register (useful for renderers and fluids) + IIcon side = QuantumStuffBlock.stuff; + tes.startDrawingQuads(); + tes.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock( + IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + // renderer.renderStandardBlock(block, x, y, z); + GL11.glPushMatrix(); + tes.setNormal(0F, 1F, 0F); + tes.setBrightness(15728880); + IIcon side = QuantumStuffBlock.stuff; + for (int i = 0; i < 6; i++) { + float f = 1 - TecTech.RANDOM.nextFloat() / 4f, + g = f - TecTech.RANDOM.nextFloat() / 4f, + r = g - TecTech.RANDOM.nextFloat() / 4f - 0.25f; + tes.setColorOpaque_F(r, g, f); + float rotX = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, + rotY = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, + rotZ = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI; + tesAbuse(x, y, z, -1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); + tesAbuse(x, y, z, -1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); + tesAbuse(x, y, z, 1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); + tesAbuse(x, y, z, 1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); + + tesAbuse(x, y, z, 1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); + tesAbuse(x, y, z, 1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); + tesAbuse(x, y, z, -1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); + tesAbuse(x, y, z, -1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); + } + GL11.glPopMatrix(); + return true; + } + + private void tesAbuse( + int x, + int y, + int z, + float sx, + float sy, + float sz, + float rotX, + float rotY, + float rotZ, + float sideU, + float sideV) { + Vec3 pos = Vec3.createVectorHelper(sx, sy, sz); + pos.rotateAroundX(rotX); + pos.rotateAroundY(rotY); + pos.rotateAroundZ(rotZ); + tes.addVertexWithUV(pos.xCoord + x + .5f, pos.yCoord + y + .5f, pos.zCoord + z + .5f, sideU, sideV); + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return QuantumStuffBlock.renderID; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java index 539ec3de9c..781c1cc5d1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java @@ -1286,9 +1286,9 @@ public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_Multibl 'H', buildHatchAdder(GT_MetaTileEntity_EM_EyeOfHarmony.class) .atLeast(InputHatch, OutputHatch, OutputBus, Maintenance) - .casingIndex(13) + .casingIndex(texturePage << 7) .dot(1) - .buildAndChain(sBlockCasingsBA0, 13)) + .buildAndChain(sBlockCasingsBA0, 12)) .addElement( 'E', ofBlocksTiered( diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java new file mode 100644 index 0000000000..9d595339d0 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -0,0 +1,2611 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi; + +import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; +import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; +import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_decay.URANIUM_INGOT_MASS_DIFF; +import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_decay.URANIUM_MASS_TO_EU_INSTANT; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; +import static net.minecraft.util.StatCollector.translateToLocal; + +import com.github.technus.tectech.thing.block.QuantumGlassBlock; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +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.util.GT_Multiblock_Tooltip_Builder; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { + // region variables + private static Textures.BlockIcons.CustomIcon ScreenOFF; + private static Textures.BlockIcons.CustomIcon ScreenON; + + // todo CHECK VALUES + private static final double NEUTRONIUM_BLOCK_MASS = 4.1E17; + private static final double NEUTRONIUM_BLOCK_ATOM_COUNT = 2.4478671E44; + private static final double NEUTRONIUM_BLOCK_TO_EU_INSTANT = URANIUM_MASS_TO_EU_INSTANT + * NEUTRONIUM_BLOCK_MASS + / (URANIUM_INGOT_MASS_DIFF * 1.78266191e-36); // ~ 5.314e40 + private static final double NEUTRON_TO_EU_INSTANT = + NEUTRONIUM_BLOCK_TO_EU_INSTANT / NEUTRONIUM_BLOCK_ATOM_COUNT; // ~ 0.00021708694 + + public boolean glassDome = false; + // endregion + + // Time dillatation - to slow down the explosion thing but REALLY REDUCE POWER OUTPUT + // Startcodes to startup + // per dim disable thingies + + // region structure actual + private static final IStructureDefinition<GT_MetaTileEntity_EM_bhg> STRUCTURE_DEFINITION = + IStructureDefinition.<GT_MetaTileEntity_EM_bhg>builder() + .addShape("main_t1", transpose(new String[][] { + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " CCCCCCCCC ", + " C C ", + " CCCCCCCCC ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " C C ", + " DDDDD ", + " DDCDCDD ", + " CCCCDCCDCCDCCCC ", + " DDDDDDD ", + " CCCCDCCDCCDCCCC ", + " DDCDCDD ", + " DDDDD ", + " C C ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " D ", + " D ", + " DDDDDDD ", + " DD DD ", + " D EEE D ", + " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", + " CCC D EAAAE D CCC ", + " D EEE D ", + " DD DD ", + " DDDDDDD ", + " D ", + " D ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " D ", + " D ", + " ", + " ", + " ", + " ", + " ", + " CC CC ", + " DD DD ", + " CC CC ", + " ", + " ", + " ", + " ", + " ", + " D ", + " D ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " C C ", + " CCCCC ", + " D ", + " B ", + " B ", + " ", + " ", + " ", + " ", + " C C ", + " CC CC ", + " CDBB BBDC ", + " CC CC ", + " C C ", + " ", + " ", + " ", + " ", + " B ", + " B ", + " D ", + " CCCCC ", + " C C ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " D ", + " EEEBEEE ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " E E ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " EEEBEEE ", + " D ", + " C C ", + " C C ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " C C ", + " CCCCC ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " CC CC ", + " CDB BDC ", + " CC CC ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " CCCCC ", + " C C ", + " ", + " ", + " " + }, + { + " ", + " ", + " C C ", + " C C ", + " D ", + " EEEBEEE ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " E E ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " EEEBEEE ", + " D ", + " C C ", + " C C ", + " ", + " " + }, + { + " ", + " ", + " C C ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " DB BD ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " C C ", + " ", + " " + }, + { + " ", + " C C ", + " C C ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CC CC ", + " DB BD ", + " CC CC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " C C ", + " C C ", + " " + }, + { + " ", + " C C ", + " D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " D D ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D ", + " C C ", + " " + }, + { + " ", + " C C ", + " D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " D D ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D ", + " C C ", + " " + }, + { + " CCCCCCC ", + " C C ", + " DDDDDDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + "CCD DCC", + " D D ", + "CCD DCC", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDDDDDD ", + " C C ", + " C C " + }, + { + " CCHHHHHCC ", + " DDDDD ", + " DD DD ", + " ", + " ", + " E E ", + " ", + " E E ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + "CD DC", + " D D ", + "CD DC", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " E E ", + " ", + " E E ", + " ", + " ", + " DD DD ", + " DDDDD ", + " C C " + }, + { + " CHHHHHHHC ", + " DDCDCDD ", + " D EEE D ", + " ", + " C C ", + " E E ", + " C C ", + " E E ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + "CCE ECC", + " DE ED ", + "CCE ECC", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " E E ", + " C C ", + " E E ", + " C C ", + " ", + " D EEE D ", + " DDCDCDD ", + " C C " + }, + { + " CHHFFFHHC ", + " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", + " CC CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " C C ", + " CC CC ", + " C C ", + " C C ", + "CCD DCC", + "CD DC", + "CCE ECC", + "CCA ACC", + "CDA ADC", + "CCA ACC", + "CCE ECC", + "CD DC", + "CCD DCC", + " C C ", + " C C ", + " CC CC ", + " C C ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC CC ", + " CCC D EAAAE D CCC ", + " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " + }, + { + " CHHF~FHHC ", + " DDDDDDD ", + " DDD EAAAE DDD ", + " DD DD ", + " CDBB BBDC ", + " DB BD ", + " CDB BDC ", + " DB BD ", + " DB BD ", + " DB BD ", + " D D ", + " D D ", + " D D ", + " D D ", + " DE ED ", + "CDA ADC", + " DA AD ", + "CDA ADC", + " DE ED ", + " D D ", + " D D ", + " D D ", + " D D ", + " DB BD ", + " DB BD ", + " DB BD ", + " CDB BDC ", + " DB BD ", + " CDBB BBDC ", + " DD DD ", + " DDD EAAAE DDD ", + " DDDDDDD ", + " C C " + }, + { + " CHHFFFHHC ", + " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", + " CC CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " C C ", + " CC CC ", + " C C ", + " C C ", + "CCD DCC", + "CD DC", + "CCE ECC", + "CCA ACC", + "CDA ADC", + "CCA ACC", + "CCE ECC", + "CD DC", + "CCD DCC", + " C C ", + " C C ", + " CC CC ", + " C C ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC CC ", + " CCC D EAAAE D CCC ", + " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " + }, + { + " CHHHHHHHC ", + " DDCDCDD ", + " D EEE D ", + " ", + " C C ", + " E E ", + " C C ", + " E E ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + "CCE ECC", + " DE ED ", + "CCE ECC", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " E E ", + " C C ", + " E E ", + " C C ", + " ", + " D EEE D ", + " DDCDCDD ", + " C C " + }, + { + " CCHHHHHCC ", + " DDDDD ", + " DD DD ", + " ", + " ", + " E E ", + " ", + " E E ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + "CD DC", + " D D ", + "CD DC", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " E E ", + " ", + " E E ", + " ", + " ", + " DD DD ", + " DDDDD ", + " C C " + }, + { + " CCCCCCC ", + " C C ", + " DDDDDDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + "CCD DCC", + " D D ", + "CCD DCC", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDDDDDD ", + " C C ", + " C C " + }, + { + " ", + " C C ", + " D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " D D ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D ", + " C C ", + " " + }, + { + " ", + " C C ", + " D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " D D ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D ", + " C C ", + " " + }, + { + " ", + " C C ", + " C C ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CC CC ", + " DB BD ", + " CC CC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " C C ", + " C C ", + " " + }, + { + " ", + " ", + " C C ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " DB BD ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " C C ", + " ", + " " + }, + { + " ", + " ", + " C C ", + " C C ", + " D ", + " EEEBEEE ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " E E ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " EEEBEEE ", + " D ", + " C C ", + " C C ", + " ", + " " + }, + { + " ", + " ", + " ", + " C C ", + " CCCCC ", + " D ", + " B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " CC CC ", + " CDB BDC ", + " CC CC ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B ", + " D ", + " CCCCC ", + " C C ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " D ", + " EEEBEEE ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " E E ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " EEEBEEE ", + " D ", + " C C ", + " C C ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " C C ", + " CCCCC ", + " D ", + " B ", + " B ", + " ", + " ", + " ", + " ", + " C C ", + " CC CC ", + " CDBB BBDC ", + " CC CC ", + " C C ", + " ", + " ", + " ", + " ", + " B ", + " B ", + " D ", + " CCCCC ", + " C C ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " D ", + " D ", + " ", + " ", + " ", + " ", + " ", + " CC CC ", + " DD DD ", + " CC CC ", + " ", + " ", + " ", + " D ", + " D ", + " D ", + " D ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " D ", + " D ", + " DDDDDDD ", + " DD DD ", + " D EEE D ", + " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", + " CCC D EAAAE D CCC ", + " D EEE D ", + " DD DD ", + " DDDDDDD ", + " D ", + " D ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " C C ", + " DDDDD ", + " DDCDCDD ", + " CCCCDCCDCCDCCCC ", + " DDDDDDD ", + " CCCCDCCDCCDCCCC ", + " DDCDCDD ", + " DDDDD ", + " C C ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " CCCCCCCCC ", + " C C ", + " CCCCCCCCC ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + } + })) + .addShape("main_t2", transpose(new String[][] { + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " CCCCCCCCC ", + " C C ", + " CCCCCCCCC ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGC CGG ", + " GGGC CGGG ", + " GGGGC CGGGG ", + " GGGGDDDDDGGGG ", + " GGGDDCDCDDGGG ", + " CCCCDCCDCCDCCCC ", + " DDDDDDD ", + " CCCCDCCDCCDCCCC ", + " GGGDDCDCDDGGG ", + " GGGGDDDDDGGGG ", + " GGGGC CGGGG ", + " GGGC CGGG ", + " GGC CGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGC CGG ", + " GGGGC CGGGG ", + " GGG D GGG ", + " GGG D GGG ", + " GG DDDDDDD GG ", + " GG DD DD GG ", + " GG D EEE D GG ", + " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", + " CCC D EAAAE D CCC ", + " GG D EEE D GG ", + " GG DD DD GG ", + " GG DDDDDDD GG ", + " GGG D GGG ", + " GGG D GGG ", + " GGGGC CGGGG ", + " GGC CGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGGC CGGG ", + " GGG D GGG ", + " GG D GG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " CC CC ", + " DD DD ", + " CC CC ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG GG ", + " GG D GG ", + " GGG D GGG ", + " GGGC CGGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGGCCCCCGGG ", + " GGG D GGG ", + " GG B GG ", + " GG B GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " C C ", + " CC CC ", + " CDBB BBDC ", + " CC CC ", + " C C ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG B GG ", + " GG B GG ", + " GGG D GGG ", + " GGGCCCCCGGG ", + " C C ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " C C ", + " GGGGGC CGGGGG ", + " GGG D GGG ", + " GG EEEBEEE GG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G E E G ", + " G E E G ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " G E E G ", + " G E E G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG GG ", + " GG EEEBEEE GG ", + " GGG D GGG ", + " GGGGGC CGGGGG ", + " C C ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " C C ", + " GGGCCCCCGGG ", + " GGG D GGG ", + " GG B GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " CC CC ", + " CDB BDC ", + " CC CC ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG B GG ", + " GGG D GGG ", + " GGGCCCCCGGG ", + " C C ", + " ", + " ", + " " + }, + { + " ", + " ", + " C C ", + " GGGC CGGG ", + " GGG D GGG ", + " GG EEEBEEE GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " G E E G ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " G E E G ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG EEEBEEE GG ", + " GGG D GGG ", + " GGGC CGGG ", + " C C ", + " ", + " " + }, + { + " ", + " ", + " GGC CGG ", + " GGG D GGG ", + " GG B GG ", + " GG GG ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " DB BD ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " GG GG ", + " GG B GG ", + " GGG D GGG ", + " GGC CGG ", + " ", + " " + }, + { + " ", + " C C ", + " GGGGC CGGGG ", + " GG D GG ", + " GG B GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " CC CC ", + " DB BD ", + " CC CC ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG B GG ", + " GG D GG ", + " GGGGC CGGGG ", + " C C ", + " " + }, + { + " ", + " GGC CGG ", + " GGG D GGG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " D D ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG GG ", + " GGG D GGG ", + " GGC CGG ", + " " + }, + { + " ", + " GGGC CGGG ", + " GGG D GGG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " D D ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GGG D GGG ", + " GGGC CGGG ", + " " + }, + { + " CCCCCCC ", + " GGGGC CGGGG ", + " GG DDDDDDD GG ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " GD DG ", + "CCD DCC", + " D D ", + "CCD DCC", + " GD DG ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " GG DDDDDDD GG ", + " GGGGC CGGGG ", + " C C " + }, + { + " CCHHHHHCC ", + " GGGGDDDDDGGGG ", + " GG DD DD GG ", + " G G ", + " G G ", + " G E E G ", + " G G ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " GD DG ", + " D D ", + "CD DC", + " D D ", + "CD DC", + " D D ", + " GD DG ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " G G ", + " G E E G ", + " G G ", + " G G ", + " GG DD DD GG ", + " GGGGDDDDDGGGG ", + " C C " + }, + { + " CHHHHHHHC ", + " GGGDDCDCDDGGG ", + " GG D EEE D GG ", + " G G ", + " C C ", + " G E E G ", + " C C ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " D D ", + " D D ", + "CCE ECC", + " DE ED ", + "CCE ECC", + " D D ", + " D D ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " C C ", + " G E E G ", + " C C ", + " G G ", + " GG D EEE D GG ", + " GGGDDCDCDDGGG ", + " C C " + }, + { + " CHHFFFHHC ", + " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", + " CC CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " C C ", + " CC CC ", + " C C ", + " C C ", + "CCD DCC", + "CD DC", + "CCE ECC", + "CCA ACC", + "CDA ADC", + "CCA ACC", + "CCE ECC", + "CD DC", + "CCD DCC", + " C C ", + " C C ", + " CC CC ", + " C C ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC CC ", + " CCC D EAAAE D CCC ", + " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " + }, + { + " CHHF~FHHC ", + " DDDDDDD ", + " DDD EAAAE DDD ", + " DD DD ", + " CDBB BBDC ", + " DB BD ", + " CDB BDC ", + " DB BD ", + " DB BD ", + " DB BD ", + " D D ", + " D D ", + " D D ", + " D D ", + " DE ED ", + "CDA ADC", + " DA AD ", + "CDA ADC", + " DE ED ", + " D D ", + " D D ", + " D D ", + " D D ", + " DB BD ", + " DB BD ", + " DB BD ", + " CDB BDC ", + " DB BD ", + " CDBB BBDC ", + " DD DD ", + " DDD EAAAE DDD ", + " DDDDDDD ", + " C C " + }, + { + " CHHFFFHHC ", + " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", + " CC CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " C C ", + " CC CC ", + " C C ", + " C C ", + "CCD DCC", + "CD DC", + "CCE ECC", + "CCA ACC", + "CDA ADC", + "CCA ACC", + "CCE ECC", + "CD DC", + "CCD DCC", + " C C ", + " C C ", + " CC CC ", + " C C ", + " CC E E CC ", + " CC CC ", + " CC E E CC ", + " CC CC ", + " CC CC ", + " CCC D EAAAE D CCC ", + " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " + }, + { + " CHHHHHHHC ", + " GGGDDCDCDDGGG ", + " GG D EEE D GG ", + " G G ", + " C C ", + " G E E G ", + " C C ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " D D ", + " D D ", + "CCE ECC", + " DE ED ", + "CCE ECC", + " D D ", + " D D ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " C C ", + " G E E G ", + " C C ", + " G G ", + " GG D EEE D GG ", + " GGGDDCDCDDGGG ", + " C C " + }, + { + " CCHHHHHCC ", + " GGGGDDDDDGGGG ", + " GG DD DD GG ", + " G G ", + " G G ", + " G E E G ", + " G G ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " GD DG ", + " D D ", + "CD DC", + " D D ", + "CD DC", + " D D ", + " GD DG ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " G G ", + " G E E G ", + " G G ", + " G G ", + " GG DD DD GG ", + " GGGGDDDDDGGGG ", + " C C " + }, + { + " CCCCCCC ", + " GGGGC CGGGG ", + " GG DDDDDDD GG ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GD DG ", + " GD DG ", + "CCD DCC", + " D D ", + "CCD DCC", + " GD DG ", + " GD DG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " GG DDDDDDD GG ", + " GGGGC CGGGG ", + " C C " + }, + { + " ", + " GGGC CGGG ", + " GGG D GGG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " D D ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GGG D GGG ", + " GGGC CGGG ", + " " + }, + { + " ", + " GGC CGG ", + " GGG D GGG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " D D ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG GG ", + " GGG D GGG ", + " GGC CGG ", + " " + }, + { + " ", + " C C ", + " GGGGC CGGGG ", + " GG D GG ", + " GG B GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " CC CC ", + " DB BD ", + " CC CC ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG B GG ", + " GG D GG ", + " GGGGC CGGGG ", + " C C ", + " " + }, + { + " ", + " ", + " GGC CGG ", + " GGG D GGG ", + " GG B GG ", + " GG GG ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " DB BD ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " GG GG ", + " GG B GG ", + " GGG D GGG ", + " GGC CGG ", + " ", + " " + }, + { + " ", + " ", + " C C ", + " GGGC CGGG ", + " GGG D GGG ", + " GG EEEBEEE GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G E E G ", + " G E E G ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " G E E G ", + " G E E G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG EEEBEEE GG ", + " GGG D GGG ", + " GGGC CGGG ", + " C C ", + " ", + " " + }, + { + " ", + " ", + " ", + " C C ", + " GGGCCCCCGGG ", + " GGG D GGG ", + " GG B GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " C C ", + " CC CC ", + " CDB BDC ", + " CC CC ", + " C C ", + " G G ", + " G G ", + " G G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG B GG ", + " GGG D GGG ", + " GGGCCCCCGGG ", + " C C ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " C C ", + " GGGGGC CGGGGG ", + " GGG D GGG ", + " GG EEEBEEE GG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " G E E G ", + " G E E G ", + " CC E E CC ", + " DB BD ", + " CC E E CC ", + " G E E G ", + " G E E G ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG GG ", + " GG EEEBEEE GG ", + " GGG D GGG ", + " GGGGGC CGGGGG ", + " C C ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGGCCCCCGGG ", + " GGG D GGG ", + " GG B GG ", + " GG B GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " C C ", + " CC CC ", + " CDBB BBDC ", + " CC CC ", + " C C ", + " G G ", + " G G ", + " GG GG ", + " G G ", + " GG B GG ", + " GG B GG ", + " GGG D GGG ", + " GGGCCCCCGGG ", + " C C ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGGC CGGG ", + " GGG D GGG ", + " GG D GG ", + " GG GG ", + " G G ", + " GG GG ", + " G G ", + " G G ", + " CC CC ", + " DD DD ", + " CC CC ", + " G G ", + " G G ", + " GG GG ", + " G D G ", + " GG D GG ", + " GG D GG ", + " GGG D GGG ", + " GGGC CGGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGC CGG ", + " GGGGC CGGGG ", + " GGG D GGG ", + " GGG D GGG ", + " GG DDDDDDD GG ", + " GG DD DD GG ", + " GG D EEE D GG ", + " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", + " CCC D EAAAE D CCC ", + " GG D EEE D GG ", + " GG DD DD GG ", + " GG DDDDDDD GG ", + " GGG D GGG ", + " GGG D GGG ", + " GGGGC CGGGG ", + " GGC CGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " GGC CGG ", + " GGGC CGGG ", + " GGGGC CGGGG ", + " GGGGDDDDDGGGG ", + " GGGDDCDCDDGGG ", + " CCCCDCCDCCDCCCC ", + " DDDDDDD ", + " CCCCDCCDCCDCCCC ", + " GGGDDCDCDDGGG ", + " GGGGDDDDDGGGG ", + " GGGGC CGGGG ", + " GGGC CGGG ", + " GGC CGG ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + }, + { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " CCCCCCCCC ", + " C C ", + " CCCCCCCCC ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + } + })) + .addElement('A', ofBlock(sBlockCasingsTT, 10)) + .addElement('B', ofBlock(sBlockCasingsTT, 11)) + .addElement('C', ofBlock(sBlockCasingsTT, 12)) + .addElement('D', ofBlock(sBlockCasingsTT, 13)) + .addElement('E', ofBlock(sBlockCasingsTT, 14)) + .addElement('G', ofBlock(QuantumGlassBlock.INSTANCE, 0)) + .addElement( + 'H', + ofHatchAdderOptional( + GT_MetaTileEntity_EM_bhg::addClassicToMachineList, + textureOffset, + 1, + sBlockCasingsTT, + 0)) + .addElement( + 'F', + ofHatchAdderOptional( + GT_MetaTileEntity_EM_bhg::addElementalToMachineList, + textureOffset + 4, + 2, + sBlockCasingsTT, + 4)) + .build(); + + @Override + public IStructureDefinition<GT_MetaTileEntity_EM_bhg> getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal( + "gt.blockmachines.multimachine.em.blackholegenerator.hint.0"), // 1 - Classic Hatches or High Power + // Casing + translateToLocal( + "gt.blockmachines.multimachine.em.blackholegenerator.hint.1"), // 2 - Elemental Hatches or Molecular + // Casing + }; + // endregion + + public GT_MetaTileEntity_EM_bhg(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GT_MetaTileEntity_EM_bhg(String aName) { + super(aName); + } + + /** + * Black hole event horizon radius calculator + * + * @param massKg mass in kg + * @return radius in meters + */ + private static double getSchwarzschildRadius(double massKg) { + return massKg * 1.48523238761875E-27; + } + + /** + * Black hole event horizon surface area calculator + * + * @param massKg mass in kg + * @return area in meters^2 + */ + private static double getSchwarzschildArea(double massKg) { + return Math.pow(getSchwarzschildRadius(massKg), 2) * 12.566370614359172; + } + + /** + * Black hole event horizon temperature calculator + * + * @param massKg mass in kg + * @return temperature in K + */ + private static double getTemperature(double massKg) { + return 2.841438513199716E-9 / (2.3159488515170722E-32 * massKg); + } + + /** + * Black hole luminosity calculator + * + * @param massKg mass in kg + * @return luminosity in watts + */ + private static double getLuminosity(double massKg) { + return getSchwarzschildArea(massKg) * 5.670373e-8 * Math.pow(getTemperature(massKg), 4); + } + + /** + * Black hole acretion disk luminosity calculator + * + * @param massKgPer1s mass injection kg per s + * @return luminosity in watts + */ + private static double getAcretionDiskLuminosity(double massKgPer1s) { + return massKgPer1s * 7.48962648947348E15; + } + + /** + * Black hole gravity field calculator, should be used for gravity blasting + * + * @param massKg mass in kg + * @param distanceSq distance squared in meters + * @return gravity field + */ + private static double getGravityField(double massKg, double distanceSq) { + return massKg * 6.6743015e-11 / distanceSq; + } + + /** + * Black hole containment force calculator + * + * @param massKg mass in kg + * @param radiusSq radius squared in meters + * @return force in newtons + */ + private static double getContainmentForce(double massKg, double radiusSq) { + return Math.pow(massKg, 2) * 6.6743015e-11 / radiusSq; + } + + /** + * Black hole containment pressure calculator F/s, should be used for bhg initial release explosion? + * + * @param massKg mass in kg + * @param radiusSq radius squared in meters + * @return pressure in pascals + */ + private static double getContainmentPressure(double massKg, double radiusSq) { + return getContainmentForce(massKg, radiusSq) / (12.566370614359172 * radiusSq); + } + + /** + * Black hole containment energy calculator, assuming F*s, and 100% efficient gravity force field + * + * @param massKg mass in kg + * @return power in watts + */ + private static double getContainmentPower(double massKg) { + return Math.pow(massKg, 2) * 8.387174624097334E-10; + } + + /** + * Black hole power balance, zero at mass ~= 2.5525e10 (T~=4.8067e12) + * + * @param massKg mass in kg + * @param massKgPer1s mass injection kg per s + * @return power in watts + */ + @Deprecated + private static double getContainmentPowerBalance(double massKg, double massKgPer1s) { + return getLuminosity(massKg) + getAcretionDiskLuminosity(massKgPer1s) - getContainmentPower(massKg); + } + + // todo compaction energy 8 * Long.MAx_VALUE? + + // todo neutronium decay gen? 0.0007186885 mass diff - actually compute hydrogen amount... + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_EM_bhg(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + if (structureCheck_EM("t2", 16, 16, 0)) { + glassDome = true; + return true; + } + if (structureCheck_EM("t1", 16, 16, 0)) { + glassDome = false; + return true; + } + // todo check tiers of hatches!!!! + return false; + } + + @Override + public GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType(translateToLocal( + "gt.blockmachines.multimachine.em.blackholegenerator.name")) // Machine Type: Black Hole + // Generator + .addInfo(translateToLocal( + "gt.blockmachines.multimachine.em.blackholegenerator.desc.0")) // Controller block of + // the Black Hole + // Generator + .addInfo(translateToLocal( + "gt.blockmachines.multimachine.em.blackholegenerator.desc.1")) // Uses a black hole to + // generate power + .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! + .addSeparator() + .beginStructureBlock(33, 33, 33, false) + .addEnergyHatch( + translateToLocal("tt.keyword.Structure.AnyHighPowerCasing1D"), + 1) // Energy Hatch: Any High Power Casing with 1 dot + .addMaintenanceHatch( + translateToLocal("tt.keyword.Structure.AnyHighPowerCasing1D"), + 1) // Maintenance Hatch: Any High Power Casing with 1 dot + .toolTipFinisher(CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG_ACTIVE"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture( + IGregTechTileEntity aBaseMetaTileEntity, + byte aSide, + byte aFacing, + byte aColorIndex, + boolean aActive, + boolean aRedstone) { + if (aSide == aFacing) { + return new ITexture[] { + Textures.BlockIcons.casingTexturePages[texturePage][12], + new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) + }; + } + return new ITexture[] {Textures.BlockIcons.casingTexturePages[texturePage][12]}; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + try { + structureBuild_EM((stackSize.stackSize & 1) == 1 ? "main_t1" : "main_t2", 16, 16, 0, stackSize, hintsOnly); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } +} |