aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGDCloud <93287602+GDCloudstrike@users.noreply.github.com>2024-05-22 22:42:24 +0200
committerGitHub <noreply@github.com>2024-05-22 22:42:24 +0200
commite32c6e09e9b56827b8f5196f720cbed223d6fad4 (patch)
treee143c7540f1362df0945e34ded7756566257e1d2 /src
parent686d95158677dea7caa31856c2d330c410d9ddba (diff)
downloadGT5-Unofficial-e32c6e09e9b56827b8f5196f720cbed223d6fad4.tar.gz
GT5-Unofficial-e32c6e09e9b56827b8f5196f720cbed223d6fad4.tar.bz2
GT5-Unofficial-e32c6e09e9b56827b8f5196f720cbed223d6fad4.zip
Forge of the Gods continued (#282)
* whole lotta plasmas * adjust plasma recipe times * fix up plasma nei page * change module names + very minor cleanup * refactor a bunch + add OC heat, energy discount, effective fuel factor and misc module functionality * rework internal battery * add graviton shard cost to upgrades * add module count restriction * display module connection status in gui * add processing voltage calculations * add special overclock functionality * make nbt data sticky * add exotic module bonuses & fix stacksize issue * add module refresh and new logo * add gorge logo and fix processing voltage * redo recipemap swapping * redo exotic module nei page * add required upgrade check for modules * swap object types * undo star import * save milestone relevant stats * add functionality and basic gui to milestones * undo star import * add new magmatter mechanic * fix exotic module bonuses * blacklist furnace mode from recipe milestone * make milestones grant graviton shards * exotic module nei improvements * new main and module structure * slight structure adjustment * new module screen textures + fix furnace mode toggle sound * add rings to structure * small split upgrade check adjustment * lore dump v1 (thx deleno) * add tooltip delay * base upgrade 101 off of new variable * technical text dump + some upgrade gui adjustments * minor structure adjustment * structure adjustment followup + place button higher in upgrade window * remove unused code * rework milestone window & add inverted milestone + corresponding math * minor structure adjustment * add individual milestone windows + milestone symbol in upgrade BGs * fix long overflow in power tally * more milestone ui work * fix input hatch npe * more milestone work * yet another structure adjustment * add logic for structure milestone * add logic for structure milestone inversion * small followup fixes * upgrade window text changes * new debug button * lower max scroll distance to match the star * add startup cost * some startup cost fixes * primitive item insertion window
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java211
-rw-r--r--src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java20
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java30
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java10
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java40
-rw-r--r--src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java10
-rw-r--r--src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java50
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java5101
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java5429
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeofGodsStructureString.java2933
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java1362
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java274
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java149
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java41
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java49
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java62
-rw-r--r--src/main/java/com/github/technus/tectech/util/GodforgeMath.java209
-rw-r--r--src/main/java/com/github/technus/tectech/util/TT_Utility.java8
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.pngbin0 -> 597 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png.mcmeta5
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.pngbin0 -> 5153 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta1
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/SCREEN_OFF.pngbin0 -> 1041 bytes
-rw-r--r--src/main/resources/assets/tectech/lang/en_US.lang156
-rw-r--r--src/main/resources/assets/tectech/textures/gui/background/space.pngbin0 -> 15406 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/background/white_glow.pngbin0 -> 18002 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/overlay_button/battery_off.pngbin0 -> 380 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/overlay_button/battery_on.pngbin0 -> 386 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/overlay_button/cyclic_blue.pngbin0 -> 723 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/overlay_button/flag.pngbin0 -> 228 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/gorge_logo.pngbin0 -> 1043 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst.pngbin0 -> 1527 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst_glow.pngbin0 -> 2215 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_charge.pngbin0 -> 1274 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_charge_glow.pngbin0 -> 2379 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_composition.pngbin0 -> 1566 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_composition_glow.pngbin0 -> 3506 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion.pngbin0 -> 1454 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion_glow.pngbin0 -> 2544 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/overlay_blue.pngbin0 -> 120 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/overlay_green.pngbin0 -> 120 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/overlay_orange.pngbin0 -> 120 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/picture/overlay_purple.pngbin0 -> 120 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_plasma.pngbin0 -> 356 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_background.pngbin0 -> 520 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue.pngbin0 -> 1502 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue_inverted.pngbin0 -> 1500 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple.pngbin0 -> 1509 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple_inverted.pngbin0 -> 1501 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow.pngbin0 -> 1414 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow_inverted.pngbin0 -> 1411 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red.pngbin0 -> 1471 bytes
-rw-r--r--src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red_inverted.pngbin0 -> 1467 bytes
53 files changed, 12657 insertions, 3493 deletions
diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java b/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java
index ca5f719aa8..28d6867696 100644
--- a/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java
+++ b/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java
@@ -1,11 +1,13 @@
package com.github.technus.tectech.loader.recipe;
+import static com.github.technus.tectech.util.GodforgeMath.getRandomIntInRange;
import static gregtech.api.enums.Mods.GTPlusPlus;
import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -13,7 +15,9 @@ import net.minecraftforge.fluids.FluidStack;
import com.github.technus.tectech.recipe.TT_recipeAdder;
import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
import gregtech.api.enums.TierEU;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.material.ELEMENT;
public class Godforge implements Runnable {
@@ -23,7 +27,11 @@ public class Godforge implements Runnable {
public static final HashMap<ItemStack, Integer> exoticModulePlasmaItemMap = new HashMap<>();
public static final HashMap<FluidStack, Integer> exoticModulePlasmaFluidMap = new HashMap<>();
public static final HashMap<ItemStack, Integer> exoticModuleMagmatterItemMap = new HashMap<>();
- public static final HashMap<FluidStack, Integer> exoticModuleMagmatterFluidMap = new HashMap<>();
+ public static final List<ItemStack> quarkGluonFluidItemsForNEI = new ArrayList<>();
+ public static final List<ItemStack> quarkGluonItemsForNEI = new ArrayList<>();
+ public static final List<ItemStack> magmatterTimeFluidItemsForNEI = new ArrayList<>();
+ public static final List<ItemStack> magmatterSpaceFluidItemsForNEI = new ArrayList<>();
+ public static final List<ItemStack> magmatterItemsForNEI = new ArrayList<>();
@Override
public void run() {
@@ -34,9 +42,75 @@ public class Godforge implements Runnable {
// Fusion tier 1-3
{
// Single step
- ItemStack[] solids_t0_1step = { Materials.Aluminium.getDust(1), Materials.Iron.getDust(1) };
+ ItemStack[] solids_t0_1step = { Materials.Aluminium.getDust(1), Materials.Iron.getDust(1),
+ Materials.Calcium.getDust(1), Materials.Sulfur.getDust(1), Materials.Zinc.getDust(1),
+ Materials.Niobium.getDust(1), Materials.Tin.getDust(1), Materials.Titanium.getDust(1),
+ Materials.Nickel.getDust(1), Materials.Silver.getDust(1), Materials.Americium.getDust(1),
+ Materials.Antimony.getDust(1), Materials.Ardite.getDust(1), Materials.Arsenic.getDust(1),
+ Materials.Barium.getDust(1), Materials.Beryllium.getDust(1), Materials.Caesium.getDust(1),
+ Materials.Cadmium.getDust(1), Materials.Carbon.getDust(1), Materials.Cerium.getDust(1),
+ Materials.Cobalt.getDust(1), Materials.Copper.getDust(1), Materials.Desh.getDust(1),
+ Materials.Dysprosium.getDust(1), Materials.Erbium.getDust(1), Materials.Europium.getDust(1),
+ Materials.Gadolinium.getDust(1), Materials.Gallium.getDust(1), Materials.Gold.getDust(1),
+ Materials.Holmium.getDust(1), Materials.Indium.getDust(1), Materials.Lanthanum.getDust(1),
+ Materials.Lithium.getDust(1), Materials.Lutetium.getDust(1), Materials.Magnesium.getDust(1),
+ Materials.Manganese.getDust(1), Materials.MeteoricIron.getDust(1),
+ Materials.Molybdenum.getDust(1), Materials.Neodymium.getDust(1),
+ Materials.Oriharukon.getDust(1), Materials.Palladium.getDust(1),
+ Materials.Phosphorus.getDust(1), Materials.Potassium.getDust(1),
+ Materials.Praseodymium.getDust(1), Materials.Promethium.getDust(1),
+ Materials.Rubidium.getDust(1), Materials.Samarium.getDust(1), Materials.Silicon.getDust(1),
+ Materials.Sodium.getDust(1), Materials.Strontium.getDust(1), Materials.Tantalum.getDust(1),
+ Materials.Tellurium.getDust(1), Materials.Terbium.getDust(1), Materials.Thulium.getDust(1),
+ Materials.Tungsten.getDust(1), Materials.Uranium.getDust(1),
+ Materials.Uranium235.getDust(1), Materials.Vanadium.getDust(1),
+ Materials.Ytterbium.getDust(1), Materials.Yttrium.getDust(1),
+ ELEMENT.getInstance().ZIRCONIUM.getDust(1), ELEMENT.getInstance().THORIUM232.getDust(1),
+ ELEMENT.getInstance().GERMANIUM.getDust(1), ELEMENT.getInstance().THALLIUM.getDust(1),
+ ELEMENT.getInstance().RUTHENIUM.getDust(1), ELEMENT.getInstance().RHENIUM.getDust(1),
+ ELEMENT.getInstance().RHODIUM.getDust(1), ELEMENT.getInstance().IODINE.getDust(1),
+ ELEMENT.getInstance().HAFNIUM.getDust(1), ELEMENT.getInstance().CURIUM.getDust(1) };
FluidStack[] solid_plasmas_t0_1step = { Materials.Aluminium.getPlasma(144),
- Materials.Iron.getPlasma(144) };
+ Materials.Iron.getPlasma(144), Materials.Calcium.getPlasma(144),
+ Materials.Sulfur.getPlasma(144), Materials.Zinc.getPlasma(144),
+ Materials.Niobium.getPlasma(144), Materials.Tin.getPlasma(144),
+ Materials.Titanium.getPlasma(144), Materials.Nickel.getPlasma(144),
+ Materials.Silver.getPlasma(144), Materials.Americium.getPlasma(144),
+ Materials.Antimony.getPlasma(144), Materials.Ardite.getPlasma(144),
+ Materials.Arsenic.getPlasma(144), Materials.Barium.getPlasma(144),
+ Materials.Beryllium.getPlasma(144), Materials.Caesium.getPlasma(144),
+ Materials.Cadmium.getPlasma(144), Materials.Carbon.getPlasma(144),
+ Materials.Cerium.getPlasma(144), Materials.Cobalt.getPlasma(144),
+ Materials.Copper.getPlasma(144), Materials.Desh.getPlasma(144),
+ Materials.Dysprosium.getPlasma(144), Materials.Erbium.getPlasma(144),
+ Materials.Europium.getPlasma(144), Materials.Gadolinium.getPlasma(144),
+ Materials.Gallium.getPlasma(144), Materials.Gold.getPlasma(144),
+ Materials.Holmium.getPlasma(144), Materials.Indium.getPlasma(144),
+ Materials.Lanthanum.getPlasma(144), Materials.Lithium.getPlasma(144),
+ Materials.Lutetium.getPlasma(144), Materials.Magnesium.getPlasma(144),
+ Materials.Manganese.getPlasma(144), Materials.MeteoricIron.getPlasma(144),
+ Materials.Molybdenum.getPlasma(144), Materials.Neodymium.getPlasma(144),
+ Materials.Oriharukon.getPlasma(144), Materials.Palladium.getPlasma(144),
+ Materials.Phosphorus.getPlasma(144), Materials.Potassium.getPlasma(144),
+ Materials.Praseodymium.getPlasma(144), Materials.Promethium.getPlasma(144),
+ Materials.Rubidium.getPlasma(144), Materials.Samarium.getPlasma(144),
+ Materials.Silicon.getPlasma(144), Materials.Sodium.getPlasma(144),
+ Materials.Strontium.getPlasma(144), Materials.Tantalum.getPlasma(144),
+ Materials.Tellurium.getPlasma(144), Materials.Terbium.getPlasma(144),
+ Materials.Thulium.getPlasma(144), Materials.Tungsten.getPlasma(144),
+ Materials.Uranium.getPlasma(144), Materials.Uranium235.getPlasma(144),
+ Materials.Vanadium.getPlasma(144), Materials.Ytterbium.getPlasma(144),
+ Materials.Yttrium.getPlasma(144),
+ new FluidStack(ELEMENT.getInstance().ZIRCONIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().THORIUM232.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().GERMANIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().THALLIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().RUTHENIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().RHENIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().RHODIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().IODINE.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().HAFNIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.getInstance().CURIUM.getPlasma(), 144) };
for (int i = 0; i < solids_t0_1step.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
@@ -50,16 +124,30 @@ public class Godforge implements Runnable {
// Multi-step
ItemStack[] solids_t0_xstep = { Materials.Force.getDust(1), Materials.Bismuth.getDust(1),
- ELEMENT.STANDALONE.ADVANCED_NITINOL.getDust(1) };
+ ELEMENT.STANDALONE.ADVANCED_NITINOL.getDust(1), Materials.Boron.getDust(1),
+ ELEMENT.STANDALONE.ASTRAL_TITANIUM.getDust(1), ELEMENT.STANDALONE.RUNITE.getDust(1),
+ ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getDust(1), Materials.Iridium.getDust(1),
+ Materials.Naquadah.getDust(1), Materials.Osmium.getDust(1), Materials.Platinum.getDust(1),
+ Materials.Plutonium.getDust(1), ELEMENT.getInstance().CALIFORNIUM.getDust(1),
+ Materials.Chrome.getDust(1) };
FluidStack[] solid_plasmas_t0_xstep = { new FluidStack(ELEMENT.STANDALONE.FORCE.getPlasma(), 144),
Materials.Bismuth.getPlasma(144),
- new FluidStack(ELEMENT.STANDALONE.ADVANCED_NITINOL.getPlasma(), 144) };
+ new FluidStack(ELEMENT.STANDALONE.ADVANCED_NITINOL.getPlasma(), 144),
+ Materials.Boron.getPlasma(144),
+ new FluidStack(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 144),
+ new FluidStack(ELEMENT.STANDALONE.RUNITE.getPlasma(), 144),
+ new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 144),
+ Materials.Iridium.getPlasma(144), Materials.Naquadah.getPlasma(144),
+ Materials.Osmium.getPlasma(144), Materials.Platinum.getPlasma(144),
+ Materials.Plutonium.getPlasma(144),
+ new FluidStack(ELEMENT.getInstance().CALIFORNIUM.getPlasma(), 144),
+ Materials.Chrome.getPlasma(144), };
for (int i = 0; i < solids_t0_xstep.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
new ItemStack[] { solids_t0_xstep[i] },
new FluidStack[] { solid_plasmas_t0_xstep[i] },
- 1 * SECONDS,
+ 3 * SECONDS,
(int) TierEU.RECIPE_MAX,
true,
0);
@@ -68,14 +156,16 @@ public class Godforge implements Runnable {
// Fusion tier 4-5
{
// Single step
- ItemStack[] solids_t1_1step = { Materials.Lead.getDust(1) };
- FluidStack[] solid_plasmas_t1_1step = { Materials.Lead.getPlasma(144) };
+ ItemStack[] solids_t1_1step = { Materials.Lead.getDust(1), Materials.Plutonium241.getDust(1),
+ Materials.Thorium.getDust(1) };
+ FluidStack[] solid_plasmas_t1_1step = { Materials.Lead.getPlasma(144),
+ Materials.Plutonium241.getPlasma(144), Materials.Thorium.getPlasma(144) };
for (int i = 0; i < solids_t1_1step.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
new ItemStack[] { solids_t1_1step[i] },
new FluidStack[] { solid_plasmas_t1_1step[i] },
- 1 * SECONDS,
+ 5 * SECONDS,
(int) TierEU.RECIPE_MAX,
false,
1);
@@ -92,7 +182,7 @@ public class Godforge implements Runnable {
TT_recipeAdder.addFOGPlasmaRecipe(
new ItemStack[] { solids_t1_xstep[i] },
new FluidStack[] { solid_plasmas_t1_xstep[i] },
- 1 * SECONDS,
+ 7 * SECONDS,
(int) TierEU.RECIPE_MAX,
true,
1);
@@ -101,15 +191,21 @@ public class Godforge implements Runnable {
// Exotic Plasmas
{
// Single step
- ItemStack[] solids_t2_1step = { ELEMENT.STANDALONE.RHUGNOR.getDust(1) };
- FluidStack[] solid_plasmas_t2_1step = {
- new FluidStack(ELEMENT.STANDALONE.RHUGNOR.getPlasma(), 144) };
+ ItemStack[] solids_t2_1step = { ELEMENT.STANDALONE.RHUGNOR.getDust(1),
+ ELEMENT.STANDALONE.DRAGON_METAL.getDust(1), ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getDust(1),
+ Materials.CosmicNeutronium.getDust(1), Materials.Draconium.getDust(1),
+ Materials.DraconiumAwakened.getDust(1), Materials.Ichorium.getDust(1) };
+ FluidStack[] solid_plasmas_t2_1step = { new FluidStack(ELEMENT.STANDALONE.RHUGNOR.getPlasma(), 144),
+ new FluidStack(ELEMENT.STANDALONE.DRAGON_METAL.getPlasma(), 144),
+ new FluidStack(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlasma(), 144),
+ Materials.CosmicNeutronium.getPlasma(144), Materials.Draconium.getPlasma(144),
+ Materials.DraconiumAwakened.getPlasma(144), Materials.Ichorium.getPlasma(144) };
for (int i = 0; i < solids_t2_1step.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
new ItemStack[] { solids_t2_1step[i] },
new FluidStack[] { solid_plasmas_t2_1step[i] },
- 1 * SECONDS,
+ 15 * SECONDS,
(int) TierEU.RECIPE_MAX,
false,
2);
@@ -117,15 +213,17 @@ public class Godforge implements Runnable {
// Multi-step
ItemStack[] solids_t2_xstep = { ELEMENT.STANDALONE.HYPOGEN.getDust(1),
- Materials.Tritanium.getDust(1) };
+ Materials.Tritanium.getDust(1), Materials.Flerovium.getDust(1),
+ Materials.Neutronium.getDust(1), };
FluidStack[] solid_plasmas_t2_xstep = { new FluidStack(ELEMENT.STANDALONE.HYPOGEN.getPlasma(), 144),
- Materials.Tritanium.getPlasma(144) };
+ Materials.Tritanium.getPlasma(144), Materials.Flerovium.getPlasma(144),
+ Materials.Neutronium.getPlasma(144), };
for (int i = 0; i < solids_t2_xstep.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
new ItemStack[] { solids_t2_xstep[i] },
new FluidStack[] { solid_plasmas_t2_xstep[i] },
- 1 * SECONDS,
+ 25 * SECONDS,
(int) TierEU.RECIPE_MAX,
true,
2);
@@ -140,8 +238,17 @@ public class Godforge implements Runnable {
// Fusion tier 1-3
{
// Single step
- FluidStack[] fluids_t0_1step = { Materials.Helium.getGas(1000) };
- FluidStack[] fluid_plasmas_t0_1step = { Materials.Helium.getPlasma(1000) };
+ FluidStack[] fluids_t0_1step = { Materials.Helium.getGas(1000), Materials.Nitrogen.getGas(1000),
+ Materials.Argon.getGas(1000), Materials.Chlorine.getGas(1000),
+ Materials.Deuterium.getGas(1000), Materials.Fluorine.getGas(1000),
+ Materials.Hydrogen.getGas(1000), Materials.Radon.getGas(1000),
+ Materials.Tritium.getGas(1000), Materials.Mercury.getFluid(1000) };
+ FluidStack[] fluid_plasmas_t0_1step = { Materials.Helium.getPlasma(1000),
+ Materials.Nitrogen.getPlasma(1000), Materials.Argon.getPlasma(1000),
+ Materials.Chlorine.getPlasma(1000), Materials.Deuterium.getPlasma(1000),
+ Materials.Fluorine.getPlasma(1000), Materials.Hydrogen.getPlasma(1000),
+ Materials.Radon.getPlasma(1000), Materials.Tritium.getPlasma(1000),
+ Materials.Mercury.getPlasma(1000) };
for (int i = 0; i < fluids_t0_1step.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
@@ -154,15 +261,20 @@ public class Godforge implements Runnable {
}
// Multi-step
- FluidStack[] fluids_t0_xstep = { ELEMENT.getInstance().NEON.getFluidStack(1000) };
+ FluidStack[] fluids_t0_xstep = { ELEMENT.getInstance().NEON.getFluidStack(1000),
+ Materials.Oxygen.getGas(1000), ELEMENT.getInstance().KRYPTON.getFluidStack(1000),
+ ELEMENT.getInstance().XENON.getFluidStack(1000) };
FluidStack[] fluid_plasmas_t0_xstep = {
- new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 1000) };
+ new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 1000),
+ Materials.Oxygen.getPlasma(1000),
+ new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 1000),
+ new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 1000) };
for (int i = 0; i < fluids_t0_xstep.length; i++) {
TT_recipeAdder.addFOGPlasmaRecipe(
new FluidStack[] { fluids_t0_xstep[i] },
new FluidStack[] { fluid_plasmas_t0_xstep[i] },
- 1 * SECONDS,
+ 3 * SECONDS,
(int) TierEU.RECIPE_MAX,
true,
0);
@@ -185,11 +297,17 @@ public class Godforge implements Runnable {
// Exotic module fake recipes
{
TT_recipeAdder.addFOGExoticFakeRecipe(
- new Object[] { Materials.Iron.getDust(1), Materials.Bismuth.getDust(1),
- Materials.Tritanium.getDust(1) },
- new Object[] { Materials.Helium.getGas(1000), ELEMENT.getInstance().NEON.getFluidStack(1000),
- ELEMENT.getInstance().XENON.getFluidStack(1000) },
- new FluidStack[] { Materials.Titanium.getMolten(1000) },
+ new ItemStack[] { Materials.Iron.getDust(1) },
+ new FluidStack[] { Materials.Iron.getMolten(1) },
+ new FluidStack[] { MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000) },
+ 10 * SECONDS,
+ (int) TierEU.RECIPE_MAX,
+ 1);
+
+ TT_recipeAdder.addFOGExoticFakeRecipe(
+ new ItemStack[] { Materials.Iron.getDust(1) },
+ new FluidStack[] { Materials.Iron.getMolten(1), Materials.Bismuth.getMolten(1) },
+ new FluidStack[] { MaterialsUEVplus.MagMatter.getMolten(144) },
10 * SECONDS,
(int) TierEU.RECIPE_MAX,
1);
@@ -280,8 +398,7 @@ public class Godforge implements Runnable {
Materials.Vanadium,
Materials.Ytterbium,
Materials.Yttrium,
- Materials.Zinc,
- Materials.Flerovium));
+ Materials.Zinc));
plasmaGTWeightList.addAll(
Arrays.asList(
@@ -365,8 +482,7 @@ public class Godforge implements Runnable {
6000 /* Vanadium */,
2000 /* Ytterbium */,
6000 /* Yttrium */,
- 6000 /* Zinc */,
- 1000 /* Flerovium */ ));
+ 6000 /* Zinc */));
// GT++ materials
if (GTPlusPlus.isModLoaded()) {
@@ -405,24 +521,41 @@ public class Godforge implements Runnable {
}
}
- // Magmatter maps
- exoticModuleMagmatterItemMap.putAll(exoticModulePlasmaItemMap);
- exoticModuleMagmatterFluidMap.putAll(exoticModulePlasmaFluidMap);
-
+ // Magmatter map
// GT materials
exoticModuleMagmatterItemMap.put(Materials.CosmicNeutronium.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.Draconium.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.DraconiumAwakened.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.Ichorium.getDustTiny(1), 100000);
exoticModuleMagmatterItemMap.put(Materials.Neutronium.getDustTiny(1), 100000);
+ exoticModuleMagmatterItemMap.put(Materials.Flerovium.getDustTiny(1), 100000);
// GT++ materials
if (GTPlusPlus.isModLoaded()) {
exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getTinyDust(1), 100000);
- exoticModuleMagmatterFluidMap.put(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(1), 100000);
- exoticModuleMagmatterFluidMap.put(ELEMENT.STANDALONE.RHUGNOR.getFluidStack(1), 100000);
- exoticModuleMagmatterFluidMap.put(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(1), 100000);
- exoticModuleMagmatterFluidMap.put(ELEMENT.STANDALONE.DRAGON_METAL.getFluidStack(1), 100000);
+ exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.HYPOGEN.getTinyDust(1), 100000);
+ exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.RHUGNOR.getTinyDust(1), 100000);
+ exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getTinyDust(1), 100000);
+ exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.DRAGON_METAL.getTinyDust(1), 100000);
+ }
+
+ // For NEI
+ for (FluidStack fluid : exoticModulePlasmaFluidMap.keySet()) {
+ fluid.amount = getRandomIntInRange(1, 64);
+ quarkGluonFluidItemsForNEI.add(GT_Utility.getFluidDisplayStack(fluid, true));
+ }
+ for (ItemStack item : exoticModulePlasmaItemMap.keySet()) {
+ item.stackSize = getRandomIntInRange(1, 64);
+ quarkGluonItemsForNEI.add(item);
+ }
+ for (int i = 0; i < 21; i++) {
+ magmatterTimeFluidItemsForNEI.add(
+ GT_Utility.getFluidDisplayStack(MaterialsUEVplus.Time.getMolten(getRandomIntInRange(1, 50)), true));
+ magmatterSpaceFluidItemsForNEI.add(
+ GT_Utility.getFluidDisplayStack(
+ MaterialsUEVplus.Space.getMolten(getRandomIntInRange(51, 100)),
+ true));
}
+ magmatterItemsForNEI.addAll(exoticModuleMagmatterItemMap.keySet());
}
}
diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java
index ee4f8dbfd5..b40de4fe31 100644
--- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java
+++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java
@@ -2041,19 +2041,25 @@ public class MachineLoader implements Runnable {
new GT_MetaTileEntity_EM_ForgeOfGods(15411, "multimachine.em.forge_of_gods", "Forge of the Gods")
.getStackForm(1L));
Machine_Multi_SmeltingModule.set(
- new GT_MetaTileEntity_EM_SmeltingModule(15412, "multimachine.em.smelting_module", "Smelting Module")
- .getStackForm(1L));
+ new GT_MetaTileEntity_EM_SmeltingModule(
+ 15412,
+ "multimachine.em.smelting_module",
+ "Helioflare Power Forge").getStackForm(1L));
Machine_Multi_MoltenModule.set(
- new GT_MetaTileEntity_EM_MoltenModule(15413, "multimachine.em.molten_module", "Molten Module")
- .getStackForm(1L));
+ new GT_MetaTileEntity_EM_MoltenModule(
+ 15413,
+ "multimachine.em.molten_module",
+ "Helioflux Melting Core").getStackForm(1L));
Machine_Multi_PlasmaModule.set(
- new GT_MetaTileEntity_EM_PlasmaModule(15414, "multimachine.em.plasma_module", "Plasma Module")
- .getStackForm(1L));
+ new GT_MetaTileEntity_EM_PlasmaModule(
+ 15414,
+ "multimachine.em.plasma_module",
+ "Heliothermal Plasma Fabricator").getStackForm(1L));
Machine_Multi_QuarkGluonPlasmaModule.set(
new GT_MetaTileEntity_EM_ExoticModule(
15415,
"multimachine.em.exotic_module",
- "Exotic Matter Module").getStackForm(1L));
+ "Heliofusion Exoticizer").getStackForm(1L));
}
// ===================================================================================================
diff --git a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java
index 1f19fc00c4..50f0738fa4 100644
--- a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java
+++ b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java
@@ -1,5 +1,10 @@
package com.github.technus.tectech.recipe;
+import static com.github.technus.tectech.loader.recipe.Godforge.magmatterItemsForNEI;
+import static com.github.technus.tectech.loader.recipe.Godforge.magmatterSpaceFluidItemsForNEI;
+import static com.github.technus.tectech.loader.recipe.Godforge.magmatterTimeFluidItemsForNEI;
+import static com.github.technus.tectech.loader.recipe.Godforge.quarkGluonFluidItemsForNEI;
+import static com.github.technus.tectech.loader.recipe.Godforge.quarkGluonItemsForNEI;
import static gregtech.api.util.GT_Utility.trans;
import java.util.Collections;
@@ -7,13 +12,19 @@ import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault;
+import com.github.technus.tectech.thing.gui.TecTechUITextures;
import com.gtnewhorizons.modularui.api.math.Pos2d;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import codechicken.nei.PositionedStack;
+import gregtech.api.enums.MaterialsUEVplus;
import gregtech.api.recipe.BasicUIPropertiesBuilder;
import gregtech.api.recipe.NEIRecipePropertiesBuilder;
import gregtech.api.recipe.RecipeMapFrontend;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.MethodsReturnNonnullByDefault;
+import gregtech.nei.GT_NEI_DefaultHandler;
import gregtech.nei.RecipeDisplayInfo;
@ParametersAreNonnullByDefault
@@ -26,6 +37,25 @@ public class GodforgeExoticFrontend extends RecipeMapFrontend {
}
@Override
+ public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) {
+ builder.widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO).setSize(18, 18)
+ .setPos(new Pos2d(151, 63).add(windowOffset)));
+ }
+
+ @Override
+ public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) {
+ if (neiCachedRecipe.mRecipe.mFluidOutputs[0].equals(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000))) {
+ neiCachedRecipe.mInputs.set(0, new PositionedStack(quarkGluonItemsForNEI, 48, 23, true));
+ neiCachedRecipe.mInputs.set(1, new PositionedStack(quarkGluonFluidItemsForNEI, 48, 52, true));
+ } else {
+ neiCachedRecipe.mInputs.set(0, new PositionedStack(magmatterItemsForNEI, 48, 23, true));
+ neiCachedRecipe.mInputs.set(1, new PositionedStack(magmatterSpaceFluidItemsForNEI, 30, 52, true));
+ neiCachedRecipe.mInputs.set(2, new PositionedStack(magmatterTimeFluidItemsForNEI, 48, 52, true));
+ }
+ }
+
+ @Override
public List<Pos2d> getItemInputPositions(int itemInputCount) {
return Collections.singletonList(new Pos2d(52, 33));
}
diff --git a/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java b/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java
index bf8fcc5e8a..e96bd19bc4 100644
--- a/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java
+++ b/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java
@@ -8,7 +8,10 @@ import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault;
+import com.github.technus.tectech.thing.gui.TecTechUITextures;
import com.gtnewhorizons.modularui.api.math.Pos2d;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import gregtech.api.recipe.BasicUIPropertiesBuilder;
import gregtech.api.recipe.NEIRecipePropertiesBuilder;
@@ -27,6 +30,13 @@ public class GodforgePlasmaFrontend extends RecipeMapFrontend {
}
@Override
+ public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) {
+ builder.widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO).setSize(18, 18)
+ .setPos(new Pos2d(151, 63).add(windowOffset)));
+ }
+
+ @Override
public List<Pos2d> getItemInputPositions(int itemInputCount) {
return Collections.singletonList(new Pos2d(52, 33));
}
diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java
index a12a645799..59881af676 100644
--- a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java
+++ b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java
@@ -266,51 +266,19 @@ public class TT_recipeAdder extends GT_RecipeAdder {
return true;
}
- public static boolean addFOGExoticFakeRecipe(Object[] itemInputs, Object[] fluidInputs, FluidStack[] fluidOutputs,
- int machineDuration, int machineEUt, int recipeTier) {
-
- if (itemInputs == null) {
- itemInputs = nullItem;
- }
-
- if (fluidInputs == null) {
- fluidInputs = nullFluid;
- }
-
- ItemStack[] inputItems = new ItemStack[itemInputs.length];
- ItemStack[][] itemAlts = new ItemStack[itemInputs.length][];
- for (int i = 0; i < itemInputs.length; i++) {
- Object obj = itemInputs[i];
- if (obj instanceof ItemStack) {
- inputItems[i] = (ItemStack) obj;
- itemAlts[i] = null;
- } else if (obj instanceof ItemStack[]stacks) {
- if (stacks.length > 0) {
- inputItems[i] = stacks[0];
- itemAlts[i] = Arrays.copyOf(stacks, stacks.length);
- }
- }
- }
-
- FluidStack[] inputFluids = new FluidStack[fluidInputs.length];
- for (int i = 0; i < fluidInputs.length; i++) {
- Object obj = fluidInputs[i];
- if (obj instanceof FluidStack[]stacks) {
- inputFluids[i] = stacks[0];
- }
- }
+ public static boolean addFOGExoticFakeRecipe(ItemStack[] itemInputs, FluidStack[] fluidInputs,
+ FluidStack[] fluidOutputs, int machineDuration, int machineEUt, int recipeTier) {
TecTechRecipeMaps.godforgeExoticMatterRecipes.addFakeRecipe(
false,
- inputItems,
+ itemInputs,
null,
null,
- inputFluids,
+ fluidInputs,
fluidOutputs,
machineDuration,
machineEUt,
recipeTier,
- itemAlts,
false);
return true;
}
diff --git a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java
index a115f0cc9f..858c71549e 100644
--- a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java
+++ b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java
@@ -48,11 +48,11 @@ public class TecTechRecipeMaps {
.neiHandlerInfo(builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_Research.get(1))).build();
public static final RecipeMap<RecipeMapBackend> godforgePlasmaRecipes = RecipeMapBuilder.of("gt.recipe.fog_plasma")
- .maxIO(1, 1, 1, 1).progressBar(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP, ProgressBar.Direction.RIGHT)
- .progressBarPos(86, 44).neiTransferRect(86, 44, 20, 20).frontend(GodforgePlasmaFrontend::new).build();
+ .maxIO(1, 1, 1, 1).progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT)
+ .progressBarPos(78, 33).neiTransferRect(78, 33, 20, 20).frontend(GodforgePlasmaFrontend::new).build();
public static final RecipeMap<RecipeMapBackend> godforgeExoticMatterRecipes = RecipeMapBuilder
- .of("gt.recipe.fog_exotic").maxIO(1, 1, 1, 1)
- .progressBar(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP, ProgressBar.Direction.RIGHT)
- .progressBarPos(86, 44).neiTransferRect(86, 44, 20, 20).frontend(GodforgeExoticFrontend::new).build();
+ .of("gt.recipe.fog_exotic").maxIO(1, 1, 2, 1)
+ .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT)
+ .progressBarPos(78, 33).neiTransferRect(78, 33, 20, 20).frontend(GodforgeExoticFrontend::new).build();
}
diff --git a/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java b/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java
index 9c475345bb..befb880db9 100644
--- a/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java
+++ b/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java
@@ -22,6 +22,8 @@ public class TecTechUITextures {
public static final UITexture BACKGROUND_GLOW_PURPLE = UITexture.fullImage(MODID, "gui/background/purple_glow");
public static final UITexture BACKGROUND_GLOW_BLUE = UITexture.fullImage(MODID, "gui/background/blue_glow");
public static final UITexture BACKGROUND_GLOW_GREEN = UITexture.fullImage(MODID, "gui/background/green_glow");
+ public static final UITexture BACKGROUND_GLOW_WHITE = UITexture.fullImage(MODID, "gui/background/white_glow");
+ public static final UITexture BACKGROUND_SPACE = UITexture.fullImage(MODID, "gui/background/space");
public static final UITexture BUTTON_STANDARD_16x16 = UITexture.fullImage(MODID, "gui/button/standard_16x16");
public static final UITexture BUTTON_STANDARD_LIGHT_16x16 = UITexture
@@ -69,6 +71,12 @@ public class TecTechUITextures {
.fullImage(MODID, "gui/overlay_button/parametrizer_if");
public static final UITexture OVERLAY_BUTTON_ARROW_BLUE_UP = UITexture
.fullImage(MODID, "gui/overlay_button/arrow_blue_up");
+ public static final UITexture OVERLAY_BUTTON_BATTERY_ON = UITexture
+ .fullImage(MODID, "gui/overlay_button/battery_on");
+ public static final UITexture OVERLAY_BUTTON_BATTERY_OFF = UITexture
+ .fullImage(MODID, "gui/overlay_button/battery_off");
+ public static final UITexture OVERLAY_BUTTON_FLAG = UITexture.fullImage(MODID, "gui/overlay_button/flag");
+ public static final UITexture OVERLAY_CYCLIC_BLUE = UITexture.fullImage(MODID, "gui/overlay_button/cyclic_blue");
public static final UITexture OVERLAY_SLOT_RACK = UITexture.fullImage(MODID, "gui/overlay_slot/rack");
public static final UITexture OVERLAY_SLOT_MESH = UITexture.fullImage(MODID, "gui/overlay_slot/mesh");
@@ -79,10 +87,31 @@ public class TecTechUITextures {
.fullImage(MODID, "gui/progressbar/research_station_2");
public static final UITexture PROGRESSBAR_RESEARCH_STATION_3 = UITexture
.fullImage(MODID, "gui/progressbar/research_station_3");
+ public static final UITexture PROGRESSBAR_GODFORGE_PLASMA = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_plasma");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_background");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_red");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue_inverted");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_red_inverted");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple_inverted");
+ public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED = UITexture
+ .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow_inverted");
public static final UITexture PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo");
public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture
.fullImage(MODID, "gui/picture/tectech_logo_dark");
+ public static final UITexture PICTURE_GODFORGE_LOGO = UITexture.fullImage(MODID, "gui/picture/gorge_logo");
public static final UITexture PICTURE_RACK_LARGE = UITexture.fullImage(MODID, "gui/picture/rack_large");
public static final UITexture PICTURE_HEAT_SINK = UITexture.fullImage(MODID, "gui/picture/heat_sink");
public static final UITexture PICTURE_UNCERTAINTY_MONITOR = UITexture
@@ -123,4 +152,25 @@ public class TecTechUITextures {
public static final UITexture PICTURE_UPGRADE_CONNECTOR_SWITCH = UITexture
.fullImage(MODID, "gui/picture/connector_switch");
public static final UITexture SLOT_OUTLINE_GREEN = UITexture.fullImage(MODID, "gui/picture/green_selector");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE = UITexture
+ .fullImage(MODID, "gui/picture/milestone_charge");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION = UITexture
+ .fullImage(MODID, "gui/picture/milestone_conversion");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST = UITexture
+ .fullImage(MODID, "gui/picture/milestone_catalyst");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION = UITexture
+ .fullImage(MODID, "gui/picture/milestone_composition");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW = UITexture
+ .fullImage(MODID, "gui/picture/milestone_charge_glow");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW = UITexture
+ .fullImage(MODID, "gui/picture/milestone_conversion_glow");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW = UITexture
+ .fullImage(MODID, "gui/picture/milestone_catalyst_glow");
+ public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW = UITexture
+ .fullImage(MODID, "gui/picture/milestone_composition_glow");
+ public static final UITexture PICTURE_OVERLAY_BLUE = UITexture.fullImage(MODID, "gui/picture/overlay_blue");
+ public static final UITexture PICTURE_OVERLAY_ORANGE = UITexture.fullImage(MODID, "gui/picture/overlay_orange");
+ public static final UITexture PICTURE_OVERLAY_GREEN = UITexture.fullImage(MODID, "gui/picture/overlay_green");
+ public static final UITexture PICTURE_OVERLAY_PURPLE = UITexture.fullImage(MODID, "gui/picture/overlay_purple");
+
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java
new file mode 100644
index 0000000000..878a8e539e
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java
@@ -0,0 +1,5101 @@
+package com.github.technus.tectech.thing.metaTileEntity.multi;
+
+public abstract class ForgeOfGodsRingsStructureString {
+
+ public static final String[][] SECOND_RING = { {
+
+ " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC CCBB ",
+ " BBEC CEBB ",
+ " BEEC CEEB ",
+ " EEC CEE ",
+ " EC CE ",
+ " EC CCCCC CE ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " EC CCCCC CE ",
+ " EC CE ",
+ " EEC CEE ",
+ " BEEC CEEB ",
+ " BBEC CEBB ",
+ " BBCC CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC D CCBB ",
+ " BBEC D CEBB ",
+ " BBBEEC DD CEEBBB ",
+ " EEEEC D CEEEE ",
+ " EEEC DD CEEE ",
+ " EEEC CCCCC CEEE ",
+ " EEC CHHHHHC CEE ",
+ " EEC CHHHHHHHC CEE ",
+ " EEC CHHHHHHHC CEE ",
+ " EEC CHHHHHHHC CEE ",
+ " EEC CHHHHHHHC CEE ",
+ " EEC CHHHHHHHC CEE ",
+ " EEC CHHHHHC CEE ",
+ " EEEC CCCCC CEEE ",
+ " EEEC DD CEEE ",
+ " EEEEC D CEEEE ",
+ " BBBEEC DD CEEBBB ",
+ " BBEC D CEBB ",
+ " BBCC D CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC CCBB ",
+ " BBEC CEBB ",
+ " BBBEEC CEEBBB ",
+ " BBBBEEEEC CEEEEBBBB ",
+ " EEEEEEEC CEEEEEEE ",
+ " EEEEEEEC CCCCC CEEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEEC CCCCC CEEEEEEE ",
+ " EEEEEEEC CEEEEEEE ",
+ " BBBBEEEEC CEEEEBBBB ",
+ " BBBEEC CEEBBB ",
+ " BBEC CEBB ",
+ " BBCC CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BBBBEEE EEEBBBB ",
+ " BBBEEEEEEE EEEEEEEBBB ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " EEEEEEEKKK KKKEEEEEEE ",
+ " EEEEEEEKKK KKKEEEEEEE ",
+ " EEEEEEEKKK KKKEEEEEEE ",
+ " EEEEEEEKKK KKKEEEEEEE ",
+ " EEEEEEEKKK KKKEEEEEEE ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " BBBEEEEEEE EEEEEEEBBB ",
+ " BBBBEEE EEEBBBB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BBBBBEEEE EEEEBBBBB ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " BBBBBEEEE EEEEBBBBB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " BBBEEEEE EEEEEBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEKK KKEEEEEE ",
+ " EEEEEEKK KKEEEEEE ",
+ " EEEEEEKK KKEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBEEEEE EEEEEBBB ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BBBBBEEE EEEBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEKKK KKKEEEEE ",
+ " EEEEEKKK KKKEEEEE ",
+ " EEEEEKKK KKKEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBEEE EEEBBBBB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BBEEEE EEEEBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBEEEE EEEEBB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BBBBEE EEBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBEE EEBBBB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEKK KKEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BEEEE EEEEB ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " BEEEE EEEEB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BBEEE EEEBB ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " BBEEE EEEBB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " BBBBE EBBBB ",
+ " EEEEE EEEEE ",
+ " EEEKK KKEEE ",
+ " EEEEE EEEEE ",
+ " BBBBE EBBBB ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEK KEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEK KEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEK KEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEKK KKEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEKK KKEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEK KEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEKK KKEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBB BBBBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEKKK KKKEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBBBB BBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBB BBBBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEKK KKEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBBBB BBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBB BBBBBBBBB ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " EEEEEKKKK KKKKEEEEE ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " BBBBBBBBB BBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBB BBBBBBBBBBBB ",
+ " EEEEEEEEEEEE EEEEEEEEEEEE ",
+ " EEEEEEEKKKKK KKKKKEEEEEEE ",
+ " EEEEEEEEEEEE EEEEEEEEEEEE ",
+ " BBBBBBBBBBBB BBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEKKKKKKKKKKKKKKKEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " } };
+
+ public static final String[][] THIRD_RING = {
+ { " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBBEC CEBBB ",
+ " EEEC CEEE ",
+ " EEC CEE ",
+ " EEC CCCCC CEE ",
+ " EC CC CC CE ",
+ " EC C C CE ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " EC C C CE ",
+ " EC CC CC CE ",
+ " EEC CCCCC CEE ",
+ " EEC CEE ",
+ " EEEC CEEE ",
+ " BBBEC CEBBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCCD CCBB ",
+ " BBBEC DD CEBBB ",
+ " BBBEEEC D CEEEBBB ",
+ " EEEEEC DD CEEEEE ",
+ " EEEEEC DCCCCC CEEEEE ",
+ " EEEEC CCHHHHHCC CEEEE ",
+ " EEEEC CHHHHHHHHHC CEEEE ",
+ " EEEC CHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHHHC CEEE ",
+ " EEEC CHHHHHHHHHC CEEE ",
+ " EEEEC CHHHHHHHHHC CEEEE ",
+ " EEEEC CCHHHHHCC CEEEE ",
+ " EEEEEC CCCCCD CEEEEE ",
+ " EEEEEC DD CEEEEE ",
+ " BBBEEEC D CEEEBBB ",
+ " BBBEC DD CEBBB ",
+ " BBCC DCCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " BBBBBBB ",
+ " BBCCCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBBEC CEBBB ",
+ " BBBBEEEC CEEEBBBB ",
+ " BEEEEEEC CEEEEEEB ",
+ " EEEEEEEC CCCCC CEEEEEEE ",
+ " EEEEEEC CC CC CEEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEC C C CEEEEE ",
+ " EEEEEEC C C CEEEEEE ",
+ " EEEEEEC CC CC CEEEEEE ",
+ " EEEEEEEC CCCCC CEEEEEEE ",
+ " BEEEEEEC CEEEEEEB ",
+ " BBBBEEEC CEEEBBBB ",
+ " BBBEC CEBBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCCCBB ",
+ " BBBBBBB " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BBBBEEEE EEEEBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEII IIEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBEEEE EEEEBBBB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BBBBBEE EEBBBBB ",
+ " BEEEEEEE EEEEEEEB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BEEEEEEE EEEEEEEB ",
+ " BBBBBEE EEBBBBB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BBEEEE EEEEBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBEEEE EEEEBB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " BBBBBE EBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBE EBBBBB ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BBEEE EEEBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEII IIEEE ",
+ " EEEII IIEEE ",
+ " EEEII IIEEE ",
+ " EEEII IIEEE ",
+ " EEEII IIEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBEEE EEEBB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BEEE EEEB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BEEE EEEB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " BBBE EBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBE EBBB ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI EEEE ",
+ " EEEI IEEE ",
+ " EEEI EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEI IEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEI IEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEI IEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEII IIEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEI IEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEII IIEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBB BBBBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEIII IIIEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBBBB BBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBB BBBBBBBBB ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " EEEEEEIII IIIEEEEEE ",
+ " EEEEEEEEE EEEEEEEEE ",
+ " BBBBBBBBB BBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBB BBBBBBBBBBB ",
+ " EEEEEEEEEEE EEEEEEEEEEE ",
+ " EEEEEEIIIII IIIIIEEEEEE ",
+ " EEEEEEEEEEE EEEEEEEEEEE ",
+ " BBBBBBBBBBB BBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEIIIIIIIIIIIIIEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " } };
+
+}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java
new file mode 100644
index 0000000000..0f9a15c60d
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java
@@ -0,0 +1,5429 @@
+package com.github.technus.tectech.thing.metaTileEntity.multi;
+
+public abstract class ForgeOfGodsStructureString {
+
+ public static final String[][] MAIN_STRUCTURE = { {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BB BB ",
+ " B DDD DDD B ",
+ " DDFD DFDD ",
+ " DDADD DDADD ",
+ " DFDD DDFD ",
+ " DDD DDD ",
+ " ",
+ " ",
+ " ",
+ " DDD DDD ",
+ " DFDD DDFD ",
+ " DDADD DDADD ",
+ " DDFD DFDD ",
+ " B DDD DDD B ",
+ " BB BB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BEEBBBBB BBBBBEEB ",
+ " BEEEECCCCBCCCCEEEEB ",
+ " BEEECEE CFC EECEEEB ",
+ " BECEEE CFC EEECEB ",
+ " BCEE CFC EECB ",
+ " BCEE CCCFC EECB ",
+ " BC CFFCCFC CB ",
+ " BCCCCFCCFCFCCCCCB ",
+ " BFFFCCF~FCCFFFB ",
+ " BCCCCCFCFCCFCCCCB ",
+ " BC CFCCFFC CB ",
+ " BCEE CFCCC EECB ",
+ " BCEE CFC EECB ",
+ " BECEEE CFC EEECEB ",
+ " BEEECEE CFC EECEEEB ",
+ " BEEEECCCCBCCCCEEEEB ",
+ " BEEBBBBB BBBBBEEB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BBEEBBB BBBEEBB ",
+ " BEEEEEEB BEEEEEEB ",
+ " BEEDDDDDBBBBBDDDDDEEB ",
+ " BEEDEE EEDEEB ",
+ " BEDE EDEB ",
+ " BED DEB ",
+ " BED DEB ",
+ " BB BB ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " BB BB ",
+ " BED DEB ",
+ " BED DEB ",
+ " BEDE EDEB ",
+ " BEEDEE EEDEEB ",
+ " BEEDDDDDBBBBBDDDDDEEB ",
+ " BEEEEEEB BEEEEEEB ",
+ " BBEEBBB BBBEEBB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BEEEEB BEEEEB ",
+ " BEEDDBBB BBBDDEEB ",
+ " BED DEB ",
+ " BED DEB ",
+ " BB BB ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " BB BB ",
+ " BED DEB ",
+ " BED DEB ",
+ " BEEDDBBB BBBDDEEB ",
+ " BEEEEB BEEEEB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BEEBB BBEEB ",
+ " BBB BEB ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " BEB BEB ",
+ " BEBBB BBEEB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " J ",
+ " BEEEEEB ",
+ " EEE EEE ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " JE EJ ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " EEE EEE ",
+ " BEEEEEB ",
+ " J " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " J ",
+ " BEEEEEB ",
+ " EEE EEE ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " JE EJ ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " EEE EEE ",
+ " BEEEEEB ",
+ " J " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " J ",
+ " BEEEEEB ",
+ " EEEE EEE ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " JE EJ ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " EEE EEE ",
+ " BEEEEEB ",
+ " J " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " J ",
+ " BEEEEEB ",
+ " EEE EEE ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " JE EJ ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " EE EE ",
+ " E E ",
+ " EEE EEE ",
+ " BEEEEEB ",
+ " J " },
+ { " ",
+ " BEEEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEEEB ",
+ " " },
+ { " ",
+ " BEEEB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " E E ",
+ " E E ",
+ " E E ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BEEEB ",
+ " " },
+ { " ",
+ " BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " B B ",
+ " B B ",
+ " B B ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB ",
+ " BBCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " EEC CEE ",
+ " EC CE ",
+ " EC CE ",
+ " C CCC C ",
+ " C C C C ",
+ " C C C C ",
+ " C C C C ",
+ " C CCC C ",
+ " EC CE ",
+ " EC CE ",
+ " EEC CEE ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCBB ",
+ " BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB ",
+ " BBCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBBEEC CEEBBB ",
+ " BBEEEEC DDCEEEEBB ",
+ " EEEEEEC DDD CEEEEEE ",
+ " EEEEEC CCCDD CEEEEE ",
+ " EEEEEC CHHHC CEEEEE ",
+ " EEEEEC CHHHC CEEEEE ",
+ " EEEEEC CHHHC CEEEEE ",
+ " EEEEEC DDCCC CEEEEE ",
+ " EEEEEEC DDD CEEEEEE ",
+ " BBEEEECDD CEEEEBB ",
+ " BBBEEC CEEBBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCBB ",
+ " BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB ",
+ " BBCCCCCBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBBEEC CEEBBB ",
+ " BBBBEEEEC CEEEEBBBB ",
+ " BBEEEEEEEEC CEEEEEEEEBB ",
+ " EEEEEEEEEC CCC CEEEEEEEEE ",
+ " EEEEEEEEEC C C CEEEEEEEEE ",
+ " EEEEEEEEEC C C CEEEEEEEEE ",
+ " EEEEEEEEEC C C CEEEEEEEEE ",
+ " EEEEEEEEEC CCC CEEEEEEEEE ",
+ " BBEEEEEEEEC CEEEEEEEEBB ",
+ " BBBBEEEEC CEEEEBBBB ",
+ " BBBEEC CEEBBB ",
+ " BBCC CCBB ",
+ " BBCC CCBB ",
+ " BBCCCCCBB ",
+ " BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " BBBBEEEE EEEEBBBB ",
+ " BBBBBEEEEEEEE EEEEEEEEBBBBB ",
+ " EEEEEEEEEEEEE EEEEEEEEEEEEE ",
+ " EEEEEEEEEGGGG GGGGEEEEEEEEE ",
+ " EEEEEEEGGGGGG GGGGGGEEEEEEE ",
+ " EEEEEEEEEGGGG GGGGEEEEEEEEE ",
+ " EEEEEEEEEEEEE EEEEEEEEEEEEE ",
+ " BBBBBEEEEEEEE EEEEEEEEBBBBB ",
+ " BBBBEEEE EEEEBBBB ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BB BB ",
+ " BBBBBEE EEBBBBB ",
+ " BBBEEEEEEE EEEEEEEBBB ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " EEEEEEGGGG GGGGEEEEEE ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " BBBEEEEEEE EEEEEEEBBB ",
+ " BBBBBEE EEBBBBB ",
+ " BB BB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " BBBBBEEE EEEBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEGGG GGGEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBEEE EEEBBBBB ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBB BBBBBBB ",
+ " EEEEEEE EEEEEEE ",
+ " EEEEEGG GGEEEEE ",
+ " EEEEEEE EEEEEEE ",
+ " BBBBBBB BBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBB BBBBBBB ",
+ " EEEEEEE EEEEEEE ",
+ " EEEEGGG GGGEEEE ",
+ " EEEEEEE EEEEEEE ",
+ " BBBBBBB BBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEGG GGEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEGG GGEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ "BBB BBB",
+ "EEE EEE",
+ "EEG GEE",
+ "EEE EEE",
+ "BBB BBB",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBB BBB ",
+ " EEE EEE ",
+ " EEG GEE ",
+ " EEE EEE ",
+ " BBB BBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBB BBBB ",
+ " EEEE EEEE ",
+ " EEEG GEEE ",
+ " EEEE EEEE ",
+ " BBBB BBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEGG GGEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEGG GGEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBB BBBBB ",
+ " EEEEE EEEEE ",
+ " EEEEG GEEEE ",
+ " EEEEE EEEEE ",
+ " BBBBB BBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBB BBBBBB ",
+ " EEEEEE EEEEEE ",
+ " EEEEGG GGEEEE ",
+ " EEEEEE EEEEEE ",
+ " BBBBBB BBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBB BBBBBBB ",
+ " EEEEEEE EEEEEEE ",
+ " EEEEGGG GGGEEEE ",
+ " EEEEEEE EEEEEEE ",
+ " BBBBBBB BBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBB BBBBBBB ",
+ " EEEEEEE EEEEEEE ",
+ " EEEEEGG GGEEEEE ",
+ " EEEEEEE EEEEEEE ",
+ " BBBBBBB BBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBB BBBBBBBB ",
+ " EEEEEEEE EEEEEEEE ",
+ " EEEEEGGG GGGEEEEE ",
+ " EEEEEEEE EEEEEEEE ",
+ " BBBBBBBB BBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBB BBBBBBBBBB ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " EEEEEEGGGG GGGGEEEEEE ",
+ " EEEEEEEEEE EEEEEEEEEE ",
+ " BBBBBBBBBB BBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBB BBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEE EEEEEEEEEEEEE ",
+ " EEEEEEEGGGGGG GGGGGGEEEEEEE ",
+ " EEEEEEEEEEEEE EEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBB BBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEGGGGGGGGGGGGGGGEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " },
+ { " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " BBBBBBBBBBBBBBB ",
+ " EEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEE ",
+ " EEEEEEEEEEEEEEE ",
+ " BBBBBBBBBBBBBBB ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " " } };
+}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeofGodsStructureString.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeofGodsStructureString.java
deleted file mode 100644
index 7dde3ab5b7..0000000000
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeofGodsStructureString.java
+++ /dev/null
@@ -1,2933 +0,0 @@
-package com.github.technus.tectech.thing.metaTileEntity.multi;
-
-public abstract class ForgeofGodsStructureString {
-
- @SuppressWarnings("SpellCheckingInspection")
- public static final String[][] godForge = {
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CC ",
- " CCCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCCCC ",
- " CCCCCCC ",
- " CCCDDCCC ",
- " CC DDDCC ",
- " CCCDDDCC ",
- " CCCCCCC ",
- " CCCCCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCCC CCC ",
- " CCCDDDD CC ",
- " CCDDDDDD C ",
- " CCDDDDDDDCC ",
- " C DDDDDDDC ",
- " CCDDDDDDDCC ",
- " CCDDDDDDCC ",
- " C DDDD C ",
- " CC DD CC ",
- " CCCCCC ",
- " CC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " CC CCC ",
- " CC DDDDDCC ",
- " C DDDDDDDCC ",
- " C DDDDDDDDCC ",
- " CCDDDDDDDD C ",
- " CCDDDDDDDDCC ",
- " CCDDDDDDDDC ",
- " C DDDDDDDC ",
- " CCDDDDDDDC ",
- " CCDDDDD C ",
- " C DDDDC ",
- " CC CC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " CCCC ",
- " CCCCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCCCC ",
- " CCDDDDDCC ",
- " C DDDDDDDCC ",
- " CDDDDDDDD CC ",
- " CCDDDDDDDD C ",
- " CCDDDDDDDDCC ",
- " CCDDDDDDDDCC ",
- " CC DDDDDD C ",
- " CCDDDDDDDCC ",
- " C DDDDDD C ",
- " CCDDDDDD C ",
- " CDDDDDDC ",
- " C DDDDCC ",
- " CC DDCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " CCCC ",
- " CCCCCC ",
- " CCCCCCCC ",
- " CCCCCCCC ",
- " CCCDDDCCCC ",
- " CCCDDDDCCC ",
- " CCDDDDDDCCC ",
- " CCDDDDDD CCC ",
- " CC DDDDDDCCCC ",
- " CCCDDDDDDDCCCC ",
- " CCC DDDDDDCCCCC ",
- " CCCC DDDCCCCCC ",
- " CCCCCCCCCCCC ",
- " CCCCCCCCC ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " C DDDCCC ",
- " CDDDDDD C ",
- " C DDDDDDDCC ",
- " C DDDDDDDCC ",
- " CC DDDDDDCCC ",
- " CCCC DDCCCCC ",
- " CCCCCCCCCC ",
- " CCCCCCCCC ",
- " CC DDD CC ",
- " CCDDDDD C ",
- " CCDDDDDDC ",
- " C DDDDDDC ",
- " C DDDDDC ",
- " CCDDDD C ",
- " C DDCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCC ",
- " CCCCCC ",
- " CCCCCCC ",
- " CCCDD CC ",
- " CCDDDDCC ",
- " CCDDDDD CC ",
- " CCDDDDDDD C ",
- " CCDDDDDDD CC ",
- " C DDDDDDDD C ",
- " CDDDDDDDDDDCC ",
- " CCDDDDDDDDDD CC ",
- " CCDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDD CCC ",
- " CC DDDDDDDDDDDDDCCCC ",
- " CC DDDDDDDDDDDCCCC ",
- " CCC DDDDDDD CCCC ",
- " CCCCCCCCCCCC ",
- " CCCCC ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCCC ",
- " CDDDDDCC ",
- " CDDDDDD C ",
- " C DDDDDD C ",
- " CCDDDDDDCC ",
- " CCCC CCCC ",
- " CCCCC ",
- " ",
- " ",
- " CCCCCC ",
- " CCCC CC ",
- " CCDDD C ",
- " CCDDDDDC ",
- " CDDDDDDC ",
- " CDDDDDC ",
- " CDDDD C ",
- " C DDCC ",
- " CCCC ",
- " ",
- " C ",
- " CCCCC ",
- " CCCCCC ",
- " CCC CCC ",
- " CCDDDDCC ",
- " CCDDDDD C ",
- " CDDDDDD C ",
- " C DDDDDD C ",
- " CCDDDDDDDDC ",
- " CDDDDDDDDDCC ",
- " C DDDDDDDDD C ",
- " C DDDDDDDDDDCC ",
- " CDDDDDDDDDDD C ",
- " CDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDCCC ",
- " CDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDD CCCC ",
- " CCDDDDDDDDDDDDDDDDDDCCCC ",
- " C DDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDDDDCCCC ",
- " CC DDDDDDDDDDDDDDCCCC ",
- " CCC DDDDDDDDDDCCCC ",
- " CCCCCC CCCCC ",
- " CC ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " C DD CC ",
- " CCDDDDD C ",
- " CDDDDDD C ",
- " C DDDDD CC ",
- " CCCDD CCC ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCCC ",
- " C DDDC ",
- " CDDDDDC ",
- " C DDDDDC ",
- " CDDDDDC ",
- " CDDDDC ",
- " CCCC CCD C ",
- " CCCCC CC ",
- " CCC CC ",
- " C DDD C ",
- " CDDDDD C ",
- " CDDDDDD C ",
- " C DDDDDD C ",
- " C DDDDDDD C ",
- " CDDDDDDDD C ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDD C ",
- " C DDDDDDDDD C ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDDDDCC ",
- " C DDDDDDDDDDDDCC ",
- " C DDDDDDDDDDDD CC ",
- " CDDDDDDDDDDDDDDDCC ",
- " C DDDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDDDDDCCCCC ",
- " CCDDDDDDDDDDDDDDDDDDDD CCCC ",
- " CDDDDDDDDDDDDDDDDDDDDDD CCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDCCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDD CCC ",
- " CCCCDDDDDDDDD CCC ",
- " CCCCCCCCCCC ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " C DDDCC ",
- " CDDDDD C ",
- " CDDDDDDCC ",
- " CCDDDDDCC ",
- " CCCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CCDDDC ",
- " CCC C DDDDC ",
- " CCCCC CDDDDDC ",
- " CCCCCC CDDDDDC ",
- " C DDDCC CDDDDC ",
- " CDDDDDC CCCCC ",
- " CDDDDDDC ",
- " CDDDDDD C ",
- " CDDDDDDD C ",
- " CDDDDDDDDC ",
- " C DDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " C DDDDDDDDDDDCC ",
- " CDDDDDDDDDDDD C ",
- " CDDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDDDDCCC ",
- " CDDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDDDDCCCCCCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDD CCCCC ",
- " CDDDDDDDDDDDDDDDDDDDDDDDDDD CCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDDDDDDDD CC ",
- " CCCDDDDDDDDDDDDD CC ",
- " CCCCCCC CCCCCC ",
- " C " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CDDDDDC ",
- " CDDDDD C ",
- " CDDDDDDC ",
- " CDDDDCC ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCCCCC CCCC ",
- " CCDD C CCDDDC ",
- " C DDD C C DDDDC ",
- " CDDDDD C CDDDD C ",
- " CDDDDDDC CDDDDDC ",
- " CDDDDDDDC CDDDCB ",
- " CDDDDDDD C CCCCB ",
- " CDDDDDDDDC BB ",
- " CDDDDDDDDDC ",
- " CDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDDD C ",
- " C DDDDDDDDDDDC ",
- " CDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDD C ",
- " CDDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDDDCCCCC ",
- " C DDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDD CC ",
- " CC DDDDDDDDDDDDDDDDDDD CC ",
- " CCC DDDDDDDDDDDDDD CC ",
- " CCCCCDDDDDDDCCCC ",
- " CCCCCCC " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " BBCCCCC ",
- " BC DDDDC ",
- " BCDDDDD C ",
- " C DDDD C ",
- " CCDD C ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCCC ",
- " CCCCC ",
- " CCDDD C ",
- " C DDDD C ",
- " CDDDDDDC CCCC ",
- " CDDDDDD C C DDDC ",
- " CDDDDDDDC CDDDDDC ",
- " CDDDDDDDDC CDDDDC ",
- " CDDDDDDDDC CDDDDCB ",
- " CDDDDDDDDDC C D CB ",
- " CDDDDDDDDC CCCBB ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " C DDDDDDDDDDCC ",
- " C DDDDDDDDDD C ",
- " C DDDDDDDDDD CC ",
- " C DDDDDDDDDDD C ",
- " C DDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDCCCCC CCC ",
- " C DDDDDDDDDDDDDDDD CCCCCCCCCCCC CCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CC DDDDDDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDCCC ",
- " CCCCCDDDDDDD CCC ",
- " CCCCCCCC " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " BB C ",
- " BBCCDCCC ",
- " BC DDDD C ",
- " CDDDDDDC ",
- " CDDDD C ",
- " CCC CC ",
- " C ",
- " ",
- " ",
- " CC ",
- " CCCCC ",
- " CCC CC ",
- " C DDD C ",
- " CDDDDDC ",
- " CDDDDDDC ",
- " C DDDDDDC ",
- " C DDDDDDDC CCC ",
- " C DDDDDDDC C D C ",
- " CDDDDDDD C CDDDDC ",
- " CDDDDDDDDC CDDDDC ",
- " CDDDDDDDDC CDDDDDC ",
- " CDDDDDDDDDC CDDDCB ",
- " CDDDDDDDDDC CCCCBB ",
- " CDDDDDDDDDC B ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " C DDDDDDDD C ",
- " C DDDDDDDD C ",
- " CDDDDDDDDDCC ",
- " CDDDDDDDDDCC ",
- " CDDDDDDDDDCC ",
- " C DDDDDDDDCC ",
- " C DDDDDDDDCCC ",
- " CCDDDDDDDD CCC ",
- " CC DDDDDDDDDCCCCC CCCCCCCCCCC ",
- " CCDDDDDDDDDDD CCCCCCCCCCCCDDDDDDDDDCCC ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCC DDDDDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDCCC ",
- " CCCCCDDDDDDCCCC ",
- " CCCCCC " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " BB CC ",
- " BBCCDDCC ",
- " BCDDDD C ",
- " CDDDDDC ",
- " CDDDD C ",
- " CCCCC ",
- " ",
- " CCC ",
- " CCCCC ",
- " CC DCC ",
- " C DDD C ",
- " CDDDDDC ",
- " C DDDDD C ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC CCCC ",
- " CDDDDDDDDDC CDDDC ",
- " C DDDDDDDDC C DDDDC ",
- " CDDDDDDDDC CDDDDC ",
- " CDDDDDDDDDC CDDDDC ",
- " C DDDDDDDDC CDD CB ",
- " CDDDDDDDDC CCCBBB ",
- " CDDDDDDDDDC BB ",
- " CDDDDDDDDC ",
- " C DDDDDDD C ",
- " C DDDDDDDC ",
- " CDDDDDDD C ",
- " CDDDDDDDCC ",
- " C DDDDDCC ",
- " C DDDDDCC ",
- " CCDDDDCCC ",
- " CCC DCCCC ",
- " CCCCCCCCC ",
- " CCCCCCCCC CCCCCCCCC ",
- " CCCCCCCCCC CCCC DDDDDDCCC ",
- " CCCCCCCCCCCCCC CCCCCCCCDDDDDDDDDDDDCC ",
- " CCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDC ",
- " CCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDC ",
- " CCCCDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDDDDDDDCC ",
- " CCC DDDDDDDDDDDDDDDDDCC ",
- " CCC DDDDDDDDDDDDDCC ",
- " CCCCCC CCCCCC ",
- " CC " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " BB ",
- " BBB CCC ",
- " BBBC D C ",
- " CDDDDDC ",
- " CDDDDDC ",
- " C DDDDC ",
- " CCC CCCCC ",
- " CCCCC ",
- " CC D CC ",
- " C DDD C ",
- " C DDDDDC ",
- " CDDDDDD C ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC CCCC ",
- " C DDDDDDDDC CDDD C ",
- " CDDDDDDDDC CDDDDC ",
- " CDDDDDDDDC CDDDDC ",
- " CDDDDDDD C CDDDC ",
- " CDDDDDDDDC CCCCC B ",
- " CDDDDDDDC BBB ",
- " C DDDDDDCC B ",
- " C DDDDDCC ",
- " C DDDDCC ",
- " CCDDDCCC ",
- " CCCCCCC ",
- " CCCCCC ",
- " CCCCCC ",
- " CCCC ",
- " CC CC ",
- " CCCCCCCC ",
- " CCCDDDDDDCC ",
- " CCCCDDDDDDDDD C ",
- " CCC DDDDDDDDDDDD C ",
- " CCCCCDDDDDDDDDDDDDDDDCC ",
- " CCCCCCCCDDDDDDDDDDDDDDDDDDDC ",
- " CCCCCCCDDDDDDDDDDDDDDDDDDDDC ",
- " CCCCCDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCCCDDDDDDDDDDDDDDDDDDC ",
- " CCCCDDDDDDDDDDDDDDDCC ",
- " CCCC DDDDDDDDDCCC ",
- " CCCCCCCCCCC ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " B ",
- " BB ",
- " BBB CC ",
- " CCDDCC ",
- " CDDDDC ",
- " CC CDDDDC ",
- " CCCC CDDDDC ",
- " C D CC CCCC ",
- " C DDDDC ",
- " CDDDDDC ",
- " CDDDDDD C ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- "C DDDDDDDC ",
- "CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC CC ",
- " CDDDDDDDC CDDCC ",
- " CDDDDDDDC CDDDDC ",
- " CDDDDDD C CDDDDC ",
- " CDDDDDD C CDDDC ",
- " CDDDDD C C DDC BB ",
- " CCDDDDCC CCC BB ",
- " CC DDCC BB ",
- " CCCCCC ",
- " CCCCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " CCC ",
- " CCC CCC ",
- " CCCDDDDD CC ",
- " CCDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDDDC ",
- " CCCDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDDC ",
- " CCCCDDDDDDDDDDDDDDDDDC ",
- " CCCCDDDDDDDDDDDDDDDDDC ",
- " CCC DDDDDDDDDDDDDDCC ",
- " CCC DDDDDDDDDDDCC ",
- " CCC DDDDCCCC ",
- " CCCCCC ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " BB ",
- " BBB ",
- " BBB C ",
- " C CCDCC ",
- " CCCCC CDDDD C ",
- " CC CC CDDDDDC ",
- " CCDDDDCC C DDD C ",
- " CDDDDD C CCCCC ",
- " C DDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDD C ",
- " CDDDDDDD C ",
- " CDDDDDDD C ",
- " CDDDDDD C ",
- " CDDDDDD C CCCC ",
- " CDDDDD C CDDDC ",
- " C DDDDCC CDDDDC ",
- " CCDD CC CDDDDC ",
- " CCCCCC CDDDC ",
- " CCCC CCCC BB ",
- " CCC BB ",
- " BB ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CC CCC ",
- " CCDDDDDDCC ",
- " CCDDDDDDDD C ",
- " CCDDDDDDDDDD C ",
- " CCDDDDDDDDDDDD C ",
- " CC DDDDDDDDDDDDDC ",
- " C DDDDDDDDDDDDDD C ",
- " CC DDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDCC ",
- " CCCCDDDDDDDDDDDCC ",
- " CCCC DDDDDD CC ",
- " CCCCCCCCCC ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " B ",
- " BBBB ",
- " BBBB ",
- " CCCC CC ",
- " CC CCC C CC ",
- " C DDD C CDDDDC ",
- " C DDDDDC CDDDDC ",
- " CDDDDDDC CDDDDC ",
- " CDDDDDDDC CCCCC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- "CDDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " C DDDDDDC ",
- " CDDDDDDC ",
- " C DDDD C ",
- " C DDDCC CCC ",
- " CCC CCC C DDC ",
- " CCCCC CDDDDC ",
- " CCC CDDDDC ",
- " CDDDDC ",
- " CDDC ",
- " CC BB ",
- " BBB ",
- " BBB ",
- " ",
- " ",
- " CCCCCC ",
- " CC DDDCC ",
- " CC DDDDDDC ",
- " C DDDDDDDDC ",
- " CCDDDDDDDDDDC ",
- " C DDDDDDDDDD C ",
- " CCDDDDDDDDDDDDC ",
- " C DDDDDDDDDDDD C ",
- " CC DDDDDDDDDDDDDC ",
- " CCCDDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDDC ",
- " CCCDDDDDDDDDDDCC ",
- " CCCDDDDDDDDCC ",
- " CCCCCCCCCC ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " B ",
- " BB ",
- " CCC BBB ",
- " CCCCC BBB ",
- " C DDDCC CCCCCC ",
- " CDDDDD C CCCCC CCCCCC ",
- " C DDDDDDC CDDD C CCCCCCCC ",
- " CDDDDDDDC CDDDDDC CCCCCC ",
- " CDDDDDDDDC C DDD C CCCCC ",
- " CDDDDDDDDC CCDCC CCCC ",
- " CDDDDDDDDC C CCCC ",
- " CDDDDDDDDC CCC ",
- " CDDDDDDDDC C ",
- "CDDDDDDDDC ",
- "C DDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDD C ",
- " CDDDDD C ",
- " C DDDDC ",
- " C DDCC ",
- " CCCCCC ",
- " CCCC ",
- " C CCCC ",
- " CDDD C ",
- " CDDDDC ",
- " CDDDDC ",
- " C DD C ",
- " CCCC B ",
- " BBB ",
- " BBB ",
- " BCCC ",
- " CCCCCC ",
- " CCDDDD C ",
- " CDDDDDDDCC ",
- " CCDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " CCDDDDDDDDDDD C ",
- " C DDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDC ",
- " CCCDDDDDDDDD C ",
- " CCCDDDDDDD CC ",
- " CCCC CCCC ",
- " CCCC ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " C BB ",
- " CCCCCBB ",
- " C DDCCBB ",
- " CDDDDDCC ",
- " CDDDDDD C CAAAFCC ",
- " C DDDDDD C CCCC CCCC DDDDCCC ",
- " CDDDDDDD C C DDDC CCCCCC DDDDD CC ",
- " CDDDDDDDC CDDDDC CCCCCCCCCDDDD C ",
- " CDDDDDDDDC CDDDDC CCDDD C ",
- " CDDDDDDDDC CDDCC C DD C ",
- " CDDDDDDDDC CC C DD C ",
- " CDDDDDDDDC C DDC ",
- " CDDDDDDDDC CCDCC ",
- " CDDDDDDDC CCCC ",
- " CDDDDDDDC CCC ",
- " CDDDDDDDC CCC ",
- " CDDDDDD C CC ",
- " C DDDDDC CC ",
- " C DDD C ",
- " CC D CC ",
- " CCCCC ",
- " CCC ",
- " ",
- " ",
- " CCCC ",
- " C DD C ",
- " CDDDDC ",
- " CDDDDC ",
- " CDDDDC ",
- " CCCC ",
- " BBC ",
- " BCCCCC ",
- " CC DDCC ",
- " C DDDDDCC ",
- " CDDDDDDDCC ",
- " CCDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " C DDDDDDDDDD C ",
- " C DDDDDDDDDDDC ",
- " CCDDDDDDDDDDDC ",
- " CDDDDDDDDDDD C ",
- " CCDDDDDDDDDD C ",
- " CCDDDDDDDDDCC ",
- " CCDDDDDDDCC ",
- " CCCC CCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CC CCCB ",
- " C DDDDCB ",
- " CDDDDDDCC ",
- " CDDDDDDD C ",
- " CDDDDDDDC CCAAAACC ",
- " CDDDDDDDDC CCCC CCDDDDDDDDCCC ",
- " CDDDDDDDDC CDDD C C DDDDDDDDDDD C ",
- " CDDDDDDDDDC CDDDDC CCC CCCEEEECDDDDCC ",
- " CDDDDDDDDDC CDDDDC CCCCC EEEEE DD C ",
- " CDDDDDDDDC C DDC CC EE DD C ",
- " CDDDDDDDDC CCC EE DD C ",
- " CDDDDDDDDC E DDC ",
- " CDDDDDDDC EDDDC ",
- " CDDDDDDDC ECDDC ",
- " C DDDDD C EDDDC ",
- " CDDDDDC CDDC ",
- " C DDD C CDDC ",
- " CCC CC C DC ",
- " CCCCC CCC ",
- " CCC CCC ",
- " CCC ",
- " CC ",
- " ",
- " ",
- " CC ",
- " C C ",
- " CDDDDC ",
- " CDDDDC ",
- " CDDDDC ",
- " CDDC CCCC ",
- " CC CC CCC ",
- " C DDD C ",
- " CDDDDDDC ",
- " CCDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " CDDDDDDDDDD C ",
- " CCDDDDDDDDD C ",
- " CCDDDDDDDDCC ",
- " CCDDDDDD C ",
- " CCCC CCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCCCC ",
- " C DDDCC ",
- " C DDDDDCC ",
- " C DDDDDDCC ",
- " CDDDDDDDC ",
- " CDDDDDDDDC ",
- " C DDDDDDDDC CCAAAAC ",
- " CDDDDDDDDDC CCC CCCDDDCCCCCC ",
- " CDDDDDDDDC CDDDCB C DDDDDCCCCCCCC ",
- " CDDDDDDDDC CDDDDC BBCDDDDCCECC CCCCCCC ",
- " CDDDDDDDDDC CDDDDC CDDDCEEE CCCC ",
- " CDDDDDDDDC CDDDC CC CE CCCC ",
- " CDDDDDDDDC CCC CCCC CCCC ",
- " C DDDDDDC CC CCCC ",
- " C DDDDDDC CCCC ",
- " CDDDDDC CCDC ",
- " C DDD C ECD C ",
- " CC CC ECDDC ",
- " CCCCC EEDDC ",
- " C EDDC ",
- " EDDC ",
- " CDDC ",
- " C DCB ",
- " C DCBB ",
- " CCCC BB ",
- " CCC BB ",
- " CC BB ",
- " CCCC ",
- " C DDDC ",
- " CDDDDC CCC ",
- " CDDDDC CCCCCC ",
- " C DD C C DDDCC ",
- " CCCC C DDDDDC ",
- " C DDDDDDC ",
- " C DDDDDDDC ",
- " C DDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " C DDDDDDDD C ",
- " C DDDDDDDCC ",
- " CCDDDDD C ",
- " CCCC CCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CC CCCC ",
- " CCDDDDDCC ",
- " C DDDDDDCC ",
- " CDDDDDDD C ",
- " CDDDDDDDDC ",
- " C DDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDC CCCCCC ",
- " CDDDDDDDDDC CCC BB CCCCC ",
- " CDDDDDDDD C CDD CBBBBBBCCCCCCC ",
- " CDDDDDDDDC CDDDDCBBBBCCDDDCC ",
- " CDDDDDDD C CDDDDC C DDDCC ",
- " CDDDDDDDC CDDDC CDDDEE ",
- " CDDDDDD C CCCC CDDDEE ",
- " CDDDDD C CD CE ",
- " CCDDDDC CCCC ",
- " CC CCC CCC C ",
- " CCCCC CC CC ",
- " C CC ",
- " CCC ",
- " CCC ",
- " ECDC ",
- " E DCB ",
- " EDDCB ",
- " EEDDCBB ",
- " ECDDCBB ",
- " C D C BB ",
- " CDDC BBB ",
- " CCCC BCC CC ",
- " CCCC CCDDC CCCCC ",
- " CCC CDDDDC CC D CC ",
- " CDDDDC C DDDD C ",
- " CDDDDC C DDDDDDC ",
- " CCCC CDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CCDDDDDDDDC ",
- " CCDDDDDDDC ",
- " CCCDDDDCC ",
- " CCCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CC DD CC ",
- " C DDDDD C ",
- " CDDDDDDD C ",
- " CDDDDDDDD C ",
- " C DDDDDDDD C ",
- " CDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDC C ",
- " CDDDDDDDD C CCDCCB ",
- " CDDDDDDDDC CDDDDCB CCCC ",
- " C DDDDDDC CDDDDC CCCC ",
- " C DDDDD C CDDDDC CDDC ",
- " CDDDD C C DC CDD C ",
- " CC CC CC CDDDE ",
- " CCCC CDDCE ",
- " C C DDE ",
- " C DCE ",
- " CCCC ",
- " CCC ",
- " CCC ",
- " C C ",
- " CCC ",
- " CCC ",
- " CCCC ",
- " ECD C ",
- " EDD C C ",
- " ECDDC CCCC ",
- " EDDDC CC CC CC ",
- " C DDC CD C C DDDDC ",
- " CDDC CDDDDC C DDDDD C ",
- " CCCC CDDDDC CDDDDDD C ",
- " CCCC CDDDDC CDDDDDDDDC ",
- " CCDCC C DDDDDDDDC ",
- " C CDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " C DDDDDDDD C ",
- " C DDDDDDDDC ",
- " C DDDDDDDC ",
- " C DDDDD C ",
- " CC DD CC ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " C ",
- " CCCCCC ",
- " CCDDDDCCC ",
- " CDDDDDDDCC ",
- " CDDDDDDDDCC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDC CCCC ",
- " CDDDDDD C CDDDDC ",
- " C DDDD C CDDDDC ",
- " CC D CC CDDDDC CCC ",
- " CCCCC CDDCC CCCC ",
- " CC CCB CCCC ",
- " BB CDDC ",
- " BB C DCC ",
- " B CDDCE ",
- " BBCDDEE ",
- " BCDDE ",
- " CD E ",
- " CDCE ",
- " CCC ",
- " CCC ",
- " CC C ",
- " CC CC CCCCC ",
- " C CCC CCC CC ",
- " CCCC CDDDDCC ",
- " EC DC C DDDDDC ",
- " EEDDDC CCCC C DDDDDDC ",
- " EEDDDC CDDDC CDDDDDDDC ",
- " CCDDD C CDDDDC C DDDDDDDC ",
- " CCDDDCCBBBBCDDDDC CDDDDDDDDC ",
- " CCCCCCCBBB BC DDC C DDDDDDDDC ",
- " CCCCC CCC CDDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDD C ",
- " CDDDDDDDDC ",
- " C DDDDDDDC ",
- " CCDDDDDD C ",
- " CCDDDDDCC ",
- " CCCC CC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " CCC CCCC ",
- " C DDDDDCC ",
- " CCDDDDDDD C ",
- " C DDDDDDDD C ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDD C ",
- " CDDDDDDD C ",
- " CDDDDDD C ",
- " CDDDDD C CCCC ",
- " CCDDD C C DD C ",
- " CCCCCC CDDDDC ",
- " CCC CDDDDC ",
- " CDDD C ",
- " CCCC ",
- " BBB CC ",
- " BBB CCC ",
- " BBCCCC ",
- " BBCD C ",
- " BCD C ",
- " CDDC ",
- " CDDE ",
- " CDDE C ",
- " CDDEE CCCCC ",
- " CDDCE CC CC ",
- " C DCE C DDD C ",
- " CDCC CDDDDDC ",
- " CCCC CDDDDDD C ",
- " CCCC CC CDDDDDD C ",
- " CCCC CCCC CCC CDDDDDDDDC ",
- " CCCC EC CC CDDDC CDDDDDDDDC ",
- " CCCC EEECDDDC CDDDDC CDDDDDDDDDC ",
- " CCCCCCC CCECCDDDDCBBBBCDDDDC CDDDDDDDDC ",
- " CCCCCCCCDDDDD CBBBBBBCDDDC CDDDDDDDDC ",
- " CCCCCCDDDCCC CCC CDDDDDDDDDC ",
- " CCCCCC CDDDDDDDD C ",
- " CDDDDDDDDC ",
- " CDDDDDDDC ",
- " CCDDDDDD C ",
- " CCDDDDD C ",
- " CCDDD C ",
- " CCCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCC CCCC ",
- " C DDDDDDCC ",
- " CCDDDDDDDDCC ",
- " C DDDDDDDDDCC ",
- " C DDDDDDDDDDC ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDCC ",
- " CDDDDDDC ",
- " C DDD C ",
- " CCC CC CC ",
- " CCCC CDDC ",
- " CDDDDC ",
- " CDDDDC ",
- " CDDDDC ",
- " C C ",
- " CC ",
- " ",
- " ",
- " CC ",
- " CCC ",
- " CCC CCC ",
- " CCC CCCCC ",
- " CD C CC CCC ",
- " CDDC C DDD C ",
- " CDDC CDDDDDC ",
- " CDDDE C DDDDD C ",
- " CDDCE CDDDDDDDC ",
- " CDDDE CDDDDDDDC ",
- " CDD E CDDDDDDDDC ",
- " C DD EE CCC CDDDDDDDDC ",
- " C DD EE CC CDD C CDDDDDDDDC ",
- " C DD EEEEE CCCCC CDDDDC CDDDDDDDDDC ",
- " CCDDDDCEEEECCC CCC CDDDDC CDDDDDDDDDC ",
- " C DDDDDDDDDDD C C DDDC CDDDDDDDDC ",
- " CCCDDDDDDDDCC CCCC CDDDDDDDDC ",
- " CCCCCCCC CDDDDDDDC ",
- " C DDDDDDDC ",
- " CCDDDDDDC ",
- " CDDDD C ",
- " CCC CC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCC CCCC ",
- " CCDDDDDDDCC ",
- " CCDDDDDDDDDCC ",
- " C DDDDDDDDDDCC ",
- " C DDDDDDDDDDDC ",
- " CDDDDDDDDDDDCC ",
- " CDDDDDDDDDDD C ",
- " C DDDDDDDDDD C ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDCC ",
- " CCDDDDDDDC ",
- " CCDDDDD C ",
- " CCDD CCB ",
- " CCCCC ",
- " C ",
- " CCCC ",
- " CDDDDC ",
- " CDDDDC ",
- " CDDDDC ",
- " C DD C ",
- " CCCC ",
- " ",
- " ",
- " CCC ",
- " CCCCC ",
- " CC D CC ",
- " C DDD C ",
- " CC CDDDDD C ",
- " CC C DDDDDDC ",
- " CCC CDDDDDDDC ",
- " CCC CDDDDDDDC ",
- " CCCC CDDDDDDDC ",
- " CCDCC CDDDDDDDDC ",
- " CDD C CDDDDDDDDC ",
- " C DD C CC CDDDDDDDDC ",
- " C DD C CCDDC CDDDDDDDDC ",
- " C DDDCC CDDDDC CDDDDDDDDC ",
- " C DDDDCCCCCCCCC CDDDDC BCDDDDDDDC ",
- " CC DDDDD CCCCCC CDDD C BC DDDDDDDC ",
- " CCCDDDD CCCC CCCC BC DDDDDD C ",
- " CCCCCC C DDDDDDC ",
- " CCDDDDDC ",
- " CCDD C ",
- " CCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " CCCC ",
- " CCCC CCCC ",
- " CC DDDDDDDCCC ",
- " C DDDDDDDDDCCC ",
- " CDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDD C ",
- " C DDDDDDDDDDDCC ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDCC ",
- " CCDDDDDDDC ",
- " C DDDDCC ",
- " CCCCCCB ",
- " CCCBBB ",
- " ",
- " ",
- " CCCC ",
- " C DD C ",
- " CDDDDC ",
- " CDDDDC ",
- " C DDDC ",
- " CCCC C ",
- " CCCC ",
- " CCCCCC ",
- " CCDD C ",
- " CDDDD C ",
- " C DDDDDC ",
- " C DDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDD C",
- " CDDDDDDDDC",
- " C CDDDDDDDDC ",
- " CCC CDDDDDDDDC ",
- " CCCC C CDDDDDDDDC ",
- " CCCC CCDCC CDDDDDDDDC ",
- " CCCCC C DDD C CDDDDDDDDC ",
- " CCCCCC CDDDDDC BBCDDDDDDDC ",
- " CCCCCCCC C DDDC BBCDDDDDD C ",
- " CCCCCC CCCCC BC DDDDDC ",
- " CCDDD C ",
- " CCCCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " CCCCCCCCCC ",
- " CCDDDDDDDDCCC ",
- " CCDDDDDDDDDDDCCC ",
- " CDDDDDDDDDDDDDCC ",
- " CDDDDDDDDDDDDDCCC ",
- " CDDDDDDDDDDDDD CC ",
- " C DDDDDDDDDDDD C ",
- " CDDDDDDDDDDDDCC ",
- " C DDDDDDDDDD C ",
- " CDDDDDDDDDDCC ",
- " CDDDDDDDD C ",
- " CDDDDDD CC ",
- " CCDDD CC ",
- " CCCCCC ",
- " BB ",
- " BBB ",
- " B ",
- " ",
- " CC ",
- " CDDC ",
- " CDDDDC ",
- " CDDDDC CCC ",
- " CDDDDC CCCCC ",
- " CDD C CCC CCC ",
- " CCC CCDDD C ",
- " C DDDD C ",
- " CDDDDDDC ",
- " CDDDDDD C ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CCCCC CDDDDDDDC ",
- " CDDDDC CDDDDDDC ",
- " CDDDDC BB CDDDDD C ",
- " CDDDDC BB C DDD C ",
- " CC C CCC CC ",
- " CC CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " CCCCCCCCCC ",
- " CC DDDDDD CCCC ",
- " CCDDDDDDDDDDDCCCC ",
- " CCDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDD CC ",
- " C DDDDDDDDDDDDDD C ",
- " CDDDDDDDDDDDDD CC ",
- " C DDDDDDDDDDDDCC ",
- " C DDDDDDDDDDCC ",
- " C DDDDDDDDCC ",
- " CCDDDDDDCC ",
- " CCC CC ",
- " CCCCC ",
- " ",
- " BB ",
- " BBB ",
- " B ",
- " ",
- " CCC ",
- " CCCC CCCC ",
- " CDDDC CCCCCC ",
- " CDDDDC CC DDCC ",
- " CDDDDC CCDDDD C ",
- " CDDDC C DDDDDC ",
- " CCCC C DDDDDDC ",
- " C DDDDDDC ",
- " C DDDDDDDC ",
- " C DDDDDDDC ",
- " C DDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDDC",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDD C ",
- " CCCCC C DDDDDC ",
- " C DDD C CCDDDDCC ",
- " CDDDDDC BB CC CC ",
- " C DDDDC BB CCCCC ",
- " CCDCC C ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " CCCCCC ",
- " CCCCDDDD CCC ",
- " CCDDDDDDDDDDD CCC ",
- " CCDDDDDDDDDDDDDD CCC ",
- " CDDDDDDDDDDDDDDDDDCCCC ",
- " CDDDDDDDDDDDDDDDDDCCCC ",
- " CDDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDCCC ",
- " CDDDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDCC ",
- " CC DDDDDCCC ",
- " CCC CCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " BBB CCC ",
- " BB CCCCC ",
- " CCCCCC ",
- " CCDD CC ",
- " CCC CCDDDDCC ",
- " CDD C C DDDDDC ",
- " CDDDC C DDDDDDC ",
- " CDDDDC C DDDDDDC ",
- " CDDDDC CDDDDDDDC ",
- " CCDDC CDDDDDDDC ",
- " CC CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC",
- " CDDDDDDD C",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " C DDDDDDC ",
- " CDDDDDC ",
- " CDDDD C ",
- " CCCC CC D C ",
- " CDDDDC CCCC ",
- " CDDDDC BB CC ",
- " CDDDDC BB ",
- " CCDDCC ",
- " CC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " CCCCCCCCCCC ",
- " CCCDDDDDDDDD CCCC ",
- " CCDDDDDDDDDDDDDDDCCCC ",
- " CDDDDDDDDDDDDDDDDDDCCCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDCCCCC ",
- " CDDDDDDDDDDDDDDDDDDDDCCCCCCC ",
- " CDDDDDDDDDDDDDDDDDDDCCCCCCCC ",
- " CCDDDDDDDDDDDDDDDDCCCCC ",
- " C DDDDDDDDDDDD CCC ",
- " C DDDDDDDDDCCCC ",
- " CCDDDDDDCCC ",
- " CCCCCCCC ",
- " CC CC ",
- " CCCC ",
- " CCCCCC ",
- " CCCCCC ",
- " CCCCCCC ",
- " BB CCCDDDCC ",
- " BB CCDDDD C ",
- " BBB CCDDDDD C ",
- " B CCDDDDDD C ",
- " CDDDDDDDC ",
- " CCCCC CDDDDDDDDC ",
- " CDDDC C DDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " C DDDC CDDDDDDDD C ",
- " CCCC CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " C DDDDDDC ",
- " CDDDDD C ",
- " C DDD C ",
- " CC D CC ",
- " CCCCC ",
- " CCCCC CCC ",
- " CDDDD C B ",
- " CDDDDDCBBBB ",
- " CDDDDDC BB ",
- " C D C ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " CC ",
- " CCCCCC CCCCCC ",
- " CCDDDDDDDDDDDDD CCC ",
- " CCDDDDDDDDDDDDDDDDD CCC ",
- " CCDDDDDDDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDCCCC ",
- " CDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCC ",
- " CDDDDDDDDDDDDDDDDDD CCCCCCCCCCCCCCC ",
- " CCDDDDDDDDDDDDCCCCCCCC CCCCCCCCCCCCCC ",
- " CCCDDDDDD CCCC CCCCCCCCCC ",
- " CCCCCCCCC CCCCCCCCC ",
- " CCCCCCCCC ",
- " CCCCD CCC ",
- " CCCDDDDCC ",
- " CCDDDDD C ",
- " CCDDDDD C ",
- " CCDDDDDDDC ",
- " C DDDDDDDC ",
- " BB CDDDDDDD C ",
- " BBB C DDDDDDD C ",
- " BBB CDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CCC CDDDDDDDDC ",
- " C DDC CDDDDDDDD C ",
- " CDDDDC CDDDDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " CDDDD C CDDDDDDDD C ",
- " CDDDC CDDDDDDDDDC ",
- " CCCC CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDDC ",
- " CDDDDDDDC ",
- " CDDDDDDDC ",
- " C DDDDD C ",
- " CDDDDDC ",
- " C DDD C ",
- " CCD CC ",
- " CCCCC ",
- " CCC ",
- " ",
- " CCCCC ",
- " C DDDDCBBB ",
- " CDDDDDCBBBB ",
- " C DDDDCBBB ",
- " CCDDCC ",
- " CC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " CCCCCC ",
- " CCCCDDDDDDCCCCC ",
- " CCCDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDDDDD CCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD CC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCC ",
- " CCCDDDDDDDDDCCCCCCCCCCCC DDDDDDDDDDDCC ",
- " CCCCCCCCCCC CCCCCDDDDDDDDD CC ",
- " CCC DDDDDDDDCC ",
- " CCCDDDDDDDD C ",
- " CCDDDDDDDD C ",
- " CCDDDDDDDDDC ",
- " CCDDDDDDDDDC ",
- " CCDDDDDDDDDC ",
- " C DDDDDDDD C ",
- " C DDDDDDDD C ",
- " CDDDDDDDDDC ",
- " BB C DDDDDDDDDC ",
- " BBB CDDDDDDDDDC ",
- " BBB CDDDDDDDDDC ",
- " B CDDDDDDDDDC ",
- " CCCC CDDDDDDDDDC ",
- " CDDDC CDDDDDDDDDC ",
- " CDDDDDC CDDDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " CDDDDC C DDDDDDDC ",
- " C D C CDDDDDDD C ",
- " CCC CDDDDDDD C ",
- " CDDDDDD C ",
- " CDDDDDDC ",
- " CDDDDDC ",
- " C DDD C ",
- " CC CCC ",
- " CCCCC ",
- " CC ",
- " ",
- " ",
- " C ",
- " CC CCC ",
- " C DDDDCBBB ",
- " CDDDDDDCBB ",
- " C DDDD CB ",
- " CCCDCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " CCCC~CCC G ",
- " CCC DDDDDDDCCCCC ",
- " CCCDDDDDDDDDDDDDDD CCC ",
- " C DDDDDDDDDDDDDDDDDDDD CC ",
- " C DDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCC CCCCCCCCCCCC DDDDDDDDDDDDDDDD C ",
- " CCC CCCCCDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDD C ",
- " C DDDDDDDDDDD C ",
- " CC DDDDDDDDDD C ",
- " C DDDDDDDDDD C ",
- " CCDDDDDDDDDD C ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " BBB CDDDDDDDDDC ",
- " BBB C DDDDDDDDDC ",
- " BBB CDDDDDDDDDC ",
- " CCC CDDDDDDDDC ",
- " C D C CDDDDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " CDDDDC CDDDDDDDDC ",
- " CDDDDDC CDDDDDDDC ",
- " CDDD C C DDDDDDC ",
- " CCCC CDDDDDDC ",
- " C DDDD C ",
- " C DDDCC ",
- " CCCCC ",
- " CCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " C DDCC ",
- " C DDDD CB ",
- " C DDDDDCBB ",
- " CDDDD CB ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " CCCCCCC ",
- " CCCCDDDDDDDCCCCC ",
- " CC DDDDDDDDDDDDDD CCC ",
- " CC DDDDDDDDDDDDDDDDDDD CC ",
- " CC DDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDD C ",
- " CCCCCDDDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDDC ",
- " C DDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDC ",
- " CDDDDDDDDDDD C ",
- " C DDDDDDDDDDC ",
- " C DDDDDDDDDDC ",
- " CDDDDDDDDDD C ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDD C ",
- " CDDDDDDDDDC ",
- " BB C DDDDDDDDC ",
- " BB CDDDDDDDDDC ",
- " BB CDDDDDDDDC ",
- " BCCCC C DDDDDDDC ",
- " BCDDDC CDDDDDDDC ",
- " CDDDDDC CDDDDDDC ",
- " C DDDDC C DDDDDC ",
- " CDDDD C C DDD C ",
- " CDDDCC C DDCC ",
- " CCCC CCCCCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CCDDDDC ",
- " CDDDDDDC ",
- " C DDDDDC ",
- " CDDDDDC ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " C ",
- " CCCCCC CCCCCCC ",
- " CC DDDDDDDDDDDDDCCC ",
- " CC DDDDDDDDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDDDDDDDDDDDCCC ",
- " CCDDDDDDDDDDDDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCC DDDDDDDDDDDDDDDDDDDDDDDDDDC ",
- " CCCCC DDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCCCCCCDDDDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDDC ",
- " CCCDDDDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDDC ",
- " C DDDDDDDDDDDDC ",
- " CCDDDDDDDDDDD C ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDDC ",
- " CDDDDDDDDDC ",
- " CDDDDDDDD C ",
- " CDDDDDDDDC ",
- " C DDDDDDDC ",
- " B C DDDDDDC ",
- " BBB CDDDDDDC ",
- " BCCCCC CDDDDDC ",
- " CDDDDC CCDDD C ",
- " CDDDDDC CCCCCC ",
- " CDDDDDC CCCCC ",
- " CDDDD C CCC ",
- " CDDDCC ",
- " CCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCCCC ",
- " CCDDDDDCC ",
- " CCDDDDDDC ",
- " C DDDDDC ",
- " CCDDD C ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " CCCCCCCCCCC ",
- " CCC DDDDDDDDDCCCC ",
- " CCC DDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCCDDDDDDDDDDDDDDDDDDDDDDCC ",
- " CCCC DDDDDDDDDDDDDDDDDDDDDDC ",
- " CCCC DDDDDDDDDDDDDDDDDDDDCC ",
- " CCCCCDDDDDDDDDDDDDDDDD C ",
- " CCCDDDDDDDDDDDDDDD C ",
- " CCDDDDDDDDDDDDDDDC ",
- " CC DDDDDDDDDDDD C ",
- " CCDDDDDDDDDDDD C ",
- " CCDDDDDDDDDDDC ",
- " CDDDDDDDDDDDC ",
- " C DDDDDDDDD C ",
- " C DDDDDDDDDC ",
- " C DDDDDDDDDC ",
- " C DDDDDDDDC ",
- " C DDDDDDD C ",
- " C DDDDDD C ",
- " C DDDDDDC ",
- " C DDDDDC ",
- " C DDD C ",
- " CC CCC ",
- " BBCC CCCCC ",
- " BC DCC CCCC ",
- " CDDDDC ",
- " CDDDDDC ",
- " CDDDDD C ",
- " CDDDDDC ",
- " CDDD C ",
- " CCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " CCCCC ",
- " CCC DDCCC ",
- " CC DDDDD C ",
- " C DDDDDDC ",
- " C DDDDDCC ",
- " CC DD C ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " CC ",
- " CCCCC CCCCCC ",
- " CCCCDDDDDDDDDD CCC ",
- " CCCCDDDDDDDDDDDDDD CC ",
- " CCCCDDDDDDDDDDDDDDDDDCC ",
- " CCCDDDDDDDDDDDDDDDDDD C ",
- " CCCCDDDDDDDDDDDDDDDDDDCC ",
- " CCCC DDDDDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDDDDC ",
- " CCCDDDDDDDDDDDDDDCC ",
- " CCDDDDDDDDDDDDDC ",
- " CCDDDDDDDDDDDDC ",
- " C DDDDDDDDDDDC ",
- " CCDDDDDDDDDD C ",
- " C DDDDDDDDD C ",
- " CCDDDDDDDDDC ",
- " CDDDDDDDDCC ",
- " C DDDDDD C ",
- " C DDDDDDC ",
- " C DDDDDCC ",
- " CCDDDDCC ",
- " CCC CCC ",
- " CCCCCC ",
- " CCCCC ",
- " C ",
- " ",
- " CCCC ",
- " CCDD C ",
- " C DDDDC ",
- " CDDDDDC ",
- " CDDDDDDC ",
- " CDDDDDCC ",
- " C DDDCC ",
- " CC CCCC ",
- " CCCCCC ",
- " ",
- " ",
- " CCCCC ",
- " CCCC CCCC ",
- " CCDDDDDDCC ",
- " C DDDDDD C ",
- " C DDDDDDC ",
- " CCDDDDDC ",
- " CCCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " CCCCC ",
- " CCCCCCCCCCCC ",
- " CCCC DDDDDDD CCC ",
- " CCCCDDDDDDDDDDD CC ",
- " CCCCDDDDDDDDDDDDD CC ",
- " CCC DDDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDD C ",
- " CCC DDDDDDDDDDDDCC ",
- " CC DDDDDDDDDDDCC ",
- " CC DDDDDDDDDDCC ",
- " CCDDDDDDDDDDC ",
- " C DDDDDDDD C ",
- " CC DDDDDDDCC ",
- " C DDDDDDDCC ",
- " CC DDDDDCC ",
- " CCDDDDCC ",
- " CC DDCCC ",
- " CCCCCCC ",
- " CCCCCC ",
- " CCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCDD C ",
- " C DDDDCC ",
- " CDDDDD C ",
- " CDDDDDD C ",
- " CDDDDDDCC ",
- " C DDDDDCC ",
- " CC DDD CC ",
- " CCCCCCCCC ",
- " CCCCCCCCCC ",
- " CCCCCDD CCCC ",
- " CCCDDDDDD CC ",
- " CCDDDDDDD C ",
- " CCDDDDDDD C ",
- " C DDDDDDC ",
- " CCCDDD C ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " CCCCCCCCC ",
- " CCCCCCCCCCCC ",
- " CCCCCCDDD CCCC ",
- " CCCCCDDDDDD CCC ",
- " CCCCDDDDDDDCCC ",
- " CCCCDDDDDD CC ",
- " CCC DDDDDDCC ",
- " CCCDDDDDDCC ",
- " CCCDDDDCCC ",
- " CCCCDDDCCC ",
- " CCCCCCCC ",
- " CCCCCCCC ",
- " CCCCCC ",
- " CCCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCDD CC ",
- " CCDDDD C ",
- " CDDDDDDC ",
- " C DDDDDDCC ",
- " C DDDDDD C ",
- " CCDDDDDDDCC ",
- " C DDDDDD CC ",
- " CCDDDDDDDDCC ",
- " CCDDDDDDDDCC ",
- " C DDDDDDDDCC ",
- " CC DDDDDDDDC ",
- " CCDDDDDDD C ",
- " CCDDDDDCC ",
- " CCCCCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCCCCC ",
- " CCCCCC ",
- " CCCC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CC CC ",
- " CDDDD C ",
- " C DDDDDCC ",
- " CDDDDDDDCC ",
- " CDDDDDDD C ",
- " CDDDDDDDDCC ",
- " CCDDDDDDDDCC ",
- " C DDDDDDDDCC ",
- " CCDDDDDDDD C ",
- " CCDDDDDDD C ",
- " CCDDDDD CC ",
- " CCC CC ",
- " CCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CC ",
- " CCCCCC ",
- " CC DD CC ",
- " C DDDD C ",
- " CCDDDDDDCC ",
- " CCDDDDDDDCC ",
- " CDDDDDDD C ",
- " CCDDDDDDDCC ",
- " C DDDDDDCC ",
- " CC DDDDCCC ",
- " CCC CCCC ",
- " CCCC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCCC ",
- " CCCCCC ",
- " CCCCCCC ",
- " CCDDDCCC ",
- " CCDDD CC ",
- " CCCDDCCC ",
- " CCCCCCC ",
- " CCCCCC ",
- " C ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " " },
- { " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " CCC ",
- " CCCC ",
- " CC ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ", } };
-
-}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java
index 3603839564..fb19a3b458 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java
@@ -1,27 +1,31 @@
package com.github.technus.tectech.thing.metaTileEntity.multi;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
+import static com.github.technus.tectech.thing.casing.TT_Container_Casings.GodforgeCasings;
import static com.github.technus.tectech.thing.casing.TT_Container_Casings.forgeOfGodsRenderBlock;
-import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0;
-import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT;
+import static com.github.technus.tectech.util.GodforgeMath.allowModuleConnection;
+import static com.github.technus.tectech.util.GodforgeMath.calculateEnergyDiscountForModules;
import static com.github.technus.tectech.util.GodforgeMath.calculateFuelConsumption;
import static com.github.technus.tectech.util.GodforgeMath.calculateMaxFuelFactor;
import static com.github.technus.tectech.util.GodforgeMath.calculateMaxHeatForModules;
-import static com.github.technus.tectech.util.GodforgeMath.calucateMaxParallelForModules;
-import static com.github.technus.tectech.util.GodforgeMath.calucateSpeedBonusForModules;
+import static com.github.technus.tectech.util.GodforgeMath.calculateMaxParallelForModules;
+import static com.github.technus.tectech.util.GodforgeMath.calculateProcessingVoltageForModules;
+import static com.github.technus.tectech.util.GodforgeMath.calculateSpeedBonusForModules;
+import static com.github.technus.tectech.util.GodforgeMath.calculateStartupFuelConsumption;
+import static com.github.technus.tectech.util.GodforgeMath.queryMilestoneStats;
+import static com.github.technus.tectech.util.GodforgeMath.setMiscModuleParameters;
+import static com.github.technus.tectech.util.TT_Utility.toExponentForm;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered;
-import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
-import static gregtech.api.enums.GT_HatchElement.InputBus;
-import static gregtech.api.enums.GT_HatchElement.InputHatch;
-import static gregtech.api.enums.GT_HatchElement.OutputBus;
-import static gregtech.api.enums.GT_HatchElement.OutputHatch;
+import static gregtech.api.enums.Mods.Avaritia;
import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
+import static gregtech.api.util.GT_ModHandler.getModItem;
import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_Utility.formatNumbers;
+import static java.lang.Math.floor;
+import static java.lang.Math.log;
+import static java.lang.Math.max;
import static net.minecraft.util.StatCollector.translateToLocal;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -29,7 +33,6 @@ import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -37,45 +40,58 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
-import org.apache.commons.lang3.tuple.Pair;
-
import com.github.technus.tectech.TecTech;
+import com.github.technus.tectech.thing.CustomItemList;
+import com.github.technus.tectech.thing.block.GodforgeGlassBlock;
import com.github.technus.tectech.thing.block.TileForgeOfGods;
-import com.github.technus.tectech.thing.casing.TT_Container_Casings;
import com.github.technus.tectech.thing.gui.TecTechUITextures;
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.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule;
+import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule;
+import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule;
+import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule;
+import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule;
import com.github.technus.tectech.util.CommonValues;
-import com.google.common.collect.ImmutableList;
+import com.google.common.math.LongMath;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
-import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizons.modularui.api.ModularUITextures;
import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.drawable.ItemDrawable;
import com.gtnewhorizons.modularui.api.drawable.Text;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
import com.gtnewhorizons.modularui.api.math.Alignment;
import com.gtnewhorizons.modularui.api.math.Color;
+import com.gtnewhorizons.modularui.api.math.MainAxisAlignment;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.math.Size;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder;
+import com.gtnewhorizons.modularui.api.widget.Interactable;
import com.gtnewhorizons.modularui.api.widget.Widget;
import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget;
import com.gtnewhorizons.modularui.common.widget.MultiChildWidget;
+import com.gtnewhorizons.modularui.common.widget.ProgressBar;
import com.gtnewhorizons.modularui.common.widget.Scrollable;
+import com.gtnewhorizons.modularui.common.widget.SlotGroup;
import com.gtnewhorizons.modularui.common.widget.TextWidget;
import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.api.GregTech_API;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
import gregtech.api.enums.MaterialsUEVplus;
+import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.Textures;
import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.IHatchElement;
@@ -85,36 +101,99 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
import gregtech.api.util.GT_HatchElementBuilder;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.IGT_HatchAdder;
public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_MultiblockBase_EM
implements IConstructable, ISurvivalConstructable {
- private static Textures.BlockIcons.CustomIcon ScreenOFF;
private static Textures.BlockIcons.CustomIcon ScreenON;
private int fuelConsumptionFactor = 1;
private int selectedFuelType = 0;
- private long fuelConsumption = 0;
private int internalBattery = 0;
+ private int maxBatteryCharge = 100;
+ private int gravitonShardsAvailable = 0;
+ private int gravitonShardsSpent = 0;
+ private int ringAmount = 1;
+ private int stellarFuelAmount = 0;
+ private int neededStartupFuel = 0;
+ private long fuelConsumption = 0;
+ private long totalRecipesProcessed = 0;
+ private long totalFuelConsumed = 0;
+ private float totalExtensionsBuilt = 0;
+ private float powerMilestonePercentage = 0;
+ private float recipeMilestonePercentage = 0;
+ private float fuelMilestonePercentage = 0;
+ private float structureMilestonePercentage = 0;
+ private float invertedPowerMilestonePercentage = 0;
+ private float invertedRecipeMilestonePercentage = 0;
+ private float invertedFuelMilestonePercentage = 0;
+ private float invertedStructureMilestonePercentage = 0;
+ private BigInteger totalPowerConsumed = BigInteger.ZERO;
+ private boolean batteryCharging = false;
+ private boolean inversion = false;
public ArrayList<GT_MetaTileEntity_EM_BaseModule> moduleHatches = new ArrayList<>();
+ protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16);
- private static int spacetimeCompressionFieldMetadata = -1;
- private int solenoidCoilMetadata = -1;
private static final int FUEL_CONFIG_WINDOW_ID = 9;
private static final int UPGRADE_TREE_WINDOW_ID = 10;
private static final int INDIVIDUAL_UPGRADE_WINDOW_ID = 11;
+ private static final int BATTERY_CONFIG_WINDOW_ID = 12;
+ private static final int MILESTONE_WINDOW_ID = 13;
+ private static final int INDIVIDUAL_MILESTONE_WINDOW_ID = 14;
+ private static final int MANUAL_INSERTION_WINDOW_ID = 15;
+ private static final int TEXTURE_INDEX = 960;
private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 };
- private static final int[] RING_UPGRADES = new int[] { 26, 29 };
+ private static final long POWER_MILESTONE_CONSTANT = LongMath.pow(10, 15);
+ private static final long RECIPE_MILESTONE_CONSTANT = LongMath.pow(10, 7);
+ private static final long FUEL_MILESTONE_CONSTANT = 10_000;
+ private static final long RECIPE_MILESTONE_T7_CONSTANT = RECIPE_MILESTONE_CONSTANT * LongMath.pow(6, 6);
+ private static final long FUEL_MILESTONE_T7_CONSTANT = FUEL_MILESTONE_CONSTANT * LongMath.pow(3, 6);
+ private static final BigInteger POWER_MILESTONE_T7_CONSTANT = BigInteger.valueOf(POWER_MILESTONE_CONSTANT)
+ .multiply(BigInteger.valueOf(LongMath.pow(9, 6)));
+ private static final double POWER_LOG_CONSTANT = Math.log(9);
+ private static final double RECIPE_LOG_CONSTANT = Math.log(6);
+ private static final double FUEL_LOG_CONSTANT = Math.log(3);
protected static final String STRUCTURE_PIECE_MAIN = "main";
+ protected static final String STRUCTURE_PIECE_SECOND_RING = "second_ring";
+ protected static final String STRUCTURE_PIECE_THIRD_RING = "third_ring";
+ private static final String TOOLTIP_BAR = EnumChatFormatting.BLUE + "--------------------------------------------";
+ private static final ItemStack STELLAR_FUEL = Avaritia.isModLoaded() ? getModItem(Avaritia.ID, "Resource", 1, 8)
+ : GT_OreDictUnificator.get(OrePrefixes.block, Materials.CosmicNeutronium, 1);
- private Boolean debugMode = true;
+ private final boolean debugMode = true;
- public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) {
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
if (mMachine) return -1;
- int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); // 200 blocks max per
- // placement.
- return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 31, 34, 0, realBudget, source, actor, false, true);
+ int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5);
+ // 1000 blocks max per placement.
+ int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 20, 1, realBudget, env, false, true);
+ if (isUpgradeActive(26) && stackSize.stackSize > 1) {
+ built += survivialBuildPiece(
+ STRUCTURE_PIECE_SECOND_RING,
+ stackSize,
+ 55,
+ 11,
+ -67,
+ realBudget,
+ env,
+ false,
+ true);
+ }
+ if (isUpgradeActive(29) && stackSize.stackSize > 2) {
+ built += survivialBuildPiece(
+ STRUCTURE_PIECE_THIRD_RING,
+ stackSize,
+ 47,
+ 13,
+ -76,
+ realBudget,
+ env,
+ false,
+ true);
+ }
+ return built;
}
@Override
@@ -124,53 +203,19 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
public static final IStructureDefinition<GT_MetaTileEntity_EM_ForgeOfGods> STRUCTURE_DEFINITION = IStructureDefinition
.<GT_MetaTileEntity_EM_ForgeOfGods>builder()
- .addShape("main", transpose(ForgeofGodsStructureString.godForge))
-
+ .addShape(STRUCTURE_PIECE_MAIN, ForgeOfGodsStructureString.MAIN_STRUCTURE)
+ .addShape(STRUCTURE_PIECE_SECOND_RING, ForgeOfGodsRingsStructureString.SECOND_RING)
+ .addShape(STRUCTURE_PIECE_THIRD_RING, ForgeOfGodsRingsStructureString.THIRD_RING)
+ .addElement('A', classicHatches(TEXTURE_INDEX + 3, 1, GodforgeCasings, 3))
+ .addElement('B', ofBlock(GodforgeCasings, 0)).addElement('C', ofBlock(GodforgeCasings, 1))
+ .addElement('D', ofBlock(GodforgeCasings, 2)).addElement('E', ofBlock(GodforgeCasings, 3))
+ .addElement('F', ofBlock(GodforgeCasings, 4)).addElement('G', ofBlock(GodforgeCasings, 5))
+ .addElement('H', ofBlock(GodforgeGlassBlock.INSTANCE, 0)).addElement('I', ofBlock(GodforgeCasings, 7))
.addElement(
- 'A',
- buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class)
- .atLeast(InputHatch, OutputHatch, InputBus, OutputBus).casingIndex(texturePage << 7).dot(1)
- .buildAndChain(sBlockCasingsBA0, 12))
- .addElement('B', ofBlock(sBlockCasingsTT, 11)).addElement('C', ofBlock(sBlockCasingsTT, 12))
- .addElement(
- 'D',
- ofBlocksTiered(
- (block, meta) -> block == GregTech_API.sSolenoidCoilCasings ? meta : -1,
- ImmutableList.of(
- Pair.of(GregTech_API.sSolenoidCoilCasings, 7),
- Pair.of(GregTech_API.sSolenoidCoilCasings, 8),
- Pair.of(GregTech_API.sSolenoidCoilCasings, 9),
- Pair.of(GregTech_API.sSolenoidCoilCasings, 10)),
- -1,
- (t, meta) -> t.solenoidCoilMetadata = meta,
- t -> t.solenoidCoilMetadata))
- .addElement(
- 'E',
- ofBlocksTiered(
- (block, meta) -> block == TT_Container_Casings.SpacetimeCompressionFieldGenerators ? meta
- : -1,
- ImmutableList.of(
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 0),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 1),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 2),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 3),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 4),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 5),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 6),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 7),
- Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 8)),
- -1,
- (t, meta) -> spacetimeCompressionFieldMetadata = meta,
- t -> spacetimeCompressionFieldMetadata))
- .addElement(
- 'F',
- buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch)
- .casingIndex(texturePage << 7).dot(2).buildAndChain(sBlockCasingsBA0, 12))
- .addElement(
- 'G',
+ 'J',
GT_HatchElementBuilder.<GT_MetaTileEntity_EM_ForgeOfGods>builder().atLeast(moduleElement.Module)
- .casingIndex(texturePage << 7).dot(3).buildAndChain(sBlockCasingsBA0, 12))
- .build();
+ .casingIndex(TEXTURE_INDEX).dot(3).buildAndChain(GodforgeCasings, 0))
+ .addElement('K', ofBlock(GodforgeCasings, 6)).build();
public GT_MetaTileEntity_EM_ForgeOfGods(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
@@ -188,8 +233,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
@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");
+ ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_CONTROLLER");
super.registerIcons(aBlockIconRegister);
}
@@ -197,15 +241,21 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
int colorIndex, boolean aActive, boolean aRedstone) {
if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][12],
- new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) };
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1),
+ new TT_RenderedExtendedFacingTexture(ScreenON) };
}
- return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][12] };
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1) };
}
@Override
public void construct(ItemStack stackSize, boolean hintsOnly) {
- structureBuild_EM(STRUCTURE_PIECE_MAIN, 31, 34, 0, stackSize, hintsOnly);
+ structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1, stackSize, hintsOnly);
+ if (isUpgradeActive(26) && stackSize.stackSize > 1) {
+ buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 11, -67);
+ }
+ if (isUpgradeActive(29) && stackSize.stackSize > 2) {
+ buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -76);
+ }
}
private final ArrayList<FluidStack> validFuelList = new ArrayList<>() {
@@ -220,11 +270,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
@Override
public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) {
- spacetimeCompressionFieldMetadata = -1;
moduleHatches.clear();
// Check structure of multi.
- if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 31, 34, 0)) {
+ if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) {
return false;
}
@@ -248,6 +297,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
return false;
}
+ if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) {
+ ringAmount = 2;
+ if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) {
+ ringAmount = 3;
+ }
+ }
+
mHardHammer = true;
mSoftHammer = true;
mScrewdriver = true;
@@ -263,46 +319,92 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPostTick(aBaseMetaTileEntity, aTick);
if (aBaseMetaTileEntity.isServerSide()) {
- if (getBaseMetaTileEntity().isAllowedToWork()) {
- ticker++;
- // Check and drain fuel
- if (ticker % SECONDS == 0) {
- ticker = 0;
- FluidStack fluidInHatch = mInputHatches.get(0).getFluid();
-
- fuelConsumption = (long) calculateFuelConsumption(this);
- if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) {
- FluidStack fluidNeeded = new FluidStack(
- validFuelList.get(selectedFuelType),
- (int) fuelConsumption);
- FluidStack fluidReal = mInputHatches.get(0).drain(fluidNeeded.amount, true);
- if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) {
- reduceBattery(1);
- } else {
- increaseBattery(1);
+ ticker++;
+ // Check and drain fuel
+ if (ticker % (5 * SECONDS) == 0) {
+ ticker = 0;
+ FluidStack fluidInHatch = null;
+ if (mInputHatches != null && mInputHatches.size() != 0) {
+ fluidInHatch = mInputHatches.get(0).getFluid();
+ }
+ int maxModuleCount = 8;
+
+ if (upgrades[26]) {
+ maxModuleCount += 4;
+ }
+ if (upgrades[29]) {
+ maxModuleCount += 4;
+ }
+ if (getBaseMetaTileEntity().isAllowedToWork()) {
+ if (internalBattery == 0) {
+
+ for (ItemStack itemStack : mInputBusses.get(0).getRealInventory()) {
+ if (itemStack != null && itemStack.isItemEqual(STELLAR_FUEL)) {
+ stellarFuelAmount += itemStack.stackSize;
+ itemStack.stackSize = 0;
+ }
+ }
+ neededStartupFuel = calculateStartupFuelConsumption(this);
+ if (stellarFuelAmount >= neededStartupFuel) {
+ stellarFuelAmount -= neededStartupFuel;
+ increaseBattery(neededStartupFuel);
}
} else {
- reduceBattery(1);
+ fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1);
+ if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) {
+ FluidStack fluidNeeded = new FluidStack(
+ validFuelList.get(selectedFuelType),
+ (int) fuelConsumption);
+ FluidStack fluidReal = mInputHatches.get(0).drain(fluidNeeded.amount, true);
+ if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) {
+ reduceBattery(fuelConsumptionFactor);
+ } else {
+ totalFuelConsumed += getFuelFactor();
+ if (batteryCharging) {
+ increaseBattery(fuelConsumptionFactor);
+ }
+ }
+ } else {
+ reduceBattery(fuelConsumptionFactor);
+ }
}
- // Do module calculations and checks
- if (moduleHatches.size() > 0 && internalBattery > 0) {
- for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) {
+ } else {
+ reduceBattery(fuelConsumptionFactor);
+ }
+
+ determineCompositionMilestoneLevel();
+ checkInversionStatus();
+ determineMilestoneProgress();
+ if (!debugMode) {
+ determineGravitonShardAmount();
+ }
+
+ // Do module calculations and checks
+ if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) {
+ for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) {
+ if (allowModuleConnection(module, this)) {
module.connect();
- module.setHeat(calculateMaxHeatForModules(module, this));
- module.setSpeedBonus(calucateSpeedBonusForModules(module, this));
- module.setMaxParallel(calucateMaxParallelForModules(module, this));
+ calculateMaxHeatForModules(module, this);
+ calculateSpeedBonusForModules(module, this);
+ calculateMaxParallelForModules(module, this);
+ calculateEnergyDiscountForModules(module, this);
+ setMiscModuleParameters(module, this);
+ queryMilestoneStats(module, this);
+ if (!upgrades[28]) {
+ calculateProcessingVoltageForModules(module, this);
+ }
+ } else {
+ module.disconnect();
}
}
- }
- } else {
- if (moduleHatches.size() > 0) {
+ } else if (moduleHatches.size() > maxModuleCount) {
for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) {
module.disconnect();
}
}
+ if (mEfficiency < 0) mEfficiency = 0;
+ fixAllMaintenance();
}
- if (mEfficiency < 0) mEfficiency = 0;
- fixAllMaintenance();
}
}
@@ -376,11 +478,11 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
@Override
public String[] getInfoData() {
ArrayList<String> str = new ArrayList<>(Arrays.asList(super.getInfoData()));
- str.add("Output Buses:" + formatNumbers(mOutputBusses.size()));
- str.add("Output Hatches:" + formatNumbers(mOutputHatches.size()));
- str.add("Input Buses:" + formatNumbers(mInputBusses.size()));
- str.add("Input Hatches:" + formatNumbers(mInputHatches.size()));
- str.add("Max Parallel:" + formatNumbers(Math.pow(4, spacetimeCompressionFieldMetadata + 1)));
+ str.add(TOOLTIP_BAR);
+ str.add("Number of Rings: " + EnumChatFormatting.GOLD + ringAmount);
+ str.add("Total Upgrades Unlocked: " + EnumChatFormatting.GOLD + getTotalActiveUpgrades());
+ str.add("Connected Modules: " + EnumChatFormatting.GOLD + moduleHatches.size());
+ str.add(TOOLTIP_BAR);
return str.toArray(new String[0]);
}
@@ -413,7 +515,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
if (doesBindPlayerInventory()) {
builder.widget(
new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE).setPos(4, 4)
- .setSize(190, 91));
+ .setSize(190, 85));
} else {
builder.widget(
new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_NO_INVENTORY).setPos(4, 4)
@@ -422,6 +524,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
buildContext.addSyncedWindow(UPGRADE_TREE_WINDOW_ID, this::createUpgradeTreeWindow);
buildContext.addSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID, this::createIndividualUpgradeWindow);
buildContext.addSyncedWindow(FUEL_CONFIG_WINDOW_ID, this::createFuelConfigWindow);
+ buildContext.addSyncedWindow(BATTERY_CONFIG_WINDOW_ID, this::createBatteryWindow);
+ buildContext.addSyncedWindow(MILESTONE_WINDOW_ID, this::createMilestoneWindow);
+ buildContext.addSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID, this::createIndividualMilestoneWindow);
+ buildContext.addSyncedWindow(MANUAL_INSERTION_WINDOW_ID, this::createManualInsertionWindow);
builder.widget(
new ButtonWidget().setOnClick(
(clickData, widget) -> {
@@ -431,33 +537,61 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
button.add(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP);
return button.toArray(new IDrawable[0]);
- }).addTooltip("Path of Celestial Transcendence").setPos(174, 167))
+ }).addTooltip("Path of Celestial Transcendence").setPos(174, 167)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
.widget(
new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK_SMALL).setPos(174, 183)
.setSize(16, 6))
+ .widget(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ widget.getContext().openSyncedWindow(FUEL_CONFIG_WINDOW_ID);
+ }
+ }).setSize(16, 16).setBackground(() -> {
+ List<UITexture> button = new ArrayList<>();
+ button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
+ button.add(TecTechUITextures.OVERLAY_BUTTON_HEAT_ON);
+ return button.toArray(new IDrawable[0]);
+ }).addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")).setPos(174, 110)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
.widget(
- new ButtonWidget().setOnClick(
- (clickData, widget) -> {
- if (!widget.isClient()) widget.getContext().openSyncedWindow(FUEL_CONFIG_WINDOW_ID);
- }).setSize(16, 16).setBackground(() -> {
- List<UITexture> button = new ArrayList<>();
- button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
- button.add(TecTechUITextures.OVERLAY_BUTTON_HEAT_ON);
- return button.toArray(new IDrawable[0]);
- }).addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")).setPos(174, 129))
- .widget(
- TextWidget.dynamicText(this::storedFuel).setDefaultColor(EnumChatFormatting.WHITE).setPos(3, 5)
- .setSize(74, 34));
-
- Widget powerSwitchButton = createPowerSwitchButton();
- builder.widget(powerSwitchButton)
+ TextWidget.dynamicText(this::storedFuel).setDefaultColor(EnumChatFormatting.WHITE).setPos(6, 8)
+ .setSize(74, 34))
+ .widget(createPowerSwitchButton()).widget(createBatteryButton(builder))
.widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> {
if (val) {
getBaseMetaTileEntity().enableWorking();
} else {
getBaseMetaTileEntity().disableWorking();
}
- }));
+ })).widget(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ checkMachine_EM(this.getBaseMetaTileEntity(), null);
+ }
+ }).setSize(16, 16).setBackground(() -> {
+ List<UITexture> button = new ArrayList<>();
+ button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
+ button.add(TecTechUITextures.OVERLAY_CYCLIC_BLUE);
+ return button.toArray(new IDrawable[0]);
+ }).addTooltip(translateToLocal("fog.button.structurecheck.tooltip")).setPos(8, 91)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ widget.getContext().openSyncedWindow(MILESTONE_WINDOW_ID);
+ }
+ }).setSize(16, 16).setBackground(() -> {
+ List<UITexture> button = new ArrayList<>();
+ button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
+ button.add(TecTechUITextures.OVERLAY_BUTTON_FLAG);
+ return button.toArray(new IDrawable[0]);
+ }).addTooltip(translateToLocal("fog.button.milestones.tooltip")).setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(174, 91));
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO).setSize(18, 18)
+ .setPos(172, 67));
}
@Override
@@ -483,6 +617,57 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
return (ButtonWidget) button;
}
+ protected Widget createBatteryButton(IWidgetBuilder<?> builder) {
+ Widget button = new ButtonWidget().setOnClick((clickData, widget) -> {
+ TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click");
+ if (clickData.mouseButton == 0) {
+ batteryCharging = !batteryCharging;
+ } else if (clickData.mouseButton == 1 && !widget.isClient() && upgrades[8]) {
+ widget.getContext().openSyncedWindow(BATTERY_CONFIG_WINDOW_ID);
+ }
+ }).setPlayClickSound(false).setBackground(() -> {
+ List<UITexture> ret = new ArrayList<>();
+ ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32);
+ if (batteryCharging) {
+ ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_ON);
+ } else {
+ ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_OFF);
+ }
+ return ret.toArray(new IDrawable[0]);
+ }).setPos(174, 129).setSize(16, 16);
+ button.addTooltip(translateToLocal("fog.button.battery.tooltip.01"))
+ .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.battery.tooltip.02"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY).attachSyncer(
+ new FakeSyncWidget.BooleanSyncer(() -> batteryCharging, val -> batteryCharging = val),
+ builder);
+ return button;
+ }
+
+ protected ModularWindow createBatteryWindow(final EntityPlayer player) {
+ final int WIDTH = 78;
+ final int HEIGHT = 52;
+ final int PARENT_WIDTH = getGUIWidth();
+ final int PARENT_HEIGHT = getGUIHeight();
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT);
+ builder.setGuiTint(getGUIColorization());
+ builder.setDraggable(true);
+ builder.setPos(
+ (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)).add(
+ Alignment.BottomRight
+ .getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT))
+ .add(WIDTH - 3, 0).subtract(0, 10)));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.batteryinfo").setPos(3, 4).setSize(74, 20))
+ .widget(
+ new NumericWidget().setSetter(val -> maxBatteryCharge = (int) val)
+ .setGetter(() -> maxBatteryCharge).setBounds(1, Integer.MAX_VALUE).setDefaultValue(100)
+ .setScrollValues(1, 4, 64).setTextAlignment(Alignment.Center)
+ .setTextColor(Color.WHITE.normal).setSize(70, 18).setPos(4, 25)
+ .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD));
+ return builder.build();
+ }
+
protected ModularWindow createFuelConfigWindow(final EntityPlayer player) {
final int WIDTH = 78;
final int HEIGHT = 130;
@@ -502,16 +687,16 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
new NumericWidget().setSetter(val -> fuelConsumptionFactor = (int) val)
.setGetter(() -> fuelConsumptionFactor).setBounds(1, calculateMaxFuelFactor(this))
.setDefaultValue(1).setScrollValues(1, 4, 64).setTextAlignment(Alignment.Center)
- .setTextColor(Color.WHITE.normal).setSize(70, 18).setPos(3, 35)
+ .setTextColor(Color.WHITE.normal).setSize(70, 18).setPos(4, 35)
.setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD))
.widget(
- new DrawableWidget().setDrawable(GT_UITextures.PICTURE_INFORMATION).setPos(65, 25)
- .setSize(4, 10)
+ new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO).setPos(64, 24).setSize(10, 10)
.addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.0"))
.addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.1"))
.addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.2"))
.addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.3"))
- .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.4")))
+ .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.4"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
.widget(
TextWidget.localised("gt.blockmachines.multimachine.FOG.fueltype").setPos(3, 57)
.setSize(74, 24))
@@ -533,7 +718,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
addFluidNameInfo(tooltip, fluid);
addAdditionalFluidInfo(tooltip, fluid);
}
- }.setPos(1, 1).setSize(16, 16))
+ }.setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(1, 1).setSize(16, 16))
.addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click");
selectedFuelType = 0;
@@ -561,7 +746,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
addFluidNameInfo(tooltip, fluid);
addAdditionalFluidInfo(tooltip, fluid);
}
- }.setPos(1, 1).setSize(16, 16))
+ }.setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(1, 1).setSize(16, 16))
.addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click");
selectedFuelType = 1;
@@ -588,7 +773,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
addFluidNameInfo(tooltip, fluid);
addAdditionalFluidInfo(tooltip, fluid);
}
- }.setPos(1, 1).setSize(16, 16))
+ }.setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(1, 1).setSize(16, 16))
.addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click");
selectedFuelType = 2;
@@ -605,8 +790,181 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
return builder.build();
}
+ private final int[] milestoneProgress = new int[] { 0, 0, 0, 0 };
+
+ protected ModularWindow createMilestoneWindow(final EntityPlayer player) {
+ final int WIDTH = 400;
+ final int HEIGHT = 300;
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ builder.setBackground(TecTechUITextures.BACKGROUND_SPACE);
+ builder.setGuiTint(getGUIColorization());
+ builder.setDraggable(true);
+ builder.widget(createMilestoneButton(0, 80, 100, new Pos2d(62, 24)));
+ builder.widget(createMilestoneButton(1, 70, 98, new Pos2d(263, 25)));
+ builder.widget(createMilestoneButton(2, 100, 100, new Pos2d(52, 169)));
+ builder.widget(createMilestoneButton(3, 100, 100, new Pos2d(248, 169)));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.powermilestone")
+ .setDefaultColor(EnumChatFormatting.GOLD).setPos(77, 45).setSize(50, 30));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.recipemilestone")
+ .setDefaultColor(EnumChatFormatting.GOLD).setPos(268, 45).setSize(60, 30));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone")
+ .setDefaultColor(EnumChatFormatting.GOLD).setPos(77, 190).setSize(50, 30));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone")
+ .setDefaultColor(EnumChatFormatting.GOLD).setPos(268, 190).setSize(60, 30));
+ builder.widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND)
+ .setPos(37, 70).setSize(130, 7))
+ .widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND)
+ .setPos(233, 70).setSize(130, 7))
+ .widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND)
+ .setPos(37, 215).setSize(130, 7))
+ .widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND)
+ .setPos(233, 215).setSize(130, 7));
+ builder.widget(
+ new ProgressBar().setProgress(() -> powerMilestonePercentage).setDirection(ProgressBar.Direction.RIGHT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED, 130).setSynced(true, false)
+ .setSize(130, 7).setPos(37, 70).addTooltip(milestoneProgressText(0, false))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> recipeMilestonePercentage)
+ .setDirection(ProgressBar.Direction.RIGHT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(233, 70)
+ .addTooltip(milestoneProgressText(1, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> fuelMilestonePercentage)
+ .setDirection(ProgressBar.Direction.RIGHT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(37, 215)
+ .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> structureMilestonePercentage)
+ .setDirection(ProgressBar.Direction.RIGHT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(233, 215)
+ .addTooltip(milestoneProgressText(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> invertedPowerMilestonePercentage)
+ .setDirection(ProgressBar.Direction.LEFT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(37, 70)
+ .addTooltip(milestoneProgressText(0, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> invertedRecipeMilestonePercentage)
+ .setDirection(ProgressBar.Direction.LEFT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(233, 70)
+ .addTooltip(milestoneProgressText(1, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> invertedFuelMilestonePercentage)
+ .setDirection(ProgressBar.Direction.LEFT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(37, 215)
+ .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(
+ new ProgressBar().setProgress(() -> invertedStructureMilestonePercentage)
+ .setDirection(ProgressBar.Direction.LEFT)
+ .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130)
+ .setSynced(true, false).setSize(130, 7).setPos(233, 215)
+ .addTooltip(milestoneProgressText(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY))
+ .widget(ButtonWidget.closeWindowButton(true).setPos(382, 6));
+ return builder.build();
+ }
+
+ protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer player) {
+ final int WIDTH = 150;
+ final int HEIGHT = 150;
+ int symbol_width;
+ int symbol_height;
+ String milestoneType;
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ UITexture symbol;
+ switch (currentMilestoneID) {
+ case 1 -> {
+ symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION;
+ symbol_width = 54;
+ symbol_height = 75;
+ milestoneType = "recipe";
+ }
+ case 2 -> {
+ symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST;
+ symbol_width = 75;
+ symbol_height = 75;
+ milestoneType = "fuel";
+ }
+ case 3 -> {
+ symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION;
+ symbol_width = 75;
+ symbol_height = 75;
+ milestoneType = "purchasable";
+ }
+ default -> {
+ symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE;
+ symbol_width = 60;
+ symbol_height = 75;
+ milestoneType = "power";
+ }
+ }
+
+ builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE);
+ builder.setDraggable(true);
+ builder.widget(ButtonWidget.closeWindowButton(true).setPos(134, 4))
+ .widget(
+ new DrawableWidget().setDrawable(symbol).setSize(symbol_width, symbol_height)
+ .setPos((WIDTH - symbol_width) / 2, (HEIGHT - symbol_height) / 2))
+ .widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG." + milestoneType + "milestone")
+ .setDefaultColor(EnumChatFormatting.GOLD).setTextAlignment(Alignment.Center)
+ .setPos(0, 8).setSize(150, 15))
+ .widget(
+ TextWidget.dynamicText(this::inversionStatusText).setDefaultColor(EnumChatFormatting.AQUA)
+ .setTextAlignment(Alignment.Center).setScale(0.8f).setPos(0, 120).setSize(150, 15))
+ .widget(
+ TextWidget.dynamicText(() -> totalMilestoneProgress(currentMilestoneID)).setScale(0.7f)
+ .setDefaultColor(EnumChatFormatting.WHITE).setTextAlignment(Alignment.Center)
+ .setPos(5, 30).setSize(140, 30))
+ .widget(
+ TextWidget.dynamicText(() -> currentMilestone(currentMilestoneID)).setScale(0.7f)
+ .setDefaultColor(EnumChatFormatting.WHITE).setTextAlignment(Alignment.Center)
+ .setPos(5, 50).setSize(140, 30))
+ .widget(
+ TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID, true)).setScale(0.7f)
+ .setDefaultColor(EnumChatFormatting.WHITE).setSize(140, 30).setPos(5, 70))
+ .widget(
+ TextWidget.dynamicText(() -> gravitonShardAmountText(currentMilestoneID)).setScale(0.7f)
+ .setDefaultColor(EnumChatFormatting.WHITE).setSize(140, 30).setPos(5, 90));
+
+ return builder.build();
+ }
+
+ private int currentMilestoneID = 0;
+
+ private Widget createMilestoneButton(int milestoneID, int width, int height, Pos2d pos) {
+ return new ButtonWidget().setOnClick((clickData, widget) -> {
+ currentMilestoneID = milestoneID;
+ if (!widget.isClient()) {
+ widget.getContext().openSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID);
+ }
+ }).setSize(width, height).setBackground(() -> switch (milestoneID) {
+ case 1 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW };
+ case 2 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW };
+ case 3 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW };
+ default -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW };
+ }).addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfo")).setPos(pos)
+ .setTooltipShowUpDelay(TOOLTIP_DELAY);
+ }
+
private int currentUpgradeID = 0;
private int currentColorCode = 0;
+ private int currentMilestoneBG = 0;
+ private int gravitonShardCost = 0;
private int[] prereqUpgrades = new int[] {};
private int[] followupUpgrades = new int[] {};
private boolean allPrereqRequired = false;
@@ -618,309 +976,380 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
final int PARENT_WIDTH = 300;
final int PARENT_HEIGHT = 1000;
ModularWindow.Builder builder = ModularWindow.builder(PARENT_WIDTH, PARENT_HEIGHT);
- scrollable.widget(
- createUpgradeBox(0, 0, new int[] {}, false, new int[] { 1 }, false, new Pos2d(126, 56), scrollable))
+ scrollable
+ .widget(
+ createUpgradeBox(
+ 0,
+ 0,
+ 3,
+ new int[] {},
+ false,
+ new int[] { 1 },
+ false,
+ 0,
+ new Pos2d(126, 56),
+ scrollable))
.widget(
createUpgradeBox(
1,
0,
+ 1,
new int[] { 0 },
false,
new int[] { 2, 3 },
false,
+ 1,
new Pos2d(126, 116),
scrollable))
.widget(
createUpgradeBox(
2,
0,
+ 2,
new int[] { 1 },
false,
new int[] { 4, 5 },
false,
+ 1,
new Pos2d(96, 176),
scrollable))
.widget(
createUpgradeBox(
3,
0,
+ 2,
new int[] { 1 },
false,
new int[] { 5, 6 },
false,
+ 1,
new Pos2d(156, 176),
scrollable))
.widget(
createUpgradeBox(
4,
0,
+ 0,
new int[] { 2 },
false,
new int[] { 8 },
false,
+ 1,
new Pos2d(66, 236),
scrollable))
.widget(
createUpgradeBox(
5,
0,
+ 3,
new int[] { 2, 3 },
false,
new int[] { 7 },
false,
+ 1,
new Pos2d(126, 236),
scrollable))
.widget(
createUpgradeBox(
6,
0,
+ 1,
new int[] { 3 },
false,
new int[] { 10 },
false,
+ 1,
new Pos2d(186, 236),
scrollable))
.widget(
createUpgradeBox(
7,
0,
+ 3,
new int[] { 5 },
false,
new int[] { 8, 9, 10 },
false,
+ 2,
new Pos2d(126, 296),
scrollable))
.widget(
createUpgradeBox(
8,
0,
+ 0,
new int[] { 4, 7 },
true,
new int[] { 11 },
false,
+ 2,
new Pos2d(56, 356),
scrollable))
.widget(
createUpgradeBox(
9,
0,
+ 2,
new int[] { 7 },
false,
new int[] {},
false,
+ 2,
new Pos2d(126, 356),
scrollable))
.widget(
createUpgradeBox(
10,
0,
+ 1,
new int[] { 6, 7 },
true,
new int[] { 11 },
false,
+ 2,
new Pos2d(196, 356),
scrollable))
.widget(
createUpgradeBox(
11,
0,
+ 3,
new int[] { 8, 10 },
false,
new int[] { 12, 13, 14 },
false,
+ 2,
new Pos2d(126, 416),
scrollable))
.widget(
createUpgradeBox(
12,
1,
+ 2,
new int[] { 11 },
false,
new int[] { 17 },
true,
+ 3,
new Pos2d(66, 476),
scrollable))
.widget(
createUpgradeBox(
13,
2,
+ 1,
new int[] { 11 },
false,
new int[] { 18 },
true,
+ 3,
new Pos2d(126, 476),
scrollable))
.widget(
createUpgradeBox(
14,
3,
+ 0,
new int[] { 11 },
false,
new int[] { 15, 19 },
true,
+ 3,
new Pos2d(186, 476),
scrollable))
.widget(
createUpgradeBox(
15,
3,
+ 1,
new int[] { 14 },
false,
new int[] {},
false,
+ 4,
new Pos2d(246, 496),
scrollable))
.widget(
createUpgradeBox(
16,
1,
+ 1,
new int[] { 17 },
false,
new int[] {},
false,
+ 4,
new Pos2d(6, 556),
scrollable))
.widget(
createUpgradeBox(
17,
1,
+ 0,
new int[] { 12 },
false,
new int[] { 16, 20 },
false,
+ 3,
new Pos2d(66, 536),
scrollable))
.widget(
createUpgradeBox(
18,
2,
+ 1,
new int[] { 13 },
false,
new int[] { 21 },
false,
+ 3,
new Pos2d(126, 536),
scrollable))
.widget(
createUpgradeBox(
19,
3,
+ 0,
new int[] { 14 },
false,
new int[] { 22 },
false,
+ 3,
new Pos2d(186, 536),
scrollable))
.widget(
createUpgradeBox(
20,
1,
+ 0,
new int[] { 17 },
false,
new int[] { 23 },
false,
+ 3,
new Pos2d(66, 596),
scrollable))
.widget(
createUpgradeBox(
21,
2,
+ 1,
new int[] { 18 },
false,
new int[] { 23 },
false,
+ 3,
new Pos2d(126, 596),
scrollable))
.widget(
createUpgradeBox(
22,
3,
+ 1,
new int[] { 19 },
false,
new int[] { 23 },
false,
+ 3,
new Pos2d(186, 596),
scrollable))
.widget(
createUpgradeBox(
23,
0,
+ 0,
new int[] { 20, 21, 22 },
false,
new int[] { 24 },
false,
+ 4,
new Pos2d(126, 656),
scrollable))
.widget(
createUpgradeBox(
24,
0,
+ 1,
new int[] { 23 },
false,
new int[] { 25 },
false,
+ 5,
new Pos2d(126, 718),
scrollable))
.widget(
createUpgradeBox(
25,
0,
+ 1,
new int[] { 24 },
false,
new int[] { 26 },
false,
+ 6,
new Pos2d(36, 758),
scrollable))
.widget(
createUpgradeBox(
26,
0,
+ 3,
new int[] { 25 },
false,
new int[] { 27 },
false,
+ 7,
new Pos2d(36, 848),
scrollable))
.widget(
createUpgradeBox(
27,
0,
+ 2,
new int[] { 26 },
false,
new int[] { 28 },
false,
+ 8,
new Pos2d(126, 888),
scrollable))
.widget(
createUpgradeBox(
28,
0,
+ 0,
new int[] { 27 },
false,
new int[] { 29 },
false,
+ 9,
new Pos2d(216, 848),
scrollable))
.widget(
createUpgradeBox(
29,
0,
+ 3,
new int[] { 28 },
false,
new int[] { 30 },
false,
+ 10,
new Pos2d(216, 758),
scrollable))
.widget(
createUpgradeBox(
30,
0,
+ 3,
new int[] { 29 },
false,
new int[] {},
false,
+ 12,
new Pos2d(126, 798),
scrollable))
- .widget(new TextWidget("").setPos(0, 1000));
+ .widget(new TextWidget("").setPos(0, 945));
builder.widget(
new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_STAR).setPos(0, 350).setSize(300, 300))
@@ -932,36 +1361,132 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
.addChild(
new ButtonWidget().setOnClick((clickData, widget) -> upgrades = new boolean[31])
.setSize(40, 15).setBackground(GT_UITextures.BUTTON_STANDARD)
- .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")))
+ .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY))
.addChild(
new TextWidget(translateToLocal("fog.debug.resetbutton.text"))
.setTextAlignment(Alignment.Center).setScale(0.57f).setMaxWidth(36)
.setPos(3, 3))
+ .addChild(
+ new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val)
+ .setGetter(() -> gravitonShardsAvailable).setBounds(0, 112)
+ .setDefaultValue(0).setScrollValues(1, 4, 64)
+ .setTextAlignment(Alignment.Center).setTextColor(Color.WHITE.normal)
+ .setSize(25, 18).setPos(4, 16)
+ .addTooltip(translateToLocal("fog.debug.gravitonshardsetter.tooltip"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD))
+ .addChild(
+ new ButtonWidget().setOnClick((clickData, widget) -> Arrays.fill(upgrades, true))
+ .setSize(40, 15).setBackground(GT_UITextures.BUTTON_STANDARD)
+ .addTooltip(translateToLocal("fog.debug.unlockall.text"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(0, 35))
+ .addChild(
+ new TextWidget(translateToLocal("fog.debug.unlockall.text"))
+ .setTextAlignment(Alignment.Center).setScale(0.57f).setMaxWidth(36)
+ .setPos(3, 38))
.setPos(4, 354));
+
}
return builder.build();
}
protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) {
- UITexture background = switch (currentColorCode) {
- case 1 -> TecTechUITextures.BACKGROUND_GLOW_PURPLE;
- case 2 -> TecTechUITextures.BACKGROUND_GLOW_ORANGE;
- case 3 -> TecTechUITextures.BACKGROUND_GLOW_GREEN;
- default -> TecTechUITextures.BACKGROUND_GLOW_BLUE;
- };
- ModularWindow.Builder builder = ModularWindow.builder(200, 200).setBackground(background)
- .widget(ButtonWidget.closeWindowButton(true).setPos(185, 3))
+ UITexture background;
+ UITexture overlay;
+ UITexture milestoneSymbol;
+ float widthRatio;
+ switch (currentColorCode) {
+ case 1 -> {
+ background = TecTechUITextures.BACKGROUND_GLOW_PURPLE;
+ overlay = TecTechUITextures.PICTURE_OVERLAY_PURPLE;
+ }
+ case 2 -> {
+ background = TecTechUITextures.BACKGROUND_GLOW_ORANGE;
+ overlay = TecTechUITextures.PICTURE_OVERLAY_ORANGE;
+ }
+ case 3 -> {
+ background = TecTechUITextures.BACKGROUND_GLOW_GREEN;
+ overlay = TecTechUITextures.PICTURE_OVERLAY_GREEN;
+ }
+ default -> {
+ background = TecTechUITextures.BACKGROUND_GLOW_BLUE;
+ overlay = TecTechUITextures.PICTURE_OVERLAY_BLUE;
+ }
+ }
+ switch (currentMilestoneBG) {
+ case 1 -> {
+ milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION;
+ widthRatio = 0.72f;
+ }
+ case 2 -> {
+ milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST;
+ widthRatio = 1f;
+ }
+ case 3 -> {
+ milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION;
+ widthRatio = 1f;
+ }
+ default -> {
+ milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE;
+ widthRatio = 0.8f;
+ }
+ }
+ int WIDTH = 250;
+ int HEIGHT = 250;
+ int LORE_POS = 110;
+ if (currentUpgradeID == 0) {
+ WIDTH = 300;
+ HEIGHT = 300;
+ LORE_POS = 85;
+ }
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT).setBackground(background)
+ .widget(ButtonWidget.closeWindowButton(true).setPos(WIDTH - 15, 3))
+ .widget(
+ new DrawableWidget().setDrawable(milestoneSymbol)
+ .setPos((int) ((1 - widthRatio / 2) * WIDTH / 2), HEIGHT / 4)
+ .setSize((int) (WIDTH / 2 * widthRatio), HEIGHT / 2))
+ .widget(
+ new DrawableWidget().setDrawable(overlay).setPos(WIDTH / 4, HEIGHT / 4)
+ .setSize(WIDTH / 2, HEIGHT / 2))
.widget(
new MultiChildWidget()
.addChild(
+ new TextWidget(translateToLocal("fog.upgrade.tt." + (currentUpgradeID)))
+ .setTextAlignment(Alignment.Center)
+ .setDefaultColor(EnumChatFormatting.GOLD).setSize(WIDTH - 15, 30)
+ .setPos(9, 5))
+ .addChild(
new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID)))
- .setTextAlignment(Alignment.Center).setMaxWidth(185)
- .setDefaultColor(0x9c9c9c).setPos(9, 35))
+ .setTextAlignment(Alignment.CenterLeft).setDefaultColor(0x9c9c9c)
+ .setSize(WIDTH - 15, LORE_POS - 30).setPos(9, 30))
+ .addChild(
+ new TextWidget(
+ EnumChatFormatting.ITALIC
+ + translateToLocal("fog.upgrade.lore." + (currentUpgradeID)))
+ .setTextAlignment(Alignment.Center)
+ .setDefaultColor(0x9c9c9c)
+ .setSize(WIDTH - 15, (int) (HEIGHT * 0.9) - LORE_POS)
+ .setPos(9, LORE_POS))
.addChild(
- new TextWidget(translateToLocal("fog.upgrade.lore." + (currentUpgradeID)))
- .setTextAlignment(Alignment.Center).setMaxWidth(185)
- .setDefaultColor(0x9c9c9c).setPos(9, 110))
- .setSize(200, 200))
+ new TextWidget(
+ translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + " "
+ + EnumChatFormatting.BLUE
+ + gravitonShardCost).setTextAlignment(Alignment.Center)
+ .setScale(0.7f).setMaxWidth(70)
+ .setDefaultColor(0x9c9c9c).setPos(11, HEIGHT - 25))
+ .addChild(
+ new TextWidget(
+ translateToLocal("gt.blockmachines.multimachine.FOG.availableshards"))
+ .setTextAlignment(Alignment.Center).setScale(0.7f)
+ .setMaxWidth(90).setDefaultColor(0x9c9c9c)
+ .setPos(WIDTH - 87, HEIGHT - 25))
+ .addChild(
+ TextWidget.dynamicText(this::gravitonShardAmount)
+ .setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(90)
+ .setDefaultColor(0x9c9c9c).setPos(WIDTH - 27, HEIGHT - 18)))
+ .setSize(WIDTH, HEIGHT)
+
.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
int unlockedPrereqUpgrades = 0;
int unlockedFollowupUpgrades = 0;
@@ -973,7 +1498,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
}
}
if (allPrereqRequired) {
- if (unlockedPrereqUpgrades == prereqUpgrades.length) {
+ if (unlockedPrereqUpgrades == prereqUpgrades.length
+ && gravitonShardsAvailable >= gravitonShardCost) {
+ gravitonShardsAvailable -= gravitonShardCost;
+ gravitonShardsSpent += gravitonShardCost;
upgrades[currentUpgradeID] = true;
}
} else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) {
@@ -983,13 +1511,11 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
unlockedSplitUpgrades++;
}
}
- for (int maxSplitUpgrades : RING_UPGRADES) {
- if (upgrades[maxSplitUpgrades]) {
- unlockedSplitUpgrades--;
- }
- }
+ unlockedSplitUpgrades -= (ringAmount - 1);
}
- if (unlockedSplitUpgrades <= 0) {
+ if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) {
+ gravitonShardsAvailable -= gravitonShardCost;
+ gravitonShardsSpent += gravitonShardCost;
upgrades[currentUpgradeID] = true;
}
}
@@ -1000,6 +1526,8 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
}
}
if (unlockedFollowupUpgrades == 0) {
+ gravitonShardsAvailable += gravitonShardCost;
+ gravitonShardsSpent -= gravitonShardCost;
upgrades[currentUpgradeID] = false;
}
}
@@ -1009,11 +1537,18 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
} else {
return new IDrawable[] { GT_UITextures.BUTTON_STANDARD };
}
- }).addTooltip(translateToLocal("fog.upgrade.confirm")))
+ }).addTooltip(translateToLocal("fog.upgrade.confirm")).setTooltipShowUpDelay(TOOLTIP_DELAY))
.addChild(
new TextWidget(translateToLocal("fog.upgrade.confirm"))
.setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(36).setPos(3, 5))
- .setPos(79, 177));
+ .addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (!widget.isClient()) {
+ widget.getContext().openSyncedWindow(MANUAL_INSERTION_WINDOW_ID);
+ widget.getContext().closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID);
+ widget.getContext().closeWindow(UPGRADE_TREE_WINDOW_ID);
+ }
+ }).setBackground(TecTechUITextures.BUTTON_CELESTIAL_32x32).setPos(50, 50))
+ .setPos(WIDTH / 2 - 21, (int) (HEIGHT * 0.9)));
return builder.build();
}
@@ -1021,19 +1556,24 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
* @param upgradeID ID of the upgrade
* @param colorCode Number deciding which colored background to use, 0 for blue, 1 for purple, 2 for
* orange and 3 for green
+ * @param milestone Number deciding which milestone symbol to display in the background, 0 for charge,
+ * 1 for conversion, 2 for catalyst and 3 for composition
* @param prerequisiteUpgradeIDs IDs of the prior upgrades directly connected to the current one
* @param requireAllPrerequisites Decides how many connected prerequisite upgrades have to be unlocked to be able to
* unlock this one. True means ALL, False means AT LEAST ONE
* @param followingUpgradeIDs IDs of the following upgrades directly connected to the current one
* @param isStartOfSplit Whether this upgrade is one of the initial split upgrades
+ * @param shardCost How many graviton shards are needed to unlock this upgrade
* @param pos Position of the upgrade inside the scrollableWidget
*/
- private Widget createUpgradeBox(int upgradeID, int colorCode, int[] prerequisiteUpgradeIDs,
- boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, Pos2d pos,
- IWidgetBuilder<?> builder) {
+ private Widget createUpgradeBox(int upgradeID, int colorCode, int milestone, int[] prerequisiteUpgradeIDs,
+ boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, int shardCost,
+ Pos2d pos, IWidgetBuilder<?> builder) {
return new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> {
currentUpgradeID = upgradeID;
currentColorCode = colorCode;
+ currentMilestoneBG = milestone;
+ gravitonShardCost = shardCost;
prereqUpgrades = prerequisiteUpgradeIDs;
allPrereqRequired = requireAllPrerequisites;
followupUpgrades = followingUpgradeIDs;
@@ -1045,7 +1585,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
} else {
return new IDrawable[] { GT_UITextures.BUTTON_STANDARD };
}
- }).addTooltip(translateToLocal("fog.upgrade.tt." + upgradeID)))
+ }).addTooltip(translateToLocal("fog.upgrade.tt." + upgradeID)).setTooltipShowUpDelay(TOOLTIP_DELAY))
.addChild(
new TextWidget(translateToLocal("fog.upgrade.tt." + upgradeID))
.setTextAlignment(Alignment.Center).setScale(0.57f).setMaxWidth(36).setPos(3, 3))
@@ -1054,6 +1594,64 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
builder);
}
+ List<ItemStack> inputs = new ArrayList<>(
+ Arrays.asList(
+ ItemList.Electric_Motor_UMV.get(13L),
+ ItemList.Electric_Pump_UXV.get(32L),
+ ItemList.Electric_Piston_UXV.get(32L),
+ ItemList.Robot_Arm_UXV.get(32L),
+ ItemList.Superconducting_Magnet_Solenoid_UIV.get(48L),
+ ItemList.NaquadriaSupersolid.get(32L),
+ CustomItemList.astralArrayFabricator.get(36L),
+ CustomItemList.Machine_Multi_EyeOfHarmony.get(2L)));
+
+ protected ModularWindow createManualInsertionWindow(final EntityPlayer player) {
+ final int WIDTH = 189;
+ final int HEIGHT = 84;
+ final int PARENT_WIDTH = getGUIWidth();
+ final int PARENT_HEIGHT = getGUIHeight();
+ final MultiChildWidget columns = new MultiChildWidget();
+ final DynamicPositionedColumn column1 = new DynamicPositionedColumn();
+ final DynamicPositionedColumn column2 = new DynamicPositionedColumn();
+ final DynamicPositionedColumn column3 = new DynamicPositionedColumn();
+ List<DynamicPositionedColumn> columnList = Arrays.asList(column1, column2, column3);
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT);
+ builder.setGuiTint(getGUIColorization());
+ builder.setDraggable(true);
+ builder.setPos(
+ (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT))
+ .add(
+ Alignment.TopRight
+ .getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)))
+ .subtract(5, 0).add(0, 4));
+ builder.widget(
+ SlotGroup.ofItemHandler(inputSlotHandler, 4).startFromSlot(0).endAtSlot(15).phantom(false)
+ .background(getGUITextureSet().getItemSlot()).build().setPos(111, 6));
+ for (int i = 0; i < inputs.size(); i++) {
+ int index = i;
+ int cleanDiv4 = index / 4;
+ builder.widget(
+ new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_PRESSED)
+ .setPos(6 + cleanDiv4 * 36, 6 + index % 4 * 18).setSize(18, 18));
+ columnList.get(cleanDiv4)
+ .addChild(new ItemDrawable().setItem(inputs.get(index)).asWidget().dynamicTooltip(() -> {
+ List<String> tooltip = new ArrayList<>();
+ tooltip.add(inputs.get(index) != null ? inputs.get(index).getDisplayName() : "");
+ return tooltip;
+ }).setSize(16, 16));
+ }
+
+ columns.addChild(
+ column1.setSpace(2).setAlignment(MainAxisAlignment.SPACE_BETWEEN).setSize(34, 72).setPos(1, 1));
+ columns.addChild(
+ column2.setSpace(2).setAlignment(MainAxisAlignment.SPACE_BETWEEN).setSize(34, 72).setPos(37, 1));
+ columns.addChild(
+ column3.setSpace(2).setAlignment(MainAxisAlignment.SPACE_BETWEEN).setSize(34, 72).setPos(73, 1));
+ builder.widget(columns.setSize(72, 72).setPos(6, 6));
+ return builder.build();
+ }
+
@Override
public GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
@@ -1080,23 +1678,27 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
return new String[] { "Forge of Gods multiblock" };
}
- public Integer getFuelType() {
+ public int getFuelType() {
return selectedFuelType;
}
- private void setFuelType(Integer fuelType) {
+ private void setFuelType(int fuelType) {
selectedFuelType = fuelType;
}
- public Integer getFuelFactor() {
+ public int getFuelFactor() {
return fuelConsumptionFactor;
}
- public Boolean isUpgradeActive(Integer upgradeID) {
+ public boolean isUpgradeActive(int upgradeID) {
return upgrades[upgradeID];
}
- public Integer getTotalActiveUpgrades() {
+ public int getRingAmount() {
+ return ringAmount;
+ }
+
+ public int getTotalActiveUpgrades() {
int totalUpgrades = 0;
for (boolean upgrade : upgrades) {
if (upgrade) {
@@ -1107,43 +1709,419 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
}
private Text fuelUsage() {
- return new Text(fuelConsumption + " L/s");
+ return new Text(fuelConsumption + " L/5s");
+ }
+
+ private Text gravitonShardAmount() {
+ EnumChatFormatting enoughGravitonShards = EnumChatFormatting.RED;
+ if (gravitonShardsAvailable >= gravitonShardCost) {
+ enoughGravitonShards = EnumChatFormatting.GREEN;
+ }
+ return new Text(enoughGravitonShards + Integer.toString(gravitonShardsAvailable));
+
}
private Text storedFuel() {
+ if (internalBattery == 0) {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.storedstartupfuel") + " "
+ + stellarFuelAmount
+ + "/"
+ + neededStartupFuel);
+ }
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " "
+ + internalBattery
+ + "/"
+ + maxBatteryCharge);
+ }
+
+ private void checkInversionStatus() {
+ int inversionChecker = 0;
+ for (int progress : milestoneProgress) {
+ if (progress < 7) {
+ break;
+ }
+ inversionChecker++;
+ }
+ inversion = inversionChecker == 4;
+ }
+
+ private Text inversionStatusText() {
+ String inversionStatus = "";
+ if (inversion) {
+ inversionStatus = EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.inversion");
+ }
+ return new Text(inversionStatus);
+ }
+
+ private void determineCompositionMilestoneLevel() {
+ int[] uniqueModuleCount = new int[5];
+ int smelting = 0;
+ int molten = 0;
+ int plasma = 0;
+ int exotic = 0;
+ int exoticMagmatter = 0;
+ for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) {
+ if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) {
+ uniqueModuleCount[0] = 1;
+ smelting++;
+ continue;
+ }
+ if (module instanceof GT_MetaTileEntity_EM_MoltenModule) {
+ uniqueModuleCount[1] = 1;
+ molten++;
+ continue;
+ }
+ if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) {
+ uniqueModuleCount[2] = 1;
+ plasma++;
+ continue;
+ }
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ if (!((GT_MetaTileEntity_EM_ExoticModule) module).isMagmatterModeOn()) {
+ uniqueModuleCount[3] = 1;
+ exotic++;
+ } else {
+ uniqueModuleCount[4] = 1;
+ exoticMagmatter++;
+ }
+ }
+
+ }
+ totalExtensionsBuilt = Arrays.stream(uniqueModuleCount).sum() + ringAmount - 1;
+ if (inversion) {
+ totalExtensionsBuilt += (smelting - 1
+ + (molten - 1) * 2
+ + (plasma - 1) * 3
+ + (exotic - 1) * 4
+ + (exoticMagmatter - 1) * 5) / 5f;
+ }
+ milestoneProgress[3] = (int) Math.floor(totalExtensionsBuilt);
+ }
+
+ private void determineMilestoneProgress() {
+ int closestRelevantSeven;
+ float rawProgress;
+ float actualProgress;
+ if (milestoneProgress[0] < 7) {
+ powerMilestonePercentage = (float) max(
+ (log((totalPowerConsumed.divide(BigInteger.valueOf(POWER_MILESTONE_CONSTANT))).longValue())
+ / POWER_LOG_CONSTANT + 1),
+ 0) / 7;
+ milestoneProgress[0] = (int) floor(powerMilestonePercentage * 7);
+ }
+ if (inversion) {
+ rawProgress = (totalPowerConsumed.divide(POWER_MILESTONE_T7_CONSTANT).floatValue() - 1) / 7;
+ closestRelevantSeven = (int) floor(rawProgress);
+ actualProgress = rawProgress - closestRelevantSeven;
+ milestoneProgress[0] = 7 + (int) floor(rawProgress * 7);
+ if (closestRelevantSeven % 2 == 0) {
+ invertedPowerMilestonePercentage = actualProgress;
+ powerMilestonePercentage = 1 - invertedPowerMilestonePercentage;
+ } else {
+ powerMilestonePercentage = actualProgress;
+ invertedPowerMilestonePercentage = 1 - powerMilestonePercentage;
+ }
+ }
+
+ if (milestoneProgress[1] < 7) {
+ recipeMilestonePercentage = (float) max(
+ (log(totalRecipesProcessed * 1f / RECIPE_MILESTONE_CONSTANT) / RECIPE_LOG_CONSTANT + 1),
+ 0) / 7;
+ milestoneProgress[1] = (int) floor(recipeMilestonePercentage * 7);
+ }
+ if (inversion) {
+ rawProgress = (((float) totalRecipesProcessed / RECIPE_MILESTONE_T7_CONSTANT) - 1) / 7;
+ closestRelevantSeven = (int) floor(rawProgress);
+ actualProgress = rawProgress - closestRelevantSeven;
+ milestoneProgress[1] = 7 + (int) floor(rawProgress * 7);
+ if (closestRelevantSeven % 2 == 0) {
+ invertedRecipeMilestonePercentage = actualProgress;
+ recipeMilestonePercentage = 1 - invertedRecipeMilestonePercentage;
+ } else {
+ recipeMilestonePercentage = actualProgress;
+ invertedRecipeMilestonePercentage = 1 - recipeMilestonePercentage;
+ }
+ }
+ if (milestoneProgress[2] < 7) {
+ fuelMilestonePercentage = (float) max(
+ (log(totalFuelConsumed * 1f / FUEL_MILESTONE_CONSTANT) / FUEL_LOG_CONSTANT + 1),
+ 0) / 7;
+ milestoneProgress[2] = (int) floor(fuelMilestonePercentage * 7);
+ }
+ if (inversion) {
+ rawProgress = (((float) totalFuelConsumed / FUEL_MILESTONE_T7_CONSTANT) - 1) / 7;
+ closestRelevantSeven = (int) floor(rawProgress);
+ actualProgress = rawProgress - closestRelevantSeven;
+ milestoneProgress[2] = 7 + (int) floor(rawProgress * 7);
+ if ((closestRelevantSeven % 2) == 0) {
+ invertedFuelMilestonePercentage = actualProgress;
+ fuelMilestonePercentage = 1 - invertedFuelMilestonePercentage;
+ } else {
+ fuelMilestonePercentage = actualProgress;
+ invertedFuelMilestonePercentage = 1 - fuelMilestonePercentage;
+ }
+ }
+
+ if (milestoneProgress[3] < 7) {
+ structureMilestonePercentage = totalExtensionsBuilt / 7f;
+ }
+ if (inversion) {
+ rawProgress = (totalExtensionsBuilt - 7) / 7f;
+ closestRelevantSeven = (int) floor(rawProgress);
+ actualProgress = rawProgress - closestRelevantSeven;
+ if ((closestRelevantSeven % 2) == 0) {
+ invertedStructureMilestonePercentage = actualProgress;
+ structureMilestonePercentage = 1 - invertedStructureMilestonePercentage;
+ } else {
+ structureMilestonePercentage = actualProgress;
+ invertedStructureMilestonePercentage = 1 - structureMilestonePercentage;
+ }
+ }
+ }
+
+ private void determineGravitonShardAmount() {
+ int sum = 0;
+ for (int progress : milestoneProgress) {
+ if (!inversion) {
+ progress = Math.min(progress, 7);
+ }
+ sum += progress * (progress + 1) / 2;
+ }
+ gravitonShardsAvailable = sum - gravitonShardsSpent;
+ }
+
+ private Text gravitonShardAmountText(int milestoneID) {
+ int sum;
+ int progress = milestoneProgress[milestoneID];
+ if (!inversion) {
+ progress = Math.min(progress, 7);
+ }
+ sum = progress * (progress + 1) / 2;
return new Text(
- translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " + internalBattery + "/100");
+ translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum);
+ }
+
+ private Text totalMilestoneProgress(int milestoneID) {
+ long progress;
+ BigInteger bigProgress;
+ String suffix;
+ boolean shift = Interactable.hasShiftDown();
+ switch (milestoneID) {
+ case 1 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes");
+ progress = totalRecipesProcessed;
+ }
+ case 2 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel");
+ progress = totalFuelConsumed;
+ }
+ case 3 -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions");
+ progress = milestoneProgress[3];
+ }
+ default -> {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
+ bigProgress = totalPowerConsumed;
+ if (!shift && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + toExponentForm(bigProgress)
+ + " "
+ + suffix);
+ } else {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + bigProgress
+ + " "
+ + suffix);
+ }
+ }
+ }
+ if (!shift) {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + formatNumbers(progress)
+ + " "
+ + suffix);
+ } else {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + progress
+ + " "
+ + suffix);
+ }
+
+ }
+
+ private Text currentMilestone(int milestoneID) {
+ return new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress") + ": "
+ + EnumChatFormatting.GRAY
+ + milestoneProgress[milestoneID]);
+ }
+
+ private Text milestoneProgressText(int milestoneID, boolean formatting) {
+ long max;
+ BigInteger bigMax;
+ String suffix;
+ String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress");
+ Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete"));
+ if (Interactable.hasShiftDown()) {
+ formatting = false;
+ done = new Text(
+ translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")
+ + EnumChatFormatting.DARK_RED
+ + "?");
+ }
+ switch (milestoneID) {
+ case 0:
+ if (milestoneProgress[0] < 7 || inversion) {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power");
+ if (inversion) {
+ bigMax = POWER_MILESTONE_T7_CONSTANT.multiply(BigInteger.valueOf(milestoneProgress[0] - 5));
+ } else {
+ bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0]))
+ .multiply(BigInteger.valueOf(LongMath.pow(10, 15)));
+ }
+ if (formatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) {
+ return new Text(
+ progressText + ": " + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix);
+ } else {
+ return new Text(progressText + ": " + EnumChatFormatting.GRAY + bigMax + " " + suffix);
+ }
+ } else {
+ return done;
+ }
+ case 1:
+ if (milestoneProgress[1] < 7 || inversion) {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes");
+ if (inversion) {
+ max = RECIPE_MILESTONE_T7_CONSTANT * (milestoneProgress[1] - 5);
+ } else {
+ max = LongMath.pow(6, milestoneProgress[1]) * LongMath.pow(10, 7);
+ }
+ break;
+ } else {
+ return done;
+ }
+ case 2:
+ if (milestoneProgress[2] < 7 || inversion) {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel");
+ if (inversion) {
+ max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5);
+ } else {
+ max = LongMath.pow(3, milestoneProgress[2]) * LongMath.pow(10, 4);
+ }
+ break;
+ } else {
+ return done;
+ }
+ case 3:
+ if (milestoneProgress[3] < 7 || inversion) {
+ suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions");
+ max = milestoneProgress[3] + 1;
+ break;
+ } else {
+ return done;
+ }
+ default:
+ return new Text("Error");
+ }
+ if (formatting) {
+ return new Text(progressText + ": " + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix);
+ } else {
+ return new Text(progressText + ": " + EnumChatFormatting.GRAY + max + " " + suffix);
+ }
}
- private void increaseBattery(Integer amount) {
- if ((internalBattery + amount) <= 100) {
+ private void increaseBattery(int amount) {
+ if ((internalBattery + amount) <= maxBatteryCharge) {
internalBattery += amount;
+ } else {
+ batteryCharging = false;
}
}
- private void reduceBattery(Integer amount) {
- internalBattery -= amount;
- if (internalBattery <= 0) {
+ public void reduceBattery(int amount) {
+ if (internalBattery - amount <= 0) {
internalBattery = 0;
if (moduleHatches.size() > 0) {
for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) {
module.disconnect();
}
}
-
+ } else {
+ internalBattery -= amount;
+ totalFuelConsumed += amount;
}
+
+ }
+
+ public int getBatteryCharge() {
+ return internalBattery;
+ }
+
+ public int getMaxBatteryCharge() {
+ return maxBatteryCharge;
+ }
+
+ public void addTotalPowerConsumed(BigInteger amount) {
+ totalPowerConsumed = totalPowerConsumed.add(amount);
+ }
+
+ public void addTotalRecipesProcessed(long amount) {
+ totalRecipesProcessed += amount;
}
@Override
protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) {}
@Override
+ public void setItemNBT(NBTTagCompound NBT) {
+ NBT.setInteger("selectedFuelType", selectedFuelType);
+ NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor);
+ NBT.setInteger("internalBattery", internalBattery);
+ NBT.setBoolean("batteryCharging", batteryCharging);
+ NBT.setInteger("batterySize", maxBatteryCharge);
+ NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable);
+ NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent);
+ NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray());
+ NBT.setLong("totalRecipesProcessed", totalRecipesProcessed);
+ NBT.setLong("totalFuelConsumed", totalFuelConsumed);
+ NBT.setInteger("starFuelStored", stellarFuelAmount);
+
+ // Store booleanArray of all upgrades
+ NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound();
+
+ int upgradeIndex = 0;
+ for (Boolean upgrade : upgrades) {
+ upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade);
+ upgradeIndex++;
+ }
+
+ NBT.setTag("upgrades", upgradeBooleanArrayNBTTag);
+ super.saveNBTData(NBT);
+ }
+
+ @Override
public void saveNBTData(NBTTagCompound NBT) {
- NBT.setInteger("spacetimeCompressionTier", spacetimeCompressionFieldMetadata + 1);
- NBT.setInteger("solenoidCoilTier", solenoidCoilMetadata - 7);
NBT.setInteger("selectedFuelType", selectedFuelType);
NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor);
NBT.setInteger("internalBattery", internalBattery);
+ NBT.setBoolean("batteryCharging", batteryCharging);
+ NBT.setInteger("batterySize", maxBatteryCharge);
+ NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable);
+ NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent);
+ NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray());
+ NBT.setLong("totalRecipesProcessed", totalRecipesProcessed);
+ NBT.setLong("totalFuelConsumed", totalFuelConsumed);
+ NBT.setInteger("starFuelStored", stellarFuelAmount);
// Store booleanArray of all upgrades
NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound();
@@ -1160,11 +2138,17 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo
@Override
public void loadNBTData(NBTTagCompound NBT) {
- spacetimeCompressionFieldMetadata = NBT.getInteger("spacetimeCompressionTier") - 1;
- solenoidCoilMetadata = NBT.getInteger("solenoidCoilTier") + 7;
selectedFuelType = NBT.getInteger("selectedFuelType");
fuelConsumptionFactor = NBT.getInteger("fuelConsumptionFactor");
internalBattery = NBT.getInteger("internalBattery");
+ batteryCharging = NBT.getBoolean("batteryCharging");
+ maxBatteryCharge = NBT.getInteger("batterySize");
+ gravitonShardsAvailable = NBT.getInteger("gravitonShardsAvailable");
+ gravitonShardsSpent = NBT.getInteger("gravitonShardsSpent");
+ totalPowerConsumed = new BigInteger(NBT.getByteArray("totalPowerConsumed"));
+ totalRecipesProcessed = NBT.getLong("totalRecipesProcessed");
+ totalFuelConsumed = NBT.getLong("totalFuelConsumed");
+ stellarFuelAmount = NBT.getInteger("starFuelStored");
NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades");
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java
index 40ef264d25..a824848fcc 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java
@@ -1,27 +1,50 @@
package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
+import static com.github.technus.tectech.thing.casing.TT_Container_Casings.GodforgeCasings;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings;
+import static net.minecraft.util.StatCollector.translateToLocal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
import java.util.UUID;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.ForgeDirection;
-import com.github.technus.tectech.thing.casing.TT_Container_Casings;
+import com.github.technus.tectech.thing.gui.TecTechUITextures;
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.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
-import com.gtnewhorizon.structurelib.structure.StructureUtility;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.drawable.Text;
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.api.math.Color;
+import com.gtnewhorizons.modularui.api.math.Size;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder;
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.ITexture;
@@ -35,28 +58,55 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc
protected final int tier = getTier();
protected boolean isConnected = false;
+ protected double overclockTimeFactor = 2d;
protected boolean isUpgrade83Unlocked = false;
+ protected boolean isMultiStepPlasmaCapable = false;
+ protected boolean isMagmatterCapable = false;
+ private boolean isVoltageConfigUnlocked = false;
protected UUID userUUID;
protected int machineHeat = 0;
+ protected int overclockHeat = 0;
protected int maximumParallel = 0;
+ protected int plasmaTier = 0;
protected float processingSpeedBonus = 0;
+ protected float energyDiscount = 0;
+ protected long processingVoltage = 2_000_000_000;
+ protected BigInteger powerTally = BigInteger.ZERO;
+ protected long recipeTally = 0;
+ private static Textures.BlockIcons.CustomIcon ScreenON;
+ private static Textures.BlockIcons.CustomIcon ScreenOFF;
private static final String STRUCTURE_PIECE_MAIN = "main";
+ private static final int VOLTAGE_WINDOW_ID = 9;
+ private static final int TEXTURE_INDEX = 960;
private static final IStructureDefinition<GT_MetaTileEntity_EM_BaseModule> STRUCTURE_DEFINITION = StructureDefinition
.<GT_MetaTileEntity_EM_BaseModule>builder()
.addShape(
STRUCTURE_PIECE_MAIN,
- StructureUtility.transpose(
- new String[][] { { "H", "H" }, { "~", "H" }, { "H", "H" }, { "H", "H" }, { "H", "H" } }))
+ new String[][] { { " ", " BBB ", " BBBBB ", " BB~BB ", " BBBBB ", " BBB ", " " },
+ { " CCC ", " CFFFC ", "CFFFFFC", "CFFFFFC", "CFFFFFC", " CFFFC ", " CCC " },
+ { " ", " ", " E ", " EAE ", " E ", " ", " " },
+ { " ", " ", " E ", " EAE ", " E ", " ", " " },
+ { " ", " ", " E ", " EAE ", " E ", " ", " " },
+ { " ", " ", " E ", " EAE ", " E ", " ", " " },
+ { " ", " ", " ", " D ", " ", " ", " " },
+ { " ", " ", " ", " D ", " ", " ", " " },
+ { " ", " ", " ", " D ", " ", " ", " " },
+ { " ", " ", " ", " D ", " ", " ", " " },
+ { " ", " ", " ", " D ", " ", " ", " " },
+ { " ", " ", " ", " G ", " ", " ", " " } })
+ .addElement('A', ofBlock(GregTech_API.sSolenoidCoilCasings, 9))
.addElement(
- 'H',
+ 'B',
GT_StructureUtility.ofHatchAdderOptional(
GT_MetaTileEntity_EM_BaseModule::addClassicToMachineList,
- texturePage << 7,
+ TEXTURE_INDEX,
1,
- TT_Container_Casings.sBlockCasingsBA0,
- 12))
- .build();
+ GodforgeCasings,
+ 0))
+ .addElement('C', ofBlock(GodforgeCasings, 0)).addElement('D', ofBlock(GodforgeCasings, 1))
+ .addElement('E', ofBlock(GodforgeCasings, 2)).addElement('F', ofBlock(GodforgeCasings, 3))
+ .addElement('G', ofBlock(GodforgeCasings, 4)).build();
public GT_MetaTileEntity_EM_BaseModule(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
@@ -106,32 +156,112 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc
isConnected = false;
}
- public void setHeat(Integer heat) {
+ public void setHeat(int heat) {
machineHeat = heat;
}
- public Integer getHeat() {
+ public int getHeat() {
return machineHeat;
}
- public void setMaxParallel(Integer parallel) {
+ public void setHeatForOC(int heat) {
+ overclockHeat = heat;
+ }
+
+ public int getHeatForOC() {
+ return overclockHeat;
+ }
+
+ public void setMaxParallel(int parallel) {
maximumParallel = parallel;
}
- public Integer getMaxParallel() {
+ public int getMaxParallel() {
return maximumParallel;
}
- public void setSpeedBonus(Float bonus) {
+ public void setSpeedBonus(float bonus) {
processingSpeedBonus = bonus;
}
- public Float getSpeedBonus() {
+ public float getSpeedBonus() {
return processingSpeedBonus;
}
- public void setUpgrade83(Boolean upgrade) {
- isUpgrade83Unlocked = upgrade;
+ public void setEnergyDiscount(float discount) {
+ energyDiscount = discount;
+ }
+
+ public float getEnergyDiscount() {
+ return energyDiscount;
+ }
+
+ public void setUpgrade83(boolean unlocked) {
+ isUpgrade83Unlocked = unlocked;
+ }
+
+ public void setOverclockTimeFactor(double factor) {
+ overclockTimeFactor = factor;
+ }
+
+ public double getOverclockTimeFactor() {
+ return overclockTimeFactor;
+ }
+
+ public void setMultiStepPlasma(boolean isCapable) {
+ isMultiStepPlasmaCapable = isCapable;
+ }
+
+ public void setProcessingVoltage(long Voltage) {
+ processingVoltage = Voltage;
+ }
+
+ public long getProcessingVoltage() {
+ return processingVoltage;
+ }
+
+ public void setMagmatterCapable(boolean isCapable) {
+ isMagmatterCapable = isCapable;
+ }
+
+ public float getHeatEnergyDiscount() {
+ return isUpgrade83Unlocked ? 0.92f : 0.95f;
+ }
+
+ public void setPlasmaTier(int tier) {
+ plasmaTier = tier;
+ }
+
+ public int getPlasmaTier() {
+ return plasmaTier;
+ }
+
+ public void setVoltageConfig(boolean unlocked) {
+ isVoltageConfigUnlocked = unlocked;
+ }
+
+ public void setPowerTally(BigInteger amount) {
+ powerTally = amount;
+ }
+
+ public BigInteger getPowerTally() {
+ return powerTally;
+ }
+
+ public void addToPowerTally(BigInteger amount) {
+ powerTally = powerTally.add(amount);
+ }
+
+ public void setRecipeTally(long amount) {
+ recipeTally = amount;
+ }
+
+ public long getRecipeTally() {
+ return recipeTally;
+ }
+
+ public void addToRecipeTally(long amount) {
+ recipeTally += amount;
}
protected void fixAllIssues() {
@@ -159,13 +289,13 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc
@Override
public void construct(ItemStack stackSize, boolean hintsOnly) {
- structureBuild_EM(STRUCTURE_PIECE_MAIN, 0, 1, 0, stackSize, hintsOnly);
+ structureBuild_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0, stackSize, hintsOnly);
}
@Override
public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
fixAllIssues();
- return structureCheck_EM(STRUCTURE_PIECE_MAIN, 0, 1, 0);
+ return structureCheck_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0);
}
@Override
@@ -188,13 +318,80 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc
drawTexts(screenElements, inventorySlot);
builder.widget(screenElements);
+ buildContext.addSyncedWindow(VOLTAGE_WINDOW_ID, this::createVoltageWindow);
+
+ builder.widget(
+ TextWidget.dynamicText(this::connectionStatus).setDefaultColor(EnumChatFormatting.BLACK).setPos(75, 94)
+ .setSize(100, 10));
+
builder.widget(createPowerSwitchButton(builder)).widget(createVoidExcessButton(builder))
.widget(createInputSeparationButton(builder)).widget(createBatchModeButton(builder))
- .widget(createLockToSingleRecipeButton(builder));
+ .widget(createLockToSingleRecipeButton(builder)).widget(createVoltageButton(builder));
+ }
+
+ protected Widget createVoltageButton(IWidgetBuilder<?> builder) {
+ Widget button = new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (isVoltageConfigUnlocked) {
+ if (!widget.isClient()) {
+ widget.getContext().openSyncedWindow(VOLTAGE_WINDOW_ID);
+ }
+ }
+ }).setPlayClickSound(isVoltageConfigUnlocked).setBackground(() -> {
+ List<UITexture> ret = new ArrayList<>();
+ ret.add(GT_UITextures.BUTTON_STANDARD);
+ if (isVoltageConfigUnlocked) {
+ ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_ON);
+ } else {
+ ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_DISABLED);
+ }
+ return ret.toArray(new IDrawable[0]);
+ }).addTooltip(translateToLocal("fog.button.voltageconfig.tooltip.01")).setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(174, 129).setSize(16, 16).attachSyncer(
+ new FakeSyncWidget.BooleanSyncer(
+ () -> isVoltageConfigUnlocked,
+ val -> isVoltageConfigUnlocked = val),
+ builder);
+ if (!isVoltageConfigUnlocked) {
+ button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.voltageconfig.tooltip.02"));
+ }
+ return button;
+ }
+
+ protected ModularWindow createVoltageWindow(final EntityPlayer player) {
+ final int WIDTH = 158;
+ final int HEIGHT = 52;
+ final int PARENT_WIDTH = getGUIWidth();
+ final int PARENT_HEIGHT = getGUIHeight();
+ ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT);
+ builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT);
+ builder.setGuiTint(getGUIColorization());
+ builder.setDraggable(true);
+ builder.setPos(
+ (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)).add(
+ Alignment.BottomRight
+ .getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT))
+ .add(WIDTH - 3, 0).subtract(0, 10)));
+ builder.widget(
+ TextWidget.localised("gt.blockmachines.multimachine.FOG.voltageinfo").setPos(3, 4).setSize(150, 20))
+ .widget(
+ new NumericWidget().setSetter(val -> processingVoltage = (long) val)
+ .setGetter(() -> processingVoltage).setBounds(2_000_000_000, Long.MAX_VALUE)
+ .setDefaultValue(2_000_000_000).setScrollValues(1, 4, 64)
+ .setTextAlignment(Alignment.Center).setTextColor(Color.WHITE.normal).setSize(150, 18)
+ .setPos(4, 25).setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD).attachSyncer(
+ new FakeSyncWidget.LongSyncer(
+ this::getProcessingVoltage,
+ this::setProcessingVoltage),
+ builder));
+ return builder.build();
}
@Override
- public void addGregTechLogo(ModularWindow.Builder builder) {}
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(
+ new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO).setSize(18, 18)
+ .setPos(172, 67));
+ }
@Override
public boolean supportsInputSeparation() {
@@ -226,27 +423,50 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc
return false;
}
+ private Text connectionStatus() {
+ String status = EnumChatFormatting.RED
+ + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.false");
+ if (isConnected) {
+ status = EnumChatFormatting.GREEN + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.true");
+ }
+ return new Text(translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus") + " " + status);
+ }
+
@Override
public void saveNBTData(NBTTagCompound NBT) {
NBT.setBoolean("isConnected", isConnected);
+ NBT.setBoolean("isVoltageConfigUnlocked", isVoltageConfigUnlocked);
+ NBT.setLong("processingVoltage", processingVoltage);
+ NBT.setLong("recipeTally", recipeTally);
+ NBT.setByteArray("powerTally", powerTally.toByteArray());
super.saveNBTData(NBT);
}
@Override
public void loadNBTData(final NBTTagCompound NBT) {
isConnected = NBT.getBoolean("isConnected");
+ isVoltageConfigUnlocked = NBT.getBoolean("isVoltageConfigUnlocked");
+ processingVoltage = NBT.getLong("processingVoltage");
+ recipeTally = NBT.getLong("recipeTally");
+ powerTally = new BigInteger(NBT.getByteArray("powerTally"));
super.loadNBTData(NBT);
}
@Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aBlockIconRegister) {
+ ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_MODULE_ACTIVE");
+ ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/SCREEN_OFF");
+ super.registerIcons(aBlockIconRegister);
+ }
+
+ @Override
public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
int colorIndex, boolean aActive, boolean aRedstone) {
if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7),
- new TT_RenderedExtendedFacingTexture(
- aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON
- : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) };
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX),
+ new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) };
}
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7) };
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX) };
}
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java
index 0950ed47ed..d9f60c7bf3 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java
@@ -1,11 +1,9 @@
package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules;
-import static com.github.technus.tectech.loader.recipe.Godforge.exoticModuleMagmatterFluidMap;
import static com.github.technus.tectech.loader.recipe.Godforge.exoticModuleMagmatterItemMap;
import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaFluidMap;
import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaItemMap;
import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static com.github.technus.tectech.util.GodforgeMath.getRandomIntInRange;
import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.api.util.GT_RecipeBuilder.INGOTS;
@@ -32,7 +30,7 @@ import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
@@ -40,8 +38,6 @@ import net.minecraftforge.oredict.OreDictionary;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-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.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
@@ -53,10 +49,8 @@ import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import gregtech.api.enums.MaterialsUEVplus;
-import gregtech.api.enums.Textures;
import gregtech.api.enums.TierEU;
import gregtech.api.gui.modularui.GT_UITextures;
-import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
@@ -75,11 +69,10 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
private int numberOfFluids = 0;
private int numberOfItems = 0;
- private int currentParallel = 0;
private long wirelessEUt = 0;
private long EUt = 0;
+ private long actualParallel = 0;
private boolean recipeInProgress = false;
- private boolean magmatterCapable = true;
private boolean magmatterMode = false;
private FluidStack[] randomizedFluidInput = new FluidStack[] {};
private ItemStack[] randomizedItemInput = new ItemStack[] {};
@@ -112,37 +105,47 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
@Override
protected Stream<GT_Recipe> findRecipeMatches(@Nullable RecipeMap<?> map) {
if (!recipeInProgress) {
- HashMap<FluidStack, Integer> fluidMap = exoticModulePlasmaFluidMap;
- HashMap<ItemStack, Integer> itemMap = exoticModulePlasmaItemMap;
- FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000);
-
- if (magmatterMode) {
- fluidMap = exoticModuleMagmatterFluidMap;
- itemMap = exoticModuleMagmatterItemMap;
- outputFluid = MaterialsUEVplus.MagMatter.getMolten(144);
- }
-
+ actualParallel = getMaxParallel();
+ FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000 * actualParallel);
tempRecipeMap = emptyRecipeMap;
- numberOfFluids = getRandomIntInRange(0, NUMBER_OF_INPUTS);
- numberOfItems = NUMBER_OF_INPUTS - numberOfFluids;
- randomizedFluidInput = getRandomFluidInputs(fluidMap, numberOfFluids);
- randomizedItemInput = getRandomItemInputs(itemMap, numberOfItems);
-
- if (numberOfFluids != 0) {
- for (FluidStack fluidStack : randomizedFluidInput) {
- fluidStack.amount = 1000 * getRandomIntInRange(1, 64);
+ if (magmatterMode) {
+ randomizedItemInput = getRandomItemInputs(exoticModuleMagmatterItemMap, 1);
+ numberOfItems = 1;
+ numberOfFluids = 2;
+ int timeAmount = getRandomIntInRange(1, 50);
+ int spaceAmount = getRandomIntInRange(51, 100);
+ randomizedFluidInput = new FluidStack[] { MaterialsUEVplus.Time.getMolten(timeAmount * 1000L),
+ MaterialsUEVplus.Space.getMolten(spaceAmount * 1000L) };
+ inputPlasmas = new ArrayList<>(
+ Arrays.asList(
+ convertItemToPlasma(
+ randomizedItemInput,
+ (spaceAmount - timeAmount) * actualParallel)));
+ inputPlasmas.add(MaterialsUEVplus.Time.getMolten(timeAmount * actualParallel));
+ inputPlasmas.add(MaterialsUEVplus.Space.getMolten(spaceAmount * actualParallel));
+ outputFluid = MaterialsUEVplus.MagMatter.getMolten(144 * actualParallel);
+ } else {
+ numberOfFluids = getRandomIntInRange(0, NUMBER_OF_INPUTS);
+ numberOfItems = NUMBER_OF_INPUTS - numberOfFluids;
+ randomizedFluidInput = getRandomFluidInputs(exoticModulePlasmaFluidMap, numberOfFluids);
+ randomizedItemInput = getRandomItemInputs(exoticModulePlasmaItemMap, numberOfItems);
+
+ if (numberOfFluids != 0) {
+ for (FluidStack fluidStack : randomizedFluidInput) {
+ fluidStack.amount = 1000 * getRandomIntInRange(1, 64);
+ }
}
- }
- if (numberOfItems != 0) {
- for (ItemStack itemStack : randomizedItemInput) {
- itemStack.stackSize = getRandomIntInRange(1, 64);
+ if (numberOfItems != 0) {
+ for (ItemStack itemStack : randomizedItemInput) {
+ itemStack.stackSize = getRandomIntInRange(1, 64);
+ }
}
- }
-
- inputPlasmas = new ArrayList<>(Arrays.asList(convertItemToPlasma(randomizedItemInput, 1)));
- inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, 1)));
+ inputPlasmas = new ArrayList<>(
+ Arrays.asList(convertItemToPlasma(randomizedItemInput, actualParallel)));
+ inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, actualParallel)));
+ }
plasmaRecipe = new GT_Recipe(
false,
null,
@@ -151,7 +154,7 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
null,
inputPlasmas.toArray(new FluidStack[0]),
new FluidStack[] { outputFluid },
- 10 * SECONDS,
+ 10 * SECONDS * (int) actualParallel,
(int) TierEU.RECIPE_MAX,
0);
@@ -175,14 +178,30 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
for (FluidStack fluidStack : randomizedFluidInput) {
dumpFluid(
mOutputHatches,
- new FluidStack(fluidStack.getFluid(), fluidStack.amount / 1000),
+ new FluidStack(
+ fluidStack.getFluid(),
+ (int) (fluidStack.amount / 1000 * actualParallel)),
false);
}
}
if (numberOfItems != 0) {
+ long multiplier = actualParallel;
+ if (magmatterMode) {
+ multiplier = 1;
+ }
for (ItemStack itemStack : randomizedItemInput) {
- addOutput(itemStack);
+ int stacksize = (int) (itemStack.stackSize * multiplier);
+ ItemStack tmpItem = itemStack.copy();
+ // split itemStacks > 64
+ while (stacksize >= 64) {
+ tmpItem.stackSize = 64;
+ addOutput(tmpItem);
+ stacksize -= 64;
+ }
+ tmpItem.stackSize = stacksize;
+ addOutput(tmpItem);
+
}
}
@@ -201,7 +220,8 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
}
- currentParallel = calculatedParallels;
+ addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration)));
+ addToRecipeTally(calculatedParallels);
EUt = calculatedEut;
setCalculatedEut(0);
tempRecipeMap = emptyRecipeMap;
@@ -212,7 +232,8 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
@Nonnull
@Override
protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) {
- return super.createOverclockCalculator(recipe).setEUt(TierEU.MAX).setNoOverclock(true);
+ return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage())
+ .setDurationDecreasePerOC(getOverclockTimeFactor());
}
};
@@ -223,18 +244,8 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
logic.setAvailableVoltage(Long.MAX_VALUE);
logic.setAvailableAmperage(Integer.MAX_VALUE);
logic.setAmperageOC(false);
- }
-
- @Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
- int colorIndex, boolean aActive, boolean aRedstone) {
- if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7),
- new TT_RenderedExtendedFacingTexture(
- aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON
- : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) };
- }
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7) };
+ logic.setSpeedBonus(getSpeedBonus());
+ logic.setEuModifier(getEnergyDiscount());
}
@Override
@@ -423,40 +434,42 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
protected ButtonWidget magmatterSwitch(IWidgetBuilder<?> builder) {
Widget button = new ButtonWidget().setOnClick((clickData, widget) -> {
- if (magmatterCapable) {
+ if (isMagmatterCapable) {
magmatterMode = !magmatterMode;
}
- }).setPlayClickSound(isMagmatterModeOn()).setBackground(() -> {
+ }).setPlayClickSound(isMagmatterCapable).setBackground(() -> {
List<UITexture> ret = new ArrayList<>();
if (isMagmatterModeOn()) {
ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED);
- if (magmatterCapable) {
+ if (isMagmatterCapable) {
ret.add(GT_UITextures.OVERLAY_BUTTON_CHECKMARK);
} else {
ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE);
}
} else {
ret.add(GT_UITextures.BUTTON_STANDARD);
- if (magmatterCapable) {
+ if (isMagmatterCapable) {
ret.add(GT_UITextures.OVERLAY_BUTTON_CROSS);
} else {
ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE);
}
}
- if (!magmatterCapable) {
+ if (!isMagmatterCapable) {
ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE);
}
return ret.toArray(new IDrawable[0]);
}).attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isMagmatterModeOn, this::setMagmatterMode), builder)
.addTooltip(translateToLocal("fog.button.magmattermode.tooltip.01"))
- .setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(174, 91).setSize(16, 16);
- if (!magmatterCapable) {
- button.addTooltip(translateToLocal("fog.button.magmattermode.tooltip.02"));
+ .setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(174, 91).setSize(16, 16).attachSyncer(
+ new FakeSyncWidget.BooleanSyncer(() -> isMagmatterCapable, this::setMagmatterCapable),
+ builder);
+ if (!isMagmatterCapable) {
+ button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.magmattermode.tooltip.02"));
}
return (ButtonWidget) button;
}
- private boolean isMagmatterModeOn() {
+ public boolean isMagmatterModeOn() {
return magmatterMode;
}
@@ -467,13 +480,10 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
@Override
public GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
- tt.addMachineType("Quark Gluon Plasma Module") // Machine Type:
- .addInfo("Controller block of the Quark Gluon Plasma Module") // Controller
+ tt.addMachineType("Exotic Matter Producer").addInfo("Controller block of the Quark Gluon Plasma Module")
.addInfo("Uses a Star to to turn Items into Quark Gluon Plasma").addSeparator()
- .beginStructureBlock(1, 4, 2, false).addEnergyHatch("Any Infinite Spacetime Casing", 1) // Energy Hatch:
- // Any
- .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) // Maintenance
- .toolTipFinisher(CommonValues.TEC_MARK_EM);
+ .beginStructureBlock(1, 4, 2, false).addEnergyHatch("Any Infinite Spacetime Casing", 1)
+ .addMaintenanceHatch("Any Infinite Spacetime Casing", 1).toolTipFinisher(CommonValues.GODFORGE_MARK);
return tt;
}
@@ -491,7 +501,10 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base
+ " s");
str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t");
str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel()));
- str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel));
+ str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(getMaxParallel()));
+ str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus()));
+ str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount()));
+ str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor()));
return str.toArray(new String[0]);
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java
index a9e8c411d6..77fb548a32 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java
@@ -1,6 +1,5 @@
package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static gregtech.api.util.GT_OreDictUnificator.getAssociation;
import static gregtech.api.util.GT_ParallelHelper.addFluidsLong;
import static gregtech.api.util.GT_ParallelHelper.addItemsLong;
@@ -20,21 +19,15 @@ import java.util.ArrayList;
import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
import org.jetbrains.annotations.NotNull;
-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 gregtech.api.enums.Materials;
-import gregtech.api.enums.Textures;
-import gregtech.api.enums.TierEU;
-import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
@@ -105,7 +98,7 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base
// substring 8 because ingotHot is 8 characters long
String strippedOreDict = dict.substring(8);
meltableItems[i] = FluidRegistry
- .getFluidStack("molten." + strippedOreDict.toLowerCase(), (int) (INGOTS));
+ .getFluidStack("molten." + strippedOreDict.toLowerCase(), INGOTS);
}
}
@@ -115,8 +108,10 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base
@Nonnull
@Override
protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) {
- return super.createOverclockCalculator(recipe).setEUt(TierEU.MAX).setRecipeHeat(recipe.mSpecialValue)
- .setHeatOC(true).setHeatDiscount(true).setMachineHeat(getHeat());
+ return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage())
+ .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true)
+ .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount())
+ .setDurationDecreasePerOC(getOverclockTimeFactor());
}
@@ -126,6 +121,8 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base
if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) {
return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration);
}
+ addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration)));
+ addToRecipeTally(calculatedParallels);
currentParallel = calculatedParallels;
EUt = calculatedEut;
setCalculatedEut(0);
@@ -180,18 +177,7 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base
logic.setAmperageOC(false);
logic.setMaxParallel(getMaxParallel());
logic.setSpeedBonus(getSpeedBonus());
- }
-
- @Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
- int colorIndex, boolean aActive, boolean aRedstone) {
- if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7),
- new TT_RenderedExtendedFacingTexture(
- aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON
- : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) };
- }
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7) };
+ logic.setEuModifier(getEnergyDiscount());
}
@Override
@@ -210,19 +196,20 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base
str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel()));
str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel));
str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat()));
+ str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC()));
str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus()));
+ str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount()));
+ str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor()));
return str.toArray(new String[0]);
}
@Override
public GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
- tt.addMachineType("Molten Module") // Machine Type:
- .addInfo("Controller block of the Molten Module") // Controller
+ tt.addMachineType("Blast Furnace").addInfo("Controller block of the Molten Module")
.addInfo("Uses a Star to to melt Metals").addSeparator().beginStructureBlock(1, 4, 2, false)
- .addEnergyHatch("Any Infinite Spacetime Casing", 1) // Energy Hatch: Any
- .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) // Maintenance
- .toolTipFinisher(CommonValues.TEC_MARK_EM);
+ .addEnergyHatch("Any Infinite Spacetime Casing", 1)
+ .addMaintenanceHatch("Any Infinite Spacetime Casing", 1).toolTipFinisher(CommonValues.GODFORGE_MARK);
return tt;
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java
index 299dbb4fc7..94eb49ea22 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java
@@ -1,7 +1,6 @@
package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules;
import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.api.util.GT_Utility.formatNumbers;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
@@ -17,12 +16,8 @@ import java.util.Objects;
import javax.annotation.Nonnull;
-import net.minecraftforge.common.util.ForgeDirection;
-
import org.jetbrains.annotations.NotNull;
-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.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.math.Alignment;
@@ -36,10 +31,7 @@ import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
import gregtech.api.enums.SoundResource;
-import gregtech.api.enums.Textures;
-import gregtech.api.enums.TierEU;
import gregtech.api.gui.modularui.GT_UITextures;
-import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
@@ -56,9 +48,7 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
private long EUt = 0;
private int currentParallel = 0;
- private boolean multiStep = false;
private boolean debug = true;
- private int fusionTier = 0;
private int inputMaxParallel = 0;
public GT_MetaTileEntity_EM_PlasmaModule(int aID, String aName, String aNameRegional) {
@@ -87,8 +77,8 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
}
- if (recipe.mSpecialValue > fusionTier
- || Objects.equals(recipe.mSpecialItems.toString(), "true") && !multiStep) {
+ if (recipe.mSpecialValue > getPlasmaTier()
+ || Objects.equals(recipe.mSpecialItems.toString(), "true") && !isMultiStepPlasmaCapable) {
return SimpleCheckRecipeResult.ofFailure("missing_upgrades");
}
return CheckRecipeResultRegistry.SUCCESSFUL;
@@ -101,6 +91,8 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) {
return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration);
}
+ addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration)));
+ addToRecipeTally(calculatedParallels);
currentParallel = calculatedParallels;
EUt = calculatedEut;
setCalculatedEut(0);
@@ -110,7 +102,8 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
@Nonnull
@Override
protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) {
- return super.createOverclockCalculator(recipe).setEUt(TierEU.MAX);
+ return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage())
+ .setDurationDecreasePerOC(getOverclockTimeFactor());
}
};
}
@@ -122,6 +115,7 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
logic.setAmperageOC(false);
logic.setMaxParallel(getMaxParallel());
logic.setSpeedBonus(getSpeedBonus());
+ logic.setEuModifier(getEnergyDiscount());
}
@Override
@@ -133,12 +127,13 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
}
protected Widget createTestButton(IWidgetBuilder<?> builder) {
- return new ButtonWidget().setOnClick((clickData, widget) -> { multiStep = !multiStep; })
+ return new ButtonWidget()
+ .setOnClick((clickData, widget) -> isMultiStepPlasmaCapable = !isMultiStepPlasmaCapable)
.setPlayClickSoundResource(
() -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation
: SoundResource.GUI_BUTTON_DOWN.resourceLocation)
.setBackground(() -> {
- if (multiStep) {
+ if (isMultiStepPlasmaCapable) {
return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED,
GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON };
} else {
@@ -153,7 +148,7 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
}
protected Widget createTestButton2() {
- return new TextFieldWidget().setSetterInt(val -> fusionTier = val).setGetterInt(() -> fusionTier)
+ return new TextFieldWidget().setSetterInt(this::setPlasmaTier).setGetterInt(this::getPlasmaTier)
.setNumbers(0, 2).setTextAlignment(Alignment.Center).setTextColor(Color.WHITE.normal).setPos(3, 18)
.addTooltip("fusion tier").setTooltipShowUpDelay(TOOLTIP_DELAY).setSize(16, 16).setPos(174, 80)
.setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD);
@@ -167,18 +162,6 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
}
@Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
- int colorIndex, boolean aActive, boolean aRedstone) {
- if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7),
- new TT_RenderedExtendedFacingTexture(
- aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON
- : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) };
- }
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7) };
- }
-
- @Override
public RecipeMap<?> getRecipeMap() {
return godforgePlasmaRecipes;
}
@@ -199,18 +182,18 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base
str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel()));
str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel));
str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus()));
+ str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount()));
+ str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor()));
return str.toArray(new String[0]);
}
@Override
public GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
- tt.addMachineType("Plasma Module") // Machine Type:
- .addInfo("Controller block of the Plasma Module") // Controller
+ tt.addMachineType("Plasma Fabricator").addInfo("Controller block of the Plasma Module")
.addInfo("Uses a Star to to turn Metals into Plasma").addSeparator().beginStructureBlock(1, 4, 2, false)
- .addEnergyHatch("Any Infinite Spacetime Casing", 1) // Energy Hatch: Any
- .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) // Maintenance
- .toolTipFinisher(CommonValues.TEC_MARK_EM);
+ .addEnergyHatch("Any Infinite Spacetime Casing", 1)
+ .addMaintenanceHatch("Any Infinite Spacetime Casing", 1).toolTipFinisher(CommonValues.GODFORGE_MARK);
return tt;
}
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java
index cfd6839ceb..831d04f6f3 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java
@@ -1,6 +1,5 @@
package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules;
-import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage;
import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import static gregtech.api.util.GT_Utility.formatNumbers;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
@@ -16,18 +15,13 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
-import java.util.stream.Stream;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraftforge.common.util.ForgeDirection;
import org.jetbrains.annotations.NotNull;
-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.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
@@ -38,10 +32,7 @@ import com.gtnewhorizons.modularui.api.widget.Widget;
import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
-import gregtech.api.enums.Textures;
-import gregtech.api.enums.TierEU;
import gregtech.api.gui.modularui.GT_UITextures;
-import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
@@ -75,7 +66,7 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
@Override
public RecipeMap<?> getRecipeMap() {
- return null;
+ return furnaceMode ? RecipeMaps.furnaceRecipes : RecipeMaps.blastFurnaceRecipes;
}
@Nonnull
@@ -84,27 +75,12 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
return Arrays.asList(RecipeMaps.blastFurnaceRecipes, RecipeMaps.furnaceRecipes);
}
- private static RecipeMap<?> getRecipeMap(boolean furnaceMode) {
- if (furnaceMode) {
- return RecipeMaps.furnaceRecipes;
- } else {
- return RecipeMaps.blastFurnaceRecipes;
- }
- }
-
long wirelessEUt = 0;
@Override
protected ProcessingLogic createProcessingLogic() {
return new ProcessingLogic() {
- @Nonnull
- @Override
- protected Stream<GT_Recipe> findRecipeMatches(@Nullable RecipeMap<?> map) {
- RecipeMap<?> recipes = getRecipeMap(furnaceMode);
- return super.findRecipeMatches(recipes);
- }
-
@NotNull
@Override
protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) {
@@ -126,6 +102,10 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) {
return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration);
}
+ addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration)));
+ if (!furnaceMode) {
+ addToRecipeTally(calculatedParallels);
+ }
currentParallel = calculatedParallels;
EUt = calculatedEut;
setCalculatedEut(0);
@@ -135,8 +115,10 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
@Nonnull
@Override
protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) {
- return super.createOverclockCalculator(recipe).setEUt(TierEU.MAX).setRecipeHeat(recipe.mSpecialValue)
- .setHeatOC(true).setHeatDiscount(true).setMachineHeat(getHeat());
+ return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage())
+ .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true)
+ .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount())
+ .setDurationDecreasePerOC(getOverclockTimeFactor());
}
};
}
@@ -148,18 +130,7 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
logic.setAmperageOC(false);
logic.setMaxParallel(getMaxParallel());
logic.setSpeedBonus(getSpeedBonus());
- }
-
- @Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing,
- int colorIndex, boolean aActive, boolean aRedstone) {
- if (side == facing) {
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7),
- new TT_RenderedExtendedFacingTexture(
- aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON
- : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) };
- }
- return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(texturePage << 7) };
+ logic.setEuModifier(getEnergyDiscount());
}
@Override
@@ -171,7 +142,7 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
protected ButtonWidget furnaceSwitch(IWidgetBuilder<?> builder) {
Widget button = new ButtonWidget().setOnClick((clickData, widget) -> furnaceMode = !furnaceMode)
- .setPlayClickSound(isFurnaceModeOn()).setBackground(() -> {
+ .setPlayClickSound(true).setBackground(() -> {
List<UITexture> ret = new ArrayList<>();
if (isFurnaceModeOn()) {
ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED);
@@ -224,19 +195,20 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba
str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel()));
str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel));
str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat()));
+ str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC()));
str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus()));
+ str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount()));
+ str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor()));
return str.toArray(new String[0]);
}
@Override
public GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
- tt.addMachineType("Smelting Module") // Machine Type:
- .addInfo("Controller block of the Smelting Module") // Controller
+ tt.addMachineType("Blast Furnace, Furnace").addInfo("Controller block of the Smelting Module")
.addInfo("Uses a Star to Smelt Metals").addSeparator().beginStructureBlock(1, 4, 2, false)
- .addEnergyHatch("Any Infinite Spacetime Casing", 1) // Energy Hatch: Any
- .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) // Maintenance
- .toolTipFinisher(CommonValues.TEC_MARK_EM);
+ .addEnergyHatch("Any Infinite Spacetime Casing", 1)
+ .addMaintenanceHatch("Any Infinite Spacetime Casing", 1).toolTipFinisher(CommonValues.GODFORGE_MARK);
return tt;
}
diff --git a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java
index f5c7c660b0..ea63017591 100644
--- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java
+++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java
@@ -1,7 +1,10 @@
package com.github.technus.tectech.util;
+import java.math.BigInteger;
+
import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_ForgeOfGods;
import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule;
+import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule;
import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule;
import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule;
import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule;
@@ -26,24 +29,35 @@ public class GodforgeMath {
} else return Math.max(godforge.getFuelFactor() / 25 * upgradeFactor, 1);
}
- public static int calculateMaxFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) {
-
- if (godforge.isUpgradeActive(27)) {
- return Integer.MAX_VALUE;
- }
+ public static int calculateStartupFuelConsumption(GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ return (int) Math.max(godforge.getFuelFactor() * 25 * Math.pow(1.2, godforge.getFuelFactor()), 1);
+ }
+ public static int calculateMaxFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) {
int fuelCap = 5;
- if (godforge.isUpgradeActive(9)) {
- fuelCap += godforge.getTotalActiveUpgrades();
+ if (godforge.isUpgradeActive(27)) {
+ fuelCap = Integer.MAX_VALUE;
+ } else {
+ if (godforge.isUpgradeActive(9)) {
+ fuelCap += godforge.getTotalActiveUpgrades();
+ }
+ if (godforge.isUpgradeActive(3)) {
+ fuelCap *= 1.2;
+ }
}
+ return Math.max(fuelCap, 1);
+ }
- if (godforge.isUpgradeActive(3)) {
- fuelCap *= 1.2;
+ public static int calculateEffectiveFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ int fuelFactor = godforge.getFuelFactor();
+ if (fuelFactor <= 43) {
+ return fuelFactor;
+ } else {
+ return 43 + (int) Math.floor(Math.pow((fuelFactor - 43), 0.4));
}
- return fuelCap;
}
- public static int calculateMaxHeatForModules(GT_MetaTileEntity_EM_BaseModule module,
+ public static void calculateMaxHeatForModules(GT_MetaTileEntity_EM_BaseModule module,
GT_MetaTileEntity_EM_ForgeOfGods godforge) {
double logBase = 1.5;
int baseHeat = 12601;
@@ -54,10 +68,35 @@ public class GodforgeMath {
logBase = 1.18;
}
}
- return baseHeat + (int) (Math.log(godforge.getFuelFactor()) / Math.log(logBase) * 1000);
+ int recipeHeat = baseHeat + (int) (Math.log(godforge.getFuelFactor()) / Math.log(logBase) * 1000);
+ module.setHeatForOC(calculateOverclockHeat(module, godforge, recipeHeat));
+ module.setHeat(recipeHeat);
}
- public static float calucateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule module,
+ public static int calculateOverclockHeat(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge, Integer recipeHeat) {
+ int actualHeat;
+ double exponent;
+ if (godforge.isUpgradeActive(20)) {
+ if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) {
+ exponent = 0.85;
+ } else {
+ exponent = 0.8;
+ }
+ if (recipeHeat > 30000) {
+ actualHeat = (int) Math.floor(30000 + Math.pow(recipeHeat - 30000, exponent));
+ } else {
+ actualHeat = recipeHeat;
+ }
+ } else if (godforge.isUpgradeActive(17)) {
+ actualHeat = Math.min(recipeHeat, 30000);
+ } else {
+ actualHeat = Math.min(recipeHeat, 15000);
+ }
+ return actualHeat;
+ }
+
+ public static void calculateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule module,
GT_MetaTileEntity_EM_ForgeOfGods godforge) {
double speedBonus = 1;
@@ -72,19 +111,19 @@ public class GodforgeMath {
speedBonus /= Math.pow(module.getMaxParallel(), 0.012);
}
}
- return (float) speedBonus;
- }
- public static int calculateEffectiveFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) {
- int fuelFactor = godforge.getFuelFactor();
- if (fuelFactor <= 43) {
- return fuelFactor;
- } else {
- return 43 + (int) Math.floor(Math.pow((fuelFactor - 43), 0.4));
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ if (godforge.isUpgradeActive(25)) {
+ speedBonus = Math.sqrt(speedBonus);
+ } else {
+ speedBonus = 1;
+ }
}
+
+ module.setSpeedBonus((float) speedBonus);
}
- public static int calucateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModule module,
+ public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModule module,
GT_MetaTileEntity_EM_ForgeOfGods godforge) {
int baseParallel = 0;
float fuelFactorMultiplier = 1;
@@ -102,6 +141,9 @@ public class GodforgeMath {
if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) {
baseParallel = 256;
}
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ baseParallel = 36;
+ }
if (module instanceof GT_MetaTileEntity_EM_MoltenModule
|| (module instanceof GT_MetaTileEntity_EM_SmeltingModule && godforge.isUpgradeActive(16))) {
@@ -140,6 +182,127 @@ public class GodforgeMath {
}
}
- return (int) (baseParallel * node53 * fuelFactorMultiplier * heatMultiplier * upgradeAmountMultiplier);
+ int maxParallel = (int) (baseParallel * node53
+ * fuelFactorMultiplier
+ * heatMultiplier
+ * upgradeAmountMultiplier);
+
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ if (godforge.isUpgradeActive(25)) {
+ maxParallel = (int) Math.max(9 * Math.floor(Math.sqrt(maxParallel) / 9), 36);
+ } else {
+ maxParallel = baseParallel;
+ }
+ }
+
+ module.setMaxParallel(maxParallel);
+ }
+
+ public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ double fillRatioDiscount = 1;
+ double maxBatteryDiscount = 1;
+
+ if (godforge.isUpgradeActive(8)) {
+ maxBatteryDiscount = 1 - (1 - Math.pow(1.001, -0.01 * godforge.getMaxBatteryCharge())) / 20;
+ }
+
+ if (godforge.isUpgradeActive(19)) {
+ double fillRatioMinusZeroPointFive = (double) godforge.getBatteryCharge() / godforge.getMaxBatteryCharge()
+ - 0.5;
+ if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) {
+ fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15);
+ } else {
+ fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3;
+ }
+ }
+
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ if (!godforge.isUpgradeActive(25)) {
+ fillRatioDiscount = 1;
+ maxBatteryDiscount = 1;
+ } else {
+ fillRatioDiscount = Math.sqrt(fillRatioDiscount);
+ maxBatteryDiscount = Math.sqrt(maxBatteryDiscount);
+ }
+ }
+
+ module.setEnergyDiscount((float) (fillRatioDiscount * maxBatteryDiscount));
+ }
+
+ public static void calculateProcessingVoltageForModules(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ long voltage = Integer.MAX_VALUE;
+
+ if (godforge.isUpgradeActive(4)) {
+ voltage += calculateEffectiveFuelFactor(godforge) * 100_000_000L;
+ }
+
+ if (godforge.isUpgradeActive(23)) {
+ voltage *= Math.pow(4, godforge.getRingAmount());
+ }
+
+ module.setProcessingVoltage(voltage);
+ }
+
+ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ int plasmaTier = 0;
+ double overclockTimeFactor = 2;
+
+ if (godforge.isUpgradeActive(30)) {
+ plasmaTier = 2;
+ } else if (godforge.isUpgradeActive(24)) {
+ plasmaTier = 1;
+ }
+
+ if (godforge.isUpgradeActive(14)) {
+ if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) {
+ overclockTimeFactor = 2.3;
+ } else {
+ overclockTimeFactor = 2.15;
+ }
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule) {
+ if (godforge.isUpgradeActive(25)) {
+ overclockTimeFactor = 2 + Math.pow(overclockTimeFactor - 2, 2);
+ } else {
+ overclockTimeFactor = 2;
+ }
+ }
+ }
+
+ module.setUpgrade83(godforge.isUpgradeActive(19));
+ module.setMultiStepPlasma(godforge.isUpgradeActive(15));
+ module.setPlasmaTier(plasmaTier);
+ module.setMagmatterCapable(godforge.isUpgradeActive(30));
+ module.setVoltageConfig(godforge.isUpgradeActive(28));
+ module.setOverclockTimeFactor(overclockTimeFactor);
+ }
+
+ public static boolean allowModuleConnection(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+
+ if (module instanceof GT_MetaTileEntity_EM_MoltenModule && godforge.isUpgradeActive(5)) {
+ return true;
+ }
+
+ if (module instanceof GT_MetaTileEntity_EM_PlasmaModule && godforge.isUpgradeActive(7)) {
+ return true;
+ }
+
+ if (module instanceof GT_MetaTileEntity_EM_ExoticModule && godforge.isUpgradeActive(11)) {
+ return true;
+ }
+
+ return module instanceof GT_MetaTileEntity_EM_SmeltingModule;
+ }
+
+ public static void queryMilestoneStats(GT_MetaTileEntity_EM_BaseModule module,
+ GT_MetaTileEntity_EM_ForgeOfGods godforge) {
+ godforge.addTotalPowerConsumed(module.getPowerTally());
+ module.setPowerTally(BigInteger.ZERO);
+ godforge.addTotalRecipesProcessed(module.getRecipeTally());
+ module.setRecipeTally(0);
+
}
}
diff --git a/src/main/java/com/github/technus/tectech/util/TT_Utility.java b/src/main/java/com/github/technus/tectech/util/TT_Utility.java
index edd4a28954..1656f865e0 100644
--- a/src/main/java/com/github/technus/tectech/util/TT_Utility.java
+++ b/src/main/java/com/github/technus/tectech/util/TT_Utility.java
@@ -59,6 +59,14 @@ public final class TT_Utility {
}
+ public static String toExponentForm(BigInteger number) {
+ BigInteger abs = number.abs();
+ String strNum = abs.toString();
+ int exponent = strNum.length() - 1;
+ return (number.signum() == -1 ? "-" : "") + strNum.charAt(0) + "." + strNum.substring(1, 3) + "e" + exponent;
+
+ }
+
public static int bitStringToInt(String bits) {
if (bits == null) {
return 0;
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png
new file mode 100644
index 0000000000..3266b1aec6
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png.mcmeta
new file mode 100644
index 0000000000..7ab8340b0c
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png.mcmeta
@@ -0,0 +1,5 @@
+{
+ "animation":{
+ "frametime":16
+ }
+} \ No newline at end of file
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png
new file mode 100644
index 0000000000..1158858086
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta
new file mode 100644
index 0000000000..0dab81071f
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta
@@ -0,0 +1 @@
+{"animation": {"frametime": 3}} \ No newline at end of file
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/SCREEN_OFF.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/SCREEN_OFF.png
new file mode 100644
index 0000000000..af85482d1a
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/SCREEN_OFF.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang
index 38fec96329..44c600d28a 100644
--- a/src/main/resources/assets/tectech/lang/en_US.lang
+++ b/src/main/resources/assets/tectech/lang/en_US.lang
@@ -905,77 +905,85 @@ fog.upgrade.tt.28=upgrade 151
fog.upgrade.tt.29=upgrade 161
fog.upgrade.tt.30=upgrade end
-fog.upgrade.lore.0=*insert lore here* upgrade start
-fog.upgrade.lore.1=*insert lore here* upgrade 11
-fog.upgrade.lore.2=*insert lore here* upgrade 21
-fog.upgrade.lore.3=*insert lore here* upgrade 22
-fog.upgrade.lore.4=*insert lore here* upgrade 31
-fog.upgrade.lore.5=*insert lore here* upgrade 32
-fog.upgrade.lore.6=*insert lore here* upgrade 33
-fog.upgrade.lore.7=*insert lore here* upgrade 41
-fog.upgrade.lore.8=*insert lore here* upgrade 51
-fog.upgrade.lore.9=*insert lore here* upgrade 52
-fog.upgrade.lore.10=*insert lore here* upgrade 53
-fog.upgrade.lore.11=*insert lore here* upgrade 61
-fog.upgrade.lore.12=*insert lore here* upgrade 71
-fog.upgrade.lore.13=*insert lore here* upgrade 72
-fog.upgrade.lore.14=*insert lore here* upgrade 73
-fog.upgrade.lore.15=*insert lore here* upgrade 74
-fog.upgrade.lore.16=*insert lore here* upgrade 80
-fog.upgrade.lore.17=*insert lore here* upgrade 81
-fog.upgrade.lore.18=*insert lore here* upgrade 82
-fog.upgrade.lore.19=*insert lore here* upgrade 83
-fog.upgrade.lore.20=*insert lore here* upgrade 91
-fog.upgrade.lore.21=*insert lore here* upgrade 92
-fog.upgrade.lore.22=*insert lore here* upgrade 93
-fog.upgrade.lore.23=*insert lore here* upgrade 101
-fog.upgrade.lore.24=*insert lore here* upgrade 111
-fog.upgrade.lore.25=*insert lore here* upgrade 121
-fog.upgrade.lore.26=*insert lore here* upgrade 131
-fog.upgrade.lore.27=*insert lore here* upgrade 141
-fog.upgrade.lore.28=*insert lore here* upgrade 151
-fog.upgrade.lore.29=*insert lore here* upgrade 161
+fog.upgrade.lore.0=The Forge of the Gods is an immensely powerful structure constructed around a stabilized neutron star – it is so advanced that its full capabilities are not yet understood. However, through continued use one can slowly upgrade and expand the range of abilities of the Forge, and learn the power hidden in the most extreme parts of the universe: graviton shards. This esoteric material can only be found where conventional matter and degenerate neutronium crust matter on the surface of a neutron star meet. At this point in space, gravitons are far more common and irradiate this material mixture to create highly unstable graviton shards, which can be used to internally upgrade the Forge. While these shards cannot yet exist outside the extreme conditions of the Forge, with continued research and utilization it may be possible to eventually isolate and extract them outside the Forge – but for what purpose?
+fog.upgrade.lore.1=The first major upgrade of the Forge of the Gods has allowed for greater processing speeds as the heat increases, thanks to the space warping effects of graviton shards. This is the first of many applications of the shards, which will be discovered through continuous use of the Forge.
+fog.upgrade.lore.2=Graviton shards warp the surface area of fuels used in the Forge, increasing efficiency as more material can be processed per unit of fuel. Graviton shards will prove crucial for further efficiency increases to offset the ever-increasing demands of the Forge.
+fog.upgrade.lore.3=Through use of graviton shards, the space within the Forge’s fuel chambers can be increased, allowing for greater quantities of fuel to be burned, thus reaching higher temperatures. Don’t forget to reserve fuel to keep the star at the centre of the Forge alive.
+fog.upgrade.lore.4=Graviton shards not only affect matter, but also energy: depending on the fuel burn rate, the Forge may now accept more energy input, allowing for greater processing capacity. What other properties do these Graviton shards hold?
+fog.upgrade.lore.5=As usage of the Forge continues, more data on graviton shards is gathered. It has been found that they can stabilize the outputs of the Forge, allowing for the direct extraction of molten material while it is still close to the heart of the star.
+fog.upgrade.lore.6=As stellar fuel consumption continues to increase the size and energy of the star, the amount of material that can be processed at once also increases. Graviton shards facilitate the manipulation of increased quantities of materials near the star in the core of the Forge.
+fog.upgrade.lore.7=As understanding of graviton shards continues to improve, better control over the materials they manipulate can be achieved. Graviton shards provide an alternative to electromagnetic containment of plasma using spacetime manipulation instead, allowing the Forge to directly output processed materials as plasma.
+fog.upgrade.lore.8=Adding graviton shards to the Forge’s internal energy storage allows for greater quantities of energy stored in a smaller area. By increasing energy density to relativistic levels, the Forge can be run more efficiently and store essentially infinite energy.
+fog.upgrade.lore.9=Simply adding more graviton shards to the fuel chamber continues to amplify the ability for the Forge to consume increased quantities of stellar fuel. It even benefits from graviton shards invested in different parts of the Forge entirely – it seems shards exhibit quantum entanglement-like properties.
+fog.upgrade.lore.10=Increasing the concentration of graviton shards near the material processing regions of the Forge warps spacetime so significantly that it doubles the material input and processing possible. As the Forge’s capabilities increase, the amount of graviton shard data collected increases too, allowing for further expansion.
+fog.upgrade.lore.11=Using large quantities of graviton shards creates regions of space so extreme that exotic forms of matter can exist with far greater stability than usual. Unfortunately, this region is so extreme that it is essentially spatially disconnected from the rest of the Forge, unable to utilize existing upgrades to the structure and its other modules.
+fog.upgrade.lore.12=Graviton shards can further compress stellar fuel, increasing its ability to fuel the star at the centre of the Forge through higher energy fusion reactions than usually possible in a natural star. As a result, greater heat is produced, increasing processing efficiency of the Forge.
+fog.upgrade.lore.13=Increasing the concentration of graviton shards in the fuel chamber allows for a further increase in material processing capacity, so long as the Forge receives enough stellar fuel to maintain the unnaturally powerful state of the star.
+fog.upgrade.lore.14=Utilising the unique energy-manipulating properties of graviton shards, electricity can be more efficiently utilised within the Forge. This sort of improvement is not possible with conventional matter, but also would not be possible outside the extreme environments near the star in the Forge.
+fog.upgrade.lore.15=Similar to the Quantum Force Transformer, the quantum-mechanical properties of graviton shards facilitate the ability for the Forge to complete a complex series of nuclear fusion processes in a single event by directly manipulating the subatomic particles of the materials themselves.
+fog.upgrade.lore.16=Another instance of the entanglement-like effects of graviton shards, the simple Power Forge module now also exhibits the improvements made to the Melting Core module of the Forge. This allows for greater efficiency in both processing and allocation of the precious few graviton shards that can be obtained.
+fog.upgrade.lore.17=Typical smelting techniques become too inefficient at extreme temperatures. Graviton shards allow for new methods of processing that can better take advantage of the abundant heat available within the Forge, such as manipulating spacetime to better transfer heat to the processed materials than regular matter ever could.
+fog.upgrade.lore.18=As the heat available within the Forge continues to increase, it becomes possible for more material to be processed as it requires less proximity to the star’s surface. Graviton shards facilitate the manipulation of increased material quantities across larger regions of space within the Forge.
+fog.upgrade.lore.19=Continual improvements to energy storage density using graviton shards improves both the efficiency of the Forge and improvements to heat utilisation for processing. Reaching this threshold of energy density allows the extreme spacetime bending to transfer the heat of the star more directly to the processed materials, increasing the effectiveness of heat in the smelting process.
+fog.upgrade.lore.20=Normally increasing heat indefinitely has extreme diminishing returns when processing materials, but graviton shards allow for heat to more acutely affect input materials by manipulating them ever closer to the star at the centre of the Forge. At such levels of heat, the bonds between atoms are broken, allowing for the most quick and pure processing possible.
+fog.upgrade.lore.21=Using the entanglement-like properties of graviton shards, it is possible to utilize the increasingly extreme differences in spacetime between regions of the Forge to improve the processing capacity of the molten module. As space becomes more warped, more material can be moved closer to the star, increasing production capacity.
+fog.upgrade.lore.22=Returning to the first upgrade of the Forge with the myriad discoveries about the graviton shards allows it to run much faster than previously possible. As a result of excessive spacetime manipulation, greater heat and larger quantities of material paradoxically result in faster processing times as larger surface areas of the processed material are available to the Forge.
+fog.upgrade.lore.23=The stress of maintaining such a large structure around such a gravitationally dense object as a neutron star is alleviated through graviton shards. A larger Forge allows for more machinery and better electricity utilisation, effectively increasing processing capabilities.
+fog.upgrade.lore.24=Improvements in understanding of the gravitational containment effects of graviton shards allow the Forge to process and handle more exotic and unstable plasma. With this, a new age of fusion processing and power is possible.
+fog.upgrade.lore.25=Further utilisation of the quantum entanglement-like properties of graviton shards allows the effects of other module upgrades to also apply to the exotic module. However, because of the extreme nature of spacetime within this module and the materials it handles, these benefits are reduced as per the inverse square law.
+fog.upgrade.lore.26=As additional rings are placed closer to the star at the centre of the Forge, the gravitational stress drastically increases on the structure. Graviton shards alleviate these stresses and also allow for upgrades made in other similar modules to apply to the new ring’s modules through the use of localized spacetime bridges.
+fog.upgrade.lore.27=A huge development in the capabilities of the Forge has been achieved with the use of large quantities of graviton shards – the ability to indefinitely feed the star with stellar fuel. Obviously, this has diminishing returns but the processing potential is immense thanks to extreme gravitational distortion containing the star regardless of its energy level.
+fog.upgrade.lore.28=The usage of graviton shards in electrical systems to create localised miniature energy wormholes has allowed for such efficient power transfer that effectively unlimited electricity may be utilized by the Forge. More power means faster processing, quicker material movement, and better utilization of graviton shard related upgrades.
+fog.upgrade.lore.29=The final structural upgrade to the Forge required the most advanced understanding of graviton shards and their applications in extreme environments. With this, the last 4 module slots of the Forge of the Gods are available to construct, completing the single greatest structure in human history. The power of the sun in the palm of your hand.
fog.upgrade.lore.30=*insert lore here* upgrade end
-fog.upgrade.text.0=Unlocks a recipe time reduction multiplier based on the current heat the multi is running at. This bonus is calculated via following formula: Multiplier = 1/(Heat^0.01)
-fog.upgrade.text.1=*insert text here* upgrade 11
-fog.upgrade.text.2=*insert text here* upgrade 21
-fog.upgrade.text.3=*insert text here* upgrade 22
-fog.upgrade.text.4=*insert text here* upgrade 31
-fog.upgrade.text.5=*insert text here* upgrade 32
-fog.upgrade.text.6=*insert text here* upgrade 33
-fog.upgrade.text.7=*insert text here* upgrade 41
-fog.upgrade.text.8=*insert text here* upgrade 51
-fog.upgrade.text.9=*insert text here* upgrade 52
-fog.upgrade.text.10=*insert text here* upgrade 53
-fog.upgrade.text.11=*insert text here* upgrade 61
-fog.upgrade.text.12=*insert text here* upgrade 71
-fog.upgrade.text.13=*insert text here* upgrade 72
-fog.upgrade.text.14=*insert text here* upgrade 73
-fog.upgrade.text.15=*insert text here* upgrade 74
-fog.upgrade.text.16=*insert text here* upgrade 80
-fog.upgrade.text.17=*insert text here* upgrade 81
-fog.upgrade.text.18=*insert text here* upgrade 82
-fog.upgrade.text.19=*insert text here* upgrade 83
-fog.upgrade.text.20=*insert text here* upgrade 91
-fog.upgrade.text.21=*insert text here* upgrade 92
-fog.upgrade.text.22=*insert text here* upgrade 93
-fog.upgrade.text.23=*insert text here* upgrade 101
-fog.upgrade.text.24=*insert text here* upgrade 111
-fog.upgrade.text.25=*insert text here* upgrade 121
-fog.upgrade.text.26=*insert text here* upgrade 131
-fog.upgrade.text.27=*insert text here* upgrade 141
-fog.upgrade.text.28=*insert text here* upgrade 151
-fog.upgrade.text.29=*insert text here* upgrade 161
+fog.upgrade.text.0=Unlocks the base functionality of the Forge of the Gods, meaning 8 module slots, 1 ring and the Helioflare Power Forge module.
+fog.upgrade.text.1=Unlocks a recipe time reduction multiplier based on the current heat the multi is running at. This bonus is calculated via following formula: Multiplier = 1 / (Heat^0.01)
+fog.upgrade.text.2=Increases fuel efficiency by multiplying the actual fuel consumption by 0.8
+fog.upgrade.text.3=Multiplies the maximum fuel consumption by 1.2
+fog.upgrade.text.4=Increases the base processing voltage of the multi by: Stellar Fuel Units/sec * 10^8 EU/t
+fog.upgrade.text.5=Unlocks the Helioflux Melting Core module.
+fog.upgrade.text.6=Unlocks a multiplier to maximum parallel based on fuel consumption rate. This bonus is calculated via this formula: Multiplier = 1 + (Stellar Fuel Units/sec) / 15
+fog.upgrade.text.7=Unlocks the Heliothermal Plasma Fabricator module and basic element -> plasma processing (1 step plasmas, T3 fusion maximum).
+fog.upgrade.text.8=Unlocks a configuration window for maximum battery size and increases the limit to max int. Furthermore, an energy discount multiplier is unlocked that scales with battery size (capped to 0.05, or 5%). The discount is calculated as follows: Discount = (1 - 1.05^(-0.05 * Max Battery Capacity)) / 20
+fog.upgrade.text.9=Increases maximum fuel consumption by 1 Stellar Fuel Unit/sec for every purchased upgrade.
+fog.upgrade.text.10=Adds a x2 multiplier to maximum parallel.
+fog.upgrade.text.11=Unlocks the Heliofusion Exoticizer module and quark gluon plasma creation. At this point this module is not affected by any other multipliers or bonuses from other upgrades.
+fog.upgrade.text.12=Improves the fuel consumption -> heat conversion formula. Improved formula: Heat = log1.2(Stellar Fuel Units/sec) * 1000 + 12601
+fog.upgrade.text.13=Improves the formula of N33 to: Multiplier = 1 + (Stellar Fuel Units/sec) / 5
+fog.upgrade.text.14=Improves the OC formula from 4/2 OCs to 4/2.3 OCs.
+fog.upgrade.text.15=Allows the Heliothermal Plasma Fabricator to process multi step plasmas. Tier restriction still applies.
+fog.upgrade.text.16=Allows the Helioflare Power Forge to receive the full benefits of the Helioflux Melting Core upgrade path.
+fog.upgrade.text.17=Increases the cap of EBF heat bonuses to 30,000K.
+fog.upgrade.text.18=Unlocks a multiplier to maximum parallel based on current heat. This bonus is calculated via this formula: Multiplier = 1 + Heat / 15000
+fog.upgrade.text.19=Improves the EBF energy reduction heat bonus from 5% to 8% and adds an energy discount based on the fill level of the internal battery. This bonus is calculated via this formula: Discount = (Current fill level / Max Capacity - 0.5)^2 * (-0,6) + 0,15
+fog.upgrade.text.20=EBF heat bonuses are granted above 30,000K, but the heat value used in heat bonus calculations is determined by this formula: Actual Heat = 30000 + (Current Heat - 30000)^0.85
+fog.upgrade.text.21=Unlocks a multiplier to maximum parallel based on total amount of purchased upgrades. This bonus is calculated via this formula: Multiplier = 1 + Upgrade Amount / 5
+fog.upgrade.text.22=Improves N11 based on current maximum parallel. Improved Formula: Multiplier = (1 / Heat^0.01) / (Parallel^0.02)
+fog.upgrade.text.23=Increases maximum processing voltage by 1 per active ring.
+fog.upgrade.text.24=Allows the Heliothermal Plasma Fabricator to process up to T5 plasmas.
+fog.upgrade.text.25=Allows the Heliofusion Exoticizer to be affected by other upgrade benefits, but those benefits are square rooted first. The overclock bonus is adjusted via the following formula: OC Factor = 2 + (Base OC Factor - 2)^2
+fog.upgrade.text.26=Allows construction of the second ring and adds 4 module slots.
+fog.upgrade.text.27=Uncaps maximum fuel consumption, but fuel consumption used in bonus calculations scales according to this formula: Actual FC = Current Max FC + (Current FC - Current Max FC)^0.75, where FC refers to fuel consumption and max FC refers to the max fuel consumption without this upgrade.
+fog.upgrade.text.28=Uncaps maximum processing voltage. Voltage can be set in each module's GUI.
+fog.upgrade.text.29=Allows construction of the third ring and adds 4 module slots.
fog.upgrade.text.30=*insert text here* upgrade end
fog.debug.resetbutton.text=Reset
fog.debug.resetbutton.tooltip=Resets all upgrades to zero
+fog.debug.unlockall.text=Unlock all upgrades
+fog.debug.gravitonshardsetter.tooltip=Set the amount of availabe graviton shards
fog.button.fuelconfig.tooltip=Fuel Configuration Menu
fog.button.furnacemode.tooltip=Toggle Furnace Mode
fog.button.magmattermode.tooltip.01=Toggle Magmatter Mode
-fog.button.magmattermode.tooltip.02=Magmatter Mode Locked, missing upgrade
+fog.button.magmattermode.tooltip.02=Magmatter Mode locked, missing upgrade
+fog.button.battery.tooltip.01=Toggle Battery Charging
+fog.button.battery.tooltip.02=Right click to open configuration menu (if unlocked)
+fog.button.voltageconfig.tooltip.01=Open voltage config
+fog.button.voltageconfig.tooltip.02=Voltage config locked, missing upgrade
+fog.button.structurecheck.tooltip=Refresh module connection status
+fog.button.milestones.tooltip=Milestone Overview
achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods
@@ -1001,6 +1009,29 @@ gt.blockmachines.multimachine.FOG.fuelusage=Fuel Usage
gt.blockmachines.multimachine.FOG.plasmamultistep=Multi-Step plasma
gt.blockmachines.multimachine.FOG.plasmarecipetier=Fusion Tier
gt.blockmachines.multimachine.FOG.storedfuel=Stored fuel amount:
+gt.blockmachines.multimachine.FOG.storedstartupfuel=Star Fuel amount:
+gt.blockmachines.multimachine.FOG.batteryinfo=Set battery size
+gt.blockmachines.multimachine.FOG.shardcost=Graviton Shard cost:
+gt.blockmachines.multimachine.FOG.availableshards=Available Graviton Shards:
+gt.blockmachines.multimachine.FOG.modulestatus=Status:
+gt.blockmachines.multimachine.FOG.modulestatus.true=Connected
+gt.blockmachines.multimachine.FOG.modulestatus.false=Disconnected
+gt.blockmachines.multimachine.FOG.voltageinfo=Set processing voltage
+gt.blockmachines.multimachine.FOG.totalprogress=Total Progress
+gt.blockmachines.multimachine.FOG.milestoneprogress=Current Milestone Level
+gt.blockmachines.multimachine.FOG.progress=Next Milestone at
+gt.blockmachines.multimachine.FOG.milestonecomplete=Milestone Complete
+gt.blockmachines.multimachine.FOG.milestoneinfo=View Milestone Progress
+gt.blockmachines.multimachine.FOG.inversion=Inversion Active
+gt.blockmachines.multimachine.FOG.powermilestone=Charge
+gt.blockmachines.multimachine.FOG.recipemilestone=Conversion
+gt.blockmachines.multimachine.FOG.fuelmilestone=Catalyst
+gt.blockmachines.multimachine.FOG.purchasablemilestone=Composition
+gt.blockmachines.multimachine.FOG.power=EU Consumed
+gt.blockmachines.multimachine.FOG.recipes=Recipes Processed
+gt.blockmachines.multimachine.FOG.fuel=Fuel Units Consumed
+gt.blockmachines.multimachine.FOG.extensions=Extensions Built
+gt.blockmachines.multimachine.FOG.shardgain=Graviton Shards gained
# Optical Circuits
achievement.gt.metaitem.03.32155=Optical Assembly
@@ -1133,6 +1164,9 @@ GT5U.gui.text.waiting_for_inputs=§7Waiting for inputs
# RecipeMaps
gt.recipe.eyeofharmony=Eye of Harmony
gt.recipe.researchStation=Research Station
+gt.recipe.fog_plasma=Heliothermal Plasma Fabricator
+gt.recipe.fog_exotic=Heliofusion Exoticizer
+
# NEI
tt.nei.eoh.total_items=Total Items: %s
diff --git a/src/main/resources/assets/tectech/textures/gui/background/space.png b/src/main/resources/assets/tectech/textures/gui/background/space.png
new file mode 100644
index 0000000000..4ecf8caa09
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/background/space.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/background/white_glow.png b/src/main/resources/assets/tectech/textures/gui/background/white_glow.png
new file mode 100644
index 0000000000..79df16e73b
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/background/white_glow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_off.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_off.png
new file mode 100644
index 0000000000..ce3e3ed119
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_off.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_on.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_on.png
new file mode 100644
index 0000000000..75832441e8
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/battery_on.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/cyclic_blue.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/cyclic_blue.png
new file mode 100644
index 0000000000..07c606ec11
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/cyclic_blue.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/flag.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/flag.png
new file mode 100644
index 0000000000..48bcca969b
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/flag.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/gorge_logo.png b/src/main/resources/assets/tectech/textures/gui/picture/gorge_logo.png
new file mode 100644
index 0000000000..cdc6b609af
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/gorge_logo.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst.png
new file mode 100644
index 0000000000..7085898445
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst_glow.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst_glow.png
new file mode 100644
index 0000000000..6787270397
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst_glow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge.png
new file mode 100644
index 0000000000..5fec5cdded
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge_glow.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge_glow.png
new file mode 100644
index 0000000000..148c8c9202
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_charge_glow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition.png
new file mode 100644
index 0000000000..5a2f011349
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition_glow.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition_glow.png
new file mode 100644
index 0000000000..a37e194cb0
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_composition_glow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion.png
new file mode 100644
index 0000000000..2ecf6e0617
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion_glow.png b/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion_glow.png
new file mode 100644
index 0000000000..952c00a526
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion_glow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/overlay_blue.png b/src/main/resources/assets/tectech/textures/gui/picture/overlay_blue.png
new file mode 100644
index 0000000000..8e2bb24af4
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/overlay_blue.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/overlay_green.png b/src/main/resources/assets/tectech/textures/gui/picture/overlay_green.png
new file mode 100644
index 0000000000..e49c9d70c4
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/overlay_green.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/overlay_orange.png b/src/main/resources/assets/tectech/textures/gui/picture/overlay_orange.png
new file mode 100644
index 0000000000..bbfc03392f
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/overlay_orange.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/picture/overlay_purple.png b/src/main/resources/assets/tectech/textures/gui/picture/overlay_purple.png
new file mode 100644
index 0000000000..e189df603f
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/picture/overlay_purple.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_plasma.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_plasma.png
new file mode 100644
index 0000000000..60e831ab7e
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_plasma.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_background.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_background.png
new file mode 100644
index 0000000000..6c61bd82f3
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_background.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue.png
new file mode 100644
index 0000000000..b3dcc01f22
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue_inverted.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue_inverted.png
new file mode 100644
index 0000000000..7e24ef4e71
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue_inverted.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple.png
new file mode 100644
index 0000000000..526576713f
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple_inverted.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple_inverted.png
new file mode 100644
index 0000000000..cf0925e421
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple_inverted.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow.png
new file mode 100644
index 0000000000..a09d6c94b8
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow_inverted.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow_inverted.png
new file mode 100644
index 0000000000..dde5ea73c4
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow_inverted.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red.png
new file mode 100644
index 0000000000..a13093b3f5
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red.png
Binary files differ
diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red_inverted.png b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red_inverted.png
new file mode 100644
index 0000000000..1945e452d8
--- /dev/null
+++ b/src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red_inverted.png
Binary files differ