From 53a1991d54729132ccabbc742d7b4f67db9450d4 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Wed, 13 Mar 2024 02:40:14 +0100 Subject: [PATCH 01/57] whole lotta plasmas --- .../tectech/loader/recipe/Godforge.java | 141 +++++++++++++++--- 1 file changed, 122 insertions(+), 19 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 ca5f719aa..08ab12663 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 @@ -34,9 +34,75 @@ public void run() { // 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,10 +116,24 @@ public void run() { // 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( @@ -68,8 +148,10 @@ public void run() { // 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( @@ -101,9 +183,15 @@ public void run() { // 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( @@ -117,9 +205,11 @@ public void run() { // 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( @@ -140,8 +230,17 @@ public void run() { // 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,9 +253,14 @@ public void run() { } // 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( @@ -280,8 +384,7 @@ public void run() { Materials.Vanadium, Materials.Ytterbium, Materials.Yttrium, - Materials.Zinc, - Materials.Flerovium)); + Materials.Zinc)); plasmaGTWeightList.addAll( Arrays.asList( @@ -365,8 +468,7 @@ public void run() { 6000 /* Vanadium */, 2000 /* Ytterbium */, 6000 /* Yttrium */, - 6000 /* Zinc */, - 1000 /* Flerovium */ )); + 6000 /* Zinc */)); // GT++ materials if (GTPlusPlus.isModLoaded()) { @@ -415,6 +517,7 @@ public void run() { 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()) { From 18fcaed61739ba2edad0e27f03a3524b2c5d1828 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 14 Mar 2024 02:33:35 +0100 Subject: [PATCH 02/57] adjust plasma recipe times --- .../technus/tectech/loader/recipe/Godforge.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 08ab12663..e373b67c4 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 @@ -139,7 +139,7 @@ public void run() { 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); @@ -157,7 +157,7 @@ public void run() { 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); @@ -174,7 +174,7 @@ public void run() { 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); @@ -197,7 +197,7 @@ public void run() { 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); @@ -215,7 +215,7 @@ public void run() { 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); @@ -266,7 +266,7 @@ public void run() { 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); From fd135e6415f76586dae74091b941a1263d75a4a5 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 14 Mar 2024 02:34:36 +0100 Subject: [PATCH 03/57] fix up plasma nei page --- .../technus/tectech/recipe/TecTechRecipeMaps.java | 8 ++++---- .../tectech/thing/gui/TecTechUITextures.java | 2 ++ .../textures/gui/progressbar/godforge_plasma.png | Bin 0 -> 356 bytes 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_plasma.png 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 a115f0cc9..db0bcbc26 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 static void init() {} .neiHandlerInfo(builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_Research.get(1))).build(); public static final RecipeMap 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 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(); + .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 9c475345b..19d3b6197 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 @@ -79,6 +79,8 @@ 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 PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo"); public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture 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 0000000000000000000000000000000000000000..60e831ab7e530fd89c1714f4c74b48c2edd19ab5 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Ld!3-q#>Aso-q!^2X+?^QKos)S9O9%LbxYpIynwy({*v@RpYUc`U5Q^Zl$aL$$j-F*i1y;xo1mQk3xIl&PIIQRC&IMV;4fX0uMa zv15h6=c0EpMz{VspFiq!eX5!>U-6uC(G$yM&dy!FWUn2|)p=&8wU)@H|2uHg?QfXB zug3{y*^;6a>Qh{u_O1Aq>bFblJ;&$iJ62t=S^wqC5y69;i{CcR>z03Ubi(Dw`)n$Y rKNPf5y(i!F%HwkPy9s3}$96CnC-d9ce&3Y~^az8etDnm{r-UW|^9_<4 literal 0 HcmV?d00001 From 411a424ecf3020ca1576f9eefb0df6f19199f751 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 14 Mar 2024 02:38:21 +0100 Subject: [PATCH 04/57] change module names + very minor cleanup --- .../tectech/loader/thing/MachineLoader.java | 16 ++++++++++------ .../GT_MetaTileEntity_EM_ExoticModule.java | 9 +++------ .../GT_MetaTileEntity_EM_MoltenModule.java | 10 ++++------ .../GT_MetaTileEntity_EM_PlasmaModule.java | 10 ++++------ .../GT_MetaTileEntity_EM_SmeltingModule.java | 8 +++----- .../resources/assets/tectech/lang/en_US.lang | 3 +++ 6 files changed, 27 insertions(+), 29 deletions(-) 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 564c59608..f4907e6cc 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 @@ -2039,16 +2039,20 @@ public void run() { 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") + 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") + new GT_MetaTileEntity_EM_ExoticModule(15415, "multimachine.em.exotic_module", "Heliofusion Exoticizer") .getStackForm(1L)); // =================================================================================================== 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 0950ed47e..9f6eb268f 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 @@ -467,13 +467,10 @@ private void setMagmatterMode(boolean enabled) { @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; } 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 a9e8c411d..0242d9424 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 @@ -105,7 +105,7 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { // 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); } } @@ -217,12 +217,10 @@ public String[] getInfoData() { @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 299dbb4fc..d20c9d327 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 @@ -133,7 +133,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont } protected Widget createTestButton(IWidgetBuilder builder) { - return new ButtonWidget().setOnClick((clickData, widget) -> { multiStep = !multiStep; }) + return new ButtonWidget().setOnClick((clickData, widget) -> multiStep = !multiStep) .setPlayClickSoundResource( () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation : SoundResource.GUI_BUTTON_DOWN.resourceLocation) @@ -205,12 +205,10 @@ public String[] getInfoData() { @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 cfd6839ce..e8c324fa0 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 @@ -231,12 +231,10 @@ public String[] getInfoData() { @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/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 1941e3f88..40a03adba 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1131,6 +1131,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 From a4c0cd5e5e4f68ed32e4b83927718bc4718c676f Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 15 Mar 2024 20:26:50 +0100 Subject: [PATCH 05/57] refactor a bunch + add OC heat, energy discount, effective fuel factor and misc module functionality --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 41 ++++--- .../GT_MetaTileEntity_EM_BaseModule.java | 47 +++++++- .../GT_MetaTileEntity_EM_MoltenModule.java | 6 +- .../GT_MetaTileEntity_EM_PlasmaModule.java | 15 +-- .../GT_MetaTileEntity_EM_SmeltingModule.java | 6 +- .../technus/tectech/util/GodforgeMath.java | 107 ++++++++++++++---- 6 files changed, 171 insertions(+), 51 deletions(-) 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 360383956..6bc746f86 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 @@ -4,11 +4,13 @@ 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.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.calculateSpeedBonusForModules; +import static com.github.technus.tectech.util.GodforgeMath.setMiscModuleParameters; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; @@ -95,8 +97,8 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int fuelConsumptionFactor = 1; private int selectedFuelType = 0; - private long fuelConsumption = 0; private int internalBattery = 0; + private long fuelConsumption = 0; public ArrayList moduleHatches = new ArrayList<>(); private static int spacetimeCompressionFieldMetadata = -1; @@ -104,11 +106,12 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 MAX_BATTERY_CHARGE = 100; private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; private static final int[] RING_UPGRADES = new int[] { 26, 29 }; protected static final String STRUCTURE_PIECE_MAIN = "main"; - private Boolean debugMode = true; + private boolean debugMode = true; public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { if (mMachine) return -1; @@ -266,7 +269,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (getBaseMetaTileEntity().isAllowedToWork()) { ticker++; // Check and drain fuel - if (ticker % SECONDS == 0) { + if (ticker % (5 * SECONDS) == 0) { ticker = 0; FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); @@ -288,9 +291,11 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (moduleHatches.size() > 0 && internalBattery > 0) { for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { 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); } } } @@ -1080,7 +1085,7 @@ public String[] getStructureDescription(ItemStack stackSize) { return new String[] { "Forge of Gods multiblock" }; } - public Integer getFuelType() { + public int getFuelType() { return selectedFuelType; } @@ -1088,15 +1093,15 @@ private void setFuelType(Integer fuelType) { selectedFuelType = fuelType; } - public Integer getFuelFactor() { + public int getFuelFactor() { return fuelConsumptionFactor; } - public Boolean isUpgradeActive(Integer upgradeID) { + public boolean isUpgradeActive(Integer upgradeID) { return upgrades[upgradeID]; } - public Integer getTotalActiveUpgrades() { + public int getTotalActiveUpgrades() { int totalUpgrades = 0; for (boolean upgrade : upgrades) { if (upgrade) { @@ -1116,12 +1121,12 @@ private Text storedFuel() { } private void increaseBattery(Integer amount) { - if ((internalBattery + amount) <= 100) { + if ((internalBattery + amount) <= MAX_BATTERY_CHARGE) { internalBattery += amount; } } - private void reduceBattery(Integer amount) { + public void reduceBattery(Integer amount) { internalBattery -= amount; if (internalBattery <= 0) { internalBattery = 0; @@ -1134,6 +1139,14 @@ private void reduceBattery(Integer amount) { } } + public int getBatteryCharge() { + return internalBattery; + } + + public int getMaxBatteryCharge() { + return MAX_BATTERY_CHARGE; + } + @Override protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) {} 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 40ef264d2..f54a99546 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 @@ -36,10 +36,15 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc protected final int tier = getTier(); protected boolean isConnected = false; protected boolean isUpgrade83Unlocked = false; + protected int plasmaTier = 0; + protected boolean isMultiStepPlasmaCapable = false; + protected boolean isMagmatterCapable = false; protected UUID userUUID; protected int machineHeat = 0; + protected int overclockHeat = 0; protected int maximumParallel = 0; protected float processingSpeedBonus = 0; + protected float energyDiscount = 0; private static final String STRUCTURE_PIECE_MAIN = "main"; private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition @@ -110,15 +115,23 @@ public void setHeat(Integer heat) { machineHeat = heat; } - public Integer getHeat() { + public int getHeat() { return machineHeat; } + public void setHeatForOC(Integer heat) { + overclockHeat = heat; + } + + public int getHeatForOC() { + return overclockHeat; + } + public void setMaxParallel(Integer parallel) { maximumParallel = parallel; } - public Integer getMaxParallel() { + public int getMaxParallel() { return maximumParallel; } @@ -126,14 +139,42 @@ public void setSpeedBonus(Float bonus) { processingSpeedBonus = bonus; } - public Float getSpeedBonus() { + public float getSpeedBonus() { return processingSpeedBonus; } + public void setEnergyDiscount(Float discount) { + energyDiscount = discount; + } + + public float getEnergyDiscount() { + return energyDiscount; + } + public void setUpgrade83(Boolean upgrade) { isUpgrade83Unlocked = upgrade; } + public void setMultiStepPlasma(Boolean isCapable) { + isMultiStepPlasmaCapable = isCapable; + } + + public void setPlasmaTier(Integer tier) { + plasmaTier = tier; + } + + public int getPlasmaTier() { + return plasmaTier; + } + + public void setMagmatterCapable(Boolean isCapable) { + isMagmatterCapable = isCapable; + } + + public float getHeatEnergyDiscount() { + return isUpgrade83Unlocked ? 0.92f : 0.95f; + } + protected void fixAllIssues() { mWrench = true; mScrewdriver = true; 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 0242d9424..07d1414f6 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 @@ -116,7 +116,8 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { @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()); + .setHeatOC(true).setHeatDiscount(true).setMachineHeat(getHeatForOC()) + .setHeatDiscountMultiplier(getHeatEnergyDiscount()); } @@ -180,6 +181,7 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAmperageOC(false); logic.setMaxParallel(getMaxParallel()); logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); } @Override @@ -210,7 +212,9 @@ public String[] getInfoData() { 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())); return str.toArray(new String[0]); } 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 d20c9d327..dda5b98a9 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 @@ -56,9 +56,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 +85,8 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { 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; @@ -122,6 +120,7 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAmperageOC(false); logic.setMaxParallel(getMaxParallel()); logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); } @Override @@ -133,12 +132,13 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont } 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 +153,7 @@ protected Widget createTestButton(IWidgetBuilder builder) { } 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); @@ -199,6 +199,7 @@ public String[] getInfoData() { 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())); return str.toArray(new String[0]); } 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 e8c324fa0..c16a0cc37 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 @@ -136,7 +136,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @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()); + .setHeatOC(true).setHeatDiscount(true).setMachineHeat(getHeatForOC()) + .setHeatDiscountMultiplier(getHeatEnergyDiscount()); } }; } @@ -148,6 +149,7 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAmperageOC(false); logic.setMaxParallel(getMaxParallel()); logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); } @Override @@ -224,7 +226,9 @@ public String[] getInfoData() { 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())); return str.toArray(new String[0]); } 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 f5c7c660b..2582dd461 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -27,23 +27,30 @@ public static double calculateFuelConsumption(GT_MetaTileEntity_EM_ForgeOfGods g } public static int calculateMaxFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) { - - if (godforge.isUpgradeActive(27)) { - return Integer.MAX_VALUE; - } - 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 +61,35 @@ public static int calculateMaxHeatForModules(GT_MetaTileEntity_EM_BaseModule mod 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 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 float calucateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule module, + public static void calculateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule module, GT_MetaTileEntity_EM_ForgeOfGods godforge) { double speedBonus = 1; @@ -72,19 +104,10 @@ public static float calucateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule speedBonus /= Math.pow(module.getMaxParallel(), 0.012); } } - return (float) speedBonus; + module.setSpeedBonus((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)); - } - } - - 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; @@ -140,6 +163,40 @@ public static int calucateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModule } } - return (int) (baseParallel * node53 * fuelFactorMultiplier * heatMultiplier * upgradeAmountMultiplier); + module.setMaxParallel( + (int) (baseParallel * node53 * fuelFactorMultiplier * heatMultiplier * upgradeAmountMultiplier)); + } + + public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseModule module, + GT_MetaTileEntity_EM_ForgeOfGods godforge) { + double discount = 1; + + if (godforge.isUpgradeActive(19)) { + double fillRatioMinusZeroPointFive = (double) godforge.getBatteryCharge() / godforge.getMaxBatteryCharge() + - 0.5; + if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { + discount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15); + } else { + discount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3; + } + } + + module.setEnergyDiscount((float) discount); + } + + public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule module, + GT_MetaTileEntity_EM_ForgeOfGods godforge) { + int plasmaTier = 0; + + if (godforge.isUpgradeActive(30)) { + plasmaTier = 2; + } else if (godforge.isUpgradeActive(24)) { + plasmaTier = 1; + } + + module.setUpgrade83(godforge.isUpgradeActive(19)); + module.setMultiStepPlasma(godforge.isUpgradeActive(15)); + module.setPlasmaTier(plasmaTier); + module.setMagmatterCapable(godforge.isUpgradeActive(30)); } } From 43a538779e9ca241852df7e7750c7c08072bfbff Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 16 Mar 2024 02:45:21 +0100 Subject: [PATCH 06/57] rework internal battery --- .../tectech/thing/gui/TecTechUITextures.java | 4 + .../GT_MetaTileEntity_EM_ForgeOfGods.java | 95 ++++++++++++++---- .../technus/tectech/util/GodforgeMath.java | 13 ++- .../resources/assets/tectech/lang/en_US.lang | 3 + .../gui/overlay_button/battery_off.png | Bin 0 -> 380 bytes .../gui/overlay_button/battery_on.png | Bin 0 -> 386 bytes 6 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/overlay_button/battery_off.png create mode 100644 src/main/resources/assets/tectech/textures/gui/overlay_button/battery_on.png 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 19d3b6197..3f01c43fb 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 @@ -69,6 +69,10 @@ 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_SLOT_RACK = UITexture.fullImage(MODID, "gui/overlay_slot/rack"); public static final UITexture OVERLAY_SLOT_MESH = UITexture.fullImage(MODID, "gui/overlay_slot/mesh"); 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 6bc746f86..f6d191f86 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 @@ -98,7 +98,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int fuelConsumptionFactor = 1; private int selectedFuelType = 0; private int internalBattery = 0; + private int maxBatteryCharge = 100; private long fuelConsumption = 0; + private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); private static int spacetimeCompressionFieldMetadata = -1; @@ -106,7 +108,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 MAX_BATTERY_CHARGE = 100; + private static final int BATTERY_CONFIG_WINDOW_ID = 12; private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; private static final int[] RING_UPGRADES = new int[] { 26, 29 }; protected static final String STRUCTURE_PIECE_MAIN = "main"; @@ -273,19 +275,19 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { ticker = 0; FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); - fuelConsumption = (long) calculateFuelConsumption(this); + 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(1); - } else { - increaseBattery(1); + reduceBattery(fuelConsumptionFactor); + } else if (batteryCharging) { + increaseBattery(fuelConsumptionFactor); } } else { - reduceBattery(1); + reduceBattery(fuelConsumptionFactor); } // Do module calculations and checks if (moduleHatches.size() > 0 && internalBattery > 0) { @@ -427,6 +429,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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); builder.widget( new ButtonWidget().setOnClick( (clickData, widget) -> { @@ -449,13 +452,11 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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)) + }).addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")).setPos(174, 110)) .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(); @@ -488,6 +489,57 @@ protected ButtonWidget createPowerSwitchButton() { 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 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; @@ -507,7 +559,7 @@ protected ModularWindow createFuelConfigWindow(final EntityPlayer player) { 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) @@ -1112,17 +1164,22 @@ public int getTotalActiveUpgrades() { } private Text fuelUsage() { - return new Text(fuelConsumption + " L/s"); + return new Text(fuelConsumption + " L/5s"); } private Text storedFuel() { return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " + internalBattery + "/100"); + translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " + + internalBattery + + "/" + + maxBatteryCharge); } private void increaseBattery(Integer amount) { - if ((internalBattery + amount) <= MAX_BATTERY_CHARGE) { + if ((internalBattery + amount) <= maxBatteryCharge) { internalBattery += amount; + } else { + batteryCharging = false; } } @@ -1144,7 +1201,7 @@ public int getBatteryCharge() { } public int getMaxBatteryCharge() { - return MAX_BATTERY_CHARGE; + return maxBatteryCharge; } @Override @@ -1157,6 +1214,8 @@ public void saveNBTData(NBTTagCompound NBT) { NBT.setInteger("selectedFuelType", selectedFuelType); NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); NBT.setInteger("internalBattery", internalBattery); + NBT.setBoolean("batteryCharging", batteryCharging); + NBT.setInteger("batterySize", maxBatteryCharge); // Store booleanArray of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); @@ -1178,6 +1237,8 @@ public void loadNBTData(NBTTagCompound NBT) { selectedFuelType = NBT.getInteger("selectedFuelType"); fuelConsumptionFactor = NBT.getInteger("fuelConsumptionFactor"); internalBattery = NBT.getInteger("internalBattery"); + batteryCharging = NBT.getBoolean("batteryCharging"); + maxBatteryCharge = NBT.getInteger("batterySize"); NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); 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 2582dd461..1fd7a52b9 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -169,19 +169,24 @@ public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModul public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseModule module, GT_MetaTileEntity_EM_ForgeOfGods godforge) { - double discount = 1; + 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) { - discount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15); + fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15); } else { - discount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3; + fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3; } } - module.setEnergyDiscount((float) discount); + module.setEnergyDiscount((float) (fillRatioDiscount * maxBatteryDiscount)); } public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule module, diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 40a03adba..680448877 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -974,6 +974,8 @@ 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.battery.tooltip.01=Toggle Battery Charging +fog.button.battery.tooltip.02=Right click to open configuration menu (if unlocked) achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods @@ -999,6 +1001,7 @@ 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.batteryinfo=Set battery size # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly 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 0000000000000000000000000000000000000000..ce3e3ed11980d3a47192daea8507a517838f40cd GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lht0G|+7KFwG@on(H4Jbt5M---X@=KbeU4d+ph=G9K-)k(Lk{hqt(zfsu- z2D^CuqSrdv4;jqjb#fnRrr%)Dj8{p%q7ZkMOD0}6e6P6o5&`R8A-f5J);$829fFpf zLRP)Pwv&Y%W&o{<^PE!;q?Ag6{DS`z0t~zt4i^Gda~60+7BevL9R^{>&c@aBWWX|FZ4Xb`$ykGGClqRr9pt$NS%Lh_0G|+7KFwG@on(H4Jbt5M---X@=KbeU4d+ph=G9K-)k(Lk{hqt(zfswT z{|^}Si(czwKm321;r|&1o!m#7={NqbVNglFq7ZlXe=mb<_+D}EB?8vHLUt1bt$PG4 zI|MB|g{*poZ6^yk%mCW9H+5w!kWwxQ@(cb?5HO@^Hcta8=PdAuEM{QfI}E~%$MaXD z00oOZT^vI+f=f?yay1(WxCTzYxXtkFts^T!v;X~9);{U%^5M{dJ;6u3%LAr__U79! zT2^Zl&nwtqxF~Oa52Ho>atn5jiH;l%Q@k|SZk@uAY$U{2o-^G0uKAu( sF@=NCK!)*H;jeS2f891auu|fGsDR|HOOqBP0Ig^6boFyt=akR{0OKf}oB#j- literal 0 HcmV?d00001 From a6b71cc981edc6e8ab70b3c4d1e1be0069f0f724 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 16 Mar 2024 22:06:40 +0100 Subject: [PATCH 07/57] add graviton shard cost to upgrades --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 88 +++++++++++++++++-- .../resources/assets/tectech/lang/en_US.lang | 3 + 2 files changed, 85 insertions(+), 6 deletions(-) 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 f6d191f86..2c281d0d3 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 @@ -99,6 +99,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int selectedFuelType = 0; private int internalBattery = 0; private int maxBatteryCharge = 100; + private int gravitonShardsAvailable = 0; private long fuelConsumption = 0; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -664,6 +665,7 @@ public void buildTooltip(List tooltip) { private int currentUpgradeID = 0; private int currentColorCode = 0; + private int gravitonShardCost = 0; private int[] prereqUpgrades = new int[] {}; private int[] followupUpgrades = new int[] {}; private boolean allPrereqRequired = false; @@ -676,7 +678,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { 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)) + createUpgradeBox(0, 0, new int[] {}, false, new int[] { 1 }, false, 0, new Pos2d(126, 56), scrollable)) .widget( createUpgradeBox( 1, @@ -685,6 +687,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 2, 3 }, false, + 1, new Pos2d(126, 116), scrollable)) .widget( @@ -695,6 +698,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 4, 5 }, false, + 1, new Pos2d(96, 176), scrollable)) .widget( @@ -705,6 +709,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 5, 6 }, false, + 1, new Pos2d(156, 176), scrollable)) .widget( @@ -715,6 +720,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 8 }, false, + 1, new Pos2d(66, 236), scrollable)) .widget( @@ -725,6 +731,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 7 }, false, + 1, new Pos2d(126, 236), scrollable)) .widget( @@ -735,6 +742,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 10 }, false, + 1, new Pos2d(186, 236), scrollable)) .widget( @@ -745,6 +753,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 8, 9, 10 }, false, + 2, new Pos2d(126, 296), scrollable)) .widget( @@ -755,6 +764,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { true, new int[] { 11 }, false, + 2, new Pos2d(56, 356), scrollable)) .widget( @@ -765,6 +775,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] {}, false, + 2, new Pos2d(126, 356), scrollable)) .widget( @@ -775,6 +786,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { true, new int[] { 11 }, false, + 2, new Pos2d(196, 356), scrollable)) .widget( @@ -785,6 +797,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 12, 13, 14 }, false, + 2, new Pos2d(126, 416), scrollable)) .widget( @@ -795,6 +808,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 17 }, true, + 3, new Pos2d(66, 476), scrollable)) .widget( @@ -805,6 +819,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 18 }, true, + 3, new Pos2d(126, 476), scrollable)) .widget( @@ -815,6 +830,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 15, 19 }, true, + 3, new Pos2d(186, 476), scrollable)) .widget( @@ -825,6 +841,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] {}, false, + 4, new Pos2d(246, 496), scrollable)) .widget( @@ -835,6 +852,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] {}, false, + 4, new Pos2d(6, 556), scrollable)) .widget( @@ -845,6 +863,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 16, 20 }, false, + 3, new Pos2d(66, 536), scrollable)) .widget( @@ -855,6 +874,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 21 }, false, + 3, new Pos2d(126, 536), scrollable)) .widget( @@ -865,6 +885,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 22 }, false, + 3, new Pos2d(186, 536), scrollable)) .widget( @@ -875,6 +896,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 23 }, false, + 3, new Pos2d(66, 596), scrollable)) .widget( @@ -885,6 +907,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 23 }, false, + 3, new Pos2d(126, 596), scrollable)) .widget( @@ -895,6 +918,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 23 }, false, + 3, new Pos2d(186, 596), scrollable)) .widget( @@ -905,6 +929,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 24 }, false, + 4, new Pos2d(126, 656), scrollable)) .widget( @@ -915,6 +940,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 25 }, false, + 5, new Pos2d(126, 718), scrollable)) .widget( @@ -925,6 +951,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 26 }, false, + 6, new Pos2d(36, 758), scrollable)) .widget( @@ -935,6 +962,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 27 }, false, + 7, new Pos2d(36, 848), scrollable)) .widget( @@ -945,6 +973,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 28 }, false, + 8, new Pos2d(126, 888), scrollable)) .widget( @@ -955,6 +984,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 29 }, false, + 9, new Pos2d(216, 848), scrollable)) .widget( @@ -965,6 +995,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] { 30 }, false, + 10, new Pos2d(216, 758), scrollable)) .widget( @@ -975,6 +1006,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { false, new int[] {}, false, + 12, new Pos2d(126, 798), scrollable)) .widget(new TextWidget("").setPos(0, 1000)); @@ -994,7 +1026,16 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { 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")) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) .setPos(4, 354)); + } return builder.build(); } @@ -1006,6 +1047,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) case 3 -> TecTechUITextures.BACKGROUND_GLOW_GREEN; default -> TecTechUITextures.BACKGROUND_GLOW_BLUE; }; + new TextWidget(); ModularWindow.Builder builder = ModularWindow.builder(200, 200).setBackground(background) .widget(ButtonWidget.closeWindowButton(true).setPos(185, 3)) .widget( @@ -1018,7 +1060,24 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) new TextWidget(translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) .setTextAlignment(Alignment.Center).setMaxWidth(185) .setDefaultColor(0x9c9c9c).setPos(9, 110)) - .setSize(200, 200)) + .addChild( + new TextWidget( + translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + " " + + EnumChatFormatting.BLUE + + gravitonShardCost).setTextAlignment(Alignment.Center) + .setScale(0.7f).setMaxWidth(70) + .setDefaultColor(0x9c9c9c).setPos(7, 178)) + .addChild( + new TextWidget( + translateToLocal("gt.blockmachines.multimachine.FOG.availableshards")) + .setTextAlignment(Alignment.Center).setScale(0.7f) + .setMaxWidth(90).setDefaultColor(0x9c9c9c).setPos(113, 178)) + .addChild( + TextWidget.dynamicText(this::gravitonShardAmount) + .setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(90) + .setDefaultColor(0x9c9c9c).setPos(173, 185))) + .setSize(200, 200) + .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { int unlockedPrereqUpgrades = 0; int unlockedFollowupUpgrades = 0; @@ -1030,7 +1089,9 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } } if (allPrereqRequired) { - if (unlockedPrereqUpgrades == prereqUpgrades.length) { + if (unlockedPrereqUpgrades == prereqUpgrades.length + && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; upgrades[currentUpgradeID] = true; } } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { @@ -1046,7 +1107,8 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } } } - if (unlockedSplitUpgrades <= 0) { + if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; upgrades[currentUpgradeID] = true; } } @@ -1057,6 +1119,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } } if (unlockedFollowupUpgrades == 0) { + gravitonShardsAvailable += gravitonShardCost; upgrades[currentUpgradeID] = false; } } @@ -1083,14 +1146,16 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) * 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) { + 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; + gravitonShardCost = shardCost; prereqUpgrades = prerequisiteUpgradeIDs; allPrereqRequired = requireAllPrerequisites; followupUpgrades = followingUpgradeIDs; @@ -1167,6 +1232,15 @@ private Text fuelUsage() { 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() { return new Text( translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " @@ -1216,6 +1290,7 @@ public void saveNBTData(NBTTagCompound NBT) { NBT.setInteger("internalBattery", internalBattery); NBT.setBoolean("batteryCharging", batteryCharging); NBT.setInteger("batterySize", maxBatteryCharge); + NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); // Store booleanArray of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); @@ -1239,6 +1314,7 @@ public void loadNBTData(NBTTagCompound NBT) { internalBattery = NBT.getInteger("internalBattery"); batteryCharging = NBT.getBoolean("batteryCharging"); maxBatteryCharge = NBT.getInteger("batterySize"); + gravitonShardsAvailable = NBT.getInteger("gravitonShardsAvailable"); NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 680448877..679cbac6a 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -969,6 +969,7 @@ 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.gravitonshardsetter.tooltip=Set the amount of availabe graviton shards fog.button.fuelconfig.tooltip=Fuel Configuration Menu fog.button.furnacemode.tooltip=Toggle Furnace Mode @@ -1002,6 +1003,8 @@ 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.batteryinfo=Set battery size +gt.blockmachines.multimachine.FOG.shardcost=Graviton Shard cost: +gt.blockmachines.multimachine.FOG.availableshards=Available Graviton Shards: # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly From 526ecdd96464b6826d569d604459a8495b5ec3a0 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 17 Mar 2024 01:55:56 +0100 Subject: [PATCH 08/57] add module count restriction --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 2c281d0d3..febf128f9 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 @@ -100,6 +100,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int internalBattery = 0; private int maxBatteryCharge = 100; private int gravitonShardsAvailable = 0; + private int maxModuleCount = 0; private long fuelConsumption = 0; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -275,6 +276,14 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (ticker % (5 * SECONDS) == 0) { ticker = 0; FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); + maxModuleCount = 8; + + if (upgrades[26]) { + maxModuleCount += 4; + } + if (upgrades[29]) { + maxModuleCount += 4; + } fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) { @@ -291,7 +300,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { reduceBattery(fuelConsumptionFactor); } // Do module calculations and checks - if (moduleHatches.size() > 0 && internalBattery > 0) { + if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) { for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { module.connect(); calculateMaxHeatForModules(module, this); @@ -300,6 +309,10 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { calculateEnergyDiscountForModules(module, this); setMiscModuleParameters(module, this); } + } else if (moduleHatches.size() > maxModuleCount) { + for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { + module.disconnect(); + } } } } else { From 14424e382b4306470e8c5f5cb82022c924e73648 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 17 Mar 2024 01:56:22 +0100 Subject: [PATCH 09/57] display module connection status in gui --- .../GT_MetaTileEntity_EM_BaseModule.java | 17 +++++++++++++++++ .../resources/assets/tectech/lang/en_US.lang | 3 +++ 2 files changed, 20 insertions(+) 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 f54a99546..940440856 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 @@ -3,11 +3,13 @@ import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; +import static net.minecraft.util.StatCollector.translateToLocal; import java.util.UUID; 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; @@ -16,11 +18,13 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GT_UITextures; @@ -229,6 +233,10 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont drawTexts(screenElements, inventorySlot); builder.widget(screenElements); + 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)); @@ -267,6 +275,15 @@ public boolean willExplodeInRain() { 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); diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 679cbac6a..0e56a1bdb 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1005,6 +1005,9 @@ gt.blockmachines.multimachine.FOG.storedfuel=Stored 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 # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly From f5c87970a479a264072cc1c791994d084701e453 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 17 Mar 2024 18:59:35 +0100 Subject: [PATCH 10/57] add processing voltage calculations --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 24 ++-- .../GT_MetaTileEntity_EM_BaseModule.java | 105 +++++++++++++++++- .../GT_MetaTileEntity_EM_ExoticModule.java | 2 +- .../GT_MetaTileEntity_EM_MoltenModule.java | 7 +- .../GT_MetaTileEntity_EM_PlasmaModule.java | 3 +- .../GT_MetaTileEntity_EM_SmeltingModule.java | 7 +- .../technus/tectech/util/GodforgeMath.java | 23 ++++ .../resources/assets/tectech/lang/en_US.lang | 5 +- 8 files changed, 148 insertions(+), 28 deletions(-) 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 febf128f9..b26611af0 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 @@ -9,6 +9,7 @@ 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.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.setMiscModuleParameters; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; @@ -308,6 +309,9 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { calculateMaxParallelForModules(module, this); calculateEnergyDiscountForModules(module, this); setMiscModuleParameters(module, this); + if (!upgrades[28]) { + calculateProcessingVoltageForModules(module, this); + } } } else if (moduleHatches.size() > maxModuleCount) { for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { @@ -457,16 +461,16 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .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 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)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext().openSyncedWindow(FUEL_CONFIG_WINDOW_ID); + } + }).setSize(16, 16).setBackground(() -> { + List 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)) .widget( TextWidget.dynamicText(this::storedFuel).setDefaultColor(EnumChatFormatting.WHITE).setPos(6, 8) .setSize(74, 34)) 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 940440856..922506004 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,30 +1,45 @@ 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.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; import static net.minecraft.util.StatCollector.translateToLocal; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; +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 gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GT_UITextures; @@ -40,17 +55,20 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc protected final int tier = getTier(); protected boolean isConnected = false; protected boolean isUpgrade83Unlocked = false; - protected int plasmaTier = 0; 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 = 0; private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int VOLTAGE_WINDOW_ID = 9; private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition .builder() .addShape( @@ -163,12 +181,12 @@ public void setMultiStepPlasma(Boolean isCapable) { isMultiStepPlasmaCapable = isCapable; } - public void setPlasmaTier(Integer tier) { - plasmaTier = tier; + public void setProcessingVoltage(Long Voltage) { + processingVoltage = Voltage; } - public int getPlasmaTier() { - return plasmaTier; + public long getProcessingVoltage() { + return processingVoltage; } public void setMagmatterCapable(Boolean isCapable) { @@ -179,6 +197,18 @@ public float getHeatEnergyDiscount() { return isUpgrade83Unlocked ? 0.92f : 0.95f; } + public void setPlasmaTier(Integer tier) { + plasmaTier = tier; + } + + public int getPlasmaTier() { + return plasmaTier; + } + + public void setVoltageConfig(Boolean unlocked) { + isVoltageConfigUnlocked = unlocked; + } + protected void fixAllIssues() { mWrench = true; mScrewdriver = true; @@ -233,13 +263,72 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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 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 @@ -287,12 +376,16 @@ private Text connectionStatus() { @Override public void saveNBTData(NBTTagCompound NBT) { NBT.setBoolean("isConnected", isConnected); + NBT.setBoolean("isVoltageConfigUnlocked", isVoltageConfigUnlocked); + NBT.setLong("processingVoltage", processingVoltage); super.saveNBTData(NBT); } @Override public void loadNBTData(final NBTTagCompound NBT) { isConnected = NBT.getBoolean("isConnected"); + isVoltageConfigUnlocked = NBT.getBoolean("isVoltageConfigUnlocked"); + processingVoltage = NBT.getLong("processingVoltage"); super.loadNBTData(NBT); } 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 9f6eb268f..5521ba33a 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 @@ -212,7 +212,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @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()); } }; 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 07d1414f6..f2dbbf924 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 @@ -33,7 +33,6 @@ 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; @@ -115,9 +114,9 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { @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(getHeatForOC()) - .setHeatDiscountMultiplier(getHeatEnergyDiscount()); + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true) + .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()); } 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 dda5b98a9..263da4a0b 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 @@ -37,7 +37,6 @@ 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; @@ -108,7 +107,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @Nonnull @Override protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(TierEU.MAX); + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()); } }; } 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 c16a0cc37..a04208fb5 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 @@ -39,7 +39,6 @@ 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; @@ -135,9 +134,9 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @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(getHeatForOC()) - .setHeatDiscountMultiplier(getHeatEnergyDiscount()); + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true) + .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()); } }; } 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 1fd7a52b9..d330319e3 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -189,6 +189,28 @@ public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseMo 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)) { + int ringAmount = 0; + if (godforge.isUpgradeActive(26)) { + ringAmount++; + } + if (godforge.isUpgradeActive(29)) { + ringAmount++; + } + voltage *= Math.pow(4, ringAmount); + } + + module.setProcessingVoltage(voltage); + } + public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule module, GT_MetaTileEntity_EM_ForgeOfGods godforge) { int plasmaTier = 0; @@ -203,5 +225,6 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul module.setMultiStepPlasma(godforge.isUpgradeActive(15)); module.setPlasmaTier(plasmaTier); module.setMagmatterCapable(godforge.isUpgradeActive(30)); + module.setVoltageConfig(godforge.isUpgradeActive(28)); } } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 0e56a1bdb..d065d8705 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -974,9 +974,11 @@ 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 achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods @@ -1008,6 +1010,7 @@ 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 # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly From d3fece4591061824cdc36ae27506d7c514b034e4 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 18 Mar 2024 01:10:09 +0100 Subject: [PATCH 11/57] add special overclock functionality --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 3 +-- .../GT_MetaTileEntity_EM_BaseModule.java | 13 +++++++++++-- .../GT_MetaTileEntity_EM_MoltenModule.java | 4 +++- .../GT_MetaTileEntity_EM_PlasmaModule.java | 4 +++- .../GT_MetaTileEntity_EM_SmeltingModule.java | 4 +++- .../github/technus/tectech/util/GodforgeMath.java | 10 ++++++++++ 6 files changed, 31 insertions(+), 7 deletions(-) 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 b26611af0..4b466ae00 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 @@ -101,7 +101,6 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int internalBattery = 0; private int maxBatteryCharge = 100; private int gravitonShardsAvailable = 0; - private int maxModuleCount = 0; private long fuelConsumption = 0; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -277,7 +276,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (ticker % (5 * SECONDS) == 0) { ticker = 0; FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); - maxModuleCount = 8; + int maxModuleCount = 8; if (upgrades[26]) { maxModuleCount += 4; 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 922506004..29905ada7 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 @@ -54,6 +54,7 @@ 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; @@ -173,8 +174,16 @@ public float getEnergyDiscount() { return energyDiscount; } - public void setUpgrade83(Boolean upgrade) { - isUpgrade83Unlocked = upgrade; + public void setUpgrade83(Boolean unlocked) { + isUpgrade83Unlocked = unlocked; + } + + public void setOverclockTimeFactor(Double factor) { + overclockTimeFactor = factor; + } + + public double getOverclockTimeFactor() { + return overclockTimeFactor; } public void setMultiStepPlasma(Boolean isCapable) { 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 f2dbbf924..1e224197b 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 @@ -116,7 +116,8 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true) - .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()); + .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); } @@ -214,6 +215,7 @@ public String[] getInfoData() { 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]); } 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 263da4a0b..185bc309a 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 @@ -107,7 +107,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @Nonnull @Override protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()); + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); } }; } @@ -199,6 +200,7 @@ public String[] getInfoData() { 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]); } 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 a04208fb5..2a98b76c6 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 @@ -136,7 +136,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setRecipeHeat(recipe.mSpecialValue).setHeatOC(true).setHeatDiscount(true) - .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()); + .setMachineHeat(getHeatForOC()).setHeatDiscountMultiplier(getHeatEnergyDiscount()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); } }; } @@ -228,6 +229,7 @@ public String[] getInfoData() { 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]); } 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 d330319e3..65943b11d 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -214,6 +214,7 @@ public static void calculateProcessingVoltageForModules(GT_MetaTileEntity_EM_Bas 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; @@ -221,10 +222,19 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul plasmaTier = 1; } + if (godforge.isUpgradeActive(14)) { + if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { + overclockTimeFactor = 2.3; + } else { + overclockTimeFactor = 2.15; + } + } + 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); } } From cf24c8438e6a1f5cdf5f4e3b7a93721de76a428c Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 18 Mar 2024 01:27:57 +0100 Subject: [PATCH 12/57] make nbt data sticky --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 4b466ae00..567badc3e 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 @@ -1297,6 +1297,30 @@ public int getMaxBatteryCharge() { @Override protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) {} + @Override + public void setItemNBT(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); + + // 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); From 959d59dc4fe1461cab8176d71109e5b285e7f141 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Tue, 19 Mar 2024 01:12:47 +0100 Subject: [PATCH 13/57] add exotic module bonuses & fix stacksize issue --- .../GT_MetaTileEntity_EM_BaseModule.java | 5 ++ .../GT_MetaTileEntity_EM_ExoticModule.java | 55 ++++++++++++++++--- .../technus/tectech/util/GodforgeMath.java | 5 ++ 3 files changed, 56 insertions(+), 9 deletions(-) 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 29905ada7..8a8063995 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 @@ -56,6 +56,7 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc protected boolean isConnected = false; protected double overclockTimeFactor = 2d; protected boolean isUpgrade83Unlocked = false; + protected boolean exoticBonuses = false; protected boolean isMultiStepPlasmaCapable = false; protected boolean isMagmatterCapable = false; private boolean isVoltageConfigUnlocked = false; @@ -218,6 +219,10 @@ public void setVoltageConfig(Boolean unlocked) { isVoltageConfigUnlocked = unlocked; } + public void setExoticBonuses(Boolean unlocked) { + exoticBonuses = unlocked; + } + protected void fixAllIssues() { mWrench = true; mScrewdriver = true; 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 5521ba33a..8d3d84b3e 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 @@ -78,6 +78,8 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base private int currentParallel = 0; private long wirelessEUt = 0; private long EUt = 0; + private long actualParallel = 0; + private static final long BASE_PARALLEL = 36; private boolean recipeInProgress = false; private boolean magmatterCapable = true; private boolean magmatterMode = false; @@ -104,6 +106,14 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_EM_ExoticModule(mName); } + private void setActualParallel() { + if (exoticBonuses) { + actualParallel = 9 * (long) Math.floor(Math.sqrt(getMaxParallel()) / 9); + } else { + actualParallel = BASE_PARALLEL; + } + } + @Override protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { @@ -112,14 +122,15 @@ protected ProcessingLogic createProcessingLogic() { @Override protected Stream findRecipeMatches(@Nullable RecipeMap map) { if (!recipeInProgress) { + setActualParallel(); HashMap fluidMap = exoticModulePlasmaFluidMap; HashMap itemMap = exoticModulePlasmaItemMap; - FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000); + FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000 * actualParallel); if (magmatterMode) { fluidMap = exoticModuleMagmatterFluidMap; itemMap = exoticModuleMagmatterItemMap; - outputFluid = MaterialsUEVplus.MagMatter.getMolten(144); + outputFluid = MaterialsUEVplus.MagMatter.getMolten(144 * actualParallel); } tempRecipeMap = emptyRecipeMap; @@ -140,8 +151,9 @@ protected Stream findRecipeMatches(@Nullable RecipeMap map) { } } - 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, @@ -151,7 +163,7 @@ protected Stream findRecipeMatches(@Nullable RecipeMap map) { null, inputPlasmas.toArray(new FluidStack[0]), new FluidStack[] { outputFluid }, - 10 * SECONDS, + 10 * SECONDS * (int) actualParallel, (int) TierEU.RECIPE_MAX, 0); @@ -175,14 +187,30 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { 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) { for (ItemStack itemStack : randomizedItemInput) { - addOutput(itemStack); + int stacksize = (int) (itemStack.stackSize * actualParallel); + if (stacksize < 64) { + addOutput(new ItemStack(itemStack.getItem(), stacksize)); + } else { + // split itemStacks > 64 + while (stacksize >= 64) { + ItemStack tmpItem = itemStack.copy(); + tmpItem.stackSize = 64; + addOutput(tmpItem); + stacksize -= 64; + } + ItemStack tmpItem = itemStack.copy(); + tmpItem.stackSize = stacksize; + addOutput(tmpItem); + } } } @@ -212,7 +240,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @Nonnull @Override protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()); + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setDurationDecreasePerOC(2 + Math.pow(getOverclockTimeFactor() - 2, 2)); } }; @@ -223,6 +252,8 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAvailableVoltage(Long.MAX_VALUE); logic.setAvailableAmperage(Integer.MAX_VALUE); logic.setAmperageOC(false); + logic.setSpeedBonus((float) Math.sqrt(getSpeedBonus())); + logic.setEuModifier((float) Math.sqrt(getEnergyDiscount())); } @Override @@ -487,8 +518,14 @@ public String[] getInfoData() { + RESET + " s"); str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(actualParallel)); str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); + str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(Math.sqrt(getSpeedBonus()))); + str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(Math.sqrt(getEnergyDiscount()))); + str.add( + YELLOW + "Recipe time divisor per non-perfect OC: " + + RESET + + formatNumbers(2 + Math.pow(getOverclockTimeFactor() - 2, 2))); return str.toArray(new String[0]); } 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 65943b11d..214ff7cfb 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -5,6 +5,7 @@ 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.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; public class GodforgeMath { @@ -125,6 +126,9 @@ public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModul if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { baseParallel = 256; } + if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { + baseParallel = 128; + } if (module instanceof GT_MetaTileEntity_EM_MoltenModule || (module instanceof GT_MetaTileEntity_EM_SmeltingModule && godforge.isUpgradeActive(16))) { @@ -236,5 +240,6 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul module.setMagmatterCapable(godforge.isUpgradeActive(30)); module.setVoltageConfig(godforge.isUpgradeActive(28)); module.setOverclockTimeFactor(overclockTimeFactor); + module.setExoticBonuses(godforge.isUpgradeActive(25)); } } From 18c1c4c0f13a4e33c7defcd58853a6aba76fa058 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Wed, 20 Mar 2024 02:46:19 +0100 Subject: [PATCH 14/57] add module refresh and new logo --- .../recipe/GodforgeExoticFrontend.java | 10 +++++++++ .../recipe/GodforgePlasmaFrontend.java | 10 +++++++++ .../tectech/thing/gui/TecTechUITextures.java | 2 ++ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 20 ++++++++++++++++-- .../GT_MetaTileEntity_EM_ExoticModule.java | 20 ++++++++++-------- .../technus/tectech/util/GodforgeMath.java | 2 +- .../resources/assets/tectech/lang/en_US.lang | 1 + .../gui/overlay_button/cyclic_blue.png | Bin 0 -> 723 bytes .../textures/gui/picture/gorge_logo.png | Bin 0 -> 1043 bytes 9 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/overlay_button/cyclic_blue.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/gorge_logo.png 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 1f19fc00c..e5b62852f 100644 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java +++ b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java @@ -7,7 +7,10 @@ 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; @@ -25,6 +28,13 @@ public GodforgeExoticFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, super(uiPropertiesBuilder, neiPropertiesBuilder); } + @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 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 bf8fcc5e8..e96bd19bc 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 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; @@ -26,6 +29,13 @@ public GodforgePlasmaFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, super(uiPropertiesBuilder, neiPropertiesBuilder); } + @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 getItemInputPositions(int itemInputCount) { return Collections.singletonList(new Pos2d(52, 33)); 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 3f01c43fb..c954525ab 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 @@ -73,6 +73,7 @@ public class TecTechUITextures { .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_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"); @@ -89,6 +90,7 @@ public class TecTechUITextures { 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 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 567badc3e..efe36053f 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 @@ -437,7 +437,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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) @@ -480,7 +480,23 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont } else { getBaseMetaTileEntity().disableWorking(); } - })); + })).widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + checkMachine_EM(this.getBaseMetaTileEntity(), null); + } + }).setSize(16, 16).setBackground(() -> { + List 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)); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO).setSize(18, 18) + .setPos(172, 67)); } @Override 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 8d3d84b3e..3732e20d8 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 @@ -32,6 +32,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -81,7 +82,6 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base private long actualParallel = 0; private static final long BASE_PARALLEL = 36; private boolean recipeInProgress = false; - private boolean magmatterCapable = true; private boolean magmatterMode = false; private FluidStack[] randomizedFluidInput = new FluidStack[] {}; private ItemStack[] randomizedItemInput = new ItemStack[] {}; @@ -454,35 +454,37 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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 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; } 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 214ff7cfb..6a2ceba32 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -2,10 +2,10 @@ 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; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; public class GodforgeMath { diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index d065d8705..ed7724c30 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -979,6 +979,7 @@ 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 achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods 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 0000000000000000000000000000000000000000..07c606ec11a36a8d6f68115ad9a81af8a9a38ae0 GIT binary patch literal 723 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCili1o(uw3fc7v+4Tw8_6k|`ia5>^ahxISFh$6&U(lvoz`9e=rc2PaTiAZ0 zh{L4p75{Tr{TFeZE@;~)VBIZX*(qSrAz;xdXxSxb*)3$z`-ef8UA!{U`qqn)W|p*8k*1|Ap)(*fsrfZvW@f@z1sEzkAPrufG32 z6aM>7`tLvGf5?pgvGe~6+4fn~e6wr%E8;j)$hue9VX|@gN3*J51|@Ixi{1*^PZYH6 z)h~Ljo%2Azs#CzS1L&dLfM-%b%B3X8FZe&@fT8eGzYx$o&H|6fVg?4j!ywFfJby(B zFkl@#T^vI!{I5=ooZMs}(84L0v?uT*!+Y&VwU0X&{r_+8nWCh5cUA4J_P5LDoe8&% zU0_pp(VkU=RdGYi{f1RZJkz`x41LuLy@Wldc%^Uhnxe>{oBo8`b#utEsjE`GC7D*d z{OY#&V$N3UyK(gjsT>U(7e4MeHu+`FzKC@?(Xodg@lH5fCjO0MipMTJ9hMF1?aIk} z+&5-?(puEYP*P+S%+;*J7_;Z~+3$%HR2vlLT&jN2tlhdt{FnKIz3bZl`DH5RxBTNh z@#*jFtGf?;5O#R^)1^d$rJ-zopr09p!I A0RR91 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cdc6b609afdfefe986d7fd96662f243e081bbfdc GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%3?x6Bmj(hU#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6BM1^9%x=1Jw9Njt+UFFku#l`2qC1l4bVa+LN$th~ZDPkQUQOL{T#VlmPz^l!` ztsSILF2Us~Ea1t`Z?%3(CbyU!x40dbs12{YA-jMT1BaG4j~j=eHHV-Tr=abj|9{zd zZTVEJ8CZ201@uI?J%xDPIR$JP)WdmYEjLWAVc^yj;P>DVw_@kDW+?g}B@o3a;H)O1 z$|mc=Ca%xHZ^I>NEx_x#z+nLkpA(mW9k+-bC$A}opp6)ZyMTZPhp?5PhzC2DJqN3u z2$u)DkfkWMC%2$IuYijLpU<5eD_A)#xutAE%-i*aLL@lc*txBFIQ==DMFd^A zWo&pAtX%kGIAtBUWNf6lyx4fHSXphQcoIKf+o>!WE+FZmDHOsbY|ABW%_V8W$Ll7* z>-PKc^3VTYe|mSI-nL7S&z*(QikHV#mObXlhspX9{=!`TJfaTVyq=_bZ4dAIe*3iVrtdc)cLkO9u!6SF z2@aA=;!ildGl_c?TAyp zucM)(rKic-u;~+*xuVjPpv=%v?l9gf*RB=|*||9<3yW|)bmUC5oE;tY*`TvyJMW}h zt?oYpoKE$fTbHL4vF1423sE`w>A^v#>>ljnxn0yaMe)-535?2zU&>4f5`5TN#U9!b z;mi?adA$AbhmJ{$lYNeN*v=F6nq7niEHR@4?(v)AQK=2U$A?_kZHimJLw*5BWKI4{~( uRR90+=T|kqM#hi#?>3zHy^*=`fccrHopD@mDjoqNhQZU-&t;ucLK6UPUa4UK literal 0 HcmV?d00001 From 11afd007681b2ae2161d7ca9f7ea01d302a33314 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 21 Mar 2024 23:14:23 +0100 Subject: [PATCH 15/57] add gorge logo and fix processing voltage --- .../godforge_modules/GT_MetaTileEntity_EM_BaseModule.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 8a8063995..11e95aac8 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 @@ -67,7 +67,7 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc protected int plasmaTier = 0; protected float processingSpeedBonus = 0; protected float energyDiscount = 0; - protected long processingVoltage = 0; + protected long processingVoltage = 2_000_000_000; private static final String STRUCTURE_PIECE_MAIN = "main"; private static final int VOLTAGE_WINDOW_ID = 9; @@ -346,7 +346,11 @@ protected ModularWindow createVoltageWindow(final EntityPlayer player) { } @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() { From dd7fe9b40910416349821be0fe88c96942ab3e74 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 21 Mar 2024 23:14:46 +0100 Subject: [PATCH 16/57] redo recipemap swapping --- .../GT_MetaTileEntity_EM_SmeltingModule.java | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) 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 2a98b76c6..3bdc5f7bc 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 @@ -16,10 +16,8 @@ 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; @@ -74,7 +72,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override public RecipeMap getRecipeMap() { - return null; + return furnaceMode ? RecipeMaps.furnaceRecipes : RecipeMaps.blastFurnaceRecipes; } @Nonnull @@ -83,27 +81,12 @@ public Collection> getAvailableRecipeMaps() { 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 findRecipeMatches(@Nullable RecipeMap map) { - RecipeMap recipes = getRecipeMap(furnaceMode); - return super.findRecipeMatches(recipes); - } - @NotNull @Override protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { From 28517804b99ca962cec48290751b7bbc340f4cd9 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 22 Mar 2024 03:02:21 +0100 Subject: [PATCH 17/57] redo exotic module nei page --- .../tectech/loader/recipe/Godforge.java | 10 ++--- .../recipe/GodforgeExoticFrontend.java | 23 +++++++++++ .../tectech/recipe/TT_recipeAdder.java | 40 ++----------------- .../tectech/recipe/TecTechRecipeMaps.java | 2 +- 4 files changed, 33 insertions(+), 42 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 e373b67c4..71bf997da 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 @@ -13,6 +13,7 @@ import com.github.technus.tectech.recipe.TT_recipeAdder; import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.TierEU; import gtPlusPlus.core.material.ELEMENT; @@ -289,11 +290,10 @@ public void run() { // 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[] {}, + new FluidStack[] { MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000), + MaterialsUEVplus.MagMatter.getMolten(144) }, 10 * SECONDS, (int) TierEU.RECIPE_MAX, 1); 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 e5b62852f..32e5577bb 100644 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java +++ b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java @@ -1,22 +1,30 @@ package com.github.technus.tectech.recipe; +import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaFluidMap; +import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaItemMap; import static gregtech.api.util.GT_Utility.trans; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + 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.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 @@ -35,6 +43,21 @@ public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { .setPos(new Pos2d(151, 63).add(windowOffset))); } + @Override + public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + + List cyclingDusts = new ArrayList<>(exoticModulePlasmaItemMap.keySet()); + neiCachedRecipe.mInputs.set(0, new PositionedStack(cyclingDusts, 48, 23, true)); + + List fluids = new ArrayList<>(exoticModulePlasmaFluidMap.keySet()); + List fluidItems = new ArrayList<>(); + for (FluidStack fluid : fluids) { + fluidItems.add(GT_Utility.getFluidDisplayStack(fluid, true)); + } + neiCachedRecipe.mInputs.add(0, new PositionedStack(fluidItems, 48, 52, true)); + + } + @Override public List 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 a12a64579..59881af67 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 static boolean addFOGPlasmaRecipe(FluidStack[] fluidInputs, FluidStack[] 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 db0bcbc26..9fea8d13b 100644 --- a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java +++ b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java @@ -51,7 +51,7 @@ public static void init() {} .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 godforgeExoticMatterRecipes = RecipeMapBuilder - .of("gt.recipe.fog_exotic").maxIO(1, 1, 1, 1) + .of("gt.recipe.fog_exotic").maxIO(1, 1, 1, 2) .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT) .progressBarPos(78, 33).neiTransferRect(78, 33, 20, 20).frontend(GodforgeExoticFrontend::new).build(); From e5af2d4d033a18cda42722fb0192af966a836aeb Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 24 Mar 2024 02:53:14 +0100 Subject: [PATCH 18/57] add required upgrade check for modules --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 29 +++++++++---------- .../technus/tectech/util/GodforgeMath.java | 18 ++++++++++++ 2 files changed, 31 insertions(+), 16 deletions(-) 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 efe36053f..8318b04ba 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 @@ -4,14 +4,7 @@ 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.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.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.setMiscModuleParameters; +import static com.github.technus.tectech.util.GodforgeMath.*; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; @@ -302,14 +295,18 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // Do module calculations and checks if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) { for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - module.connect(); - calculateMaxHeatForModules(module, this); - calculateSpeedBonusForModules(module, this); - calculateMaxParallelForModules(module, this); - calculateEnergyDiscountForModules(module, this); - setMiscModuleParameters(module, this); - if (!upgrades[28]) { - calculateProcessingVoltageForModules(module, this); + if (allowModuleConnection(module, this)) { + module.connect(); + calculateMaxHeatForModules(module, this); + calculateSpeedBonusForModules(module, this); + calculateMaxParallelForModules(module, this); + calculateEnergyDiscountForModules(module, this); + setMiscModuleParameters(module, this); + if (!upgrades[28]) { + calculateProcessingVoltageForModules(module, this); + } + } else { + module.disconnect(); } } } else if (moduleHatches.size() > maxModuleCount) { 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 6a2ceba32..488e05463 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -242,4 +242,22 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul module.setOverclockTimeFactor(overclockTimeFactor); module.setExoticBonuses(godforge.isUpgradeActive(25)); } + + 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; + } } From a666b4bf035da43dd05fafd7b2243bd57aa6c361 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 24 Mar 2024 02:58:06 +0100 Subject: [PATCH 19/57] swap object types --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 8 +++--- .../GT_MetaTileEntity_EM_BaseModule.java | 26 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) 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 8318b04ba..d1593fd86 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 @@ -1235,7 +1235,7 @@ public int getFuelType() { return selectedFuelType; } - private void setFuelType(Integer fuelType) { + private void setFuelType(int fuelType) { selectedFuelType = fuelType; } @@ -1243,7 +1243,7 @@ public int getFuelFactor() { return fuelConsumptionFactor; } - public boolean isUpgradeActive(Integer upgradeID) { + public boolean isUpgradeActive(int upgradeID) { return upgrades[upgradeID]; } @@ -1278,7 +1278,7 @@ private Text storedFuel() { + maxBatteryCharge); } - private void increaseBattery(Integer amount) { + private void increaseBattery(int amount) { if ((internalBattery + amount) <= maxBatteryCharge) { internalBattery += amount; } else { @@ -1286,7 +1286,7 @@ private void increaseBattery(Integer amount) { } } - public void reduceBattery(Integer amount) { + public void reduceBattery(int amount) { internalBattery -= amount; if (internalBattery <= 0) { internalBattery = 0; 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 11e95aac8..35a939cd7 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 @@ -135,7 +135,7 @@ public void disconnect() { isConnected = false; } - public void setHeat(Integer heat) { + public void setHeat(int heat) { machineHeat = heat; } @@ -143,7 +143,7 @@ public int getHeat() { return machineHeat; } - public void setHeatForOC(Integer heat) { + public void setHeatForOC(int heat) { overclockHeat = heat; } @@ -151,7 +151,7 @@ public int getHeatForOC() { return overclockHeat; } - public void setMaxParallel(Integer parallel) { + public void setMaxParallel(int parallel) { maximumParallel = parallel; } @@ -159,7 +159,7 @@ public int getMaxParallel() { return maximumParallel; } - public void setSpeedBonus(Float bonus) { + public void setSpeedBonus(float bonus) { processingSpeedBonus = bonus; } @@ -167,7 +167,7 @@ public float getSpeedBonus() { return processingSpeedBonus; } - public void setEnergyDiscount(Float discount) { + public void setEnergyDiscount(float discount) { energyDiscount = discount; } @@ -175,11 +175,11 @@ public float getEnergyDiscount() { return energyDiscount; } - public void setUpgrade83(Boolean unlocked) { + public void setUpgrade83(boolean unlocked) { isUpgrade83Unlocked = unlocked; } - public void setOverclockTimeFactor(Double factor) { + public void setOverclockTimeFactor(double factor) { overclockTimeFactor = factor; } @@ -187,11 +187,11 @@ public double getOverclockTimeFactor() { return overclockTimeFactor; } - public void setMultiStepPlasma(Boolean isCapable) { + public void setMultiStepPlasma(boolean isCapable) { isMultiStepPlasmaCapable = isCapable; } - public void setProcessingVoltage(Long Voltage) { + public void setProcessingVoltage(long Voltage) { processingVoltage = Voltage; } @@ -199,7 +199,7 @@ public long getProcessingVoltage() { return processingVoltage; } - public void setMagmatterCapable(Boolean isCapable) { + public void setMagmatterCapable(boolean isCapable) { isMagmatterCapable = isCapable; } @@ -207,7 +207,7 @@ public float getHeatEnergyDiscount() { return isUpgrade83Unlocked ? 0.92f : 0.95f; } - public void setPlasmaTier(Integer tier) { + public void setPlasmaTier(int tier) { plasmaTier = tier; } @@ -215,11 +215,11 @@ public int getPlasmaTier() { return plasmaTier; } - public void setVoltageConfig(Boolean unlocked) { + public void setVoltageConfig(boolean unlocked) { isVoltageConfigUnlocked = unlocked; } - public void setExoticBonuses(Boolean unlocked) { + public void setExoticBonuses(boolean unlocked) { exoticBonuses = unlocked; } From 0c83ab0fca7bbafab8915d6557cbdb2ea0bfff2f Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 24 Mar 2024 03:00:31 +0100 Subject: [PATCH 20/57] undo star import --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 d1593fd86..3b394d18e 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 @@ -4,7 +4,15 @@ 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.*; +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.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.setMiscModuleParameters; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; From f71cbbf7a6acae47c7ef669022407e502b13aeae Mon Sep 17 00:00:00 2001 From: GDCloud Date: Wed, 27 Mar 2024 03:12:49 +0100 Subject: [PATCH 21/57] save milestone relevant stats --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 38 ++++++++++++++++--- .../GT_MetaTileEntity_EM_BaseModule.java | 31 +++++++++++++++ .../GT_MetaTileEntity_EM_ExoticModule.java | 2 + .../GT_MetaTileEntity_EM_MoltenModule.java | 2 + .../GT_MetaTileEntity_EM_PlasmaModule.java | 2 + .../GT_MetaTileEntity_EM_SmeltingModule.java | 2 + .../technus/tectech/util/GodforgeMath.java | 11 ++++++ 7 files changed, 83 insertions(+), 5 deletions(-) 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 3b394d18e..ee5bffcfd 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 @@ -12,6 +12,7 @@ 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.queryMilestoneStats; import static com.github.technus.tectech.util.GodforgeMath.setMiscModuleParameters; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; @@ -26,6 +27,7 @@ import static gregtech.api.util.GT_Utility.formatNumbers; import static net.minecraft.util.StatCollector.translateToLocal; +import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -103,6 +105,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int maxBatteryCharge = 100; private int gravitonShardsAvailable = 0; private long fuelConsumption = 0; + private long totalRecipesProcessed = 0; + private long totalFuelConsumed = 0; + private BigInteger totalPowerConsumed = BigInteger.ZERO; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -294,8 +299,11 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { FluidStack fluidReal = mInputHatches.get(0).drain(fluidNeeded.amount, true); if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) { reduceBattery(fuelConsumptionFactor); - } else if (batteryCharging) { - increaseBattery(fuelConsumptionFactor); + } else { + totalFuelConsumed += getFuelFactor(); + if (batteryCharging) { + increaseBattery(fuelConsumptionFactor); + } } } else { reduceBattery(fuelConsumptionFactor); @@ -310,6 +318,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { calculateMaxParallelForModules(module, this); calculateEnergyDiscountForModules(module, this); setMiscModuleParameters(module, this); + queryMilestoneStats(module, this); if (!upgrades[28]) { calculateProcessingVoltageForModules(module, this); } @@ -1295,16 +1304,18 @@ private void increaseBattery(int amount) { } public void reduceBattery(int amount) { - internalBattery -= amount; - if (internalBattery <= 0) { + 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() { @@ -1315,6 +1326,14 @@ 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) {} @@ -1328,6 +1347,9 @@ public void setItemNBT(NBTTagCompound NBT) { NBT.setBoolean("batteryCharging", batteryCharging); NBT.setInteger("batterySize", maxBatteryCharge); NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); + NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); + NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); + NBT.setLong("totalFuelConsumed", totalFuelConsumed); // Store booleanArray of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); @@ -1352,6 +1374,9 @@ public void saveNBTData(NBTTagCompound NBT) { NBT.setBoolean("batteryCharging", batteryCharging); NBT.setInteger("batterySize", maxBatteryCharge); NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); + NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); + NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); + NBT.setLong("totalFuelConsumed", totalFuelConsumed); // Store booleanArray of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); @@ -1376,6 +1401,9 @@ public void loadNBTData(NBTTagCompound NBT) { batteryCharging = NBT.getBoolean("batteryCharging"); maxBatteryCharge = NBT.getInteger("batterySize"); gravitonShardsAvailable = NBT.getInteger("gravitonShardsAvailable"); + totalPowerConsumed = new BigInteger(NBT.getByteArray("totalPowerConsumed")); + totalRecipesProcessed = NBT.getLong("totalRecipesProcessed"); + totalFuelConsumed = NBT.getLong("totalFuelConsumed"); 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 35a939cd7..7f454323e 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 @@ -6,6 +6,7 @@ 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; @@ -68,6 +69,8 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc 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 final String STRUCTURE_PIECE_MAIN = "main"; private static final int VOLTAGE_WINDOW_ID = 9; @@ -223,6 +226,30 @@ public void setExoticBonuses(boolean unlocked) { exoticBonuses = 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() { mWrench = true; mScrewdriver = true; @@ -396,6 +423,8 @@ 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); } @@ -404,6 +433,8 @@ 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); } 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 3732e20d8..d9a6bb921 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 @@ -229,6 +229,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); } + addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(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 1e224197b..2ca8882fd 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 @@ -127,6 +127,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } + addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(0); 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 185bc309a..e2b04fb28 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 @@ -98,6 +98,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); } + addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(0); 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 3bdc5f7bc..652ec5d46 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 @@ -108,6 +108,8 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } + addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(0); 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 488e05463..614777b8b 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -1,5 +1,7 @@ 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; @@ -260,4 +262,13 @@ public static boolean allowModuleConnection(GT_MetaTileEntity_EM_BaseModule modu 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); + + } } From dcc9fcc55ba19c19b33a845c54b3047572afe6a0 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 19 Apr 2024 01:55:06 +0200 Subject: [PATCH 22/57] add functionality and basic gui to milestones --- .../tectech/loader/thing/MachineLoader.java | 12 +- .../tectech/thing/gui/TecTechUITextures.java | 18 ++ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 223 +++++++++++++++++- .../technus/tectech/util/TT_Utility.java | 8 + .../resources/assets/tectech/lang/en_US.lang | 11 + .../textures/gui/overlay_button/flag.png | Bin 0 -> 228 bytes .../gui/picture/milestone_catalyst.png | Bin 0 -> 1749 bytes .../textures/gui/picture/milestone_charge.png | Bin 0 -> 1295 bytes .../gui/picture/milestone_composition.png | Bin 0 -> 1596 bytes .../gui/picture/milestone_conversion.png | Bin 0 -> 1444 bytes .../progressbar/godforge_progressbar_blue.png | Bin 0 -> 1905 bytes .../godforge_progressbar_purple.png | Bin 0 -> 1916 bytes .../godforge_progressbar_rainbow.png | Bin 0 -> 1855 bytes .../progressbar/godforge_progressbar_red.png | Bin 0 -> 1905 bytes 14 files changed, 258 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/overlay_button/flag.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_charge.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_composition.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red.png 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 0b523494b..b40de4fe3 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 @@ -2046,16 +2046,20 @@ public void run() { "multimachine.em.smelting_module", "Helioflare Power Forge").getStackForm(1L)); Machine_Multi_MoltenModule.set( - new GT_MetaTileEntity_EM_MoltenModule(15413, "multimachine.em.molten_module", "Helioflux Melting Core") - .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", "Heliothermal Plasma Fabricator").getStackForm(1L)); Machine_Multi_QuarkGluonPlasmaModule.set( - new GT_MetaTileEntity_EM_ExoticModule(15415, "multimachine.em.exotic_module", "Heliofusion Exoticizer") - .getStackForm(1L)); + new GT_MetaTileEntity_EM_ExoticModule( + 15415, + "multimachine.em.exotic_module", + "Heliofusion Exoticizer").getStackForm(1L)); } // =================================================================================================== 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 c954525ab..ffe7f85a9 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 @@ -73,6 +73,7 @@ public class TecTechUITextures { .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"); @@ -86,6 +87,14 @@ public class TecTechUITextures { .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_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 PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo"); public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture @@ -131,4 +140,13 @@ 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"); + } 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 ee5bffcfd..8037e179f 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 @@ -14,6 +14,7 @@ import static com.github.technus.tectech.util.GodforgeMath.calculateSpeedBonusForModules; 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; @@ -25,6 +26,9 @@ 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; @@ -54,10 +58,12 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule; 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.gtnewhorizons.modularui.api.ModularUITextures; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.drawable.UITexture; @@ -69,13 +75,7 @@ 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.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.*; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import cpw.mods.fml.relauncher.Side; @@ -107,6 +107,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private long fuelConsumption = 0; private long totalRecipesProcessed = 0; private long totalFuelConsumed = 0; + private float powerMilestonePercentage = 0; + private float recipeMilestonePercentage = 0; + private float fuelMilestonePercentage = 0; private BigInteger totalPowerConsumed = BigInteger.ZERO; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -117,8 +120,15 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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[] 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 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"; private boolean debugMode = true; @@ -291,6 +301,8 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { maxModuleCount += 4; } + determineMilestoneProgress(); + fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) { FluidStack fluidNeeded = new FluidStack( @@ -461,6 +473,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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); builder.widget( new ButtonWidget().setOnClick( (clickData, widget) -> { @@ -503,7 +516,17 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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)); + }).addTooltip(translateToLocal("fog.button.structurecheck.tooltip")).setPos(8, 91)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext().openSyncedWindow(MILESTONE_WINDOW_ID); + } + }).setSize(16, 16).setBackground(() -> { + List 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")).setPos(174, 91)); } @Override @@ -609,8 +632,7 @@ protected ModularWindow createFuelConfigWindow(final EntityPlayer player) { .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")) @@ -709,6 +731,80 @@ public void buildTooltip(List tooltip) { return builder.build(); } + private int[] milestoneProgress = new int[] { 0, 0, 0, 4 }; + + protected ModularWindow createMilestoneWindow(final EntityPlayer player) { + final int WIDTH = 400; + final int HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE).setPos(62, 24) + .setSize(80, 100)); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION) + .setPos(263, 25).setSize(70, 98)); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST).setPos(52, 169) + .setSize(100, 100)); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION) + .setPos(248, 169).setSize(100, 100)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.powermilestone").setPos(77, 45) + .setSize(50, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.recipemilestone").setPos(268, 45) + .setSize(60, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone").setPos(77, 190) + .setSize(50, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone").setPos(268, 190) + .setSize(60, 30)); + 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(1, false))) + .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(2, false))) + .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(3, false))) + .widget( + new ProgressBar().setProgress(() -> milestoneProgress[3] / 7f) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) + .setSynced(true, false).setSize(130, 7).setPos(233, 215) + .addTooltip(milestoneProgressText(4, false))) + .widget( + TextWidget.dynamicText(() -> milestoneProgressText(1, true)).setTextAlignment(Alignment.Center) + .setScale(0.7f).setMaxWidth(90).setDefaultColor(EnumChatFormatting.DARK_GRAY) + .setPos(150, 85) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress"))) + .widget( + new ExpandTab().setNormalTexture(ModularUITextures.ARROW_DOWN.withFixedSize(14, 14, 3, 3)) + .widget( + new DrawableWidget().setDrawable(ModularUITextures.ARROW_UP).setSize(14, 14) + .setPos(3, 3)) + .widget( + TextWidget.dynamicText(() -> milestoneProgressText(1, false)).setScale(0.5f) + .setSize(100, 20).setPos(5, 20)) + .setExpandedSize(130, 130).setSize(20, 20).setPos(37, 75) + .setBackground(TecTechUITextures.BACKGROUND_GLOW_ORANGE)) + .widget(ButtonWidget.closeWindowButton(true).setPos(384, 4)); + return builder.build(); + } + private int currentUpgradeID = 0; private int currentColorCode = 0; private int gravitonShardCost = 0; @@ -1295,6 +1391,113 @@ private Text storedFuel() { + maxBatteryCharge); } + private void determineMilestoneProgress() { + 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); + } else { + powerMilestonePercentage = 1; + } + 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); + } else { + recipeMilestonePercentage = 1; + } + 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); + } else { + fuelMilestonePercentage = 1; + } + } + + private Text milestoneProgressText(int milestoneID, boolean formatting) { + long min; + long max; + BigInteger bigMin; + BigInteger bigMax; + Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); + String suffix; + switch (milestoneID) { + case 1: + if (milestoneProgress[0] < 7) { + suffix = "EU"; + bigMin = totalPowerConsumed; + bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0] + 1)) + .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); + if (formatting) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " + + toExponentForm(bigMin) + + "/" + + toExponentForm(bigMax) + + " " + + suffix); + } else { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " + + bigMin + + "/" + + bigMax + + " " + + suffix); + } + } else { + return done; + } + case 2: + if (milestoneProgress[1] < 7) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); + min = totalRecipesProcessed; + max = LongMath.pow(6, milestoneProgress[1] + 1) * LongMath.pow(10, 7); + break; + } else { + return done; + } + case 3: + if (milestoneProgress[2] < 7) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel"); + min = totalFuelConsumed; + max = LongMath.pow(3, milestoneProgress[2] + 1) * LongMath.pow(10, 4); + break; + } else { + return done; + } + case 4: + if (milestoneProgress[3] < 7) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); + min = milestoneProgress[3]; + max = 7; + break; + } else { + return done; + } + default: + return new Text("Error"); + } + if (formatting) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " + + formatNumbers(min) + + "/" + + formatNumbers(max) + + " " + + suffix); + } else { + return new Text( + translateToLocal( + "gt.blockmachines.multimachine.FOG.progress") + ": " + min + "/" + max + " " + suffix); + } + } + private void increaseBattery(int amount) { if ((internalBattery + amount) <= maxBatteryCharge) { internalBattery += amount; 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 edd4a2895..1656f865e 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 static String toStandardForm(BigInteger number) { } + 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/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 2490f6390..55cb79391 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -982,6 +982,7 @@ fog.button.battery.tooltip.02=Right click to open configuration menu (if unlocke 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 @@ -1014,6 +1015,16 @@ 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.progress=Progress +gt.blockmachines.multimachine.FOG.milestonecomplete=Complete +gt.blockmachines.multimachine.FOG.milestoneprogress=Current progress towards next milestone +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.recipes=Recipes +gt.blockmachines.multimachine.FOG.fuel=Fuel Units +gt.blockmachines.multimachine.FOG.extensions=Extensions # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly 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 0000000000000000000000000000000000000000..48bcca969b39aa08b40d8df472949e9713f802e1 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|+7A?scd$63OT(}e6M*fsst&UqkU)hS@z36#GQ*L)dBah3%61^*?Ycq7j_@z=7F?%fP_Mu({HKK`tGOAJc}{SiD4(xiG~Rb?CcEN9gTe~ HDWM4fbF4w6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..25819c48b7e85ef3c25b8834f284249c3908f3ab GIT binary patch literal 1749 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 FV1iIIV;leg literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8e88232b9e1f0cfeb3083aa79ce0037bb820cffc GIT binary patch literal 1596 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 rIoNV@hFuw+eJQQu^Av1E#-IHgfk Date: Fri, 19 Apr 2024 03:26:53 +0200 Subject: [PATCH 23/57] undo star import --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 8037e179f..1b62d0d8e 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 @@ -75,7 +75,15 @@ 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.*; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.ExpandTab; +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.TextWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import cpw.mods.fml.relauncher.Side; From 768c9b5af25f9fba45fc9c7a781c7415003e2fa9 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 20 Apr 2024 16:33:01 +0200 Subject: [PATCH 24/57] add new magmatter mechanic --- .../tectech/loader/recipe/Godforge.java | 14 +-- .../GT_MetaTileEntity_EM_ExoticModule.java | 117 ++++++++---------- 2 files changed, 60 insertions(+), 71 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 71bf997da..3b0bdb052 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 @@ -24,7 +24,6 @@ public class Godforge implements Runnable { public static final HashMap exoticModulePlasmaItemMap = new HashMap<>(); public static final HashMap exoticModulePlasmaFluidMap = new HashMap<>(); public static final HashMap exoticModuleMagmatterItemMap = new HashMap<>(); - public static final HashMap exoticModuleMagmatterFluidMap = new HashMap<>(); @Override public void run() { @@ -507,10 +506,7 @@ public void run() { } } - // 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); @@ -522,10 +518,10 @@ public void run() { // 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); } } } 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 d9a6bb921..702186cfe 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,6 +1,5 @@ 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; @@ -76,11 +75,9 @@ 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 static final long BASE_PARALLEL = 36; private boolean recipeInProgress = false; private boolean magmatterMode = false; private FluidStack[] randomizedFluidInput = new FluidStack[] {}; @@ -106,14 +103,6 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_EM_ExoticModule(mName); } - private void setActualParallel() { - if (exoticBonuses) { - actualParallel = 9 * (long) Math.floor(Math.sqrt(getMaxParallel()) / 9); - } else { - actualParallel = BASE_PARALLEL; - } - } - @Override protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { @@ -122,39 +111,47 @@ protected ProcessingLogic createProcessingLogic() { @Override protected Stream findRecipeMatches(@Nullable RecipeMap map) { if (!recipeInProgress) { - setActualParallel(); - HashMap fluidMap = exoticModulePlasmaFluidMap; - HashMap itemMap = exoticModulePlasmaItemMap; + actualParallel = getMaxParallel(); FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000 * actualParallel); - + tempRecipeMap = emptyRecipeMap; if (magmatterMode) { - fluidMap = exoticModuleMagmatterFluidMap; - itemMap = exoticModuleMagmatterItemMap; + 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); - } - - 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); + } 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, actualParallel))); - inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, actualParallel))); + inputPlasmas = new ArrayList<>( + Arrays.asList(convertItemToPlasma(randomizedItemInput, actualParallel))); + inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, actualParallel))); + } plasmaRecipe = new GT_Recipe( false, null, @@ -195,22 +192,22 @@ protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { } if (numberOfItems != 0) { + long multiplier = actualParallel; + if (magmatterMode) { + multiplier = 1; + } for (ItemStack itemStack : randomizedItemInput) { - int stacksize = (int) (itemStack.stackSize * actualParallel); - if (stacksize < 64) { - addOutput(new ItemStack(itemStack.getItem(), stacksize)); - } else { - // split itemStacks > 64 - while (stacksize >= 64) { - ItemStack tmpItem = itemStack.copy(); - tmpItem.stackSize = 64; - addOutput(tmpItem); - stacksize -= 64; - } - ItemStack tmpItem = itemStack.copy(); - tmpItem.stackSize = stacksize; + 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); + } } @@ -231,7 +228,6 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { } addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); addToRecipeTally(calculatedParallels); - currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(0); tempRecipeMap = emptyRecipeMap; @@ -243,7 +239,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { @Override protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) - .setDurationDecreasePerOC(2 + Math.pow(getOverclockTimeFactor() - 2, 2)); + .setDurationDecreasePerOC(getOverclockTimeFactor()); } }; @@ -254,8 +250,8 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAvailableVoltage(Long.MAX_VALUE); logic.setAvailableAmperage(Integer.MAX_VALUE); logic.setAmperageOC(false); - logic.setSpeedBonus((float) Math.sqrt(getSpeedBonus())); - logic.setEuModifier((float) Math.sqrt(getEnergyDiscount())); + logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); } @Override @@ -522,14 +518,11 @@ public String[] getInfoData() { + RESET + " s"); str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(actualParallel)); - str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); - str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(Math.sqrt(getSpeedBonus()))); - str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(Math.sqrt(getEnergyDiscount()))); - str.add( - YELLOW + "Recipe time divisor per non-perfect OC: " - + RESET - + formatNumbers(2 + Math.pow(getOverclockTimeFactor() - 2, 2))); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + 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]); } From 4628c1929175bb4e5708e78b250d31a325830687 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 20 Apr 2024 16:33:19 +0200 Subject: [PATCH 25/57] fix exotic module bonuses --- .../GT_MetaTileEntity_EM_BaseModule.java | 5 --- .../technus/tectech/util/GodforgeMath.java | 45 +++++++++++++++++-- 2 files changed, 41 insertions(+), 9 deletions(-) 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 7f454323e..c4cc4aea3 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 @@ -57,7 +57,6 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc protected boolean isConnected = false; protected double overclockTimeFactor = 2d; protected boolean isUpgrade83Unlocked = false; - protected boolean exoticBonuses = false; protected boolean isMultiStepPlasmaCapable = false; protected boolean isMagmatterCapable = false; private boolean isVoltageConfigUnlocked = false; @@ -222,10 +221,6 @@ public void setVoltageConfig(boolean unlocked) { isVoltageConfigUnlocked = unlocked; } - public void setExoticBonuses(boolean unlocked) { - exoticBonuses = unlocked; - } - public void setPowerTally(BigInteger amount) { powerTally = amount; } 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 614777b8b..7548f0455 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -107,6 +107,15 @@ public static void calculateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule speedBonus /= Math.pow(module.getMaxParallel(), 0.012); } } + + if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { + if (godforge.isUpgradeActive(25)) { + speedBonus = Math.sqrt(speedBonus); + } else { + speedBonus = 1; + } + } + module.setSpeedBonus((float) speedBonus); } @@ -129,7 +138,7 @@ public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModul baseParallel = 256; } if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - baseParallel = 128; + baseParallel = 36; } if (module instanceof GT_MetaTileEntity_EM_MoltenModule @@ -169,8 +178,20 @@ public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModul } } - module.setMaxParallel( - (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, @@ -192,6 +213,16 @@ public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseMo } } + 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)); } @@ -234,6 +265,13 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul } 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)); @@ -242,7 +280,6 @@ public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule modul module.setMagmatterCapable(godforge.isUpgradeActive(30)); module.setVoltageConfig(godforge.isUpgradeActive(28)); module.setOverclockTimeFactor(overclockTimeFactor); - module.setExoticBonuses(godforge.isUpgradeActive(25)); } public static boolean allowModuleConnection(GT_MetaTileEntity_EM_BaseModule module, From 6ed6c3157f9736fc98f4196bf9c03723bbff2740 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 21 Apr 2024 21:59:31 +0200 Subject: [PATCH 26/57] blacklist furnace mode from recipe milestone --- .../godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 652ec5d46..6208e85d0 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 @@ -109,7 +109,9 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); - addToRecipeTally(calculatedParallels); + if (!furnaceMode) { + addToRecipeTally(calculatedParallels); + } currentParallel = calculatedParallels; EUt = calculatedEut; setCalculatedEut(0); From 0808a96e83f495c115647e4fe488117d2f25124e Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 21 Apr 2024 22:22:48 +0200 Subject: [PATCH 27/57] make milestones grant graviton shards --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) 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 1b62d0d8e..b6937bb0b 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 @@ -112,6 +112,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int internalBattery = 0; private int maxBatteryCharge = 100; private int gravitonShardsAvailable = 0; + private int gravitonShardsSpent = 0; private long fuelConsumption = 0; private long totalRecipesProcessed = 0; private long totalFuelConsumed = 0; @@ -139,7 +140,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private static final double FUEL_LOG_CONSTANT = Math.log(3); protected static final String STRUCTURE_PIECE_MAIN = "main"; - private boolean debugMode = true; + private boolean debugMode = false; public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { if (mMachine) return -1; @@ -310,6 +311,9 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } determineMilestoneProgress(); + if (!debugMode) { + determineGravitonShardAmount(); + } fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) { @@ -1242,6 +1246,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) if (unlockedPrereqUpgrades == prereqUpgrades.length && gravitonShardsAvailable >= gravitonShardCost) { gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; upgrades[currentUpgradeID] = true; } } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { @@ -1259,6 +1264,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; upgrades[currentUpgradeID] = true; } } @@ -1270,6 +1276,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } if (unlockedFollowupUpgrades == 0) { gravitonShardsAvailable += gravitonShardCost; + gravitonShardsSpent -= gravitonShardCost; upgrades[currentUpgradeID] = false; } } @@ -1427,6 +1434,15 @@ private void determineMilestoneProgress() { } } + private void determineGravitonShardAmount() { + int sum = 0; + for (int progress : milestoneProgress) { + progress = Math.min(progress, 7); + sum += progress * (progress + 1) / 2; + } + gravitonShardsAvailable = sum - gravitonShardsSpent; + } + private Text milestoneProgressText(int milestoneID, boolean formatting) { long min; long max; @@ -1441,7 +1457,7 @@ private Text milestoneProgressText(int milestoneID, boolean formatting) { bigMin = totalPowerConsumed; bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0] + 1)) .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); - if (formatting) { + if (formatting && (bigMin.compareTo(BigInteger.valueOf(1_000L)) > 0)) { return new Text( translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " + toExponentForm(bigMin) @@ -1558,6 +1574,7 @@ public void setItemNBT(NBTTagCompound NBT) { 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); @@ -1585,6 +1602,7 @@ public void saveNBTData(NBTTagCompound NBT) { 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); @@ -1612,6 +1630,7 @@ public void loadNBTData(NBTTagCompound NBT) { 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"); From b909c7f6ad14b5b590b10d9be80c53795c50eab1 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 22 Apr 2024 02:20:27 +0200 Subject: [PATCH 28/57] exotic module nei improvements --- .../tectech/loader/recipe/Godforge.java | 40 +++++++++++++++++-- .../recipe/GodforgeExoticFrontend.java | 29 ++++++-------- .../tectech/recipe/TecTechRecipeMaps.java | 2 +- 3 files changed, 51 insertions(+), 20 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 3b0bdb052..28d686769 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; @@ -15,6 +17,7 @@ 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 { @@ -24,6 +27,11 @@ public class Godforge implements Runnable { public static final HashMap exoticModulePlasmaItemMap = new HashMap<>(); public static final HashMap exoticModulePlasmaFluidMap = new HashMap<>(); public static final HashMap exoticModuleMagmatterItemMap = new HashMap<>(); + public static final List quarkGluonFluidItemsForNEI = new ArrayList<>(); + public static final List quarkGluonItemsForNEI = new ArrayList<>(); + public static final List magmatterTimeFluidItemsForNEI = new ArrayList<>(); + public static final List magmatterSpaceFluidItemsForNEI = new ArrayList<>(); + public static final List magmatterItemsForNEI = new ArrayList<>(); @Override public void run() { @@ -290,9 +298,16 @@ public void run() { { TT_recipeAdder.addFOGExoticFakeRecipe( new ItemStack[] { Materials.Iron.getDust(1) }, - new FluidStack[] {}, - new FluidStack[] { MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000), - MaterialsUEVplus.MagMatter.getMolten(144) }, + 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); @@ -523,5 +538,24 @@ public void run() { 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/recipe/GodforgeExoticFrontend.java b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java index 32e5577bb..50f0738fa 100644 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java +++ b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java @@ -1,24 +1,24 @@ package com.github.technus.tectech.recipe; -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.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.ArrayList; import java.util.Collections; import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - 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; @@ -45,17 +45,14 @@ public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { @Override public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - - List cyclingDusts = new ArrayList<>(exoticModulePlasmaItemMap.keySet()); - neiCachedRecipe.mInputs.set(0, new PositionedStack(cyclingDusts, 48, 23, true)); - - List fluids = new ArrayList<>(exoticModulePlasmaFluidMap.keySet()); - List fluidItems = new ArrayList<>(); - for (FluidStack fluid : fluids) { - fluidItems.add(GT_Utility.getFluidDisplayStack(fluid, true)); + 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)); } - neiCachedRecipe.mInputs.add(0, new PositionedStack(fluidItems, 48, 52, true)); - } @Override 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 9fea8d13b..858c71549 100644 --- a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java +++ b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java @@ -51,7 +51,7 @@ public static void init() {} .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 godforgeExoticMatterRecipes = RecipeMapBuilder - .of("gt.recipe.fog_exotic").maxIO(1, 1, 1, 2) + .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(); From 5965b512d77f99a7469d94779170bf5aa896e568 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 25 Apr 2024 00:49:43 +0200 Subject: [PATCH 29/57] new main and module structure --- .../multi/ForgeofGodsStructureString.java | 8688 +++++++++++------ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 100 +- .../GT_MetaTileEntity_EM_BaseModule.java | 42 +- .../GT_MetaTileEntity_EM_ExoticModule.java | 18 - .../GT_MetaTileEntity_EM_MoltenModule.java | 18 - .../GT_MetaTileEntity_EM_PlasmaModule.java | 19 - .../GT_MetaTileEntity_EM_SmeltingModule.java | 18 - .../blocks/iconsets/GODFORGE_CONTROLLER.png | Bin 0 -> 597 bytes .../iconsets/GODFORGE_CONTROLLER.png.mcmeta | 5 + 9 files changed, 5819 insertions(+), 3089 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER.png.mcmeta 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 index 7dde3ab5b..eb02ec51d 100644 --- 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 @@ -2,2932 +2,5766 @@ 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 ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", } }; + public static final String[][] godforge = { { + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " EDE ", + " EFE ", + " DEFED ", + " EEEEBBBEEEE ", + " DFFB~BFFD ", + " EEEEBBBEEEE ", + " DEFED ", + " EFE ", + " EDE ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " E E ", + " DDD ", + " FFGGDFF ", + " FFFDDGFFF ", + " FFGGDDGFF ", + " EEDDGDDGDGDGDEE ", + " DGDDGGGDDGD ", + " EEDGDGDGDDGDDEE ", + " FFGDDGGFF ", + " FFFGDDFFF ", + " FFDGGFF ", + " DDD ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " E E ", + " FDDDF ", + " EEEDDDEEE ", + " EEFF FFEE ", + " EEF FEE ", + " EF FE ", + " FEF FEF ", + " EDD DDE ", + " DD DD ", + " EDD DDE ", + " FEF FEF ", + " EF FE ", + " EEF FEE ", + " EEFF FFEE ", + " EEEDDDEEE ", + " FDDDF ", + " E E ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " E E ", + " E E ", + " FFFDDDFFF ", + " FFF FFF ", + " FF FF ", + " FF FF ", + " FF FF ", + " FF FF ", + " F F ", + " EED DEE ", + " D D ", + " EED DEE ", + " F F ", + " FF FF ", + " FF FF ", + " FF FF ", + " FF FF ", + " FFF FFF ", + " FFFDDDFFF ", + " E E ", + " E E ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " E E ", + " DDD ", + " EEEDDDEEE ", + " EE EE ", + " EE EE ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " EDD DDE ", + " DD DD ", + " EDD DDE ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " EE EE ", + " EE EE ", + " EEEDDDEEE ", + " DDD ", + " E E ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " E E ", + " DDD ", + " FFF FFF ", + " FF FF ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " ED DE ", + " D D ", + " ED DE ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " FF FF ", + " FFF FFF ", + " DDD ", + " E E ", + " ", + " ", + " " }, + { " ", + " ", + " E E ", + " FFDDDDDFF ", + " FF FF ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " D D ", + " ED DE ", + " D D ", + " ED DE ", + " D D ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " FF FF ", + " FFDDDDDFF ", + " E E ", + " ", + " ", + " " }, + { " ", + " E E ", + " EEDDDDDEE ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " D D ", + " ED DE ", + " D D ", + " ED DE ", + " D D ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " EEDDDDDEE ", + " E E ", + " ", + " " }, + { " E E ", + " DDDDD ", + " FFF FFF ", + " FF FF ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " D D ", + " ED DE ", + " D D ", + " ED DE ", + " D D ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " F F ", + " FF FF ", + " FFFDDDDDFFF ", + " DDDDD ", + " E E ", + " " }, + { " CCC ", + " CCCCCCCCC ", + " CC CC ", + " CC CC ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " CC CC ", + " CC CC ", + " CC CC ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " CC CC ", + " CC CC ", + " CCCCCCCCC ", + " CCC ", + " " }, + { " CCC ", + " CCCC CCCC ", + " CC CC ", + " 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 ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " C C ", + " CC CC ", + " CCCC CCCC ", + " CCC ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " K ", + " CFFFFFC ", + " FFF EAE FFF ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " C G C ", + " F F ", + " FEEEE EEEEF ", + " KFAAAADDDDDG GDDDDDAAAAFK ", + " FEEEE EEEEF ", + " F F ", + " C G C ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " FFF EAE FFF ", + " CFFFFFCF ", + " K " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " K ", + " CFFFFFC ", + " FFF EAE FFF ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " C G C ", + " F F ", + " FEEEE EEEEF ", + " KFAAAADDDDDG GDDDDDAAAAFK ", + " FEEEE EEEEF ", + " F F ", + " C G C ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " FFF EAE FFF ", + " CFFFFFCF ", + " K " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " K ", + " CFFFFFC ", + " FFFF EAE FFF ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " C G C ", + " F F ", + " FEEEE EEEEF ", + " KFAAAADDDDDG GDDDDDAAAAFK ", + " FEEEE EEEEF ", + " F F ", + " C G C ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " FFF EAE FFF ", + " CFFFFFCF ", + " K " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " K ", + " CFFFFFC ", + " FFF EAE FFF ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " C G C ", + " F F ", + " FEEEE EEEEF ", + " KFAAAADDDDDG GDDDDDAAAAFK ", + " FEEEE EEEEF ", + " F F ", + " C G C ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F D F ", + " F EAE F ", + " FF EAE FF ", + " F EAE F ", + " FFF EAE FFF ", + " CFFFFFCF ", + " K " }, + { " ", + " ", + " CFFFFFC ", + " E ", + " E ", + " E ", + " E ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " FEEEE EEEEF ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " E ", + " E ", + " E ", + " E ", + " CFFFFFC ", + " " }, + { " ", + " ", + " CFFFC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " F F ", + " F F ", + " F F ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CFFFC ", + " " }, + { " ", + " ", + " CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " C C ", + " C C ", + " C C ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC ", + " CCDDDDDCC ", + " CCDD DDCC ", + " CCDD DDCC ", + " FFD DFF ", + " FD DF ", + " FD DF ", + " D DDD D ", + " D D D D ", + " D D D D ", + " D D D D ", + " D DDD D ", + " FD DF ", + " FD DF ", + " FFD DFF ", + " CCDD DDCC ", + " CCDD DDCC ", + " CCDDDDDCC ", + " CCCCC ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC ", + " CCDDDDDCC ", + " CCDD DDCC ", + " CCDD DDCC ", + " CCCFFD DFFCCC ", + " CCFFFFD EEDFFFFCC ", + " FFFFFFD EEE DFFFFFF ", + " FFFFFD DDDEE DFFFFF ", + " FFFFFD DIIID DFFFFF ", + " FFFFFD DIIID DFFFFF ", + " FFFFFD DIIID DFFFFF ", + " FFFFFD EEDDD DFFFFF ", + " FFFFFFD EEE DFFFFFF ", + " CCFFFFDEE DFFFFCC ", + " CCCFFD DFFCCC ", + " CCDD DDCC ", + " CCDD DDCC ", + " CCDDDDDCC ", + " CCCCC ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC ", + " CCDDDDDCC ", + " CCDD DDCC ", + " CCDD DDCC ", + " CCCFFD DFFCCC ", + " CCCCFFFFD DFFFFCCCC ", + " CCFFFFFFFFD DFFFFFFFFCC ", + " FFFFFFFFFD DDD DFFFFFFFFF ", + " FFFFFFFFFD D D DFFFFFFFFF ", + " FFFFFFFFFD D D DFFFFFFFFF ", + " FFFFFFFFFD D D DFFFFFFFFF ", + " FFFFFFFFFD DDD DFFFFFFFFF ", + " CCFFFFFFFFD DFFFFFFFFCC ", + " CCCCFFFFD DFFFFCCCC ", + " CCCFFD DFFCCC ", + " CCDD DDCC ", + " CCDD DDCC ", + " CCDDDDDCC ", + " CCCCC ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " CCCCFFFF FFFFCCCC ", + " CCCCCFFFFFFFF FFFFFFFFCCCCC ", + " FFFFFFFFFFFFF FFFFFFFFFFFFF ", + " FFFFFFFFFHHHH HHHHFFFFFFFFF ", + " FFFFFFFHHHHHH HHHHHHFFFFFFF ", + " FFFFFFFFFHHHH HHHHFFFFFFFFF ", + " FFFFFFFFFFFFF FFFFFFFFFFFFF ", + " CCCCCFFFFFFFF FFFFFFFFCCCCC ", + " CCCCFFFF FFFFCCCC ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CC CC ", + " CCCCCFF FFCCCCC ", + " CCCFFFFFFF FFFFFFFCCC ", + " FFFFFFFFFF FFFFFFFFFF ", + " FFFFFFHHHH HHHHFFFFFF ", + " FFFFFFFFFF FFFFFFFFFF ", + " CCCFFFFFFF FFFFFFFCCC ", + " CCCCCFF FFCCCCC ", + " CC CC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " CCCCCFFF FFFCCCCC ", + " FFFFFFFF FFFFFFFF ", + " FFFFFHHH HHHFFFFF ", + " FFFFFFFF FFFFFFFF ", + " CCCCCFFF FFFCCCCC ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCC CCCCCCC ", + " FFFFFFF FFFFFFF ", + " FFFFFHH HHFFFFF ", + " FFFFFFF FFFFFFF ", + " CCCCCCC CCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCC CCCCCCC ", + " FFFFFFF FFFFFFF ", + " FFFFHHH HHHFFFF ", + " FFFFFFF FFFFFFF ", + " CCCCCCC CCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFHH HHFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFHH HHFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "CCC CCC", + "FFF FFF", + "FFH HFF", + "FFF FFF", + "CCC CCC", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCC CCC ", + " FFF FFF ", + " FFH HFF ", + " FFF FFF ", + " CCC CCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCC CCCC ", + " FFFF FFFF ", + " FFFH HFFF ", + " FFFF FFFF ", + " CCCC CCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFHH HHFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFHH HHFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCC CCCCC ", + " FFFFF FFFFF ", + " FFFFH HFFFF ", + " FFFFF FFFFF ", + " CCCCC CCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCC CCCCCC ", + " FFFFFF FFFFFF ", + " FFFFHH HHFFFF ", + " FFFFFF FFFFFF ", + " CCCCCC CCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCC CCCCCCC ", + " FFFFFFF FFFFFFF ", + " FFFFHHH HHHFFFF ", + " FFFFFFF FFFFFFF ", + " CCCCCCC CCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCC CCCCCCC ", + " FFFFFFF FFFFFFF ", + " FFFFFHH HHFFFFF ", + " FFFFFFF FFFFFFF ", + " CCCCCCC CCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCC CCCCCCCC ", + " FFFFFFFF FFFFFFFF ", + " FFFFFHHH HHHFFFFF ", + " FFFFFFFF FFFFFFFF ", + " CCCCCCCC CCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCCCC CCCCCCCCCC ", + " FFFFFFFFFF FFFFFFFFFF ", + " FFFFFFHHHH HHHHFFFFFF ", + " FFFFFFFFFF FFFFFFFFFF ", + " CCCCCCCCCC CCCCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCCCCCCC CCCCCCCCCCCCC ", + " FFFFFFFFFFFFF FFFFFFFFFFFFF ", + " FFFFFFFHHHHHH HHHHHHFFFFFFF ", + " FFFFFFFFFFFFF FFFFFFFFFFFFF ", + " CCCCCCCCCCCCC CCCCCCCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ", + " FFFFFFFFFFHHHHHHHHHHHHHHHFFFFFFFFFF ", + " FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ", + " CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", + " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", + " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", + " CCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " CCCCCCCCCCCCCCC ", + " FFFFFFFFFFFFFFF ", + " FFFFFFFFFFFFFFF ", + " FFFFFFFFFFFFFFF ", + " CCCCCCCCCCCCCCC ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; } 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 b6937bb0b..a9b39f9b2 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,9 +1,7 @@ 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; @@ -16,12 +14,9 @@ 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.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.util.GT_RecipeBuilder.SECONDS; import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; @@ -47,17 +42,14 @@ 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.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.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; @@ -104,7 +96,6 @@ 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; @@ -123,13 +114,12 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); - 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 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); @@ -140,13 +130,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private static final double FUEL_LOG_CONSTANT = Math.log(3); protected static final String STRUCTURE_PIECE_MAIN = "main"; - private boolean debugMode = false; + private boolean debugMode = true; public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { 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. + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 0, realBudget, source, actor, false, true); } @Override @@ -155,53 +145,21 @@ public IStructureDefinition getStructure_EM() } public static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape("main", transpose(ForgeofGodsStructureString.godForge)) + .builder().addShape("main", ForgeofGodsStructureString.godforge) + .addElement('A', ofBlock(GregTech_API.sSolenoidCoilCasings, 9)) .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)) + 'B', + buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch, InputBus, OutputBus) + .casingIndex(TEXTURE_INDEX + 1).dot(1).buildAndChain(GodforgeCasings, 1)) + .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)).addElement('H', ofBlock(GodforgeCasings, 5)) + .addElement('I', ofBlock(GodforgeGlassBlock.INSTANCE, 0)) .addElement( - 'G', + 'K', GT_HatchElementBuilder.builder().atLeast(moduleElement.Module) - .casingIndex(texturePage << 7).dot(3).buildAndChain(sBlockCasingsBA0, 12)) + .casingIndex(TEXTURE_INDEX).dot(3).buildAndChain(GodforgeCasings, 0)) .build(); public GT_MetaTileEntity_EM_ForgeOfGods(int aID, String aName, String aNameRegional) { @@ -220,8 +178,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @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); } @@ -229,15 +186,15 @@ public void registerIcons(IIconRegister aBlockIconRegister) { 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, 0, stackSize, hintsOnly); } private final ArrayList validFuelList = new ArrayList<>() { @@ -252,11 +209,10 @@ public void construct(ItemStack stackSize, boolean hintsOnly) { @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, 0)) { return false; } @@ -300,6 +256,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // Check and drain fuel if (ticker % (5 * SECONDS) == 0) { ticker = 0; + // TODO: Fix NPE here FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); int maxModuleCount = 8; @@ -442,7 +399,6 @@ public String[] getInfoData() { 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))); return str.toArray(new String[0]); } @@ -1566,8 +1522,6 @@ protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) {} @Override public void setItemNBT(NBTTagCompound NBT) { - NBT.setInteger("spacetimeCompressionTier", spacetimeCompressionFieldMetadata + 1); - NBT.setInteger("solenoidCoilTier", solenoidCoilMetadata - 7); NBT.setInteger("selectedFuelType", selectedFuelType); NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); NBT.setInteger("internalBattery", internalBattery); @@ -1594,8 +1548,6 @@ public void setItemNBT(NBTTagCompound 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); @@ -1622,8 +1574,6 @@ public void saveNBTData(NBTTagCompound NBT) { @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"); 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 c4cc4aea3..e01e21dc4 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,6 +1,7 @@ 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; @@ -17,13 +18,11 @@ 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; @@ -42,6 +41,7 @@ import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; +import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; @@ -73,21 +73,35 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc 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 STRUCTURE_DEFINITION = StructureDefinition .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); @@ -270,13 +284,13 @@ public IStructureDefinition getSt @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 @@ -437,11 +451,11 @@ public void loadNBTData(final NBTTagCompound NBT) { 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), + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), new TT_RenderedExtendedFacingTexture( aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.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 702186cfe..c6752c377 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 @@ -4,7 +4,6 @@ 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 +31,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; @@ -40,8 +38,6 @@ 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.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; @@ -254,18 +248,6 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setEuModifier(getEnergyDiscount()); } - @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 godforgeExoticMatterRecipes; 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 2ca8882fd..84219ad4f 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,20 +19,15 @@ 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.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.logic.ProcessingLogic; @@ -186,18 +180,6 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setEuModifier(getEnergyDiscount()); } - @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 String[] getInfoData() { ArrayList str = new ArrayList<>(); 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 e2b04fb28..19973f7c1 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 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,9 +31,7 @@ import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; 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; @@ -168,18 +161,6 @@ protected Widget createTestButton3() { .setPos(174, 60).setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD); } - @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; 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 6208e85d0..17ea18059 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; @@ -20,12 +19,9 @@ import javax.annotation.Nonnull; 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; @@ -36,9 +32,7 @@ import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import gregtech.api.enums.Textures; 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; @@ -139,18 +133,6 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setEuModifier(getEnergyDiscount()); } - @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 void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { super.addUIWidgets(builder, buildContext); 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 0000000000000000000000000000000000000000..3266b1aec677f29ea1ba29edeca1b0d741cd1f8b GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^0zf>0gBeJg&6Vy3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`TLOGST$l4cU&8o&A;aS-3^yh-oNs41*2b{6kzs2o!|Ec2g}Dr~QWz!z z)g~}>%wl-R#=sH7&^VRh7C(ciW^TFWw8cRT71NBKYvxsG9=K@u>Ypz|E;|FK=9EQy zUjK1tNNH!-XU`C8#Smn|;AOzztifQB#L(rzkmkq`tI1%c%wX8Q^f}P*Nh_Z!04bf4 zAiv=M!~=%o*EoBC`Zxb+y zw>}8sy4_Id4YXpz+-^oihmeMr56)7urhUavwoHAb;n(Q(b#YjJjal?tzizI5{p_8$V=~cr^jni(Lhaw!9KYNhwud!m$)VlV@6%C zE|DoEdJERx)?+ED$a);_P<~UsFZ}h*nvFNPEP8GqsI8HxuX$XfVe$O%4DqiYv;I1! z2Cd-lQBq^K+fnkK`3U>oM>P$$cF!KvXne3cB=q&+q*eUe-_GNYzHzu#;&5`N{IeVE zjYW1jiSPd@d^qy&LAOu;1LmJf!XND>c>5=PvAZCr$GYd&?}grb`X`wD_;7m_e>hO* uh4y_@`cMC#E?s-$(7nHo3sUMuj`GbEXP-YeGf@>7gbbdpelF{r5}E+N*#vh0 literal 0 HcmV?d00001 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 000000000..7ab8340b0 --- /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 From 25a0f284a64692360333873e51531bd3551d9065 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 25 Apr 2024 03:05:13 +0200 Subject: [PATCH 30/57] slight structure adjustment --- .../multi/ForgeofGodsStructureString.java | 2624 ++++++++--------- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 14 +- 2 files changed, 1318 insertions(+), 1320 deletions(-) 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 index eb02ec51d..4ac7baa13 100644 --- 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 @@ -12,17 +12,17 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " E E ", - " EDE ", - " EFE ", - " DEFED ", - " EEEEBBBEEEE ", - " DFFB~BFFD ", - " EEEEBBBEEEE ", - " DEFED ", - " EFE ", - " EDE ", - " E E ", + " D D ", + " DCD ", + " DED ", + " CDEDC ", + " DDDDAAADDDD ", + " CEEA~AEEC ", + " DDDDAAADDDD ", + " CDEDC ", + " DED ", + " DCD ", + " D D ", " ", " ", " ", @@ -40,21 +40,21 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " E E ", - " E E ", - " DDD ", - " FFGGDFF ", - " FFFDDGFFF ", - " FFGGDDGFF ", - " EEDDGDDGDGDGDEE ", - " DGDDGGGDDGD ", - " EEDGDGDGDDGDDEE ", - " FFGDDGGFF ", - " FFFGDDFFF ", - " FFDGGFF ", - " DDD ", - " E E ", - " E E ", + " D D ", + " D D ", + " CCC ", + " EEFFCEE ", + " EEECCFEEE ", + " EEFFCCFEE ", + " DDCCFCCFCFCFCDD ", + " CFCCFFFCCFC ", + " DDCFCFCFCCFCCDD ", + " EEFCCFFEE ", + " EEEFCCEEE ", + " EECFFEE ", + " CCC ", + " D D ", + " D D ", " ", " ", " ", @@ -69,23 +69,23 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " E E ", - " FDDDF ", - " EEEDDDEEE ", - " EEFF FFEE ", - " EEF FEE ", - " EF FE ", - " FEF FEF ", - " EDD DDE ", - " DD DD ", - " EDD DDE ", - " FEF FEF ", - " EF FE ", - " EEF FEE ", - " EEFF FFEE ", - " EEEDDDEEE ", - " FDDDF ", - " E E ", + " D D ", + " ECCCE ", + " DDDCCCDDD ", + " DDEE EEDD ", + " DDE EDD ", + " DE ED ", + " EDE EDE ", + " DCC CCD ", + " CC CC ", + " DCC CCD ", + " EDE EDE ", + " DE ED ", + " DDE EDD ", + " DDEE EEDD ", + " DDDCCCDDD ", + " ECCCE ", + " D D ", " ", " ", " ", @@ -97,27 +97,27 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " E E ", - " E E ", - " FFFDDDFFF ", - " FFF FFF ", - " FF FF ", - " FF FF ", - " FF FF ", - " FF FF ", - " F F ", - " EED DEE ", - " D D ", - " EED DEE ", - " F F ", - " FF FF ", - " FF FF ", - " FF FF ", - " FF FF ", - " FFF FFF ", - " FFFDDDFFF ", - " E E ", - " E E ", + " D D ", + " D D ", + " EEECCCEEE ", + " EEE EEE ", + " EE EE ", + " EE EE ", + " EE EE ", + " EE EE ", + " E E ", + " DDC CDD ", + " C C ", + " DDC CDD ", + " E E ", + " EE EE ", + " EE EE ", + " EE EE ", + " EE EE ", + " EEE EEE ", + " EEECCCEEE ", + " D D ", + " D D ", " ", " ", " ", @@ -126,98 +126,127 @@ public abstract class ForgeofGodsStructureString { { " ", " ", " ", - " E E ", - " DDD ", - " EEEDDDEEE ", + " D D ", + " CCC ", + " DDDCCCDDD ", + " DD DD ", + " DD DD ", + " DD DD ", + " D D ", + " D D ", + " D D ", + " D D ", + " DCC CCD ", + " CC CC ", + " DCC CCD ", + " D D ", + " D D ", + " D D ", + " D D ", + " DD DD ", + " DD DD ", + " DD DD ", + " DDDCCCDDD ", + " CCC ", + " D D ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " D D ", + " CCC ", + " EEE EEE ", " EE EE ", - " EE EE ", - " EE EE ", + " E E ", " E E ", " E E ", " E E ", + " E E ", + " E E ", + " E E ", + " DC CD ", + " C C ", + " DC CD ", + " E E ", + " E E ", + " E E ", " E E ", - " EDD DDE ", - " DD DD ", - " EDD DDE ", " E E ", + " E E ", + " E E ", + " EE EE ", + " EEE EEE ", + " CCC ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " D D ", + " EECCCCCEE ", + " EE EE ", + " E E ", + " E E ", " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " C C ", + " DC CD ", + " C C ", + " DC CD ", + " C C ", + " E E ", + " E E ", + " E E ", + " E E ", " E E ", " E E ", - " EE EE ", - " EE EE ", + " E E ", " EE EE ", - " EEEDDDEEE ", - " DDD ", - " E E ", - " ", + " EECCCCCEE ", + " D D ", " ", " ", " " }, { " ", - " ", - " E E ", - " DDD ", - " FFF FFF ", - " FF FF ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " ED DE ", + " D D ", + " DDCCCCCDD ", + " DD DD ", + " D D ", + " D D ", + " D D ", + " D D ", " D D ", - " ED DE ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " FF FF ", - " FFF FFF ", - " DDD ", - " E E ", - " ", - " ", - " " }, - { " ", - " ", - " E E ", - " FFDDDDDFF ", - " FF FF ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", " D D ", - " ED DE ", + " D D ", + " D D ", + " C C ", + " DC CD ", + " C C ", + " DC CD ", + " C C ", + " D D ", + " D D ", " D D ", - " ED DE ", " D D ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " FF FF ", - " FFDDDDDFF ", - " E E ", - " ", + " D D ", + " D D ", + " D D ", + " D D ", + " DD DD ", + " DDCCCCCDD ", + " D D ", " ", " " }, - { " ", - " E E ", - " EEDDDDDEE ", - " EE EE ", - " E E ", + { " D D ", + " CCCCC ", + " EEE EEE ", + " EE EE ", " E E ", " E E ", " E E ", @@ -225,11 +254,13 @@ public abstract class ForgeofGodsStructureString { " E E ", " E E ", " E E ", - " D D ", - " ED DE ", - " D D ", - " ED DE ", - " D D ", + " E E ", + " C C ", + " DC CD ", + " C C ", + " DC CD ", + " C C ", + " E E ", " E E ", " E E ", " E E ", @@ -237,101 +268,70 @@ public abstract class ForgeofGodsStructureString { " E E ", " E E ", " E E ", - " E E ", - " EE EE ", - " EEDDDDDEE ", - " E E ", - " ", - " " }, - { " E E ", - " DDDDD ", - " FFF FFF ", - " FF FF ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " D D ", - " ED DE ", - " D D ", - " ED DE ", - " D D ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " F F ", - " FF FF ", - " FFFDDDDDFFF ", - " DDDDD ", - " E E ", - " " }, - { " CCC ", - " CCCCCCCCC ", - " CC CC ", - " CC CC ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " CC CC ", - " CC CC ", - " CC CC ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " CC CC ", - " CC CC ", - " CCCCCCCCC ", - " CCC ", + " EE EE ", + " EEECCCCCEEE ", + " CCCCC ", + " D D ", " " }, - { " CCC ", - " CCCC CCCC ", - " CC CC ", - " 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 ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " C C ", - " CC CC ", - " CCCC CCCC ", - " CCC ", + { " BBB ", + " BBBBBBBBB ", + " BB BB ", + " BB BB ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " BB BB ", + " BB BB ", + " BB BB ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " BB BB ", + " BB BB ", + " BBBBBBBBB ", + " BBB ", + " " }, + { " BBB ", + " BBBB BBBB ", + " BB BB ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " B B ", + " BB BB ", + " BBBB BBBB ", + " BBB ", " " }, { " ", " ", @@ -485,7 +485,7 @@ public abstract class ForgeofGodsStructureString { " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -497,9 +497,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -511,12 +511,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -526,12 +525,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -541,102 +540,102 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " ", + " BEEEB ", + " " }, { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", " ", + " BEEEEEB ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, - { " ", - " K ", - " CFFFFFC ", - " FFF EAE FFF ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " C G C ", - " F F ", - " FEEEE EEEEF ", - " KFAAAADDDDDG GDDDDDAAAAFK ", - " FEEEE EEEEF ", - " F F ", - " C G C ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " FFF EAE FFF ", - " CFFFFFCF ", - " K " }, - { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", + " ", + " ", + " ", + " ", + " 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 ", + " BEEEEEBE ", + " J " }, + { " ", + " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -646,11 +645,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -661,11 +661,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -677,9 +677,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -691,7 +691,7 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", " ", @@ -845,7 +845,7 @@ public abstract class ForgeofGodsStructureString { " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -857,9 +857,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -871,12 +871,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -886,11 +885,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -901,102 +901,101 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", " ", + " BEEEEEB ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, - { " ", - " K ", - " CFFFFFC ", - " FFF EAE FFF ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " C G C ", - " F F ", - " FEEEE EEEEF ", - " KFAAAADDDDDG GDDDDDAAAAFK ", - " FEEEE EEEEF ", - " F F ", - " C G C ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " FFF EAE FFF ", - " CFFFFFCF ", - " K " }, - { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", + " 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 ", + " BEEEEEBE ", + " J " }, + { " ", + " ", + " BEEEEEB ", + " ", + " ", + " ", " ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -1006,11 +1005,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -1021,11 +1021,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -1037,9 +1037,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -1051,7 +1051,7 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", " ", @@ -1205,7 +1205,7 @@ public abstract class ForgeofGodsStructureString { " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -1217,9 +1217,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -1231,12 +1231,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -1246,11 +1245,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -1261,102 +1261,101 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", " ", + " BEEEEEB ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, - { " ", - " K ", - " CFFFFFC ", - " FFFF EAE FFF ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " C G C ", - " F F ", - " FEEEE EEEEF ", - " KFAAAADDDDDG GDDDDDAAAAFK ", - " FEEEE EEEEF ", - " F F ", - " C G C ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " FFF EAE FFF ", - " CFFFFFCF ", - " K " }, - { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", " ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", + " 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 ", + " BEEEEEBE ", + " J " }, + { " ", " ", + " BEEEEEB ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -1366,11 +1365,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -1381,11 +1381,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -1397,9 +1397,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -1411,7 +1411,7 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", " ", @@ -1565,7 +1565,7 @@ public abstract class ForgeofGodsStructureString { " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -1577,9 +1577,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -1591,12 +1591,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -1606,11 +1605,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -1621,102 +1621,101 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " BEEEB ", + " " }, { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", " ", + " BEEEEEB ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, - { " ", - " K ", - " CFFFFFC ", - " FFF EAE FFF ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " C G C ", - " F F ", - " FEEEE EEEEF ", - " KFAAAADDDDDG GDDDDDAAAAFK ", - " FEEEE EEEEF ", - " F F ", - " C G C ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F D F ", - " F EAE F ", - " FF EAE FF ", - " F EAE F ", - " FFF EAE FFF ", - " CFFFFFCF ", - " K " }, - { " ", - " ", - " CFFFFFC ", - " E ", - " E ", - " E ", - " E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", " ", " ", - " C C ", - " F F ", - " F F ", - " FEEEE EEEEF ", - " F F ", - " F F ", - " C C ", " ", " ", " ", " ", + " 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 ", + " BEEEEEBE ", + " J " }, + { " ", + " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", " ", - " E ", - " E ", - " E ", - " E ", - " CFFFFFC ", - " " }, + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, { " ", - " ", - " CFFFC ", " ", + " BEEEB ", " ", " ", " ", @@ -1726,12 +1725,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " F F ", - " F F ", - " F F ", - " C C ", " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", " ", " ", " ", @@ -1741,11 +1740,12 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CFFFC ", - " " }, + " ", + " BEEEB ", + " " }, { " ", " ", - " CCC ", + " BBB ", " ", " ", " ", @@ -1757,9 +1757,9 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " C C ", - " C C ", - " C C ", + " B B ", + " B B ", + " B B ", " ", " ", " ", @@ -1771,7 +1771,7 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC ", + " BBB ", " " }, { " ", " ", @@ -1959,25 +1959,25 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC ", - " CCDDDDDCC ", - " CCDD DDCC ", - " CCDD DDCC ", - " FFD DFF ", - " FD DF ", - " FD DF ", - " D DDD D ", - " D D D D ", - " D D D D ", - " D D D D ", - " D DDD D ", - " FD DF ", - " FD DF ", - " FFD DFF ", - " CCDD DDCC ", - " CCDD DDCC ", - " CCDDDDDCC ", - " CCCCC ", + " 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 ", " ", " ", " ", @@ -1989,25 +1989,25 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC ", - " CCDDDDDCC ", - " CCDD DDCC ", - " CCDD DDCC ", - " CCCFFD DFFCCC ", - " CCFFFFD EEDFFFFCC ", - " FFFFFFD EEE DFFFFFF ", - " FFFFFD DDDEE DFFFFF ", - " FFFFFD DIIID DFFFFF ", - " FFFFFD DIIID DFFFFF ", - " FFFFFD DIIID DFFFFF ", - " FFFFFD EEDDD DFFFFF ", - " FFFFFFD EEE DFFFFFF ", - " CCFFFFDEE DFFFFCC ", - " CCCFFD DFFCCC ", - " CCDD DDCC ", - " CCDD DDCC ", - " CCDDDDDCC ", - " CCCCC ", + " 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 ", " ", " ", " ", @@ -2019,25 +2019,25 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC ", - " CCDDDDDCC ", - " CCDD DDCC ", - " CCDD DDCC ", - " CCCFFD DFFCCC ", - " CCCCFFFFD DFFFFCCCC ", - " CCFFFFFFFFD DFFFFFFFFCC ", - " FFFFFFFFFD DDD DFFFFFFFFF ", - " FFFFFFFFFD D D DFFFFFFFFF ", - " FFFFFFFFFD D D DFFFFFFFFF ", - " FFFFFFFFFD D D DFFFFFFFFF ", - " FFFFFFFFFD DDD DFFFFFFFFF ", - " CCFFFFFFFFD DFFFFFFFFCC ", - " CCCCFFFFD DFFFFCCCC ", - " CCCFFD DFFCCC ", - " CCDD DDCC ", - " CCDD DDCC ", - " CCDDDDDCC ", - " CCCCC ", + " 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 ", " ", " ", " ", @@ -2053,17 +2053,17 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " CCCCFFFF FFFFCCCC ", - " CCCCCFFFFFFFF FFFFFFFFCCCCC ", - " FFFFFFFFFFFFF FFFFFFFFFFFFF ", - " FFFFFFFFFHHHH HHHHFFFFFFFFF ", - " FFFFFFFHHHHHH HHHHHHFFFFFFF ", - " FFFFFFFFFHHHH HHHHFFFFFFFFF ", - " FFFFFFFFFFFFF FFFFFFFFFFFFF ", - " CCCCCFFFFFFFF FFFFFFFFCCCCC ", - " CCCCFFFF FFFFCCCC ", - " CCCC CCCC ", + " BBBB BBBB ", + " BBBBEEEE EEEEBBBB ", + " BBBBBEEEEEEEE EEEEEEEEBBBBB ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " EEEEEEEEEGGGG GGGGEEEEEEEEE ", + " EEEEEEEGGGGGG GGGGGGEEEEEEE ", + " EEEEEEEEEGGGG GGGGEEEEEEEEE ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " BBBBBEEEEEEEE EEEEEEEEBBBBB ", + " BBBBEEEE EEEEBBBB ", + " BBBB BBBB ", " ", " ", " ", @@ -2084,15 +2084,15 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CC CC ", - " CCCCCFF FFCCCCC ", - " CCCFFFFFFF FFFFFFFCCC ", - " FFFFFFFFFF FFFFFFFFFF ", - " FFFFFFHHHH HHHHFFFFFF ", - " FFFFFFFFFF FFFFFFFFFF ", - " CCCFFFFFFF FFFFFFFCCC ", - " CCCCCFF FFCCCCC ", - " CC CC ", + " BB BB ", + " BBBBBEE EEBBBBB ", + " BBBEEEEEEE EEEEEEEBBB ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEGGGG GGGGEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " BBBEEEEEEE EEEEEEEBBB ", + " BBBBBEE EEBBBBB ", + " BB BB ", " ", " ", " ", @@ -2115,13 +2115,13 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " CCCCCFFF FFFCCCCC ", - " FFFFFFFF FFFFFFFF ", - " FFFFFHHH HHHFFFFF ", - " FFFFFFFF FFFFFFFF ", - " CCCCCFFF FFFCCCCC ", - " CCC CCC ", + " BBB BBB ", + " BBBBBEEE EEEBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEGGG GGGEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBEEE EEEBBBBB ", + " BBB BBB ", " ", " ", " ", @@ -2146,11 +2146,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCC CCCCCCC ", - " FFFFFFF FFFFFFF ", - " FFFFFHH HHFFFFF ", - " FFFFFFF FFFFFFF ", - " CCCCCCC CCCCCCC ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEEGG GGEEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", " ", " ", " ", @@ -2176,11 +2176,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCC CCCCCCC ", - " FFFFFFF FFFFFFF ", - " FFFFHHH HHHFFFF ", - " FFFFFFF FFFFFFF ", - " CCCCCCC CCCCCCC ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEGGG GGGEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", " ", " ", " ", @@ -2206,11 +2206,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -2236,11 +2236,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -2266,11 +2266,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -2296,11 +2296,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -2326,11 +2326,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFHH HHFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -2356,11 +2356,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -2386,11 +2386,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -2416,11 +2416,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFHH HHFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -2446,11 +2446,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2476,11 +2476,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2506,11 +2506,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2536,11 +2536,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2566,11 +2566,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2596,11 +2596,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2626,11 +2626,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2656,11 +2656,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2686,11 +2686,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2716,11 +2716,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -2746,11 +2746,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2776,11 +2776,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2806,11 +2806,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -2836,11 +2836,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -2866,11 +2866,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2896,11 +2896,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -2926,11 +2926,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -2956,11 +2956,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -2986,11 +2986,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3016,11 +3016,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3046,11 +3046,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3076,11 +3076,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3106,11 +3106,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3136,11 +3136,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3166,11 +3166,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -3196,11 +3196,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3226,11 +3226,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3256,11 +3256,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3286,11 +3286,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3316,11 +3316,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3346,11 +3346,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3376,11 +3376,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3406,11 +3406,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3436,11 +3436,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3466,11 +3466,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3496,11 +3496,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3526,11 +3526,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3556,11 +3556,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3586,11 +3586,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3616,11 +3616,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -3646,11 +3646,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3676,11 +3676,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3706,11 +3706,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3736,11 +3736,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3766,11 +3766,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3796,11 +3796,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3826,11 +3826,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3856,11 +3856,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3886,11 +3886,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3916,11 +3916,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3946,11 +3946,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -3976,11 +3976,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -4006,11 +4006,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -4036,11 +4036,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -4066,11 +4066,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - "CCC CCC", - "FFF FFF", - "FFH HFF", - "FFF FFF", - "CCC CCC", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", " ", " ", " ", @@ -4096,11 +4096,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4126,11 +4126,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4156,11 +4156,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4186,11 +4186,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4216,11 +4216,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4246,11 +4246,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4276,11 +4276,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4306,11 +4306,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4336,11 +4336,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4366,11 +4366,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4396,11 +4396,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4426,11 +4426,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4456,11 +4456,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4486,11 +4486,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4516,11 +4516,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4546,11 +4546,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -4576,11 +4576,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4606,11 +4606,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4636,11 +4636,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4666,11 +4666,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4696,11 +4696,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4726,11 +4726,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4756,11 +4756,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4786,11 +4786,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -4816,11 +4816,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4846,11 +4846,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -4876,11 +4876,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4906,11 +4906,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -4936,11 +4936,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -4966,11 +4966,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -4996,11 +4996,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCC CCC ", - " FFF FFF ", - " FFH HFF ", - " FFF FFF ", - " CCC CCC ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", " ", " ", " ", @@ -5026,11 +5026,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5056,11 +5056,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5086,11 +5086,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5116,11 +5116,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5146,11 +5146,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5176,11 +5176,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5206,11 +5206,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5236,11 +5236,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5266,11 +5266,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCC CCCC ", - " FFFF FFFF ", - " FFFH HFFF ", - " FFFF FFFF ", - " CCCC CCCC ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", " ", " ", " ", @@ -5296,11 +5296,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFHH HHFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -5326,11 +5326,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -5356,11 +5356,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -5386,11 +5386,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFHH HHFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -5416,11 +5416,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -5446,11 +5446,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCC CCCCC ", - " FFFFF FFFFF ", - " FFFFH HFFFF ", - " FFFFF FFFFF ", - " CCCCC CCCCC ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", " ", " ", " ", @@ -5476,11 +5476,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -5506,11 +5506,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCC CCCCCC ", - " FFFFFF FFFFFF ", - " FFFFHH HHFFFF ", - " FFFFFF FFFFFF ", - " CCCCCC CCCCCC ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", " ", " ", " ", @@ -5536,11 +5536,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCC CCCCCCC ", - " FFFFFFF FFFFFFF ", - " FFFFHHH HHHFFFF ", - " FFFFFFF FFFFFFF ", - " CCCCCCC CCCCCCC ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEGGG GGGEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", " ", " ", " ", @@ -5566,11 +5566,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCC CCCCCCC ", - " FFFFFFF FFFFFFF ", - " FFFFFHH HHFFFFF ", - " FFFFFFF FFFFFFF ", - " CCCCCCC CCCCCCC ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEEGG GGEEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", " ", " ", " ", @@ -5596,11 +5596,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCC CCCCCCCC ", - " FFFFFFFF FFFFFFFF ", - " FFFFFHHH HHHFFFFF ", - " FFFFFFFF FFFFFFFF ", - " CCCCCCCC CCCCCCCC ", + " BBBBBBBB BBBBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEGGG GGGEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBBBB BBBBBBBB ", " ", " ", " ", @@ -5626,11 +5626,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCCCC CCCCCCCCCC ", - " FFFFFFFFFF FFFFFFFFFF ", - " FFFFFFHHHH HHHHFFFFFF ", - " FFFFFFFFFF FFFFFFFFFF ", - " CCCCCCCCCC CCCCCCCCCC ", + " BBBBBBBBBB BBBBBBBBBB ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEGGGG GGGGEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " BBBBBBBBBB BBBBBBBBBB ", " ", " ", " ", @@ -5656,11 +5656,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCCCCCCC CCCCCCCCCCCCC ", - " FFFFFFFFFFFFF FFFFFFFFFFFFF ", - " FFFFFFFHHHHHH HHHHHHFFFFFFF ", - " FFFFFFFFFFFFF FFFFFFFFFFFFF ", - " CCCCCCCCCCCCC CCCCCCCCCCCCC ", + " BBBBBBBBBBBBB BBBBBBBBBBBBB ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " EEEEEEEGGGGGG GGGGGGEEEEEEE ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " BBBBBBBBBBBBB BBBBBBBBBBBBB ", " ", " ", " ", @@ -5686,11 +5686,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ", - " FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ", - " FFFFFFFFFFHHHHHHHHHHHHHHHFFFFFFFFFF ", - " FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ", - " CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEGGGGGGGGGGGGGGGEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", " ", " ", " ", @@ -5716,11 +5716,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCCCCCCCCCCCCCCCCCCCCC ", - " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", - " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", - " FFFFFFFFFFFFFFFFFFFFFFFFFFF ", - " CCCCCCCCCCCCCCCCCCCCCCCCCCC ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", " ", " ", " ", @@ -5746,11 +5746,11 @@ public abstract class ForgeofGodsStructureString { " ", " ", " ", - " CCCCCCCCCCCCCCC ", - " FFFFFFFFFFFFFFF ", - " FFFFFFFFFFFFFFF ", - " FFFFFFFFFFFFFFF ", - " CCCCCCCCCCCCCCC ", + " BBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBB ", " ", " ", " ", 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 a9b39f9b2..1404a5863 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 @@ -80,7 +80,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GT_UITextures; @@ -147,17 +146,16 @@ public IStructureDefinition getStructure_EM() public static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition .builder().addShape("main", ForgeofGodsStructureString.godforge) - .addElement('A', ofBlock(GregTech_API.sSolenoidCoilCasings, 9)) .addElement( - 'B', + 'A', buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch, InputBus, OutputBus) .casingIndex(TEXTURE_INDEX + 1).dot(1).buildAndChain(GodforgeCasings, 1)) - .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)).addElement('H', ofBlock(GodforgeCasings, 5)) - .addElement('I', ofBlock(GodforgeGlassBlock.INSTANCE, 0)) + .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( - 'K', + 'J', GT_HatchElementBuilder.builder().atLeast(moduleElement.Module) .casingIndex(TEXTURE_INDEX).dot(3).buildAndChain(GodforgeCasings, 0)) .build(); From 5858f29b4bcbe57ad365148f8c09b75be5539aa6 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 25 Apr 2024 20:46:19 +0200 Subject: [PATCH 31/57] new module screen textures + fix furnace mode toggle sound --- .../GT_MetaTileEntity_EM_BaseModule.java | 17 ++++++++++++++--- .../GT_MetaTileEntity_EM_SmeltingModule.java | 2 +- .../blocks/iconsets/GODFORGE_MODULE_ACTIVE.png | Bin 0 -> 5153 bytes .../iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta | 1 + .../textures/blocks/iconsets/SCREEN_OFF.png | Bin 0 -> 1041 bytes 5 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_MODULE_ACTIVE.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/SCREEN_OFF.png 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 e01e21dc4..a824848fc 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 @@ -12,6 +12,7 @@ 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; @@ -41,6 +42,8 @@ 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; @@ -70,6 +73,8 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc 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; @@ -447,14 +452,20 @@ public void loadNBTData(final NBTTagCompound NBT) { 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(TEXTURE_INDEX), - new TT_RenderedExtendedFacingTexture( - aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON - : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) }; + new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; } 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_SmeltingModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java index 17ea18059..e7d38faed 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 @@ -142,7 +142,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont protected ButtonWidget furnaceSwitch(IWidgetBuilder builder) { Widget button = new ButtonWidget().setOnClick((clickData, widget) -> furnaceMode = !furnaceMode) - .setPlayClickSound(isFurnaceModeOn()).setBackground(() -> { + .setPlayClickSound(true).setBackground(() -> { List ret = new ArrayList<>(); if (isFurnaceModeOn()) { ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); 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 0000000000000000000000000000000000000000..11588580861bd73f589cc1aecf306fbb159616fa GIT binary patch literal 5153 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 UKe#8p^PNZcw1H-}y6yFU0dy2tYybcN literal 0 HcmV?d00001 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 000000000..0dab81071 --- /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 0000000000000000000000000000000000000000..af85482d1a8f3bac071949b292d415ef5a68a8e0 GIT binary patch literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|T2doC(|mmy zw18|523AHP24;{FAY@>aVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkXO*0v4nJa0`PlBg3pY5)2GXCo)4KN+NuHtdjF{ z^%7I^lT!66atlDZ7;Gx6fXv*~l0=1y+?>2(s|s5sunH?68zii+qySb@l5MLL;Txdf zoL`ixV5VoFXP{)qrJ$f-Qt z8$NXv8BCin;XqfX5ySMfMLZ3fU-&s34k{mKaNEPkVb~zJo$<_>Gc3FeD-UKeXlrYy fa&|6SVv_*OJL+$CovlsF0Obo$S3j3^P6 Date: Fri, 26 Apr 2024 02:13:32 +0200 Subject: [PATCH 32/57] add rings to structure --- .../ForgeOfGodsRingsStructureString.java | 5101 +++++++++++++++++ ...g.java => ForgeOfGodsStructureString.java} | 5 +- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 68 +- 3 files changed, 5159 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java rename src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/{ForgeofGodsStructureString.java => ForgeOfGodsStructureString.java} (99%) 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 000000000..878a8e539 --- /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 similarity index 99% rename from src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeofGodsStructureString.java rename to src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java index 4ac7baa13..5e9203377 100644 --- 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 @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -public abstract class ForgeofGodsStructureString { +public abstract class ForgeOfGodsStructureString { - public static final String[][] godforge = { { + public static final String[][] MAIN_STRUCTURE = { { " ", " ", " ", @@ -5763,5 +5763,4 @@ public abstract class ForgeofGodsStructureString { " ", " ", " " } }; - } 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 1404a5863..33b839194 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 @@ -34,7 +34,6 @@ 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; @@ -53,8 +52,8 @@ 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.Text; @@ -103,6 +102,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int maxBatteryCharge = 100; private int gravitonShardsAvailable = 0; private int gravitonShardsSpent = 0; + private int ringAmount = 1; private long fuelConsumption = 0; private long totalRecipesProcessed = 0; private long totalFuelConsumed = 0; @@ -128,14 +128,42 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 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 >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5); // 1000 blocks max per placement. - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 0, realBudget, source, actor, false, true); + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 20, 0, realBudget, env, false, true); + if (isUpgradeActive(26) && stackSize.stackSize > 1) { + built += survivialBuildPiece( + STRUCTURE_PIECE_SECOND_RING, + stackSize, + 55, + 10, + -73, + realBudget, + env, + false, + true); + } + if (isUpgradeActive(29) && stackSize.stackSize > 2) { + built += survivialBuildPiece( + STRUCTURE_PIECE_THIRD_RING, + stackSize, + 47, + 12, + -82, + realBudget, + env, + false, + true); + } + return built; } @Override @@ -144,8 +172,10 @@ public IStructureDefinition getStructure_EM() } public static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder().addShape("main", ForgeofGodsStructureString.godforge) - + .builder() + .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', buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch, InputBus, OutputBus) @@ -153,12 +183,12 @@ public IStructureDefinition getStructure_EM() .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('H', ofBlock(GodforgeGlassBlock.INSTANCE, 0)).addElement('I', ofBlock(GodforgeCasings, 7)) .addElement( 'J', GT_HatchElementBuilder.builder().atLeast(moduleElement.Module) .casingIndex(TEXTURE_INDEX).dot(3).buildAndChain(GodforgeCasings, 0)) - .build(); + .addElement('K', ofBlock(GodforgeCasings, 6)).build(); public GT_MetaTileEntity_EM_ForgeOfGods(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); @@ -193,6 +223,12 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override public void construct(ItemStack stackSize, boolean hintsOnly) { structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 0, stackSize, hintsOnly); + if (isUpgradeActive(26) && stackSize.stackSize > 1) { + buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 10, -73); + } + if (isUpgradeActive(29) && stackSize.stackSize > 2) { + buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 12, -82); + } } private final ArrayList validFuelList = new ArrayList<>() { @@ -234,6 +270,13 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac return false; } + if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 10, -73)) { + ringAmount = 2; + if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 12, -82)) { + ringAmount = 3; + } + } + mHardHammer = true; mSoftHammer = true; mScrewdriver = true; @@ -393,10 +436,11 @@ private void createRenderBlock() { @Override public String[] getInfoData() { ArrayList 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(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]); } From be2d0bdc4c34cf46fc1af1cccd85709c8a1bb488 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 26 Apr 2024 02:50:01 +0200 Subject: [PATCH 33/57] small split upgrade check adjustment --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 33b839194..b6186151f 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 @@ -1254,11 +1254,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) unlockedSplitUpgrades++; } } - for (int maxSplitUpgrades : RING_UPGRADES) { - if (upgrades[maxSplitUpgrades]) { - unlockedSplitUpgrades--; - } - } + unlockedSplitUpgrades -= (ringAmount - 1); } if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { gravitonShardsAvailable -= gravitonShardCost; From bbe0e2c9d1318c3a57374f7801ab1b5c65c7fb54 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 26 Apr 2024 02:50:27 +0200 Subject: [PATCH 34/57] lore dump v1 (thx deleno) --- .../resources/assets/tectech/lang/en_US.lang | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 55cb79391..566320b1e 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -906,35 +906,35 @@ 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.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 smelting module now also exhibits the improvements made to the molten 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=While the gravitational stress from the star itself exerts less pressure on these new outer rings, keeping them synchronized and properly connected to the rest of the Forge becomes more difficult. Graviton shards help create spacetime bridges between the rings of the Forge, transmitting the effects of appropriate upgrades and allowing further module construction. +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 on a large scale. 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) From 35dc7e15d26677137db1c839870904d60a6b05ac Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 27 Apr 2024 15:22:56 +0200 Subject: [PATCH 35/57] add tooltip delay --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) 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 b6186151f..d3d3689f0 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 @@ -493,7 +493,8 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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)) @@ -506,7 +507,8 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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)) + }).addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")).setPos(174, 110) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( TextWidget.dynamicText(this::storedFuel).setDefaultColor(EnumChatFormatting.WHITE).setPos(6, 8) .setSize(74, 34)) @@ -526,7 +528,8 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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)) + }).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); @@ -536,7 +539,8 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); button.add(TecTechUITextures.OVERLAY_BUTTON_FLAG); return button.toArray(new IDrawable[0]); - }).addTooltip(translateToLocal("fog.button.milestones.tooltip")).setPos(174, 91)); + }).addTooltip(translateToLocal("fog.button.milestones.tooltip")).setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 91)); } @Override @@ -647,7 +651,8 @@ protected ModularWindow createFuelConfigWindow(final EntityPlayer player) { .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)) @@ -669,7 +674,7 @@ public void buildTooltip(List tooltip) { 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; @@ -697,7 +702,7 @@ public void buildTooltip(List tooltip) { 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; @@ -724,7 +729,7 @@ public void buildTooltip(List tooltip) { 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; @@ -777,30 +782,32 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { 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(1, false))) + .setSize(130, 7).setPos(37, 70).addTooltip(milestoneProgressText(1, 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(2, false))) + .addTooltip(milestoneProgressText(2, 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(3, false))) + .addTooltip(milestoneProgressText(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( new ProgressBar().setProgress(() -> milestoneProgress[3] / 7f) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) .setSynced(true, false).setSize(130, 7).setPos(233, 215) - .addTooltip(milestoneProgressText(4, false))) + .addTooltip(milestoneProgressText(4, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( TextWidget.dynamicText(() -> milestoneProgressText(1, true)).setTextAlignment(Alignment.Center) .setScale(0.7f).setMaxWidth(90).setDefaultColor(EnumChatFormatting.DARK_GRAY) .setPos(150, 85) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress"))) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( new ExpandTab().setNormalTexture(ModularUITextures.ARROW_DOWN.withFixedSize(14, 14, 3, 3)) .widget( @@ -1173,7 +1180,8 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { .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) @@ -1185,6 +1193,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { .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)) .setPos(4, 354)); @@ -1280,7 +1289,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } 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)) @@ -1318,7 +1327,7 @@ private Widget createUpgradeBox(int upgradeID, int colorCode, int[] prerequisite } 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)) From 9fb7e0e0a305070205eaa828f2342a89e1bab532 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 27 Apr 2024 16:33:58 +0200 Subject: [PATCH 36/57] base upgrade 101 off of new variable --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 4 ++++ .../com/github/technus/tectech/util/GodforgeMath.java | 9 +-------- 2 files changed, 5 insertions(+), 8 deletions(-) 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 d3d3689f0..e5e99d00e 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 @@ -1378,6 +1378,10 @@ public boolean isUpgradeActive(int upgradeID) { return upgrades[upgradeID]; } + public int getRingAmount() { + return ringAmount; + } + public int getTotalActiveUpgrades() { int totalUpgrades = 0; for (boolean upgrade : upgrades) { 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 7548f0455..1b222c9d1 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -235,14 +235,7 @@ public static void calculateProcessingVoltageForModules(GT_MetaTileEntity_EM_Bas } if (godforge.isUpgradeActive(23)) { - int ringAmount = 0; - if (godforge.isUpgradeActive(26)) { - ringAmount++; - } - if (godforge.isUpgradeActive(29)) { - ringAmount++; - } - voltage *= Math.pow(4, ringAmount); + voltage *= Math.pow(4, godforge.getRingAmount()); } module.setProcessingVoltage(voltage); From 84da9d29e8e64b94e73fc9e32ed894e75a7c9a34 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 27 Apr 2024 20:34:51 +0200 Subject: [PATCH 37/57] technical text dump + some upgrade gui adjustments --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 41 +++++++---- .../resources/assets/tectech/lang/en_US.lang | 68 +++++++++---------- 2 files changed, 61 insertions(+), 48 deletions(-) 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 e5e99d00e..01d03e312 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 @@ -120,7 +120,6 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private static final int MILESTONE_WINDOW_ID = 13; 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; @@ -1208,36 +1207,47 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) case 3 -> TecTechUITextures.BACKGROUND_GLOW_GREEN; default -> TecTechUITextures.BACKGROUND_GLOW_BLUE; }; - new TextWidget(); - ModularWindow.Builder builder = ModularWindow.builder(200, 200).setBackground(background) - .widget(ButtonWidget.closeWindowButton(true).setPos(185, 3)) + 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 MultiChildWidget() .addChild( new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID))) - .setTextAlignment(Alignment.Center).setMaxWidth(185) - .setDefaultColor(0x9c9c9c).setPos(9, 35)) + .setTextAlignment(Alignment.TopLeft).setMaxWidth(WIDTH - 15) + .setDefaultColor(0x9c9c9c).setPos(9, 30)) .addChild( - new TextWidget(translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) - .setTextAlignment(Alignment.Center).setMaxWidth(185) - .setDefaultColor(0x9c9c9c).setPos(9, 110)) + new TextWidget( + EnumChatFormatting.ITALIC + + translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) + .setTextAlignment(Alignment.Center) + .setMaxWidth(WIDTH - 15).setDefaultColor(0x9c9c9c) + .setPos(9, LORE_POS)) .addChild( new TextWidget( translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + " " + EnumChatFormatting.BLUE + gravitonShardCost).setTextAlignment(Alignment.Center) .setScale(0.7f).setMaxWidth(70) - .setDefaultColor(0x9c9c9c).setPos(7, 178)) + .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(113, 178)) + .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(173, 185))) - .setSize(200, 200) + .setDefaultColor(0x9c9c9c).setPos(WIDTH - 27, HEIGHT - 18))) + .setSize(WIDTH, HEIGHT) .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { int unlockedPrereqUpgrades = 0; @@ -1293,7 +1303,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) .addChild( new TextWidget(translateToLocal("fog.upgrade.confirm")) .setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(36).setPos(3, 5)) - .setPos(79, 177)); + .setPos(WIDTH / 2 - 21, HEIGHT - 25)); return builder.build(); } @@ -1320,6 +1330,9 @@ private Widget createUpgradeBox(int upgradeID, int colorCode, int[] prerequisite allPrereqRequired = requireAllPrerequisites; followupUpgrades = followingUpgradeIDs; isUpradeSplitStart = isStartOfSplit; + if (upgradeID == 0) { + + } if (!widget.isClient()) widget.getContext().openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); }).setSize(40, 15).setBackground(() -> { if (upgrades[upgradeID]) { diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 566320b1e..551e5f5b2 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -905,14 +905,14 @@ 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.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.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. @@ -931,42 +931,42 @@ fog.upgrade.lore.22=Returning to the first upgrade of the Forge with the myriad 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=While the gravitational stress from the star itself exerts less pressure on these new outer rings, keeping them synchronized and properly connected to the rest of the Forge becomes more difficult. Graviton shards help create spacetime bridges between the rings of the Forge, transmitting the effects of appropriate upgrades and allowing further module construction. +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 on a large scale. 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.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 From 7351aaf2dbe8cd2f6ed05b370b3adfc7ce7a5ca6 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 29 Apr 2024 00:36:42 +0200 Subject: [PATCH 38/57] minor structure adjustment --- .../multi/ForgeOfGodsStructureString.java | 206 +----------------- 1 file changed, 7 insertions(+), 199 deletions(-) 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 index 5e9203377..936197976 100644 --- 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 @@ -31,7 +31,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -61,7 +60,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -91,7 +89,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -121,7 +118,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -151,7 +147,6 @@ public abstract class ForgeOfGodsStructureString { " D D ", " ", " ", - " ", " " }, { " ", " ", @@ -181,7 +176,6 @@ public abstract class ForgeOfGodsStructureString { " CCC ", " D D ", " ", - " ", " " }, { " ", " ", @@ -211,7 +205,6 @@ public abstract class ForgeOfGodsStructureString { " EECCCCCEE ", " D D ", " ", - " ", " " }, { " ", " D D ", @@ -241,7 +234,6 @@ public abstract class ForgeOfGodsStructureString { " DD DD ", " DDCCCCCDD ", " D D ", - " ", " " }, { " D D ", " CCCCC ", @@ -271,8 +263,7 @@ public abstract class ForgeOfGodsStructureString { " EE EE ", " EEECCCCCEEE ", " CCCCC ", - " D D ", - " " }, + " D D " }, { " BBB ", " BBBBBBBBB ", " BB BB ", @@ -301,8 +292,7 @@ public abstract class ForgeOfGodsStructureString { " BB BB ", " BB BB ", " BBBBBBBBB ", - " BBB ", - " " }, + " BBB " }, { " BBB ", " BBBB BBBB ", " BB BB ", @@ -331,8 +321,7 @@ public abstract class ForgeOfGodsStructureString { " B B ", " BB BB ", " BBBB BBBB ", - " BBB ", - " " }, + " BBB " }, { " ", " ", " ", @@ -361,7 +350,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -391,7 +379,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -421,7 +408,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -451,7 +437,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -481,10 +466,8 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -514,7 +497,6 @@ public abstract class ForgeOfGodsStructureString { " BBB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -544,7 +526,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -573,8 +554,7 @@ public abstract class ForgeOfGodsStructureString { " ", " BEEEEEB ", " " }, - { " ", - " J ", + { " J ", " BEEEEEB ", " EEE EEE ", " E E ", @@ -604,7 +584,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEBE ", " J " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -634,7 +613,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -664,7 +642,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -721,7 +698,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -751,7 +727,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -781,7 +756,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -811,7 +785,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -841,10 +814,8 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -874,7 +845,6 @@ public abstract class ForgeOfGodsStructureString { " BBB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -904,7 +874,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -933,8 +902,7 @@ public abstract class ForgeOfGodsStructureString { " ", " BEEEEEB ", " " }, - { " ", - " J ", + { " J ", " BEEEEEB ", " EEE EEE ", " E E ", @@ -964,7 +932,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEBE ", " J " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -994,7 +961,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -1024,7 +990,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -1081,7 +1046,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1111,7 +1075,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1141,7 +1104,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1171,7 +1133,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1201,10 +1162,8 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -1234,7 +1193,6 @@ public abstract class ForgeOfGodsStructureString { " BBB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -1264,7 +1222,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -1293,8 +1250,7 @@ public abstract class ForgeOfGodsStructureString { " ", " BEEEEEB ", " " }, - { " ", - " J ", + { " J ", " BEEEEEB ", " EEEE EEE ", " E E ", @@ -1324,7 +1280,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEBE ", " J " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -1354,7 +1309,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -1384,7 +1338,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -1441,7 +1394,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1471,7 +1423,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1501,7 +1452,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1531,7 +1481,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1561,10 +1510,8 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -1594,7 +1541,6 @@ public abstract class ForgeOfGodsStructureString { " BBB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -1624,7 +1570,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -1653,8 +1598,7 @@ public abstract class ForgeOfGodsStructureString { " ", " BEEEEEB ", " " }, - { " ", - " J ", + { " J ", " BEEEEEB ", " EEE EEE ", " E E ", @@ -1684,7 +1628,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEBE ", " J " }, { " ", - " ", " BEEEEEB ", " ", " ", @@ -1714,7 +1657,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEEEB ", " " }, { " ", - " ", " BEEEB ", " ", " ", @@ -1744,7 +1686,6 @@ public abstract class ForgeOfGodsStructureString { " BEEEB ", " " }, { " ", - " ", " BBB ", " ", " ", @@ -1801,7 +1742,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1831,7 +1771,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1861,7 +1800,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1891,7 +1829,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1921,7 +1858,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", @@ -1951,14 +1887,12 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " " }, { " ", " ", " ", " ", " ", - " ", " BBBBB ", " BBCCCCCBB ", " BBCC CCBB ", @@ -1988,7 +1922,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB ", " BBCCCCCBB ", " BBCC CCBB ", @@ -2018,7 +1951,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB ", " BBCCCCCBB ", " BBCC CCBB ", @@ -2052,7 +1984,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " BBBBEEEE EEEEBBBB ", " BBBBBEEEEEEEE EEEEEEEEBBBBB ", @@ -2083,7 +2014,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BB BB ", " BBBBBEE EEBBBBB ", " BBBEEEEEEE EEEEEEEBBB ", @@ -2114,7 +2044,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " BBBBBEEE EEEBBBBB ", " EEEEEEEE EEEEEEEE ", @@ -2145,7 +2074,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBB BBBBBBB ", " EEEEEEE EEEEEEE ", " EEEEEGG GGEEEEE ", @@ -2175,7 +2103,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBB BBBBBBB ", " EEEEEEE EEEEEEE ", " EEEEGGG GGGEEEE ", @@ -2205,7 +2132,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -2235,7 +2161,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -2265,7 +2190,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -2295,7 +2219,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -2325,7 +2248,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEGG GGEEE ", @@ -2355,7 +2277,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -2385,7 +2306,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -2415,7 +2335,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEGG GGEEE ", @@ -2445,7 +2364,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2475,7 +2393,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2505,7 +2422,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2535,7 +2451,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2565,7 +2480,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2595,7 +2509,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2625,7 +2538,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2655,7 +2567,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2685,7 +2596,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2715,7 +2625,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -2745,7 +2654,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2775,7 +2683,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2805,7 +2712,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -2835,7 +2741,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -2865,7 +2770,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2895,7 +2799,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -2925,7 +2828,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -2955,7 +2857,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -2985,7 +2886,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3015,7 +2915,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3045,7 +2944,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3075,7 +2973,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3105,7 +3002,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3135,7 +3031,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3165,7 +3060,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -3195,7 +3089,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3225,7 +3118,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3255,7 +3147,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3285,7 +3176,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3315,7 +3205,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3345,7 +3234,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3375,7 +3263,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3405,7 +3292,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3435,7 +3321,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3465,7 +3350,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3495,7 +3379,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3525,7 +3408,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3555,7 +3437,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3585,7 +3466,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3615,7 +3495,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -3645,7 +3524,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3675,7 +3553,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3705,7 +3582,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3735,7 +3611,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3765,7 +3640,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3795,7 +3669,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3825,7 +3698,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3855,7 +3727,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3885,7 +3756,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3915,7 +3785,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3945,7 +3814,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -3975,7 +3843,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -4005,7 +3872,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -4035,7 +3901,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -4065,7 +3930,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", "BBB BBB", "EEE EEE", "EEG GEE", @@ -4095,7 +3959,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4125,7 +3988,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4155,7 +4017,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4185,7 +4046,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4215,7 +4075,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4245,7 +4104,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4275,7 +4133,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4305,7 +4162,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4335,7 +4191,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4365,7 +4220,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4395,7 +4249,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4425,7 +4278,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4455,7 +4307,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4485,7 +4336,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4515,7 +4365,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4545,7 +4394,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -4575,7 +4423,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4605,7 +4452,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4635,7 +4481,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4665,7 +4510,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4695,7 +4539,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4725,7 +4568,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4755,7 +4597,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4785,7 +4626,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -4815,7 +4655,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4845,7 +4684,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -4875,7 +4713,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4905,7 +4742,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -4935,7 +4771,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -4965,7 +4800,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -4995,7 +4829,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBB BBB ", " EEE EEE ", " EEG GEE ", @@ -5025,7 +4858,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5055,7 +4887,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5085,7 +4916,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5115,7 +4945,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5145,7 +4974,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5175,7 +5003,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5205,7 +5032,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5235,7 +5061,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5265,7 +5090,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBB BBBB ", " EEEE EEEE ", " EEEG GEEE ", @@ -5295,7 +5119,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEGG GGEEE ", @@ -5325,7 +5148,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -5355,7 +5177,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -5385,7 +5206,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEGG GGEEE ", @@ -5415,7 +5235,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -5445,7 +5264,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBB BBBBB ", " EEEEE EEEEE ", " EEEEG GEEEE ", @@ -5475,7 +5293,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -5505,7 +5322,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBB BBBBBB ", " EEEEEE EEEEEE ", " EEEEGG GGEEEE ", @@ -5535,7 +5351,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBB BBBBBBB ", " EEEEEEE EEEEEEE ", " EEEEGGG GGGEEEE ", @@ -5565,7 +5380,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBB BBBBBBB ", " EEEEEEE EEEEEEE ", " EEEEEGG GGEEEEE ", @@ -5595,7 +5409,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBB BBBBBBBB ", " EEEEEEEE EEEEEEEE ", " EEEEEGGG GGGEEEEE ", @@ -5625,7 +5438,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBBBB BBBBBBBBBB ", " EEEEEEEEEE EEEEEEEEEE ", " EEEEEEGGGG GGGGEEEEEE ", @@ -5655,7 +5467,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBBBBBBB BBBBBBBBBBBBB ", " EEEEEEEEEEEEE EEEEEEEEEEEEE ", " EEEEEEEGGGGGG GGGGGGEEEEEEE ", @@ -5685,7 +5496,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", " EEEEEEEEEEGGGGGGGGGGGGGGGEEEEEEEEEE ", @@ -5715,7 +5525,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", @@ -5745,7 +5554,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " ", " BBBBBBBBBBBBBBB ", " EEEEEEEEEEEEEEE ", " EEEEEEEEEEEEEEE ", From dca0cc823ec534eb31855cb9aba4cbf63292c79a Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 29 Apr 2024 00:37:47 +0200 Subject: [PATCH 39/57] structure adjustment followup + place button higher in upgrade window --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 01d03e312..7cdb9c136 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 @@ -143,7 +143,7 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu STRUCTURE_PIECE_SECOND_RING, stackSize, 55, - 10, + 11, -73, realBudget, env, @@ -155,7 +155,7 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu STRUCTURE_PIECE_THIRD_RING, stackSize, 47, - 12, + 13, -82, realBudget, env, @@ -223,10 +223,10 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec public void construct(ItemStack stackSize, boolean hintsOnly) { structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 0, stackSize, hintsOnly); if (isUpgradeActive(26) && stackSize.stackSize > 1) { - buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 10, -73); + buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 11, -73); } if (isUpgradeActive(29) && stackSize.stackSize > 2) { - buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 12, -82); + buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -82); } } @@ -269,9 +269,9 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac return false; } - if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 10, -73)) { + if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -73)) { ringAmount = 2; - if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 12, -82)) { + if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -82)) { ringAmount = 3; } } @@ -1303,7 +1303,7 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) .addChild( new TextWidget(translateToLocal("fog.upgrade.confirm")) .setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(36).setPos(3, 5)) - .setPos(WIDTH / 2 - 21, HEIGHT - 25)); + .setPos(WIDTH / 2 - 21, (int) (HEIGHT * 0.9))); return builder.build(); } From 440bc94a6d44063f41698038374ef07dd6e75bf9 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Tue, 30 Apr 2024 01:07:26 +0200 Subject: [PATCH 40/57] remove unused code --- .../metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 3 --- 1 file changed, 3 deletions(-) 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 7cdb9c136..c24b8b154 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 @@ -1330,9 +1330,6 @@ private Widget createUpgradeBox(int upgradeID, int colorCode, int[] prerequisite allPrereqRequired = requireAllPrerequisites; followupUpgrades = followingUpgradeIDs; isUpradeSplitStart = isStartOfSplit; - if (upgradeID == 0) { - - } if (!widget.isClient()) widget.getContext().openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); }).setSize(40, 15).setBackground(() -> { if (upgrades[upgradeID]) { From c946cceffc4a8d3a072dda8a837b71805382b2ce Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 3 May 2024 17:28:16 +0200 Subject: [PATCH 41/57] rework milestone window & add inverted milestone + corresponding math --- .../tectech/thing/gui/TecTechUITextures.java | 11 ++ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 109 +++++++++++++++--- .../tectech/textures/gui/background/space.png | Bin 0 -> 15406 bytes .../gui/picture/milestone_catalyst.png | Bin 1749 -> 2215 bytes .../textures/gui/picture/milestone_charge.png | Bin 1295 -> 2379 bytes .../gui/picture/milestone_composition.png | Bin 1596 -> 3506 bytes .../gui/picture/milestone_conversion.png | Bin 1444 -> 2544 bytes .../godforge_progressbar_background.png | Bin 0 -> 520 bytes .../progressbar/godforge_progressbar_blue.png | Bin 1905 -> 1502 bytes .../godforge_progressbar_blue_inverted.png | Bin 0 -> 1500 bytes .../godforge_progressbar_purple.png | Bin 1916 -> 1509 bytes .../godforge_progressbar_purple_inverted.png | Bin 0 -> 1501 bytes .../godforge_progressbar_rainbow.png | Bin 1855 -> 1414 bytes .../godforge_progressbar_rainbow_inverted.png | Bin 0 -> 1411 bytes .../progressbar/godforge_progressbar_red.png | Bin 1905 -> 1471 bytes .../godforge_progressbar_red_inverted.png | Bin 0 -> 1467 bytes 16 files changed, 105 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/background/space.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_background.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_blue_inverted.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_purple_inverted.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_rainbow_inverted.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/godforge_progressbar_red_inverted.png 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 ffe7f85a9..29ef10ba1 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,7 @@ 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_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 @@ -87,6 +88,8 @@ public class TecTechUITextures { .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 @@ -95,6 +98,14 @@ public class TecTechUITextures { .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 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 c24b8b154..e2525058f 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 @@ -68,7 +68,6 @@ 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.ExpandTab; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; @@ -109,6 +108,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private float powerMilestonePercentage = 0; private float recipeMilestonePercentage = 0; private float fuelMilestonePercentage = 0; + private float invertedPowerMilestonePercentage = 0; + private float invertedRecipeMilestonePercentage = 0; + private float invertedFuelMilestonePercentage = 0; private BigInteger totalPowerConsumed = BigInteger.ZERO; private boolean batteryCharging = false; public ArrayList moduleHatches = new ArrayList<>(); @@ -123,6 +125,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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); @@ -751,7 +757,7 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { final int WIDTH = 400; final int HEIGHT = 300; ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setBackground(TecTechUITextures.BACKGROUND_SPACE); builder.setGuiTint(getGUIColorization()); builder.setDraggable(true); builder.widget( @@ -767,17 +773,29 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION) .setPos(248, 169).setSize(100, 100)); builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.powermilestone").setPos(77, 45) - .setSize(50, 30)); + 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.recipemilestone").setPos(268, 45) - .setSize(60, 30)); + TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone") + .setDefaultColor(EnumChatFormatting.GOLD).setPos(77, 190).setSize(50, 30)); builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone").setPos(77, 190) - .setSize(50, 30)); + TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone") + .setDefaultColor(EnumChatFormatting.GOLD).setPos(268, 190).setSize(60, 30)); builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone").setPos(268, 190) - .setSize(60, 30)); + 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) @@ -801,6 +819,32 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) .setSynced(true, false).setSize(130, 7).setPos(233, 215) .addTooltip(milestoneProgressText(4, 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(1, 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(2, 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(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new ProgressBar().setProgress(() -> 1 - milestoneProgress[3] / 7f) + .setDirection(ProgressBar.Direction.LEFT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130) + .setSynced(true, false).setSize(130, 7).setPos(233, 215) + .addTooltip(milestoneProgressText(4, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + // spotless:off + /* .widget( TextWidget.dynamicText(() -> milestoneProgressText(1, true)).setTextAlignment(Alignment.Center) .setScale(0.7f).setMaxWidth(90).setDefaultColor(EnumChatFormatting.DARK_GRAY) @@ -817,7 +861,9 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { .setSize(100, 20).setPos(5, 20)) .setExpandedSize(130, 130).setSize(20, 20).setPos(37, 75) .setBackground(TecTechUITextures.BACKGROUND_GLOW_ORANGE)) - .widget(ButtonWidget.closeWindowButton(true).setPos(384, 4)); + */ + // spotless:on + .widget(ButtonWidget.closeWindowButton(true).setPos(382, 6)); return builder.build(); } @@ -1424,6 +1470,9 @@ private Text storedFuel() { } 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()) @@ -1431,15 +1480,36 @@ private void determineMilestoneProgress() { 0) / 7; milestoneProgress[0] = (int) floor(powerMilestonePercentage * 7); } else { - powerMilestonePercentage = 1; + rawProgress = (totalPowerConsumed.divide(POWER_MILESTONE_T7_CONSTANT).floatValue() - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[0] = 7 + closestRelevantSeven; + 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); } else { - recipeMilestonePercentage = 1; + rawProgress = (((float) totalRecipesProcessed / RECIPE_MILESTONE_T7_CONSTANT) - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[1] = 7 + closestRelevantSeven; + if (closestRelevantSeven % 2 == 0) { + invertedRecipeMilestonePercentage = actualProgress; + recipeMilestonePercentage = 1 - invertedRecipeMilestonePercentage; + } else { + recipeMilestonePercentage = actualProgress; + invertedRecipeMilestonePercentage = 1 - recipeMilestonePercentage; + } } if (milestoneProgress[2] < 7) { fuelMilestonePercentage = (float) max( @@ -1447,14 +1517,23 @@ private void determineMilestoneProgress() { 0) / 7; milestoneProgress[2] = (int) floor(fuelMilestonePercentage * 7); } else { - fuelMilestonePercentage = 1; + rawProgress = (((float) totalFuelConsumed / FUEL_MILESTONE_T7_CONSTANT) - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[2] = 7 + closestRelevantSeven; + if ((closestRelevantSeven % 2) == 0) { + invertedFuelMilestonePercentage = actualProgress; + fuelMilestonePercentage = 1 - invertedFuelMilestonePercentage; + } else { + fuelMilestonePercentage = actualProgress; + invertedFuelMilestonePercentage = 1 - fuelMilestonePercentage; + } } } private void determineGravitonShardAmount() { int sum = 0; for (int progress : milestoneProgress) { - progress = Math.min(progress, 7); sum += progress * (progress + 1) / 2; } gravitonShardsAvailable = sum - gravitonShardsSpent; 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 0000000000000000000000000000000000000000..4ecf8caa098f6a9da3663386fa66be7ab188ce36 GIT binary patch literal 15406 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

yAt1ysw*I@S! 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 Y4~SSiCu^BB8UO$Q07*qoM6N<$g4AArrvLx| literal 0 HcmV?d00001 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 index 25819c48b7e85ef3c25b8834f284249c3908f3ab..678727039718c2fb60e8676f0f9931f64baea389 100644 GIT binary patch delta 2165 zcmV-*2#WXB4W|*1Nq@iq01m(bYSxJf000O)NklrJ` zHFzw1KRg+(g~BxaGdv7mhbbKI!ixtb&Ac05m{5oP!j6Nh&)mA(7DaBJxa6EB?;nJ( z!G56$91mTg!BGnHR{IEC1f4Kwmi>6YP1DST{3(jU?EBtQi4?rh=iw`Gd~1Sn1@^mB zqCN#LhUU!a$A4`R1SSY`lO?H%ipb;~UaN=Z%{N-+neTty3%wh@03~*8x6dZ9U)Z2K zw=@wJn)*b|v|6zVg2;rtPqWk%STg6Jg0ma-2@@my>2-FL+uv5`D1jq|L9_JkeKt*E zj;NU+FH9a3CT$z@%gL`eYn^u6E}QY1XN3tPoF3Ipk$>mrsmWz!x6dkcn82Y401>vA zBnSfi<8V*Izw=tW#-_9p4(?lq_RMXt0ce~(|c@z zs(L*#Y0B{tk9#CGPp&(6sIW4=bX(Krhz!HXw9~{y3WYQ`zqxXGS*TB>p2&WI61M=J z0$l=p^?xV(ZJZHJ3Mj0VB>a#dv=N&9YX+^h}UspIs(?RIQ_clAntEhW-(@MY*kdV$_@pMe*DdF#(CatN_H+HfNQ6-a0;G(TT+ z_Mouan>HhhbBU)08j|JNDVGrUKv_iSW&P)Gcz?v!YVS4wYaKBYVaT<)0})^F&mXQ` zq4Om2_t05V0+kSow^QNTr9VO(=FecQUNbqajS#l?qO(fEcH1=0P1wNgaf18wAfY+1 z{%igw-V#D3Y(BT?QJd4EZ)4!Dob+t9Sg*5ERCyvb(yo8P;nEGHOO=GQTS7M%x|w+&I|E${Z5+`GOah; zTxY_42BbxrDElQ~FFD>lQNOs;x9+uzZ{KAjN{b3mfhz+}Ke+zfW>=g7T~99e^o#SD z2NmNh;92@Wc<%a@&5XDXBkoI^FH+nem;)P@ zH@o7z#S|+C;UOrYWy=Y@5Nbpd&H%N(TZh;p3_F=!Mn&KRiIMR*xw5v4r!G6Ed4FJP zMe~{Uy(wjsu&R$rNOWx_Jelv2ahkjms}ht@wIGF9@ui~L#pCcH_yC-4PeO^ClQ54gPMu2=UOiH^K$OU`WmE))j7x1w zM>|nfaF7rQ`X^Kp%t@GsQcvTUoPXK_%5-1mpza4Vs9KPNQ(cTX;nCtkj-U#Qjw&3$D{wxH%j4Xpe0f$)LJ`)#D8 zp+RIrhK0(=f6AuE*x)iMJG+9KI@VO_`77ddg2yMX-f0!90gax#C(yA0=6~^r?zmY; z{`r&JY=-4>!Y&M1Eq`!v5#{Faofqi*-pD_6XF72^0O@k|skTMf8c9<7$7!>;P zD<5HrPfUVU8^oxx@ui#3*D*tvrVmcuYXc&(h}4bo0fR!pIVm3d?_C%AhZ|U$cy*A- zfwl7!SL|TKXTT($HRS||(4L}A@9#IBHz0Juy8CTSV-pW`Xn(VduYtAm_;ovMo+ntE zQs#OurH1QGG#cjBExl`1_L+Wxg16*=J3hAILF)>48qokU7BRJ}!2IpT)dM0&Vg98L z;7;bf2CkH~aIL25SEs-2&mU`X_mD_+kIGjcCtbe725fK&W>*@pB~8@4bgOe|1@kZ6 z#(vH9^-TgRrGG@}yPAJ(=^a1YJ~LFHpu|z3st7${!*&~ySBjrRH+9zJ8kC4vZt1w{ zLzmp^GE+sO#n2IQOv(iEdMCz&VZzi#Dq=9+}r?cAF!aQaZ=;4J{;`8_^%0--;m~I}f&8&mYo}01-{^zcqJCy+c z_b)KZ7#W|(;nqB6*qv8%8Gm?m0*och!$0yn{dV68ec#&qtiAw#ZTdT-+&Pc{Z;RfS r=w-Y!p=x!4I>Fd+Hh_WuhA`$W2?ixl6oO^c00000NkvXXu0mjf_y;Bx delta 1696 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 BUk?BP delta 1238 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 cK7juKc>2aTv4VXpQhg8w6z9UUU3s{LYf5 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 LNkvXXu0mjfs_DB` delta 1388 zcmV-y1(W*l6Qm1}Nq@lr01m+cxRGn^000F!NklY}j6us}wIH(8&n@Wg9 zcL=dz1+C}?S4{&YZBmL_Kp-R}{>PL52~tH%C1^>LI*AbxP1qp80+2wWEa(CjY>-&c z+B5Gx&UyBX?f7f#nTk!1Yk54*%scPibI-j~d4vg2z0bLDaDV(uW3>~VdQsL%s3pO2=Y=sBnQuff#u-hb)d^IHZNB4YRga?8KHG4;tK) z|8TZcR5G0TV;%Q_7a{Et3j!Y1JUXnOAu>p<=r&RWUmz)#WtH%#ag~Bd5@W3tIvT$J z5SdyEk$**?jPy7-DMHixr5gAMMEF9~g~x~PpOg9e#Vx~NAg#CxMTl^Q;|k&0@EZm9 zMk^6$lALy)xSppfC!=89mV|v27^iUz0aqIt^j4$@^#m?#u!O~W8FDgKmO>A)AmAxr z?Bdif^LO59IQ#ddhJul%_Y(<4g|)b5hJIvHoPVTND3uh=&Gs2r2^wImBD@jxuozvZ zi<}H%g5NrU6ex+;5b{HSh8BW=6SM~qqp4=d$!Lp1djuh32LYW>+SSAP8a53n#1GJ~ z(D!=hiJXjQ|FB8$8tTT$!%0(!3YJaWQYiD_@;&s)a9%@Hf-$j*T&MR-#lWo&U03YaM7gAjA$nD2JTPnY(KZk6iM{ zFylhM%x#r`dkMM#3JCG&4fN;jySaVjWC9Qs4%wN&ZN(Ps(g*@hF&kqA_=^hjXdj2j za3bR@1O1Q~w^1P?N&stc@*|BfTMuC9+kf)CHya$RR6;L6Zee`eM?bGbHyip2hBiJa zptKQtP6cc7_K?F5Qv)=ff5@2aUAu_3QwbDY7m0$&wM9X|AvA|DLT2U93y2QeJ4A-C zvbj|OZI{9*3**2$l684+r0iFqsUSk6kyxIr-Sj#bA&m$YnX(#;}8KG&&&h zK_LpcEOluKujX z!p)8sLn$)Z#q9FTH@&qCN|EV;5Apn;KDz7wm?lzCeBQ#VhO+OL_2MWUnPtpN5|r}T zRy+qvYKD^up0^Mc5-O{ih2wftt{D0-Bh#%TCW)U`-ja_N@|wBG+>npaZ)#z|tc)32 ulHrX=EC~b|CC>CtF3X1to8TjKA@U!Smz!_ZDu|r`0000XniJ 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 0000000000000000000000000000000000000000..6c61bd82f3754fdc8e535f8308dfc38aaf032786 GIT binary patch literal 520 zcmV+j0{8uiP)Px#1ZP1_K>z@;j|==^1poj5Z%|BBMQ(0}T}M_zLPA4BLr+gnP*6}!O-){2UR+#U zU0q#TT3TRWU`|d>OG`^zTU%dWUuI@zKtMo2K|xANN?2G}NJvOLJUl-?KUrB>fq{Wc zOiXEMX^xJLYHDgxQBgiVK6iI_Jv}{bZEaIiQ+RlI6L1CN00009a7bBm000iZ000iZ z0XPLyBme*bB1uF+R5(wylIv20Fbstaq_lxr1XovAUDwO|KcgpUSnx9b+i!p-X(u^J zx%vSqZaWtZncFz6uY|X48xGvXBqIGV5N}EOItpP2l(9&XXtsuKBzDX>1w9xnS3e>3 zoC6Zx?(QsPpoX!LaKD7~v$tYd2f?G*QB zY^E^HbtPQFNc0@Q zRU5qG64Ho`u0+`tA-yCWoQgP}0w30vKfS-dC4A@CFMHt-5q$xORu4fa01{6C0000< KMNUMnLSTYqh{Id} literal 0 HcmV?d00001 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 index 8a33efb3719f29a5e19536e998015c6d36e0f6d6..b3dcc01f22abaf2319b43ee1e4bbd4ef9d421597 100644 GIT binary patch delta 1459 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 DF;AH> 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 0000000000000000000000000000000000000000..7e24ef4e71b285d3014b1a1c7b30d5a244512feb GIT binary patch literal 1500 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 delta 1815 zcmV+y2k7{Q3%?GK83+OZ003+gQwfnFD1X5K01m+cxRGn^000KmNkl z7RO&zb@%kx@y~?BpjA{rqQH>@mz7p<+shvK3lJg_ zmk0@R0I}Xg(H<-(ar|pM_Kf>Sb?v9R+MV%u>?{)El&^Y9ud3hg_o})^-MaOO{D0qA zS-ICxHI|oOZ>Zp%}L0zEJ&ULl#&SC3N$1B;ZP9d6{9hRgdR8F0_MOUMnG!NxwyD^ ziWInX=~5tqhOMnFM#>WwM{(xNnX6Z?qLa6w1^{LZ1-b=`4Rwgej~};XV}FE!0K*h* zfNr3`oz8fpi~;_j;W$n#0|Ga1-lV+E{AA3}&o|Uz49NETeR>M#+PApdjx7Q|MIu2o zR2T!%ChH_%<-vmoEnBbGquv;03@a_rKNt+|-Mhy)mSvxqqp4|osKxPV9LE>}gc%|Q zIM8rR0#d|&@#00CX_iKCVt=TJ-MxF4Iydv92%eEF5LN<0NTjBXZF6%o5FtBbF^6d= z)kObJ0SbL9R#nIXD|m%JL1)NLAOa`)0n_087}`i_f{9MHV2g(p!bBBgO9Y0AKm>-> z)z#x&0#1_*+MCHypmc6-u9-{%g76U1SoTMqfCsdCpf6v(OuoYOxqm<>xeKQXvItI3 zPeU-}u!hEZ%_yNx`}_OtVd4#sghr&84lAd313cHSUvI+d>uod}rWq9q{ zf8KiQjjgSRi;I`O`R2~gzg%fvJP$7fC!!VcW%y$KE3J!2sz{fyDr2!aDyMZRx-+Hn zM7xfz5>w6SVeE`G@_+GrpMCoG4~&aqKDnmqR$?+Uqm#Jc<{*;0bEezbvlTnH;D8W4 z^xIsO>gGRg|LffkB{z~QSBNc@6g=8h##Sn^ndEU*rK;33Nq3NOJuojxHxc*d%KLYg zzo%aoPvH7QuZ z(*uzON&8$0Ig7jo?=MzXW&iV)KmTp{yFwg`SK^r;iyr*puFZKgtEM^WId)4el~cLP zrxs+pCr>)n{U2`p@lSVaU+_ZL56&7-bQqO5Em7@qTu+t0|K&yhZE&2HJUHghM(<(b zqQdIA;%T8GrGG4;Ddn%8nZ(+=;bBzH6O+g?Ux=`qYn?~r*x0>cFH8B~z;(4W&brve z`N(0atRiYv5d!8aZ`V!bwkqeG>w5Lh4YGrINiIm72z76OcRt@W0r)5KYIN3c`KohD zzP5#e^U~Y$fgPeFYEC-ue3Yhqie)co;E6;HB|}{MntypPmb6Dr0}9Fb-(olT5I*9V z*m47>D~nma{9Ie3xWAj)BvyHFjbhg6ZtN&O^^4TmiH>~s8wVTyFab5u=89g8^DE1L zh^@bD_ywo;C33!FY9{5-$paSBB%$Rk&7qCAr!u2^dGW-RyRMv_>auc>Xt7?9n);ES z^8+$|UVm2eNqWJ^1#Qmj?#n8fH=V?{kmt$kv6ef6p{ReCPuYs7AT>L3Fcj01tlkqx za3HQH`9E*>t?)G8Z9sCf#-nGUZ^(e|X(l!L&t7`eJ4T)qgGY9-S`F7+|8cdmCjE^v zbJ4iz1{9F}QMhyItQ^$;0m>sfy%>e__2R%$uzzEM4prJFKiuDRh6eIrPxz#8AE`ww zJIqE)w!380IM+6Al$Pv7+Q882{7v%8*7JcQ*)~zs3b?XjH$y1)JNrU)3RyC#u|jwG zElP*6j~P9;hpDsRB(~hM>XL+{`SXARihU&66UoRXm0Oeq{!-La$vJ#r+o<~;efyFR zrGMC@d?SFl?)0ML%?=T~Ak%5n_YJ}%81DM5V}ozL-MN_)4tYaML~f3E%OQ}7)kd)= z3CF+lRT+WLDf>iKMyX-9+!7ayV-wf!U?ty_m@})a{~~(J9#m|;GsXGk(^>lx)&bEJ zz8InlnN8CUAAmAt*HQ@mWRi<{Coeow(hWb5Jo0NY(1c1*7SHUIzs07*qoLPx#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz1sF+0K~z{r?N>`{ zT~!!e`@HU>xk>YCOzA+x8mAU~41`L5gcB!%2!e<>l;S|akt0Vs78G&NpHNY-=**cU zqRwp7#w0f(_nzn8uC>oO*F2=D;>@!S`#iqAzi)r@NZ?b=w$sf{Fkx>^W;;nx*y+v6V}Ek z5umgY3deyEwv2GZZ`ceImms$WnGKLv0S@f|g{cr$z2Lzm-20+!T zxGqN#8wC7DVz5(9kVPzDBFaM>= z?n|m`c*OPX#vQ!0`7G(8T1;?+3%rL|#AO;Gx=ieI>>Xpdx2Tvb8U;;sQG&fv`Xx-Vgf8Y>6=H6%fL>L4m8 zi%bpeTnnywjw9pTnD;L~Oc`$4hq;+t4W-h6o{>zYP|L4pM9H=1YAC^k$K&~#zI2&~ zbXYPi8yIDyg?F`BSqxlqJUcj+XW?*snKzo_Z5KWMAEJjv#9sHSA%{-wc4Vua0 z@lZJy3AQ$WLlMq5METt^uS@PL*EI|bkc71Y_tG4>sy$?Naed{La_BKb7m^rjCc-?& z!Gysiy`OXcu$HBK^H1Ga1^!(fM2G_H=P9=7xounFzMbN(%duanzE!RD`lNX_qRwEz z`KO~*>RWjWZjQ*KanQ`vP(a1q?t9#wD;WCZKaJ6e zRW<4k!m5vlSPzG|5)5$JjPO`+ksWA+m8b_({=JSfD67;dm;^g1_3S4#JvzIekDD5y zYQm}2v+`@QDv<67b6mT+3{xrpYp64Lhci=EuL2tfvarOxaLSP~f7lXP=`A9)Ey}da z$beZMh>hD^N|^ObBEx;0GDl#71YGaAIp=!=b;&q=k9x4NAYg*&q9`wmr%`Q8gF3w0 zQHNYr>)TKSbs08X-b1W2bZZ<6o|0*ockxGjUuDqM`h}II(q;7p(g&n3^L`rQtt&ic z?~sQEUe-2`lXO<|f1#zc8czA91Esac7dnq+BcCWf5?*rF7vedPkiualo}+Q(4QRiT z;}rZ}3=d;USGfVE(Gm$f=}k7%%!*Nw=21a?7$?pNUc(v{1GAq^C`(KVA`gvY^MV2v z`-GrO`t~4Ak?H)8=$?Xg!DJ9jS+avM<0(TOL5|I7z<4Sbc@k1)`A>TfYQr7@3gB_b zmxdu&WvwV= za79e%C)b?*))#;A_zv;;{jFx#1}D{j2pXAf7J2_Pw1>#({xzI~|AQ<5_!Bq{j4Rg_ RycYlf002ovPDHLkV1il3pds$NGNQ)LNTC`}*o{W($n|k>eUxyG`cSv8y96~=Ue&d=cnq`lcBYBGW-{|R&6K| zzPkOTIPqez$Wa~LdHpAP-a}G!5Uz^k>mS~cm$yHL4I?ENpw`FTmQFT$eTng0Lc?M4 z>~Kwz+)HVLJ`oiabi>5EcV3el+kc;kagn}9@YkR=EgqMS%S8%JIhk9^Q82IlbGG8tkUXaHKR;*03nY?%RhTMGira)BJFMsrh^4siC zV%VrK;c#(?VGtvCm~&OA1S?dPh4cp&doAU_7V`Fw@5`spe1sf(ty{>V!H*Alry>S# zE(D>^b|tUZ?tT#TLLyi!BLxNpk4R8f(px;#$7Cgu1W6zWrU8o`!o@u=}$O zOU}w@GLo$6+q)505s z2NGDFA%YHb$YeY=9BQB>029U9Gk^@2hl_>$mCj^8Tgp1Rmv(aq8gwz?(Q&lKQEI@H zsFMkqbrgIv>4Ip9Y=3qJ7=4{fAfSnaT%kLoet0KHNPvkCS=rYbfv zL3~)iELT=x5Pv0yc_!a{{;On*DeNb(k51KfI)@BY>l!K8Dm>Z7uv^w`shtmb<~l{S znk*7j&0)jGRu0mIjEkl0fpDX8DTl>OM#WsFd3toJhWG=5+kcQhZhlSPn7)K9RFv&m48PKdxR1u*bS z9}UZSZH~ckr++WZV!eqLjU`ou4n-`x*+L#ue5pF46rTW` zNEUi?n@a}mG4xna+NE#ij6OMRR7s5eI!Knr!fs!>^^w4JMyk4aW|$lV)KJ0Do@^`{ zS6*Tm>ktAe043&=SZzhlG<)Q{!G1{g-{%t;Ms&;r1b-U2rpZ)?&I#Ge2f^TB5644 z32RbZgMTI}f%5tQB!E>CgrA2?k3Rvn<75iv)nB*=y$1S8(KNABL-*nntjFsMpHh2vTgu2}Kkm5MvJ~*#sRq#?ejk(I&y2Q;)vr!{xEO^6F)f3a5qv zEa;3ij delta 1865 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 Date: Sat, 4 May 2024 03:21:52 +0200 Subject: [PATCH 42/57] minor structure adjustment --- .../metaTileEntity/multi/ForgeOfGodsStructureString.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 index 936197976..37f855dad 100644 --- 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 @@ -581,7 +581,7 @@ public abstract class ForgeOfGodsStructureString { " EE EE ", " E E ", " EEE EEE ", - " BEEEEEBE ", + " BEEEEEB ", " J " }, { " ", " BEEEEEB ", @@ -929,7 +929,7 @@ public abstract class ForgeOfGodsStructureString { " EE EE ", " E E ", " EEE EEE ", - " BEEEEEBE ", + " BEEEEEB ", " J " }, { " ", " BEEEEEB ", @@ -1277,7 +1277,7 @@ public abstract class ForgeOfGodsStructureString { " EE EE ", " E E ", " EEE EEE ", - " BEEEEEBE ", + " BEEEEEB ", " J " }, { " ", " BEEEEEB ", @@ -1625,7 +1625,7 @@ public abstract class ForgeOfGodsStructureString { " EE EE ", " E E ", " EEE EEE ", - " BEEEEEBE ", + " BEEEEEB ", " J " }, { " ", " BEEEEEB ", From 83782d47c29fad18fd0450422ebf702525097ca1 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 4 May 2024 22:05:43 +0200 Subject: [PATCH 43/57] add individual milestone windows + milestone symbol in upgrade BGs --- .../tectech/thing/gui/TecTechUITextures.java | 13 ++ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 182 ++++++++++++++++-- .../resources/assets/tectech/lang/en_US.lang | 1 + .../textures/gui/background/white_glow.png | Bin 0 -> 18002 bytes .../gui/picture/milestone_catalyst.png | Bin 2215 -> 1527 bytes .../gui/picture/milestone_catalyst_glow.png | Bin 0 -> 2215 bytes .../textures/gui/picture/milestone_charge.png | Bin 2379 -> 1274 bytes .../gui/picture/milestone_charge_glow.png | Bin 0 -> 2379 bytes .../gui/picture/milestone_composition.png | Bin 3506 -> 1566 bytes .../picture/milestone_composition_glow.png | Bin 0 -> 3506 bytes .../gui/picture/milestone_conversion.png | Bin 2544 -> 1454 bytes .../gui/picture/milestone_conversion_glow.png | Bin 0 -> 2544 bytes .../textures/gui/picture/overlay_blue.png | Bin 0 -> 120 bytes .../textures/gui/picture/overlay_green.png | Bin 0 -> 120 bytes .../textures/gui/picture/overlay_orange.png | Bin 0 -> 120 bytes .../textures/gui/picture/overlay_purple.png | Bin 0 -> 120 bytes 16 files changed, 175 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/assets/tectech/textures/gui/background/white_glow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_catalyst_glow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_charge_glow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_composition_glow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/milestone_conversion_glow.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/overlay_blue.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/overlay_green.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/overlay_orange.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/overlay_purple.png 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 29ef10ba1..befb880db 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,7 @@ 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"); @@ -159,5 +160,17 @@ public class TecTechUITextures { .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/GT_MetaTileEntity_EM_ForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java index e2525058f..e3c17b3e2 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 @@ -120,6 +120,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 TEXTURE_INDEX = 960; private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; private static final long POWER_MILESTONE_CONSTANT = LongMath.pow(10, 15); @@ -489,6 +490,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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); builder.widget( new ButtonWidget().setOnClick( (clickData, widget) -> { @@ -760,18 +762,10 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { builder.setBackground(TecTechUITextures.BACKGROUND_SPACE); builder.setGuiTint(getGUIColorization()); builder.setDraggable(true); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE).setPos(62, 24) - .setSize(80, 100)); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION) - .setPos(263, 25).setSize(70, 98)); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST).setPos(52, 169) - .setSize(100, 100)); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION) - .setPos(248, 169).setSize(100, 100)); + 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)); @@ -867,8 +861,68 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { return builder.build(); } + protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer player) { + final int WIDTH = 150; + final int HEIGHT = 150; + int symbol_width; + int symbol_height; + 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; + } + case 2 -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST; + symbol_width = 75; + symbol_height = 75; + } + case 3 -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION; + symbol_width = 75; + symbol_height = 75; + } + default -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE; + symbol_width = 60; + symbol_height = 75; + } + } + + builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE); + builder.setDraggable(true); + builder.widget( + new DrawableWidget().setDrawable(symbol).setSize(symbol_width, symbol_height) + .setPos((WIDTH - symbol_width) / 2, (HEIGHT - symbol_height) / 2)) + .widget( + TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID + 1, false)) + .setScale(0.5f).setSize(100, 20).setPos(5, 20)); + + 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[] {}; @@ -881,12 +935,24 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { 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, 0, 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 }, @@ -898,6 +964,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 2, 0, + 2, new int[] { 1 }, false, new int[] { 4, 5 }, @@ -909,6 +976,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 3, 0, + 2, new int[] { 1 }, false, new int[] { 5, 6 }, @@ -920,6 +988,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 4, 0, + 0, new int[] { 2 }, false, new int[] { 8 }, @@ -931,6 +1000,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 5, 0, + 3, new int[] { 2, 3 }, false, new int[] { 7 }, @@ -942,6 +1012,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 6, 0, + 1, new int[] { 3 }, false, new int[] { 10 }, @@ -953,6 +1024,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 7, 0, + 3, new int[] { 5 }, false, new int[] { 8, 9, 10 }, @@ -964,6 +1036,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 8, 0, + 0, new int[] { 4, 7 }, true, new int[] { 11 }, @@ -975,6 +1048,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 9, 0, + 2, new int[] { 7 }, false, new int[] {}, @@ -986,6 +1060,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 10, 0, + 1, new int[] { 6, 7 }, true, new int[] { 11 }, @@ -997,6 +1072,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 11, 0, + 3, new int[] { 8, 10 }, false, new int[] { 12, 13, 14 }, @@ -1008,6 +1084,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 12, 1, + 2, new int[] { 11 }, false, new int[] { 17 }, @@ -1019,6 +1096,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 13, 2, + 1, new int[] { 11 }, false, new int[] { 18 }, @@ -1030,6 +1108,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 14, 3, + 0, new int[] { 11 }, false, new int[] { 15, 19 }, @@ -1041,6 +1120,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 15, 3, + 1, new int[] { 14 }, false, new int[] {}, @@ -1052,6 +1132,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 16, 1, + 1, new int[] { 17 }, false, new int[] {}, @@ -1063,6 +1144,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 17, 1, + 0, new int[] { 12 }, false, new int[] { 16, 20 }, @@ -1074,6 +1156,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 18, 2, + 1, new int[] { 13 }, false, new int[] { 21 }, @@ -1085,6 +1168,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 19, 3, + 0, new int[] { 14 }, false, new int[] { 22 }, @@ -1096,6 +1180,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 20, 1, + 0, new int[] { 17 }, false, new int[] { 23 }, @@ -1107,6 +1192,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 21, 2, + 1, new int[] { 18 }, false, new int[] { 23 }, @@ -1118,6 +1204,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 22, 3, + 1, new int[] { 19 }, false, new int[] { 23 }, @@ -1129,6 +1216,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 23, 0, + 0, new int[] { 20, 21, 22 }, false, new int[] { 24 }, @@ -1140,6 +1228,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 24, 0, + 1, new int[] { 23 }, false, new int[] { 25 }, @@ -1151,6 +1240,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 25, 0, + 1, new int[] { 24 }, false, new int[] { 26 }, @@ -1162,6 +1252,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 26, 0, + 3, new int[] { 25 }, false, new int[] { 27 }, @@ -1173,6 +1264,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 27, 0, + 2, new int[] { 26 }, false, new int[] { 28 }, @@ -1184,6 +1276,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 28, 0, + 0, new int[] { 27 }, false, new int[] { 29 }, @@ -1195,6 +1288,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 29, 0, + 3, new int[] { 28 }, false, new int[] { 30 }, @@ -1206,6 +1300,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { createUpgradeBox( 30, 0, + 3, new int[] { 29 }, false, new int[] {}, @@ -1247,12 +1342,46 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { } 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; - }; + 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; @@ -1263,8 +1392,16 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) } 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.text." + (currentUpgradeID))) .setTextAlignment(Alignment.TopLeft).setMaxWidth(WIDTH - 15) @@ -1357,6 +1494,8 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) * @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 @@ -1365,12 +1504,13 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) * @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, + 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; diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 551e5f5b2..72b34ca3e 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1018,6 +1018,7 @@ gt.blockmachines.multimachine.FOG.voltageinfo=Set processing voltage gt.blockmachines.multimachine.FOG.progress=Progress gt.blockmachines.multimachine.FOG.milestonecomplete=Complete gt.blockmachines.multimachine.FOG.milestoneprogress=Current progress towards next milestone +gt.blockmachines.multimachine.FOG.milestoneinfo=View Milestone Progress gt.blockmachines.multimachine.FOG.powermilestone=Charge gt.blockmachines.multimachine.FOG.recipemilestone=Conversion gt.blockmachines.multimachine.FOG.fuelmilestone=Catalyst 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 0000000000000000000000000000000000000000..79df16e73ba6b48f3748078e78a60e480d0a1446 GIT binary patch literal 18002 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 literal 0 HcmV?d00001 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 index 678727039718c2fb60e8676f0f9931f64baea389..708589844553b8586483149c8500ddcbf912085f 100644 GIT binary patch delta 1520 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 YEeQrCP!xh?)Bpeg07*qoM6N<$f)rsd2LJ#7 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 0000000000000000000000000000000000000000..678727039718c2fb60e8676f0f9931f64baea389 GIT binary patch literal 2215 zcmV;Y2w3-tP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz2s}wdK~z{rwV8RW zTxA)?zjMyaooc{{OM?v()EH80aEXZ|rYRvHrTQVZHLXIT5YRS+OLHv^gtaCO5dvjv zZwRPiY0FX}>9o{V5)qKJiAF^sE`MMw!XGMB0XuV6e$O}a&7C=ChC98;(>|R$bIBnsm1SSY`lO?H%ipb;~UaN=Z%{N-+neTty3%wh@ z03~*8x6dZ9U)Z2Kw=@wJn)*b|v|6zVg2;rtPqWk%STg6Jg0ma-2@@my>2-FL+uv5` zD1jq|L9_JkeKt*Ej;NU+FH9a3CT$z@%gL`eYn^u6E}QY1XN3tPoF3Ipk>}>A$z^4? z&nk47z@Z5M5w@2k2o0J{j+Fw0WwpTk;=8>Y4`9h1d#sL&lgwE^adC;M%j5lspxtd%7EkRY@Xn*D1At+wQj-Bzy&@%HSL6TSz& z0d<4br{1*7hTMS=b-}6Q^uXNcQCf*W4C2T&o=~0{N$slQNOs;x9+uzZ{KAjN{b3mfhz+}Ke+zfW>=g7 zT~99e^o#SD2NmNh;92@Wc<%a@&5XDXBkoIWqT0pd@FDmBoUTj3EM5@fn%Yp1BoMzlKjjiJOx!k1S4|OA}r_Qnf&o$g*Wr z1cr=DZAwQwQB`n|5DEGxR1(Zdn1@nN`^&EX*S! zbV7=A&=-SpcSiLH39T|J0t@1x&bf-icLQx)+iIl)F4jHO>H^o)22l~HvQ;QXXyQXq zy~0tWQw0O8=ure2*`1iI?=z2zK&3qP=Wp*j5nf>_0e3DYdRZl^u@ zs)uG1T83(;3cl+iIT;)TGi6M3k+Qn4yY^5KC|v;ooA(9rAFo;2)LNOe5Q@%_I9j-I zr#IPDiHUuyK%PJGXyo4(on$L8~zFW>SlKMk29#A7JqGcc4<5jfG9hpiY| zsZ9&7b(V5?o^kvyn^rZGT%!>SK|6O(E|Di*zO7%V)&|XeWlOf8=0pvw`}BeEfyw)A zq@t0P@rUlX zSx5f)liO^D<#NI<3|TF3aS`R_@SPXv{NBhvbZJ_|7%uIxGEIXkkB~AGGIp33Zx|H% z@hcx;iBC*|RU5>pvhk&x&(|?Sm!=O+-fIIQvWV1;@d1NE!8s`&`|n*B`iC1>ns{}P z$bq%<6IbkD#Am=Ho;BqJh|r#*P4DkFo;M(L!MgixO=A-eb!fATuYtAm_;ovMo+ntE zQs#OurH1QGG#cjBExl`1_L+Wxg16*=J3hAILF)>48qokU7BRJ}!2IpT)dM0&Vg98L z;7;bf2CkH~aIL25SEs-2&mU`X_mD_+kIGjcCtbe725fK&W>*@pB~8@4bgOe|1@kZ6 z#(vH9^-TgRr9|nwntyHS9Y5PXGgP3U#8IKD2t8rLb{mmbil0O`b=Kq>l!#Yu>A31c zm)z?zQ$?c1&=GP>$^`OyC&q+f!qi48Vnzw{=oc!1y^Y|&sMVyZB~TQCWz+xw002ovPDHLkV1lK)Du4h0 literal 0 HcmV?d00001 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 index 148c8c920282642cfb3c6f0efc733ffd6d9bff5f..5fec5cddeda60ce431480094b43a3bbdd27a411c 100644 GIT binary patch delta 1217 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 BUwHrk 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 0000000000000000000000000000000000000000..148c8c920282642cfb3c6f0efc733ffd6d9bff5f GIT binary patch literal 2379 zcmV-R3AFZ!P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ942;fOXK~z{rwVCUa z6xA8VPhV$Y*>QIf!4%Pz1kmW>1tkW}O)Focz!p@hQu$l_b5sOFRSGK~67Tn0G$vJO zE(9@AguM*I>`Y(t{Lai7dWKI4689G=x+rgqvazgV005qr$xc#A*UY=PSa$g)fB9gue<9ALTsQqkEf zx?fEDG0w`;)ZEhya<#>MO9F{;xp%&y?t~aGOaw9z_2}?|a8YOr;hvQ;I#VxW`aV-P zGk0J1P?&cA5f*#x)=La^yKyo`X&NwMvg{+_W#J{^wD8B?HG;lXs^2h-OcaJXB_7RI z0auFfx?Jf9@q!6qvUlX%MorbYfE!SNT17b^>)sVU6etlW*NH`{$O;>KGRWY5j&Ahh zjQh$c`wWA+T_8qDAQz_tW&KYEViNV#@&j6$~w z-xnSf4hZ)P-xa0=l?5?d*LxUcJmOTE7EoxP z@FRiR2@VRB9thLU@wxh=XRf1bIxLDpLn=+HeT7q(EF2v{XH`Nd!A!DScv$#}0HH^Z zZ(96~jwp7wP_2npwP9k;xH$l7S*94PMR>&~3~uKLIY*55(O`>!3cCb~GAjL8K%spv zZdutMl(y^d2#_M~29jtLF>Z35hGdNma4+y};r->;G4Tf}cSJdejdI�@K}3g@>Q@ zzd3k(;?i86WXf=w+xEZ(|C+=ggBxag$2bf{%(L?~3RM*&4hdXT!fgaMZi5V@Ah++t z=B4>yqT7F=xwxJ38XMOxmIuOTn3z+GQ9z20W`4UP+ny!4i2^R$nBuK2zUU2CkX`eF za~sD8j&EMx|9tJz9W)dl#VQ=cpqt&-3yF0qrud42(4+}ovql?y!F1+IfD3Nxw&yo3 zK6Y|yWiE;A^0?QyUf3n_~ z?{pMD1(bBqU{sIwu%}D<5%9~`%%NqKZ@ZLuDhY z+U|W)lPuhEa=JN3XOUct9>f){isM-R*Q-SoLJEJgkj&~4&9xe&m2!+5u_`gA)ikH769{lS&5>C{3EBwl81HawV`;g<4gntVVKkB$>4j=eikd&DrB{ z-N47zR7|@7yD3RjDo$-{n^Q9_&qpCoI^+s+bqr@|AvbCxqu-tg(2G=RE+l%Wr-&vG zlN5ix68kv%9I1Zxwzd~!oobO^ zkb$D9IgiQsaI=oR*be)^ljLc=#Ae|!__5FbsP7GRT^u)ifUIg+npm$auACQ zfFtKrUrVq`3}f^Ri#Ve=p6P+#que&ixW{{lAKItURZgtinFjbh%59^J`!0$2ezrnBCN|dXqqvt3((KOn3#@?oO3BAS_7L_X3*X0d z9BFRk>mgG$=PIT(>fyHgOuhE0Sway_p39T-W}0`pedwHUr+|96)n@ECV*jr}5Ov7T zTh5r4_LlG=gO;Z6H!~2&g?uL9vlL5Q+=#Rdtr?!wal?%`LJ_x{Mzi{qoGZ>Q8Bg=hBU4wQhLbhPmY%%pB(3G xG5cTa1_or6^UNQpX*|a_j*+G|xLjt;e*uU}v;637NE847002ovPDHLkV1k)1Vvqm; literal 0 HcmV?d00001 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 index a37e194cb022af3193d8eaab019c40ee146323ec..5a2f01134904dc2a57ec8cfb2ac93528d43ad2a2 100644 GIT binary patch delta 1546 zcmV+l2KD)}8=edyiBL{Q4GJ0x0000DNk~Le0000b0000b2nGNE0L7jl1Cb#pf5QL( z4#NS*Z>VGd00py2L_t(oN9~teXdG1-$Ny*Ulbzk2WV>xbsJ%wpdI1q{Zv_ihd{7D^ zSSsk7mj~})Ypfb8*vBH(2T@QT#0RA+Dil%B2ld5=NFkxNSc)}G+P%;2T+V!cGsM(2 z+wHd5MIZb_m}GM1oZtM<_kHIZfBdf=B^Iv(*TjxP6xaqrLkDGTv@9K^x9;n>{=lJb z-uenPGzD=s1K(0XLkXCHC~Jaj3&>eGd+_cy4rTE=5Z$qMAK5a76-F>y0Zh+_sCW=w z6AE9oAOLDDta|!WT6`qcz@T=oo+K+E=*5OD+%1^j^;o4?=fcwVym42z3QbUB}PUdsCjiXJ4;+XmpYcf3F3HV=r;Z3fZYe zU6E6>?meWyL=dSk^en^rG_C;1;OWIrw)lPPG5NDvZ0PS zw~-JTsIWjv0->icnqnc63NORw84PT#z1nf^!`T<9swk*2h{s?xe&X%<_LsPLoOy{I8%ps>;4Ip zsAs2so!CraLx)D}h_6EM^_tT6ZO!B+7{K zNcH88>-Xf;$=lbGn&rdQk%;vcpJd)LphVm1?}#ws>P*}Te+aIii<-&5L|H|^;3Fj? zB^$TshituH(adNk$?~ z1dq3@#mCUC)yb~wc6F-syi0bG_kK))a6*`ccnK(#&ixU`Sgd$lMDJV{L$mouDULb* z1Ut-Eo#Z8fe-d4EK;_+G!kh%vxJ#Uu@XH#;KbmhFKf8VlaqodRP@ocLqU5r`*%x!U zP=o^+8(cDmcq=W0A(x83#aK6W9CZH69H~uiUCS|diYnv+Fmm90$FVc(wvZm12wO>M zHrRTblYl`n#93W?#r0JV+8#Ck;A#>U_dzB%X?%9*{OPh1phQbhC11x`{tT;dT9>%k^`i3r z5mHAae~s{2Hl{&jTG%i>yCR@OOHlKHiFxk0&PyE&ep{$@RONk_L_tDzxi1)Fj*N$m z-_5NUDA9%O04fz;-uX7!{617eA?6)^k z(F#zsBILCOc3pRR*+Ql194Xw?p`jp{8b@U)237g{F7PonQ5y(QqOKD^ w@%8moFq8OdVLS^Ih9tIcI5jYs|FD2R0o>SRe-;L{i2wiq07*qoM6N<$f+m>X!~g&Q delta 3502 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 LNkvXXu0mjf41&8~ 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 0000000000000000000000000000000000000000..952c00a526e959c2a2a383024c22a010c5f89da7 GIT binary patch literal 2544 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz357{SK~z{rm6+*o zR8<(p&s}C{*<6cS_XUUsingT{v>J`^i~R?TN{mF~CyW~9tN#EI6yp{XiN+=IqhDPs zSOo;x+@q+VxRr{uow=LO@7#Nap);KsUVXTod$#Ai?|Yte&h;|$k7;3^P!hU@bA=0p z%Y|!%^99OgTO=G4z7c*b{yrhh2#JshO|2CfUzjJHCpZG&QsF{jkw6^?J7XXQJTCk! z{2+WU92R~TcwZG#p~2=NeBfU0a6EruZ2H^iqJr)8JT(_eZm@Hg|Ou9;X^}_q7Z06>yOwonFh|}j35h4 zl%*zR-eGFOgl>$v=a3}@fv<$mh5Z7dYale6%xoez@_c9Qfx8lUAx>lCGjnmNq={L# zyKlG3>5%Y1&wu^e{R76Ar&KSN_o8ZMLeDeze|y8bDu>9puuo_pR8OWEk(F-^9UM(G zR;nghkeYR$_3hI8Y2l0p4K{}1)u}JM7`o6y=anGm(3Jl2LQVpq2M!O8Cz8V0Qt`AN6Z7(gmJq9yaT&iGGPo5{ zyISZeN1>@IcxZ@GnCvilqS84+hHx=(?z%?fJ>^dLXm-1HA$+RJ?+Ob|#@DWxA zkzHMkDYHEI2lE2tT7`rvQl_Ulb2=nUBp^?_AkM(3U*A4M083tIx&`(-Kc8BSku?pk zc&6HLJxQ`>{Ja*OIU(cO;FUH;{rdK4Nkl1m|H+)SdBDz-8@LyMSQv#Uufqdx6uzfir(8_F4pU8a0tGkzqw ziSrR>qaPr1RInSMm4B@!wsbth(84=Ox%5bxg#_Bw6oy?MF z{G&AB?7=Z|5;8E(IJ3$%rMxnSFRPG(3sooPLSz+Q2+JF8H}zGebIMckN_VQBFPT({5p=es~#(kf$vncZxmx zGA`p!Qclb`0C7@3^w814cOzzi9w=OFZZdaZzd~S#WuRs&i{HGboO;x!U00&eaLKbP zNO;tYa40_{FfQZI1W%cba71g6Y_|OJ;K_?8_s#!p8A_=mh}jYT+B;Oegp6l-ajgJ( zmgi z$TBT1oB8AAU#=XkTuOeSrp%lt9%Hrfv>Wv0%m|F9`-m?@*JO?I$IFcU@Jx`ml+gUTAoQ4~V&^RJ< z-YA_lCA9UdaeJX-|03>>Os{oUT$B^gp$ie{-ef-3)z-8AsM^q+=8*;>*laRbGeUhY z%pbq2qIUM&s{a|NQc27c*$4+P^3L0Awhw4`v$D%ZTT(3w+IhrTGcwq0LhiFj&*pjC zhfz+p6b{!UI0VTH&bDEiZ+)SDZ!jZc`m>|YA=q4GuzEuEABH4L zNtxMVK0qYd60Qpgs5Fo!j$FA(nj#c1T@F$lTfoW zAwxOI$MKP`l91sm6CP`4cmS<|41&qA1L4bETG%Nv#{3Uw%u7cswG{dQ0000Fr%o3R|8Ox*VDx@L?S#nLHzPdW(G!2h8vF;TBHFb7(8A5 KT-G@yGywo8b@yq+$OArj%q2?0qjm>C#;GHhJ)_4FE`1cRrm KpUXO@geCyG*&U?- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bbfc03392fa5e684602fb1c8aaa34fc6c77144aa GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@buyJR*x382Ao?FyoGi*>8b@yq+$OArj%q6DEtiVrF2hVz{yX)2m}Z2?kGB KKbLh*2~7aIXC1Bp literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e189df603fd843b50befee0c36b7bf8f7867ee28 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaMs(j9#r85lP9 zbN@+X1@buyJR*x382Ao?FyoGi*>8b@yq+$OArj%q0Ro|Km>C$SFg*R5HcuWX!QkoY K=d#Wzp$Pz>wj3M) literal 0 HcmV?d00001 From fd6d0463612efeedc31a31fcaff522e40a9c4120 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Mon, 6 May 2024 20:49:00 +0200 Subject: [PATCH 44/57] fix long overflow in power tally --- .../godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java | 2 +- .../godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java | 2 +- .../godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java | 2 +- .../godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 c6752c377..e35e7ff97 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 @@ -220,7 +220,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); } - addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration))); addToRecipeTally(calculatedParallels); EUt = calculatedEut; setCalculatedEut(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 84219ad4f..77fb548a3 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 @@ -121,7 +121,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } - addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration))); addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; 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 19973f7c1..94eb49ea2 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 @@ -91,7 +91,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); } - addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration))); addToRecipeTally(calculatedParallels); currentParallel = calculatedParallels; EUt = calculatedEut; 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 e7d38faed..831d04f6f 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 @@ -102,7 +102,7 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } - addToPowerTally(BigInteger.valueOf(calculatedEut * duration)); + addToPowerTally(BigInteger.valueOf(calculatedEut).multiply(BigInteger.valueOf(duration))); if (!furnaceMode) { addToRecipeTally(calculatedParallels); } From 716a01d651352e02137254722063456e9be86fbb Mon Sep 17 00:00:00 2001 From: GDCloud Date: Tue, 7 May 2024 21:39:23 +0200 Subject: [PATCH 45/57] more milestone ui work --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 186 ++++++++++++------ .../resources/assets/tectech/lang/en_US.lang | 15 +- 2 files changed, 139 insertions(+), 62 deletions(-) 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 e3c17b3e2..ce686415a 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 @@ -65,6 +65,7 @@ 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; @@ -102,6 +103,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int gravitonShardsAvailable = 0; private int gravitonShardsSpent = 0; private int ringAmount = 1; + private int totalExtensionsBuilt = 0; private long fuelConsumption = 0; private long totalRecipesProcessed = 0; private long totalFuelConsumed = 0; @@ -793,70 +795,50 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { 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(1, 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(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .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(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( new ProgressBar().setProgress(() -> milestoneProgress[3] / 7f) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) .setSynced(true, false).setSize(130, 7).setPos(233, 215) - .addTooltip(milestoneProgressText(4, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .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(1, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .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(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .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(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( new ProgressBar().setProgress(() -> 1 - milestoneProgress[3] / 7f) .setDirection(ProgressBar.Direction.LEFT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130) .setSynced(true, false).setSize(130, 7).setPos(233, 215) - .addTooltip(milestoneProgressText(4, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) - // spotless:off - /* - .widget( - TextWidget.dynamicText(() -> milestoneProgressText(1, true)).setTextAlignment(Alignment.Center) - .setScale(0.7f).setMaxWidth(90).setDefaultColor(EnumChatFormatting.DARK_GRAY) - .setPos(150, 85) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget( - new ExpandTab().setNormalTexture(ModularUITextures.ARROW_DOWN.withFixedSize(14, 14, 3, 3)) - .widget( - new DrawableWidget().setDrawable(ModularUITextures.ARROW_UP).setSize(14, 14) - .setPos(3, 3)) - .widget( - TextWidget.dynamicText(() -> milestoneProgressText(1, false)).setScale(0.5f) - .setSize(100, 20).setPos(5, 20)) - .setExpandedSize(130, 130).setSize(20, 20).setPos(37, 75) - .setBackground(TecTechUITextures.BACKGROUND_GLOW_ORANGE)) - */ - // spotless:on + .addTooltip(milestoneProgressText(3, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget(ButtonWidget.closeWindowButton(true).setPos(382, 6)); return builder.build(); } @@ -866,6 +848,7 @@ protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer playe final int HEIGHT = 150; int symbol_width; int symbol_height; + String milestoneType; ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); UITexture symbol; switch (currentMilestoneID) { @@ -873,32 +856,52 @@ protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer playe 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( - new DrawableWidget().setDrawable(symbol).setSize(symbol_width, symbol_height) - .setPos((WIDTH - symbol_width) / 2, (HEIGHT - symbol_height) / 2)) + builder.widget(ButtonWidget.closeWindowButton(true).setPos(134, 4)) .widget( - TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID + 1, false)) - .setScale(0.5f).setSize(100, 20).setPos(5, 20)); + 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(() -> 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(); } @@ -1679,33 +1682,105 @@ private void determineGravitonShardAmount() { gravitonShardsAvailable = sum - gravitonShardsSpent; } + private Text gravitonShardAmountText(int milestoneID) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + + EnumChatFormatting.GRAY + + (milestoneProgress[milestoneID] * (milestoneProgress[milestoneID] + 1) / 2)); + } + + 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 = totalExtensionsBuilt; + } + 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 min; long max; - BigInteger bigMin; BigInteger bigMax; Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); String suffix; + if (Interactable.hasShiftDown()) { + formatting = false; + done = new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") + + EnumChatFormatting.DARK_RED + + "?"); + } switch (milestoneID) { - case 1: + case 0: if (milestoneProgress[0] < 7) { - suffix = "EU"; - bigMin = totalPowerConsumed; + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0] + 1)) .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); - if (formatting && (bigMin.compareTo(BigInteger.valueOf(1_000L)) > 0)) { + if (formatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " - + toExponentForm(bigMin) - + "/" + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" + + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix); } else { return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " - + bigMin - + "/" + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" + + EnumChatFormatting.GRAY + bigMax + " " + suffix); @@ -1713,28 +1788,25 @@ private Text milestoneProgressText(int milestoneID, boolean formatting) { } else { return done; } - case 2: + case 1: if (milestoneProgress[1] < 7) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); - min = totalRecipesProcessed; max = LongMath.pow(6, milestoneProgress[1] + 1) * LongMath.pow(10, 7); break; } else { return done; } - case 3: + case 2: if (milestoneProgress[2] < 7) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel"); - min = totalFuelConsumed; max = LongMath.pow(3, milestoneProgress[2] + 1) * LongMath.pow(10, 4); break; } else { return done; } - case 4: + case 3: if (milestoneProgress[3] < 7) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); - min = milestoneProgress[3]; max = 7; break; } else { @@ -1745,16 +1817,18 @@ private Text milestoneProgressText(int milestoneID, boolean formatting) { } if (formatting) { return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ": " - + formatNumbers(min) - + "/" + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" + + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix); } else { return new Text( - translateToLocal( - "gt.blockmachines.multimachine.FOG.progress") + ": " + min + "/" + max + " " + suffix); + translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" + + EnumChatFormatting.GRAY + + max + + " " + + suffix); } } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 72b34ca3e..e776fbf7d 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1015,17 +1015,20 @@ 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.progress=Progress -gt.blockmachines.multimachine.FOG.milestonecomplete=Complete -gt.blockmachines.multimachine.FOG.milestoneprogress=Current progress towards next milestone +gt.blockmachines.multimachine.FOG.totalprogress=Total Progress +gt.blockmachines.multimachine.FOG.milestoneprogress=Current Milestone +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.powermilestone=Charge gt.blockmachines.multimachine.FOG.recipemilestone=Conversion gt.blockmachines.multimachine.FOG.fuelmilestone=Catalyst gt.blockmachines.multimachine.FOG.purchasablemilestone=Composition -gt.blockmachines.multimachine.FOG.recipes=Recipes -gt.blockmachines.multimachine.FOG.fuel=Fuel Units -gt.blockmachines.multimachine.FOG.extensions=Extensions +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 From f9aa9dd3761d15c3ca16f2036a0419337519ba83 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Wed, 8 May 2024 20:53:37 +0200 Subject: [PATCH 46/57] fix input hatch npe --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 ce686415a..c92a8e438 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 @@ -305,8 +305,10 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // Check and drain fuel if (ticker % (5 * SECONDS) == 0) { ticker = 0; - // TODO: Fix NPE here - FluidStack fluidInHatch = mInputHatches.get(0).getFluid(); + FluidStack fluidInHatch = null; + if (mInputHatches != null) { + fluidInHatch = mInputHatches.get(0).getFluid(); + } int maxModuleCount = 8; if (upgrades[26]) { From a33037516cbf1c385cb0bb21646c410873f10c29 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 9 May 2024 20:20:25 +0200 Subject: [PATCH 47/57] more milestone work --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 127 +++++++++++------- .../resources/assets/tectech/lang/en_US.lang | 3 +- 2 files changed, 81 insertions(+), 49 deletions(-) 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 c92a8e438..8c20826cf 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 @@ -115,6 +115,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private float invertedFuelMilestonePercentage = 0; private BigInteger totalPowerConsumed = BigInteger.ZERO; private boolean batteryCharging = false; + private boolean inversion = false; public ArrayList moduleHatches = new ArrayList<>(); private static final int FUEL_CONFIG_WINDOW_ID = 9; @@ -318,11 +319,6 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { maxModuleCount += 4; } - determineMilestoneProgress(); - if (!debugMode) { - determineGravitonShardAmount(); - } - fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); if (fluidInHatch != null && fluidInHatch.isFluidEqual(validFuelList.get(selectedFuelType))) { FluidStack fluidNeeded = new FluidStack( @@ -340,6 +336,13 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } else { reduceBattery(fuelConsumptionFactor); } + + 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) { @@ -757,7 +760,7 @@ public void buildTooltip(List tooltip) { return builder.build(); } - private int[] milestoneProgress = new int[] { 0, 0, 0, 4 }; + private int[] milestoneProgress = new int[] { 0, 0, 0, 7 }; protected ModularWindow createMilestoneWindow(final EntityPlayer player) { final int WIDTH = 400; @@ -890,6 +893,9 @@ protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer playe 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) @@ -1614,6 +1620,27 @@ private Text storedFuel() { + maxBatteryCharge); } + private void checkInversionStatus() { + int inversionChecker = 0; + for (int progress : milestoneProgress) { + if (progress < 7) { + break; + } + inversionChecker++; + } + if (inversionChecker == 4) { + inversion = true; + } + } + + private Text inversionStatusText() { + String inversionStatus = ""; + if (inversion) { + inversionStatus = EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.inversion"); + } + return new Text(inversionStatus); + } + private void determineMilestoneProgress() { int closestRelevantSeven; float rawProgress; @@ -1624,11 +1651,12 @@ private void determineMilestoneProgress() { / POWER_LOG_CONSTANT + 1), 0) / 7; milestoneProgress[0] = (int) floor(powerMilestonePercentage * 7); - } else { + } + if (inversion) { rawProgress = (totalPowerConsumed.divide(POWER_MILESTONE_T7_CONSTANT).floatValue() - 1) / 7; closestRelevantSeven = (int) floor(rawProgress); actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[0] = 7 + closestRelevantSeven; + milestoneProgress[0] = 7 + (int) floor(rawProgress * 7); if (closestRelevantSeven % 2 == 0) { invertedPowerMilestonePercentage = actualProgress; powerMilestonePercentage = 1 - invertedPowerMilestonePercentage; @@ -1643,11 +1671,12 @@ private void determineMilestoneProgress() { (log(totalRecipesProcessed * 1f / RECIPE_MILESTONE_CONSTANT) / RECIPE_LOG_CONSTANT + 1), 0) / 7; milestoneProgress[1] = (int) floor(recipeMilestonePercentage * 7); - } else { + } + if (inversion) { rawProgress = (((float) totalRecipesProcessed / RECIPE_MILESTONE_T7_CONSTANT) - 1) / 7; closestRelevantSeven = (int) floor(rawProgress); actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[1] = 7 + closestRelevantSeven; + milestoneProgress[1] = 7 + (int) floor(rawProgress * 7); if (closestRelevantSeven % 2 == 0) { invertedRecipeMilestonePercentage = actualProgress; recipeMilestonePercentage = 1 - invertedRecipeMilestonePercentage; @@ -1661,11 +1690,12 @@ private void determineMilestoneProgress() { (log(totalFuelConsumed * 1f / FUEL_MILESTONE_CONSTANT) / FUEL_LOG_CONSTANT + 1), 0) / 7; milestoneProgress[2] = (int) floor(fuelMilestonePercentage * 7); - } else { + } + if (inversion) { rawProgress = (((float) totalFuelConsumed / FUEL_MILESTONE_T7_CONSTANT) - 1) / 7; closestRelevantSeven = (int) floor(rawProgress); actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[2] = 7 + closestRelevantSeven; + milestoneProgress[2] = 7 + (int) floor(rawProgress * 7); if ((closestRelevantSeven % 2) == 0) { invertedFuelMilestonePercentage = actualProgress; fuelMilestonePercentage = 1 - invertedFuelMilestonePercentage; @@ -1679,16 +1709,23 @@ private void determineMilestoneProgress() { 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.shardgain") + ": " - + EnumChatFormatting.GRAY - + (milestoneProgress[milestoneID] * (milestoneProgress[milestoneID] + 1) / 2)); + translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum); } private Text totalMilestoneProgress(int milestoneID) { @@ -1757,8 +1794,9 @@ private Text currentMilestone(int milestoneID) { private Text milestoneProgressText(int milestoneID, boolean formatting) { long max; BigInteger bigMax; - Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); 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( @@ -1768,48 +1806,51 @@ private Text milestoneProgressText(int milestoneID, boolean formatting) { } switch (milestoneID) { case 0: - if (milestoneProgress[0] < 7) { + if (milestoneProgress[0] < 7 || inversion) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); - bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0] + 1)) - .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); + 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( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" - + EnumChatFormatting.GRAY - + toExponentForm(bigMax) - + " " - + suffix); + progressText + ": " + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix); } else { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" - + EnumChatFormatting.GRAY - + bigMax - + " " - + suffix); + return new Text(progressText + ": " + EnumChatFormatting.GRAY + bigMax + " " + suffix); } } else { return done; } case 1: - if (milestoneProgress[1] < 7) { + if (milestoneProgress[1] < 7 || inversion) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); - max = LongMath.pow(6, milestoneProgress[1] + 1) * LongMath.pow(10, 7); + 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) { + if (milestoneProgress[2] < 7 || inversion) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel"); - max = LongMath.pow(3, milestoneProgress[2] + 1) * LongMath.pow(10, 4); + 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) { + if (milestoneProgress[3] < 7 || inversion) { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); - max = 7; + max = milestoneProgress[3] + 1; break; } else { return done; @@ -1818,19 +1859,9 @@ private Text milestoneProgressText(int milestoneID, boolean formatting) { return new Text("Error"); } if (formatting) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" - + EnumChatFormatting.GRAY - + formatNumbers(max) - + " " - + suffix); + return new Text(progressText + ": " + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix); } else { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.progress") + ":\n" - + EnumChatFormatting.GRAY - + max - + " " - + suffix); + return new Text(progressText + ": " + EnumChatFormatting.GRAY + max + " " + suffix); } } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index e776fbf7d..19d279a9f 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1016,10 +1016,11 @@ 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 +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 From 470b094da980855bbf41679c8232ee28c3b287cd Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 10 May 2024 01:11:33 +0200 Subject: [PATCH 48/57] yet another structure adjustment --- .../multi/ForgeOfGodsStructureString.java | 375 ++++++------------ .../GT_MetaTileEntity_EM_ForgeOfGods.java | 20 +- 2 files changed, 125 insertions(+), 270 deletions(-) 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 index 37f855dad..0f9a15c60 100644 --- 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 @@ -9,23 +9,23 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", + " BB BB ", + " BB BB ", + " B DDD DDD B ", + " DDFD DFDD ", + " DDADD DDADD ", + " DFDD DDFD ", + " DDD DDD ", " ", " ", " ", - " D D ", - " DCD ", - " DED ", - " CDEDC ", - " DDDDAAADDDD ", - " CEEA~AEEC ", - " DDDDAAADDDD ", - " CDEDC ", - " DED ", - " DCD ", - " D D ", - " ", - " ", - " ", + " DDD DDD ", + " DFDD DDFD ", + " DDADD DDADD ", + " DDFD DFDD ", + " B DDD DDD B ", + " BB BB ", + " BB BB ", " ", " ", " ", @@ -37,26 +37,55 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", + " 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 ", + " ", + " ", " ", " ", - " D D ", - " D D ", - " CCC ", - " EEFFCEE ", - " EEECCFEEE ", - " EEFFCCFEE ", - " DDCCFCCFCFCFCDD ", - " CFCCFFFCCFC ", - " DDCFCFCFCCFCCDD ", - " EEFCCFFEE ", - " EEEFCCEEE ", - " EECFFEE ", - " CCC ", - " D D ", - " D D ", + " " }, + { " ", " ", " ", " ", + " 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 ", " ", " ", " ", @@ -65,27 +94,27 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", + " BBBB BBBB ", + " BEEEEB BEEEEB ", + " BEEDDBBB BBBDDEEB ", + " BED DEB ", + " BED DEB ", + " BB BB ", + " B B ", + " B B ", + " ", " ", " ", - " D D ", - " ECCCE ", - " DDDCCCDDD ", - " DDEE EEDD ", - " DDE EDD ", - " DE ED ", - " EDE EDE ", - " DCC CCD ", - " CC CC ", - " DCC CCD ", - " EDE EDE ", - " DE ED ", - " DDE EDD ", - " DDEE EEDD ", - " DDDCCCDDD ", - " ECCCE ", - " D D ", " ", " ", + " B B ", + " B B ", + " BB BB ", + " BED DEB ", + " BED DEB ", + " BEEDDBBB BBBDDEEB ", + " BEEEEB BEEEEB ", + " BBBB BBBB ", " ", " ", " ", @@ -94,234 +123,60 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " D D ", - " D D ", - " EEECCCEEE ", - " EEE EEE ", - " EE EE ", - " EE EE ", - " EE EE ", - " EE EE ", - " E E ", - " DDC CDD ", - " C C ", - " DDC CDD ", - " E E ", - " EE EE ", - " EE EE ", - " EE EE ", - " EE EE ", - " EEE EEE ", - " EEECCCEEE ", - " D D ", - " D D ", + " BB BB ", + " BEEBB BBEEB ", + " BBB BEB ", + " B B ", + " B B ", + " ", " ", " ", " ", - " " }, - { " ", " ", " ", - " D D ", - " CCC ", - " DDDCCCDDD ", - " DD DD ", - " DD DD ", - " DD DD ", - " D D ", - " D D ", - " D D ", - " D D ", - " DCC CCD ", - " CC CC ", - " DCC CCD ", - " D D ", - " D D ", - " D D ", - " D D ", - " DD DD ", - " DD DD ", - " DD DD ", - " DDDCCCDDD ", - " CCC ", - " D D ", " ", " ", - " " }, - { " ", " ", - " D D ", - " CCC ", - " EEE EEE ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " DC CD ", - " C C ", - " DC CD ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " EEE EEE ", - " CCC ", - " D D ", " ", - " " }, - { " ", " ", - " D D ", - " EECCCCCEE ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " C C ", - " DC CD ", - " C C ", - " DC CD ", - " C C ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " EECCCCCEE ", - " D D ", - " ", - " " }, - { " ", - " D D ", - " DDCCCCCDD ", - " DD DD ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " C C ", - " DC CD ", - " C C ", - " DC CD ", - " C C ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " D D ", - " DD DD ", - " DDCCCCCDD ", - " D D ", - " " }, - { " D D ", - " CCCCC ", - " EEE EEE ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " C C ", - " DC CD ", - " C C ", - " DC CD ", - " C C ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " EEECCCCCEEE ", - " CCCCC ", - " D D " }, - { " BBB ", - " BBBBBBBBB ", - " BB BB ", - " BB BB ", " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " BB BB ", - " BB BB ", - " BB BB ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", " B B ", - " BB BB ", - " BB BB ", - " BBBBBBBBB ", - " BBB " }, - { " BBB ", - " BBBB BBBB ", - " BB BB ", - " B B ", + " BEB BEB ", + " BEBBB BBEEB ", + " BB BB ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BB BB ", " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", - " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", " B B ", - " B B ", - " BB BB ", - " BBBB BBBB ", - " BBB " }, + " BB BB ", + " ", + " ", + " ", + " ", + " " }, { " ", " ", " ", 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 8c20826cf..5368c1b57 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 @@ -147,14 +147,14 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu if (mMachine) return -1; int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5); // 1000 blocks max per placement. - int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 20, 0, realBudget, env, false, true); + 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, - -73, + -67, realBudget, env, false, @@ -166,7 +166,7 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu stackSize, 47, 13, - -82, + -76, realBudget, env, false, @@ -188,7 +188,7 @@ public IStructureDefinition getStructure_EM() .addElement( 'A', buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch, InputBus, OutputBus) - .casingIndex(TEXTURE_INDEX + 1).dot(1).buildAndChain(GodforgeCasings, 1)) + .casingIndex(TEXTURE_INDEX + 3).dot(1).buildAndChain(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)) @@ -231,12 +231,12 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 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, -73); + 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, -82); + buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -76); } } @@ -255,7 +255,7 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac moduleHatches.clear(); // Check structure of multi. - if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 0)) { + if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) { return false; } @@ -279,9 +279,9 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac return false; } - if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -73)) { + if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { ringAmount = 2; - if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -82)) { + if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { ringAmount = 3; } } From 52f2a7a748ec303b46f49f267115559dbbe2e95d Mon Sep 17 00:00:00 2001 From: GDCloud Date: Fri, 10 May 2024 22:18:51 +0200 Subject: [PATCH 49/57] add logic for structure milestone --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) 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 5368c1b57..86d30a382 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 @@ -48,6 +48,10 @@ 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.math.LongMath; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; @@ -110,9 +114,11 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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; @@ -337,6 +343,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { reduceBattery(fuelConsumptionFactor); } + determineCompositionMilestoneLevel(); checkInversionStatus(); determineMilestoneProgress(); if (!debugMode) { @@ -760,7 +767,7 @@ public void buildTooltip(List tooltip) { return builder.build(); } - private int[] milestoneProgress = new int[] { 0, 0, 0, 7 }; + private int[] milestoneProgress = new int[] { 0, 0, 0, 0 }; protected ModularWindow createMilestoneWindow(final EntityPlayer player) { final int WIDTH = 400; @@ -815,7 +822,7 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { .setSynced(true, false).setSize(130, 7).setPos(37, 215) .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( - new ProgressBar().setProgress(() -> milestoneProgress[3] / 7f) + new ProgressBar().setProgress(() -> structureMilestonePercentage) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) .setSynced(true, false).setSize(130, 7).setPos(233, 215) @@ -839,7 +846,7 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { .setSynced(true, false).setSize(130, 7).setPos(37, 215) .addTooltip(milestoneProgressText(2, false)).setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( - new ProgressBar().setProgress(() -> 1 - milestoneProgress[3] / 7f) + 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) @@ -1641,6 +1648,30 @@ private Text inversionStatusText() { return new Text(inversionStatus); } + private void determineCompositionMilestoneLevel() { + int[] uniqueModuleCount = new int[4]; + for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { + if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) { + uniqueModuleCount[0] = 1; + continue; + } + if (module instanceof GT_MetaTileEntity_EM_MoltenModule) { + uniqueModuleCount[1] = 1; + continue; + } + if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { + uniqueModuleCount[2] = 1; + continue; + } + if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { + uniqueModuleCount[3] = 1; + } + + } + totalExtensionsBuilt = Arrays.stream(uniqueModuleCount).sum() + ringAmount - 1; + milestoneProgress[3] = totalExtensionsBuilt; + } + private void determineMilestoneProgress() { int closestRelevantSeven; float rawProgress; @@ -1704,6 +1735,22 @@ private void determineMilestoneProgress() { 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() { From 517a3cf8e608d14c77c7fbc40925d17d17d6eb2e Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 11 May 2024 18:54:38 +0200 Subject: [PATCH 50/57] add logic for structure milestone inversion --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 29 +++++++++++++++---- .../GT_MetaTileEntity_EM_ExoticModule.java | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) 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 86d30a382..d8b2d7551 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 @@ -1635,9 +1635,7 @@ private void checkInversionStatus() { } inversionChecker++; } - if (inversionChecker == 4) { - inversion = true; - } + inversion = inversionChecker == 4; } private Text inversionStatusText() { @@ -1649,26 +1647,47 @@ private Text inversionStatusText() { } private void determineCompositionMilestoneLevel() { - int[] uniqueModuleCount = new int[4]; + 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) { - uniqueModuleCount[3] = 1; + 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) / 5; + } milestoneProgress[3] = totalExtensionsBuilt; } 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 e35e7ff97..d9f60c7bf 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 @@ -469,7 +469,7 @@ protected ButtonWidget magmatterSwitch(IWidgetBuilder builder) { return (ButtonWidget) button; } - private boolean isMagmatterModeOn() { + public boolean isMagmatterModeOn() { return magmatterMode; } From 12aef47c1ebe1adfde8ca6d24a95b9b7a49cb654 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 11 May 2024 19:29:24 +0200 Subject: [PATCH 51/57] small followup fixes --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 d8b2d7551..2157dea80 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 @@ -107,10 +107,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int gravitonShardsAvailable = 0; private int gravitonShardsSpent = 0; private int ringAmount = 1; - private int totalExtensionsBuilt = 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; @@ -147,7 +147,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo protected static final String STRUCTURE_PIECE_THIRD_RING = "third_ring"; private static final String TOOLTIP_BAR = EnumChatFormatting.BLUE + "--------------------------------------------"; - private boolean debugMode = true; + private final boolean debugMode = true; public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { if (mMachine) return -1; @@ -767,7 +767,7 @@ public void buildTooltip(List tooltip) { return builder.build(); } - private int[] milestoneProgress = new int[] { 0, 0, 0, 0 }; + private final int[] milestoneProgress = new int[] { 0, 0, 0, 0 }; protected ModularWindow createMilestoneWindow(final EntityPlayer player) { final int WIDTH = 400; @@ -1686,9 +1686,9 @@ private void determineCompositionMilestoneLevel() { + (molten - 1) * 2 + (plasma - 1) * 3 + (exotic - 1) * 4 - + (exoticMagmatter - 1) * 5) / 5; + + (exoticMagmatter - 1) * 5) / 5f; } - milestoneProgress[3] = totalExtensionsBuilt; + milestoneProgress[3] = (int) Math.floor(totalExtensionsBuilt); } private void determineMilestoneProgress() { @@ -1761,7 +1761,7 @@ private void determineMilestoneProgress() { if (inversion) { rawProgress = (totalExtensionsBuilt - 7) / 7f; closestRelevantSeven = (int) floor(rawProgress); - actualProgress = rawProgress - closestRelevantSeven;; + actualProgress = rawProgress - closestRelevantSeven; if ((closestRelevantSeven % 2) == 0) { invertedStructureMilestonePercentage = actualProgress; structureMilestonePercentage = 1 - invertedStructureMilestonePercentage; @@ -1810,7 +1810,7 @@ private Text totalMilestoneProgress(int milestoneID) { } case 3 -> { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); - progress = totalExtensionsBuilt; + progress = milestoneProgress[3]; } default -> { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); From 6ac8356956a25f036aa1aa89303b8edf03826a45 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sat, 11 May 2024 20:55:26 +0200 Subject: [PATCH 52/57] upgrade window text changes --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 17 +++++++++++------ .../resources/assets/tectech/lang/en_US.lang | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) 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 2157dea80..3f3ead631 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 @@ -1415,21 +1415,26 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) .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)) + 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.TopLeft).setMaxWidth(WIDTH - 15) - .setDefaultColor(0x9c9c9c).setPos(9, 30)) + .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) - .setMaxWidth(WIDTH - 15).setDefaultColor(0x9c9c9c) + .setDefaultColor(0x9c9c9c) + .setSize(WIDTH - 15, (int) (HEIGHT * 0.9) - LORE_POS) .setPos(9, LORE_POS)) .addChild( new TextWidget( diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 19d279a9f..cf8700eb3 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -921,7 +921,7 @@ fog.upgrade.lore.12=Graviton shards can further compress stellar fuel, increasin 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 smelting module now also exhibits the improvements made to the molten 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.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. From 501ab180e4ba10075b6cfedec3c92d5683edfa56 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 12 May 2024 01:10:08 +0200 Subject: [PATCH 53/57] new debug button --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 19 +++++++++++-------- .../resources/assets/tectech/lang/en_US.lang | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) 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 3f3ead631..4d9b1d5dd 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 @@ -14,12 +14,8 @@ 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 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.metatileentity.BaseTileEntity.TOOLTIP_DELAY; 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; @@ -191,10 +187,7 @@ public IStructureDefinition getStructure_EM() .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', - buildHatchAdder(GT_MetaTileEntity_EM_ForgeOfGods.class).atLeast(InputHatch, InputBus, OutputBus) - .casingIndex(TEXTURE_INDEX + 3).dot(1).buildAndChain(GodforgeCasings, 3)) + .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)) @@ -1353,6 +1346,16 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { .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)); } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index cf8700eb3..35f6aa10e 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -971,6 +971,7 @@ 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 From 9c9fd9fa30deecaf58d75792d11a7e04241b4086 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Sun, 12 May 2024 03:15:41 +0200 Subject: [PATCH 54/57] lower max scroll distance to match the star --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 4d9b1d5dd..55d6db191 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 @@ -1319,7 +1319,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { 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)) @@ -1347,8 +1347,7 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { .setTooltipShowUpDelay(TOOLTIP_DELAY) .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) .addChild( - new ButtonWidget() - .setOnClick((clickData, widget) -> Arrays.fill(upgrades, true)) + 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)) From 60ab30c4aaab34ac4aea645432eb8b06501deda1 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Tue, 14 May 2024 01:34:49 +0200 Subject: [PATCH 55/57] add startup cost --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 138 ++++++++++-------- .../technus/tectech/util/GodforgeMath.java | 4 + 2 files changed, 82 insertions(+), 60 deletions(-) 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 55d6db191..19436ec5a 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 @@ -10,11 +10,14 @@ 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 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_Utility.formatNumbers; import static java.lang.Math.floor; @@ -79,7 +82,9 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +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; @@ -89,6 +94,7 @@ 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 @@ -103,6 +109,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int gravitonShardsAvailable = 0; private int gravitonShardsSpent = 0; private int ringAmount = 1; + private int stellarFuelAmount = 0; private long fuelConsumption = 0; private long totalRecipesProcessed = 0; private long totalFuelConsumed = 0; @@ -142,6 +149,8 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 final boolean debugMode = true; @@ -300,82 +309,91 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); if (aBaseMetaTileEntity.isServerSide()) { - if (getBaseMetaTileEntity().isAllowedToWork()) { - ticker++; - // Check and drain fuel - if (ticker % (5 * SECONDS) == 0) { - ticker = 0; - FluidStack fluidInHatch = null; - if (mInputHatches != null) { - fluidInHatch = mInputHatches.get(0).getFluid(); - } - int maxModuleCount = 8; - - if (upgrades[26]) { - maxModuleCount += 4; - } - if (upgrades[29]) { - maxModuleCount += 4; - } + 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; - 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); + 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; } } + int fuelConsumption = calculateStartupFuelConsumption(this); + if (stellarFuelAmount > fuelConsumption) { + stellarFuelAmount -= fuelConsumption; + increaseBattery(fuelConsumption); + } } else { - reduceBattery(fuelConsumptionFactor); + 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); + } } + } else { + reduceBattery(fuelConsumptionFactor); + } - determineCompositionMilestoneLevel(); - checkInversionStatus(); - determineMilestoneProgress(); - if (!debugMode) { - determineGravitonShardAmount(); - } + 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(); - 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(); + // 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(); + 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 if (moduleHatches.size() > maxModuleCount) { - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { + } 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(); } } 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 1b222c9d1..ea6301759 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -29,6 +29,10 @@ public static double calculateFuelConsumption(GT_MetaTileEntity_EM_ForgeOfGods g } else return Math.max(godforge.getFuelFactor() / 25 * upgradeFactor, 1); } + 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(27)) { From b43a0db738af33cbe4fcc280718517eafa19dee4 Mon Sep 17 00:00:00 2001 From: GDCloud Date: Thu, 16 May 2024 00:07:10 +0200 Subject: [PATCH 56/57] some startup cost fixes --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 20 +++++++++++++++---- .../resources/assets/tectech/lang/en_US.lang | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) 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 19436ec5a..d4731e2c3 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 @@ -110,6 +110,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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; @@ -327,16 +328,17 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } 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; } } - int fuelConsumption = calculateStartupFuelConsumption(this); - if (stellarFuelAmount > fuelConsumption) { - stellarFuelAmount -= fuelConsumption; - increaseBattery(fuelConsumption); + neededStartupFuel = calculateStartupFuelConsumption(this); + if (stellarFuelAmount >= neededStartupFuel) { + stellarFuelAmount -= neededStartupFuel; + increaseBattery(neededStartupFuel); } } else { fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); @@ -1645,6 +1647,13 @@ private Text gravitonShardAmount() { } 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 @@ -2010,6 +2019,7 @@ public void setItemNBT(NBTTagCompound NBT) { 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(); @@ -2036,6 +2046,7 @@ public void saveNBTData(NBTTagCompound NBT) { 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(); @@ -2062,6 +2073,7 @@ public void loadNBTData(NBTTagCompound NBT) { 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/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 35f6aa10e..44c600d28 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1009,6 +1009,7 @@ 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: From f3b7d4ac3185f81cb3a1734376c7bdfb397d9dad Mon Sep 17 00:00:00 2001 From: GDCloud Date: Tue, 21 May 2024 21:41:00 +0200 Subject: [PATCH 57/57] primitive item insertion window --- .../GT_MetaTileEntity_EM_ForgeOfGods.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) 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 d4731e2c3..fb19a3b45 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 @@ -41,6 +41,7 @@ import net.minecraftforge.fluids.FluidStack; 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.gui.TecTechUITextures; @@ -59,10 +60,13 @@ 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; @@ -72,16 +76,19 @@ 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.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; @@ -127,6 +134,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private boolean batteryCharging = false; private boolean inversion = false; public ArrayList moduleHatches = new ArrayList<>(); + protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16); private static final int FUEL_CONFIG_WINDOW_ID = 9; private static final int UPGRADE_TREE_WINDOW_ID = 10; @@ -134,6 +142,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 long POWER_MILESTONE_CONSTANT = LongMath.pow(10, 15); @@ -518,6 +527,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont 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) -> { @@ -1531,6 +1541,13 @@ protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) .addChild( new TextWidget(translateToLocal("fog.upgrade.confirm")) .setTextAlignment(Alignment.Center).setScale(0.7f).setMaxWidth(36).setPos(3, 5)) + .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(); } @@ -1577,6 +1594,64 @@ private Widget createUpgradeBox(int upgradeID, int colorCode, int milestone, int builder); } + List 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 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 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();