diff options
author | GDCloud <93287602+GDCloudstrike@users.noreply.github.com> | 2024-09-01 19:59:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-01 19:59:32 +0200 |
commit | dda0f8bb1ed2211b2df492d7bd53751e47de305f (patch) | |
tree | d22877026684353beabd58728d0cd0824ec87ea7 /src | |
parent | e2ae14d4b5c0f3081dd9ff9fbe66beae7d724b9b (diff) | |
download | GT5-Unofficial-dda0f8bb1ed2211b2df492d7bd53751e47de305f.tar.gz GT5-Unofficial-dda0f8bb1ed2211b2df492d7bd53751e47de305f.tar.bz2 GT5-Unofficial-dda0f8bb1ed2211b2df492d7bd53751e47de305f.zip |
Godforge continuation (#2950)
* fix wrong offset
* improve item insertion window
* finish upgrade material functionality
* add tooltip to material button
* add rhugnor gear
* half serious upgrade costs (will definitely change)
* fix stocking hatch not working for fuel supply
* add information window
* add heat formula info
* add autobuild hint dot info
* add phonon related items and fluids
* first iteration of glitchy material renderer
* tweak renderer overlay opacity
* add new material
* add phononic seed crystal and six-phased copper block
* add recipes for phonon transfer medium chain
* add solenoid block replacement
* add creon
* decouple smelting module structure
* spotless weirdness
* add most casing recipes and late loading method (for the special singularities)
* add new singularity recipes
* more recipes
* add glow
* generate more dragonblood parts
* add upgrade costs
* fix upgrade tree window scrollable weirdness
* forgor glow texture
* add last upgrade text + a random comma
* re-add phonon medium abs recipe
* add six-phased copper nanite recipe
* fix button overlay being off by 1 pixel
* fix merge mishaps
* forgot to adjust debug buttons
* fix stocking bus fuel insertion and fuel int overflow
* add graviton shard ejection
* minor structure oopsie
* ejection button registration
* ejection button tooltip
* add graviton shard item
* eject the right item + save ejection status to nbt
* fix input bus amount npe
* change rendering block offset
* adapt eoh rendering to allow changing the star's size
* initial rendering changes (make the blue star render)
* change seed crystal recipes
* another small seed crystal change
* adjust item renderer
* add tooltips
* circuit oredict fix
* tooltips, upgrade names, some experimental ui changes and small fixes
* author
* make star bigger
* fix recipes
* remove unnecessary tooltips
* spotless
* recipe adjustments
* make magneto resonatic block craftable
* change magneto resonatic gem autoclave times + spotless
* add structurecheck button to modules
* more recipe adjustments
* fix extra material crash
* more recipe adjustments
* lower eternal singularity amounts
* display recipetimes <1 sec properly
* try to fix hasShiftDown crash
* adjust plasma module recipes
* swap placeholder names
* implement rings disappearing/reappearing for renderer
* utility for structure strings
* buff plasma module parallel
* fix itemlist
* Spotless apply for branch godforge for #2950 (#3013)
spotlessApply
Co-authored-by: GitHub GTNH Actions <>
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'src')
77 files changed, 2468 insertions, 589 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java index dfc3ab7e83..d616829fbd 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java @@ -16,6 +16,7 @@ import static gregtech.api.enums.Mods.UniversalSingularities; import static gregtech.api.util.GT_ModHandler.getModItem; import static gregtech.api.util.GT_RecipeBuilder.MINUTES; import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; import net.minecraft.item.ItemStack; @@ -26,6 +27,7 @@ import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; public class ElectricImplosionCompressorRecipes implements Runnable { @@ -43,7 +45,7 @@ public class ElectricImplosionCompressorRecipes implements Runnable { .noOptimize() .addTo(electricImplosionCompressorRecipes); - if (UniversalSingularities.isModLoaded()) + if (UniversalSingularities.isModLoaded()) { // Raw Exposed Optical Chip GT_Values.RA.stdBuilder() .itemInputs( @@ -55,6 +57,29 @@ public class ElectricImplosionCompressorRecipes implements Runnable { .eut(TierEU.RECIPE_UMV) .noOptimize() .addTo(electricImplosionCompressorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + // fluxed electrum singularity + getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) + .fluidInputs(MaterialsUEVplus.Mellion.getMolten(4 * 144L)) + // spaghettic singularity + .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(electricImplosionCompressorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + // iron singularity + getModItem(Avaritia.ID, "Singularity", 1L, 0)) + .fluidInputs(MaterialsUEVplus.Creon.getMolten(4 * 144L)) + // cryptic singularity + .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(electricImplosionCompressorRecipes); + } } GT_Values.RA.stdBuilder() @@ -124,6 +149,24 @@ public class ElectricImplosionCompressorRecipes implements Runnable { .eut(TierEU.RECIPE_UIV) .noOptimize() .addTo(electricImplosionCompressorRecipes); + + // Copper Singularity + GT_Values.RA.stdBuilder() + .fluidInputs(Materials.Copper.getMolten(3648 * 9 * 144L)) + .itemOutputs(getModItem(Avaritia.ID, "Singularity", 1L, 5)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UIV) + .addTo(electricImplosionCompressorRecipes); + + ItemStack diamondBlocks = GT_Utility + .copyAmountUnsafe(729, GT_OreDictUnificator.get(OrePrefixes.block, Materials.Diamond, 1L)); + // Diamond Singularity + GT_Values.RA.stdBuilder() + .itemInputs(diamondBlocks) + .itemOutputs(getModItem(UniversalSingularities.ID, "universal.vanilla.singularity", 1L, 2)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UIV) + .addTo(electricImplosionCompressorRecipes); } // MHDCSM V2 GT_Values.RA.stdBuilder() diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java index a1398f57e3..51398d2914 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java @@ -422,7 +422,7 @@ public class AdditionalRecipes { .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gemChipped, 9)) .outputChances(90_00) .fluidInputs(WerkstoffLoader.Neon.getFluidOrGas(1000)) - .duration(3 * MINUTES + 45 * SECONDS) + .duration(25 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(autoclaveRecipes); @@ -430,7 +430,7 @@ public class AdditionalRecipes { .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(dust)) .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gem)) .fluidInputs(WerkstoffLoader.Krypton.getFluidOrGas(1000)) - .duration(3 * MINUTES + 45 * SECONDS) + .duration(25 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(autoclaveRecipes); diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index c8946ec80d..c31f9a878d 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -113,6 +113,7 @@ public class TecTech { @SuppressWarnings("unused") public void onLoadCompleted(FMLLoadCompleteEvent event) { eyeOfHarmonyRecipeStorage = new EyeOfHarmonyRecipeStorage(); + MainLoader.onLoadCompleted(); } public static EyeOfHarmonyRecipeStorage eyeOfHarmonyRecipeStorage = null; diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index 01d63392e5..915b113fe9 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -18,6 +18,7 @@ import net.minecraftforge.fluids.FluidStack; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.gui.CreativeTabTecTech; import com.github.technus.tectech.loader.recipe.BaseRecipeLoader; +import com.github.technus.tectech.loader.recipe.ResearchStationAssemblyLine; import com.github.technus.tectech.loader.thing.CoverLoader; import com.github.technus.tectech.loader.thing.MachineLoader; import com.github.technus.tectech.loader.thing.ThingsLoader; @@ -199,4 +200,8 @@ public final class MainLoader { safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFDeadrock"), 5); } } + + public static void onLoadCompleted() { + new ResearchStationAssemblyLine().runLateRecipes(); + } } 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 a2dc61132d..80f10fc44f 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 @@ -3,7 +3,11 @@ package com.github.technus.tectech.loader.recipe; import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes; import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes; import static com.github.technus.tectech.util.GodforgeMath.getRandomIntInRange; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.util.GT_ModHandler.getModItem; import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; import static gregtech.api.util.GT_RecipeConstants.FOG_EXOTIC_TIER; import static gregtech.api.util.GT_RecipeConstants.FOG_PLASMA_TIER; @@ -15,12 +19,21 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import com.github.technus.tectech.thing.CustomItemList; + +import goodgenerator.items.MyMaterial; +import goodgenerator.util.ItemRefer; import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; +import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; +import gtPlusPlus.core.material.ALLOY; import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; public class Godforge implements Runnable { @@ -29,6 +42,7 @@ public class Godforge implements Runnable { public static final HashMap<ItemStack, Integer> exoticModulePlasmaItemMap = new HashMap<>(); public static final HashMap<FluidStack, Integer> exoticModulePlasmaFluidMap = new HashMap<>(); public static final HashMap<ItemStack, Integer> exoticModuleMagmatterItemMap = new HashMap<>(); + public static final HashMap<Integer, ItemStack[]> godforgeUpgradeMats = new HashMap<>(); public static final List<ItemStack> quarkGluonFluidItemsForNEI = new ArrayList<>(); public static final List<ItemStack> quarkGluonItemsForNEI = new ArrayList<>(); public static final List<ItemStack> magmatterTimeFluidItemsForNEI = new ArrayList<>(); @@ -112,7 +126,7 @@ public class Godforge implements Runnable { GT_Values.RA.stdBuilder() .itemInputs(solids_t0_1step[i]) .fluidOutputs(solid_plasmas_t0_1step[i]) - .duration(1 * SECONDS) + .duration(10 * TICKS) .eut(TierEU.RECIPE_MAX) .special(multistep) .metadata(FOG_PLASMA_TIER, 0) @@ -145,7 +159,7 @@ public class Godforge implements Runnable { GT_Values.RA.stdBuilder() .itemInputs(solids_t0_xstep[i]) .fluidOutputs(solid_plasmas_t0_xstep[i]) - .duration(3 * SECONDS) + .duration(2 * SECONDS) .eut(TierEU.RECIPE_MAX) .special(multistep) .metadata(FOG_PLASMA_TIER, 0) @@ -249,16 +263,16 @@ public class Godforge implements Runnable { // Fusion tier 1-3 { // Single step - 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) }; + FluidStack[] fluids_t0_1step = { Materials.Helium.getGas(500), Materials.Nitrogen.getGas(500), + Materials.Argon.getGas(500), Materials.Chlorine.getGas(500), Materials.Deuterium.getGas(500), + Materials.Fluorine.getGas(500), Materials.Hydrogen.getGas(500), Materials.Radon.getGas(500), + Materials.Tritium.getGas(500), Materials.Mercury.getFluid(500) }; + FluidStack[] fluid_plasmas_t0_1step = { Materials.Helium.getPlasma(500), + Materials.Nitrogen.getPlasma(500), Materials.Argon.getPlasma(500), + Materials.Chlorine.getPlasma(500), Materials.Deuterium.getPlasma(500), + Materials.Fluorine.getPlasma(500), Materials.Hydrogen.getPlasma(500), + Materials.Radon.getPlasma(500), Materials.Tritium.getPlasma(500), + Materials.Mercury.getPlasma(500) }; for (int i = 0; i < fluids_t0_1step.length; i++) { boolean multistep = false; @@ -274,12 +288,12 @@ public class Godforge implements Runnable { } // Multi-step - 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), - Materials.Oxygen.getPlasma(1000), new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 1000), - new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 1000) }; + FluidStack[] fluids_t0_xstep = { ELEMENT.getInstance().NEON.getFluidStack(500), + Materials.Oxygen.getGas(500), ELEMENT.getInstance().KRYPTON.getFluidStack(500), + ELEMENT.getInstance().XENON.getFluidStack(500) }; + FluidStack[] fluid_plasmas_t0_xstep = { new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 500), + Materials.Oxygen.getPlasma(500), new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 500), + new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 500) }; for (int i = 0; i < fluids_t0_xstep.length; i++) { boolean multistep = true; @@ -577,5 +591,72 @@ public class Godforge implements Runnable { GT_Utility.getFluidDisplayStack(MaterialsUEVplus.Space.getMolten(getRandomIntInRange(51, 100)), true)); } magmatterItemsForNEI.addAll(exoticModuleMagmatterItemMap.keySet()); + + // Godforge upgrade materials + if (EternalSingularity.isModLoaded() && GalaxySpace.isModLoaded()) { + godforgeUpgradeMats.put( + 0, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUIVBase, 64), + ItemList.SuperconductorComposite.get(32), + MyMaterial.metastableOganesson.get(OrePrefixes.gearGt, 16), + getModItem(EternalSingularity.ID, "eternal_singularity", 8L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 5, + new ItemStack[] { GregtechItemList.Mega_AlloyBlastSmelter.get(16L), + ItemList.Casing_Coil_Hypogen.get(64L), + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(32L), + getModItem(EternalSingularity.ID, "eternal_singularity", 16L), + ItemRefer.Field_Restriction_Coil_T3.get(48), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 7, + new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(8), + GregtechItemList.FusionComputer_UV3.get(8), GregtechItemList.Casing_Fusion_Internal2.get(64), + getModItem(GalaxySpace.ID, "item.DysonSwarmParts", 64, 3), ALLOY.QUANTUM.getPlateDense(48), + ELEMENT.STANDALONE.RHUGNOR.getGear(32), + getModItem(EternalSingularity.ID, "eternal_singularity", 16L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 11, + new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(16), + ItemRefer.Compact_Fusion_MK5.get(2), ItemRefer.Compact_Fusion_Coil_T4.get(64), + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(16), + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), ELEMENT.STANDALONE.RHUGNOR.getGear(64), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Ichorium, 64), + getModItem(EternalSingularity.ID, "eternal_singularity", 32L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 26, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 64), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUMVBase, 64), + ELEMENT.STANDALONE.HYPOGEN.getFrameBox(64), ELEMENT.STANDALONE.DRAGON_METAL.getFrameBox(64), + CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), + CustomItemList.EOH_Infinite_Energy_Casing.get(8), ItemList.ZPM6.get(4), + ItemList.Field_Generator_UMV.get(32) }); + + godforgeUpgradeMats.put( + 29, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.WhiteDwarfMatter, 64), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.BlackDwarfMatter, 64), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Eternity, 16), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Universium, 4), + CustomItemList.EOH_Infinite_Energy_Casing.get(64), + CustomItemList.StabilisationFieldGeneratorTier5.get(16), ItemList.ZPM6.get(16), + ItemList.Field_Generator_UMV.get(64) }); + + godforgeUpgradeMats.put( + 30, + new ItemStack[] { CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(32), + CustomItemList.Godforge_StellarEnergySiphonCasing.get(64), + CustomItemList.StabilisationFieldGeneratorTier6.get(48), + ItemList.Transdimensional_Alignment_Matrix.get(8), ItemList.ZPM6.get(16), + ItemList.Robot_Arm_UMV.get(64), ItemList.Conveyor_Module_UMV.get(64) }); + } + } } diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java b/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java index dc5cf1c5ed..f9377143c4 100644 --- a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java +++ b/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java @@ -13,6 +13,7 @@ import static gregtech.api.enums.Mods.EternalSingularity; import static gregtech.api.enums.Mods.ExtraUtilities; import static gregtech.api.enums.Mods.GTNHIntergalactic; import static gregtech.api.enums.Mods.GTPlusPlusEverglades; +import static gregtech.api.enums.Mods.GalacticraftAmunRa; import static gregtech.api.enums.Mods.GalaxySpace; import static gregtech.api.enums.Mods.GraviSuite; import static gregtech.api.enums.Mods.IndustrialCraft2; @@ -53,11 +54,15 @@ import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; import com.github.technus.tectech.recipe.TT_recipeAdder; import com.github.technus.tectech.thing.CustomItemList; +import com.github.technus.tectech.thing.block.GodforgeGlassBlock; +import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.rwtema.extrautils.ExtraUtils; +import common.Blocks; import common.TileEntities; import fox.spiteful.avaritia.compat.ticon.Tonkers; import goodgenerator.items.MyMaterial; +import goodgenerator.util.ItemRefer; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsBotania; @@ -70,6 +75,8 @@ import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import gtPlusPlus.core.material.ALLOY; import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.material.Particle; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import tconstruct.tools.TinkerTools; @@ -86,6 +93,7 @@ public class ResearchStationAssemblyLine implements Runnable { itemPartsUMVAsslineRecipes(); itemPartsUXVAsslineRecipes(); addWirelessEnergyRecipes(); + addGodforgeRecipes(); if (TinkersGregworks.isModLoaded() && Avaritia.isModLoaded() // Infinity, Cosmic Neutronium && ExtraUtilities.isModLoaded() // Bedrockium @@ -2970,7 +2978,332 @@ public class ResearchStationAssemblyLine implements Runnable { CustomItemList.astralArrayFabricator.get(1), 300 * SECONDS, (int) TierEU.RECIPE_UXV); + } + + private void addGodforgeRecipes() { + if (EternalSingularity.isModLoaded()) { + // Controller + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(4), ItemList.ZPM4.get(2), + ItemList.Casing_Dim_Bridge.get(64), getModItem(EternalSingularity.ID, "eternal_singularity", 32L), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), + MyMaterial.metastableOganesson.get(OrePrefixes.plateDense, 16), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), + ItemList.Sensor_UIV.get(32), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64), + CustomItemList.eM_energyTunnel7_UIV.get(1), ItemRegistry.energyDistributor[11] }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(2048 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(8_192_000), Materials.Thorium.getPlasma(256 * 144), + MaterialsUEVplus.TranscendentMetal.getMolten(2048 * 144) }, + CustomItemList.Machine_Multi_ForgeOfGods.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + } + + // Magnetic Confinement Casing + TT_recipeAdder.addResearchableAssemblylineRecipe( + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.block, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TengamAttuned, 32), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), + ELEMENT.STANDALONE.HYPOGEN.getScrew(8), + GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SixPhasedCopper, 8), + ItemList.SuperconductorComposite.get(1), ItemList.Emitter_UIV.get(2), + ItemList.Electromagnet_Tengam.get(1) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Plutonium241.getPlasma(16 * 144) }, + CustomItemList.Godforge_MagneticConfinementCasing.get(8), + 50 * SECONDS, + (int) TierEU.RECIPE_UIV); + + if (GalacticraftAmunRa.isModLoaded()) { + // Structure Casing + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_MagneticConfinementCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Mellion, 16), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 16), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), + ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFrameBox(8), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 8), + ItemList.Field_Generator_UEV.get(2), + // Artificial Gravity Generator + getModItem(GalacticraftAmunRa.ID, "tile.machines3", 4L, 1) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Lead.getPlasma(2 * 144) }, + CustomItemList.Godforge_BoundlessStructureCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + } + + // Guidance Casing + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_BoundlessStructureCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), ItemList.ZPM2.get(1), + GregtechItemList.CosmicFabricManipulator.get(1), ItemList.Field_Generator_UEV.get(2), + ItemList.Emitter_UIV.get(3), GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), + GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Creon, 8), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Thorium.getPlasma(2 * 144) }, + CustomItemList.Godforge_GuidanceCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Energy Siphon Casing + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GuidanceCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), + ItemList.Casing_Coil_Hypogen.get(64), ItemList.Casing_Coil_Hypogen.get(64), + GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 32), + ItemList.neutroniumHeatCapacitor.get(1L), ItemList.neutroniumHeatCapacitor.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + CustomItemList.eM_energyTunnel7_UIV.get(1), ItemList.Generator_Plasma_UV.get(64), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 6), + ELEMENT.STANDALONE.HYPOGEN.getPlate(6) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.SuperconductorUIVBase.getMolten(32 * 144L), MaterialsUEVplus.ExcitedDTEC.getFluid(128_000L) }, + CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Gravitational Lens + TT_recipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(QuantumGlassBlock.INSTANCE, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { new ItemStack(QuantumGlassBlock.INSTANCE, 8), + new ItemStack(ItemRegistry.bw_glasses[1], 8, 0), GregtechItemList.ForceFieldGlass.get(8), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 32), + getItemContainer("RadoxPolymerLens").get(6), getItemContainer("ChromaticLens").get(6), + getItemContainer("MysteriousCrystalLens").get(6), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.lens, 6), + ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlateDense(36), + GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 6), + GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Mellion, 6), + GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SixPhasedCopper, 6) }, + new FluidStack[] { ELEMENT.STANDALONE.RHUGNOR.getFluidStack(16 * 144), + MaterialsUEVplus.Creon.getMolten(16 * 144), + ELEMENT.STANDALONE.ADVANCED_NITINOL.getFluidStack(1024 * 144) }, + new ItemStack(GodforgeGlassBlock.INSTANCE, 1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Graviton Modulator 1 + TT_recipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Battery_Gem_4.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(2), + ItemRefer.Field_Restriction_Coil_T3.get(1), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8), + GregtechItemList.Battery_Gem_4.get(2), GregtechItemList.Laser_Lens_Special.get(4), + ItemList.Emitter_UIV.get(4), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 16), + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(32 * 144), + Materials.SuperconductorUIVBase.getMolten(32 * 144), Materials.Infinity.getMolten(32 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier1.get(2), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Graviton Modulator 2 + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GravitonFlowModulatorTier1.get(1), + 96_000_000, + 16_384, + (int) TierEU.RECIPE_UXV, + 128, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), + ItemRefer.Field_Restriction_Coil_T4.get(1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 4), + GregtechItemList.Battery_Gem_4.get(4), GregtechItemList.Laser_Lens_Special.get(8), + ItemList.Emitter_UMV.get(4), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 8), + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2), + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 2) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), + Materials.SuperconductorUMVBase.getMolten(64 * 144), MaterialsUEVplus.SpaceTime.getMolten(64 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UMV); + // Graviton Modulator 3 + TT_recipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), + 192_000_000, + 32_768, + (int) TierEU.RECIPE_MAX, + 256, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), + ItemRefer.Field_Restriction_Coil_T4.get(4), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 64), + GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 64), + GregtechItemList.SpaceTimeContinuumRipper.get(8), GregtechItemList.Battery_Gem_4.get(8), + GregtechItemList.Laser_Lens_Special.get(8), ItemList.Emitter_UXV.get(4), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 8), + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 8), + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 8), + GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.SixPhasedCopper, 8), + GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Universium, 8) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(256 * 144), + Materials.SuperconductorUMVBase.getMolten(256 * 144), + MaterialsUEVplus.WhiteDwarfMatter.getMolten(256 * 144), + MaterialsUEVplus.Eternity.getMolten(256 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier3.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // Phonon Transmission Conduit + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemList.Relativistic_Heat_Capacitor.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 12), + new ItemStack(Blocks.tfftStorageField, 1, 9), ItemList.Tesseract.get(8), + ItemList.Relativistic_Heat_Capacitor.get(4), ItemList.Thermal_Superconductor.get(6), + ItemList.Field_Generator_UEV.get(4), + GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.SixPhasedCopper, 24) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), + MaterialsUEVplus.PhononMedium.getFluid(1000), Materials.Plutonium241.getPlasma(16 * 144) }, + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + ItemStack megaEBF = GT_Utility.copyAmount(64, ItemRegistry.megaMachines[0]); + + // Smelting Module Controller + TT_recipeAdder.addResearchableAssemblylineRecipe( + // mega ebf controller + ItemRegistry.megaMachines[0], + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, + ItemList.Machine_Multi_Furnace.get(64), ItemList.ZPM4.get(1), + GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), Materials.Lead.getPlasma(256 * 144), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_SmeltingModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Molten Module Controller + TT_recipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Mega_AlloyBlastSmelter.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, + GregtechItemList.Mega_AlloyBlastSmelter.get(64), ItemList.ZPM4.get(1), + GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_MoltenModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Plasma Module Controller + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemList.FluidHeaterUIV.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), ItemList.FluidHeaterUIV.get(64), + GregtechItemList.FusionComputer_UV3.get(8), ItemList.ZPM4.get(1), + GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_PlasmaModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Exotic Module Controller + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), ItemRefer.Compact_Fusion_MK5.get(1), + ItemList.ZPM4.get(4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 64), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 32), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(64000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); } private void addWirelessEnergyRecipes() { @@ -3340,4 +3673,32 @@ public class ResearchStationAssemblyLine implements Runnable { recipeEuPerTick); } } + + public void runLateRecipes() { + if (EternalSingularity.isModLoaded()) { + // Shielding Casing + TT_recipeAdder.addResearchableAssemblylineRecipe( + GT_OreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.TranscendentMetal, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 4), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 16), + MyMaterial.tairitsu.get(OrePrefixes.plateDense, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), + getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2), + getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4), + ItemRefer.Advanced_Radiation_Protection_Plate.get(64), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Mellion, 16), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), ALLOY.QUANTUM.getPlate(16), + ALLOY.ABYSSAL.getFrameBox(4) }, + new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(128 * 144), + Materials.Bedrockium.getMolten(16_384 * 144), Materials.Neutronium.getMolten(2_048 * 144) }, + CustomItemList.Godforge_SingularityShieldingCasing.get(4), + 30 * SECONDS, + (int) TierEU.RECIPE_UIV); + } + } } 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 c7fd1bffe6..5c5005503b 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 @@ -308,6 +308,7 @@ import static com.github.technus.tectech.thing.CustomItemList.hatch_CreativeMain import static com.github.technus.tectech.thing.CustomItemList.hatch_CreativeUncertainty; import static com.github.technus.tectech.thing.CustomItemList.holder_Hatch; import static com.github.technus.tectech.thing.CustomItemList.rack_Hatch; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; import static gregtech.api.enums.GT_Values.V; import static gregtech.api.enums.MetaTileEntityIDs.ActiveTransformer; import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver1by1; @@ -661,6 +662,7 @@ import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_ import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_OwnerDetector; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TeslaCoil; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.MetaTileEntityIDs; /** @@ -2482,26 +2484,31 @@ public class MachineLoader implements Runnable { ForgeoftheGods.ID, "multimachine.em.forge_of_gods", "Forge of the Gods").getStackForm(1L)); + addItemTooltip(Machine_Multi_ForgeOfGods.get(1), GT_Values.AuthorCloud); Machine_Multi_SmeltingModule.set( new GT_MetaTileEntity_EM_SmeltingModule( HelioflarePowerForge.ID, "multimachine.em.smelting_module", "Helioflare Power Forge").getStackForm(1L)); + addItemTooltip(Machine_Multi_SmeltingModule.get(1), GT_Values.AuthorCloud); Machine_Multi_MoltenModule.set( new GT_MetaTileEntity_EM_MoltenModule( HeliofluxMeltingCore.ID, "multimachine.em.molten_module", "Helioflux Melting Core").getStackForm(1L)); + addItemTooltip(Machine_Multi_MoltenModule.get(1), GT_Values.AuthorCloud); Machine_Multi_PlasmaModule.set( new GT_MetaTileEntity_EM_PlasmaModule( HeliothermalPlasmaFabricator.ID, "multimachine.em.plasma_module", "Heliothermal Plasma Fabricator").getStackForm(1L)); + addItemTooltip(Machine_Multi_PlasmaModule.get(1), GT_Values.AuthorCloud); Machine_Multi_QuarkGluonPlasmaModule.set( new GT_MetaTileEntity_EM_ExoticModule( HeliofusionExoticizer.ID, "multimachine.em.exotic_module", "Heliofusion Exoticizer").getStackForm(1L)); + addItemTooltip(Machine_Multi_QuarkGluonPlasmaModule.get(1), GT_Values.AuthorCloud); } // =================================================================================================== 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 8264c6a169..7cdf2bb5c1 100644 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java +++ b/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java @@ -64,7 +64,10 @@ public class GodforgePlasmaFrontend extends RecipeMapFrontend { recipeInfo.drawText(trans("152", "Total: ") + GT_Utility.formatNumbers(eut * duration) + " EU"); recipeInfo.drawText(trans("153", "Usage: ") + GT_Utility.formatNumbers(eut) + " EU/t"); - recipeInfo.drawText(trans("158", "Time: ") + GT_Utility.formatNumbers(duration / 20) + " secs"); + recipeInfo.drawText( + trans("158", "Time: ") + GT_Utility.formatNumbers(duration / 20d) + + " secs" + + (duration < 20 ? " (" + duration + " ticks)" : "")); recipeInfo.drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmamultistep") + ": " + multistep); recipeInfo .drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmarecipetier") + ": " + requiredUpgrade); diff --git a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java index 3f72cacd77..582b695eb2 100644 --- a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java +++ b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java @@ -22,7 +22,7 @@ import cpw.mods.fml.client.FMLClientHandler; public abstract class EOH_RenderingUtils { - public static void renderStar(IItemRenderer.ItemRenderType type, Color color) { + public static void renderStar(IItemRenderer.ItemRenderType type, Color color, int size) { GL11.glPushMatrix(); if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); @@ -33,18 +33,18 @@ public abstract class EOH_RenderingUtils { } // Render star stuff. - renderStarLayer(0, STAR_LAYER_0, color, 1.0f); - renderStarLayer(1, STAR_LAYER_1, color, 0.4f); - renderStarLayer(2, STAR_LAYER_2, color, 0.2f); + renderStarLayer(0, STAR_LAYER_0, color, 1.0f, size); + renderStarLayer(1, STAR_LAYER_1, color, 0.4f, size); + renderStarLayer(2, STAR_LAYER_2, color, 0.2f, size); GL11.glPopMatrix(); } - public static void renderStar(IItemRenderer.ItemRenderType type) { - renderStar(type, new Color(1.0f, 0.4f, 0.05f, 1.0f)); + public static void renderStar(IItemRenderer.ItemRenderType type, int size) { + renderStar(type, new Color(1.0f, 0.4f, 0.05f, 1.0f), size); } - private static void renderStarLayer(int layer, ResourceLocation texture, Color color, float alpha) { + public static void renderStarLayer(int layer, ResourceLocation texture, Color color, float alpha, int size) { // Begin animation. GL11.glPushMatrix(); @@ -72,7 +72,7 @@ public abstract class EOH_RenderingUtils { // 0.01f magic number to shrink sphere obj down. // Size obtained from the multis current recipe. - float scale = 0.01f; + float scale = 0.01f * size; // Put each subsequent layer further out. scale *= pow(1.04f, layer); diff --git a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java index da704a37ff..e4b7c50c93 100644 --- a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java +++ b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java @@ -49,7 +49,7 @@ public class EOH_TESR extends TileEntitySpecialRenderer { renderOrbitObjects(EOHRenderTile); // Render the star itself. - renderStar(IItemRenderer.ItemRenderType.INVENTORY); + renderStar(IItemRenderer.ItemRenderType.INVENTORY, 1); GL11.glPopAttrib(); GL11.glPopMatrix(); diff --git a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java index 79e53e2239..58285080cc 100644 --- a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java +++ b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java @@ -451,15 +451,16 @@ public enum CustomItemList implements IItemContainer { StabilisationFieldGeneratorTier7, StabilisationFieldGeneratorTier8, - Godforge_Gravitational_Lens, - Godforge_Singularity_Shielding_Casing, - Godforge_Guidance_Casing, - Godforge_Boundless_Structure_Casing, - Godforge_Magnetic_Confinement_Casing, - Godforge_Stellar_Energy_Siphon_Casing, + Godforge_GravitationalLens, + Godforge_SingularityShieldingCasing, + Godforge_GuidanceCasing, + Godforge_BoundlessStructureCasing, + Godforge_MagneticConfinementCasing, + Godforge_StellarEnergySiphonCasing, Godforge_GravitonFlowModulatorTier1, Godforge_GravitonFlowModulatorTier2, Godforge_GravitonFlowModulatorTier3, + Godforge_HarmonicPhononTransmissionConduit, astralArrayFabricator; diff --git a/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java index 70314927f4..4da28875f9 100644 --- a/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java +++ b/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java @@ -1,7 +1,12 @@ package com.github.technus.tectech.thing.block; import static com.github.technus.tectech.Reference.MODID; -import static java.lang.Math.pow; +import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderStarLayer; +import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_0; +import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_1; +import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_2; + +import java.awt.Color; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -11,120 +16,50 @@ import net.minecraftforge.client.model.IModelCustom; import org.lwjgl.opengl.GL11; -import cpw.mods.fml.client.FMLClientHandler; - public class RenderForgeOfGods extends TileEntitySpecialRenderer { - public static final ResourceLocation STAR_LAYER_0 = new ResourceLocation(MODID, "models/StarLayer0.png"); - public static final ResourceLocation STAR_LAYER_1 = new ResourceLocation(MODID, "models/StarLayer1.png"); - public static final ResourceLocation STAR_LAYER_2 = new ResourceLocation(MODID, "models/StarLayer2.png"); public static IModelCustom starModel; - private static IModelCustom spaceModel; - private static final float RED = 180 / 255f; - private static final float GREEN = 180 / 255f; - private static final float BLUE = 255 / 255f; public RenderForgeOfGods() { starModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Star.obj")); - spaceModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Space.obj")); } @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { if (!(tile instanceof TileForgeOfGods)) return; - TileForgeOfGods FOGRenderTile = (TileForgeOfGods) tile; - - // Render outer space layer. - { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - renderOuterSpaceShell(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); - // Render star stuff. - renderStarLayer(FOGRenderTile, 0, STAR_LAYER_0, 1.0f); - renderStarLayer(FOGRenderTile, 1, STAR_LAYER_1, 0.4f); - renderStarLayer(FOGRenderTile, 2, STAR_LAYER_2, 0.2f); + // Innermost layer should be opaque + enableOpaqueColorInversion(); + renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 25); + disableOpaqueColorInversion(); + enablePseudoTransparentColorInversion(); + renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 25); + renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 25); + + GL11.glPopAttrib(); GL11.glPopMatrix(); } } - public static void renderOuterSpaceShell() { - - GL11.glPushMatrix(); - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); - - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(new ResourceLocation(MODID, "models/spaceLayer.png")); - - final float scale = 0.01f * 17.5f; - GL11.glScalef(scale, scale, scale); - - GL11.glColor4f(222 / 255f, 243 / 255f, 250 / 255f, 255 / 255f); - - spaceModel.renderAll(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_LIGHTING); - - GL11.glPopMatrix(); + public static void enablePseudoTransparentColorInversion() { + GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); + GL11.glLogicOp(GL11.GL_OR_INVERTED); } - private static final float STAR_RESCALE = 0.2f; - - private void renderStarLayer(TileForgeOfGods FOGRenderTile, int layer, ResourceLocation texture, float alpha) { - - GL11.glPushMatrix(); - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(texture); - - // 0.01f magic number to shrink sphere obj down - float scale = 0.01f * STAR_RESCALE * FOGRenderTile.getRenderSize(); - - // Put each layer further out - scale *= pow(1.04f, layer); - - // Scale the star up in the x, y and z directions - GL11.glScalef(scale, scale, scale); - - switch (layer) { - case 0: - GL11.glRotatef(130, 0F, 1F, 1F); - break; - case 1: - GL11.glRotatef(-49, 1F, 1F, 0F); - break; - case 2: - GL11.glRotatef(67, 1F, 0F, 1F); - break; - } - - // Set color and alpha of the star layer - GL11.glColor4f(RED, GREEN, BLUE, alpha); - - // Spin the star - GL11.glRotatef((0.03f * FOGRenderTile.angle * FOGRenderTile.getRenderRotationSpeed()) % 360.0f, 0F, 0F, 1F); - - starModel.renderAll(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_LIGHTING); + public static void enableOpaqueColorInversion() { + GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); + GL11.glLogicOp(GL11.GL_COPY_INVERTED); + } - GL11.glPopMatrix(); + public static void disableOpaqueColorInversion() { + GL11.glDisable(GL11.GL_COLOR_LOGIC_OP); } } diff --git a/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java index 0e0b536046..03109b46bd 100644 --- a/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java +++ b/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java @@ -17,6 +17,11 @@ public class TileForgeOfGods extends TileEntity { return INFINITE_EXTENT_AABB; } + @Override + public double getMaxRenderDistanceSquared() { + return 25600; + } + public void setRenderSize(float size) { this.size = size; } diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java index e527fc552d..e931b94423 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java @@ -104,6 +104,18 @@ public class GT_Item_Casings_Godforge extends GT_Item_Casings_Abstract { AQUA.toString() + BOLD + GT_LanguageManager.addStringLocalization("godforge.casings.7.Tooltip.1", "Gravity Central")); break; + case 8: + aList.add( + GT_LanguageManager.addStringLocalization( + "godforge.casings.8.Tooltip.0", + "Transfers and stores extreme amounts of heat without any loss")); + aList.add( + AQUA.toString() + BOLD + + GT_LanguageManager.addStringLocalization("godforge.casings.8.Tooltip.1", "<<<Thermal<<<")); + aList.add( + AQUA.toString() + BOLD + + GT_LanguageManager.addStringLocalization("godforge.casings.8.Tooltip.2", ">>>Wave>>>")); + break; default: aList.add( EnumChatFormatting.RED.toString() + BOLD diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java b/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java index 809e6bbff1..df89071d80 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java @@ -29,6 +29,7 @@ public class GodforgeCasings extends GT_Block_Casings_Abstract { private static IIcon GravitonModulatorT1; private static IIcon GravitonModulatorT2; private static IIcon GravitonModulatorT3; + private static IIcon PhononConduit; private static final byte START_INDEX = 64; @@ -51,15 +52,18 @@ public class GodforgeCasings extends GT_Block_Casings_Abstract { GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Remote Graviton Flow Modulator"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Medial Graviton Flow Modulator"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Central Graviton Flow Modulator"); + GT_LanguageManager + .addStringLocalization(getUnlocalizedName() + ".8.name", "Harmonic Phonon Transmission Conduit"); - CustomItemList.Godforge_Singularity_Shielding_Casing.set(new ItemStack(this, 1, 0)); - CustomItemList.Godforge_Guidance_Casing.set(new ItemStack(this, 1, 1)); - CustomItemList.Godforge_Boundless_Structure_Casing.set(new ItemStack(this, 1, 2)); - CustomItemList.Godforge_Magnetic_Confinement_Casing.set(new ItemStack(this, 1, 3)); - CustomItemList.Godforge_Stellar_Energy_Siphon_Casing.set(new ItemStack(this, 1, 4)); + CustomItemList.Godforge_SingularityShieldingCasing.set(new ItemStack(this, 1, 0)); + CustomItemList.Godforge_GuidanceCasing.set(new ItemStack(this, 1, 1)); + CustomItemList.Godforge_BoundlessStructureCasing.set(new ItemStack(this, 1, 2)); + CustomItemList.Godforge_MagneticConfinementCasing.set(new ItemStack(this, 1, 3)); + CustomItemList.Godforge_StellarEnergySiphonCasing.set(new ItemStack(this, 1, 4)); CustomItemList.Godforge_GravitonFlowModulatorTier1.set(new ItemStack(this, 1, 5)); CustomItemList.Godforge_GravitonFlowModulatorTier2.set(new ItemStack(this, 1, 6)); CustomItemList.Godforge_GravitonFlowModulatorTier3.set(new ItemStack(this, 1, 7)); + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.set(new ItemStack(this, 1, 8)); } @Override @@ -72,6 +76,7 @@ public class GodforgeCasings extends GT_Block_Casings_Abstract { GravitonModulatorT1 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_2"); GravitonModulatorT2 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_1"); GravitonModulatorT3 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_0"); + PhononConduit = aIconRegister.registerIcon("gregtech:iconsets/PHONON_CONDUIT"); } @Override @@ -102,6 +107,8 @@ public class GodforgeCasings extends GT_Block_Casings_Abstract { return GodforgeOuter; } return GravitonModulatorT3; + case 8: + return PhononConduit; default: return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); } @@ -117,7 +124,7 @@ public class GodforgeCasings extends GT_Block_Casings_Abstract { @SuppressWarnings("unchecked") @Override public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 7; i++) { + for (int i = 0; i <= 8; i++) { aList.add(new ItemStack(aItem, 1, i)); } } 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 8c0c801363..b9f18e4e48 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 @@ -29,7 +29,12 @@ public class TecTechUITextures { public static final UITexture BUTTON_STANDARD_LIGHT_16x16 = UITexture .fullImage(MODID, "gui/button/standard_light_16x16"); public static final UITexture BUTTON_CELESTIAL_32x32 = UITexture.fullImage(MODID, "gui/button/celestial"); - + public static final UITexture BUTTON_SPACE_32x16 = UITexture.fullImage(MODID, "gui/button/purple"); + public static final UITexture BUTTON_SPACE_PRESSED_32x16 = UITexture.fullImage(MODID, "gui/button/purple_pressed"); + public static final UITexture BUTTON_BOXED_CHECKMARK_18x18 = UITexture + .fullImage(MODID, "gui/button/boxed_checkmark"); + public static final UITexture BUTTON_BOXED_EXCLAMATION_POINT_18x18 = UITexture + .fullImage(MODID, "gui/button/boxed_exclamation_point"); public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_DISABLED = UITexture .fullImage(MODID, "gui/overlay_button/power_switch_disabled"); public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_OFF = UITexture @@ -78,6 +83,9 @@ public class TecTechUITextures { .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_EJECTION_LOCKED = UITexture + .fullImage(MODID, "gui/overlay_button/eject_disabled"); + public static final UITexture OVERLAY_EJECTION_ON = UITexture.fullImage(MODID, "gui/overlay_button/eject"); 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/item/RenderForgeOfGodsItem.java b/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java index 35f2199663..a9be26fce8 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java @@ -1,16 +1,18 @@ package com.github.technus.tectech.thing.item; +import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderStarLayer; import static com.github.technus.tectech.rendering.EOH.EOH_TESR.*; -import static java.lang.Math.pow; +import static com.github.technus.tectech.thing.block.RenderForgeOfGods.disableOpaqueColorInversion; +import static com.github.technus.tectech.thing.block.RenderForgeOfGods.enableOpaqueColorInversion; +import static com.github.technus.tectech.thing.block.RenderForgeOfGods.enablePseudoTransparentColorInversion; + +import java.awt.Color; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; -import cpw.mods.fml.client.FMLClientHandler; - public class RenderForgeOfGodsItem implements IItemRenderer { @Override @@ -27,6 +29,7 @@ public class RenderForgeOfGodsItem implements IItemRenderer { @Override public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) { GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); else if (type == IItemRenderer.ItemRenderType.EQUIPPED @@ -35,57 +38,22 @@ public class RenderForgeOfGodsItem implements IItemRenderer { if (type == IItemRenderer.ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); } - // Render star stuff - renderStarLayer(0, STAR_LAYER_0, 1.0f); - renderStarLayer(1, STAR_LAYER_1, 0.4f); - renderStarLayer(2, STAR_LAYER_2, 0.2f); - - GL11.glPopMatrix(); - } - - private void renderStarLayer(int layer, ResourceLocation texture, float alpha) { - - GL11.glPushMatrix(); - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(texture); + { - // 0.01f magic number to shrink sphere obj down - float scale = 0.01f; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); - // Put each layer further out - scale *= pow(1.04f, layer); + // Innermost layer should be opaque + enableOpaqueColorInversion(); + renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 1); + disableOpaqueColorInversion(); - // Scale the star up in the x, y and z directions - GL11.glScalef(scale, scale, scale); + enablePseudoTransparentColorInversion(); + renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 1); + renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 1); - switch (layer) { - case 0: - GL11.glRotatef(130 + (System.currentTimeMillis() / 64) % 360, 0F, 1F, 1F); - break; - case 1: - GL11.glRotatef(-49 + (System.currentTimeMillis() / 64) % 360, 1F, 1F, 0F); - break; - case 2: - GL11.glRotatef(67 + (System.currentTimeMillis() / 64) % 360, 1F, 0F, 1F); - break; + GL11.glPopAttrib(); + GL11.glPopMatrix(); } - - // Set colour and alpha of the star layer - GL11.glColor4f(222, 243, 250, alpha); - - starModel.renderAll(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_LIGHTING); - - GL11.glPopMatrix(); } } 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 index c01a17af86..1bdd8fc7c5 100644 --- 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 @@ -1,5 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import static com.github.technus.tectech.util.TT_Utility.replaceLetters; + public abstract class ForgeOfGodsRingsStructureString { public static final String[][] SECOND_RING = { { @@ -5097,5 +5099,7 @@ public abstract class ForgeOfGodsRingsStructureString { " ", " ", " " } }; + public static final String[][] SECOND_RING_AIR = replaceLetters(SECOND_RING, "L"); + public static final String[][] THIRD_RING_AIR = replaceLetters(THIRD_RING, "L"); } 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 bbf9e56f89..ce43510568 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,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import static com.github.technus.tectech.util.TT_Utility.appendStringArrays; +import static com.github.technus.tectech.util.TT_Utility.replaceLetters; + public abstract class ForgeOfGodsStructureString { - public static final String[][] MAIN_STRUCTURE = { { + public static final String[][] BEAM_SHAFT = { { " ", " ", " ", @@ -1107,7 +1110,7 @@ public abstract class ForgeOfGodsStructureString { " " }, { " J ", " BEEEEEB ", - " EEEE EEE ", + " EEE EEE ", " E E ", " EE EE ", " E E ", @@ -1742,36 +1745,37 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " 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 ", - " ", - " ", - " ", - " ", - " " }, + " " } }; + public static final String[][] FIRST_RING = { { + " ", + " ", + " ", + " ", + " ", + " 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 ", + " ", + " ", + " ", + " ", + " " }, { " ", " ", " ", @@ -5426,4 +5430,6 @@ public abstract class ForgeOfGodsStructureString { " ", " ", " " } }; + public static final String[][] MAIN_STRUCTURE = appendStringArrays(BEAM_SHAFT, FIRST_RING); + public static final String[][] FIRST_RING_AIR = replaceLetters(FIRST_RING, "L"); } 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 e8e27e7bfc..86f608b602 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,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import static com.github.technus.tectech.loader.recipe.Godforge.godforgeUpgradeMats; 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.util.GodforgeMath.allowModuleConnection; @@ -30,6 +31,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Objects; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; @@ -41,18 +43,17 @@ import net.minecraftforge.common.util.ForgeDirection; 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; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule; import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule; import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule; import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule; import com.github.technus.tectech.util.CommonValues; +import com.google.common.collect.ImmutableList; import com.google.common.math.LongMath; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -72,7 +73,6 @@ import com.gtnewhorizons.modularui.api.math.Size; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Interactable; import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; @@ -88,7 +88,6 @@ 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; @@ -99,10 +98,15 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; +import gregtech.api.render.TextureFactory; 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; +import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; +import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; +import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ISurvivalConstructable { @@ -133,6 +137,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private BigInteger totalPowerConsumed = BigInteger.ZERO; private boolean batteryCharging = false; private boolean inversion = false; + private boolean gravitonShardEjection = false; + private boolean noFormatting = false; + private boolean isRenderActive = false; public ArrayList<GT_MetaTileEntity_EM_BaseModule> moduleHatches = new ArrayList<>(); protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16); @@ -143,8 +150,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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 GENERAL_INFO_WINDOW_ID = 16; private static final int TEXTURE_INDEX = 960; private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; + private static final Integer[] UPGRADE_MATERIAL_ID_CONVERSION = { 0, 5, 7, 11, 26, 29, 30 }; 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; @@ -156,9 +165,17 @@ 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_SHAFT = "beam_shaft"; + protected static final String STRUCTURE_PIECE_FIRST_RING = "first_ring"; + protected static final String STRUCTURE_PIECE_FIRST_RING_AIR = "first_ring_air"; protected static final String STRUCTURE_PIECE_SECOND_RING = "second_ring"; + protected static final String STRUCTURE_PIECE_SECOND_RING_AIR = "second_ring_air"; protected static final String STRUCTURE_PIECE_THIRD_RING = "third_ring"; - private static final String TOOLTIP_BAR = EnumChatFormatting.BLUE + "--------------------------------------------"; + protected static final String STRUCTURE_PIECE_THIRD_RING_AIR = "third_ring_air"; + private static final String SCANNER_INFO_BAR = EnumChatFormatting.BLUE + + "--------------------------------------------"; + private static final String TOOLTIP_BAR = EnumChatFormatting.AQUA + + "--------------------------------------------------------------------------"; private static final ItemStack STELLAR_FUEL = Avaritia.isModLoaded() ? getModItem(Avaritia.ID, "Resource", 1, 8) : GT_OreDictUnificator.get(OrePrefixes.block, Materials.CosmicNeutronium, 1); @@ -168,8 +185,8 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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, 1, realBudget, env, false, true); - if (isUpgradeActive(26) && stackSize.stackSize > 1) { + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 1, realBudget, env, false, true); + if (stackSize.stackSize > 1) { built += survivialBuildPiece( STRUCTURE_PIECE_SECOND_RING, stackSize, @@ -181,7 +198,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, true); } - if (isUpgradeActive(29) && stackSize.stackSize > 2) { + if (stackSize.stackSize > 2) { built += survivialBuildPiece( STRUCTURE_PIECE_THIRD_RING, stackSize, @@ -204,8 +221,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo public static final IStructureDefinition<GT_MetaTileEntity_EM_ForgeOfGods> STRUCTURE_DEFINITION = IStructureDefinition .<GT_MetaTileEntity_EM_ForgeOfGods>builder() .addShape(STRUCTURE_PIECE_MAIN, ForgeOfGodsStructureString.MAIN_STRUCTURE) + .addShape(STRUCTURE_PIECE_SHAFT, ForgeOfGodsStructureString.BEAM_SHAFT) + .addShape(STRUCTURE_PIECE_FIRST_RING, ForgeOfGodsStructureString.FIRST_RING) + .addShape(STRUCTURE_PIECE_FIRST_RING_AIR, ForgeOfGodsStructureString.FIRST_RING_AIR) .addShape(STRUCTURE_PIECE_SECOND_RING, ForgeOfGodsRingsStructureString.SECOND_RING) + .addShape(STRUCTURE_PIECE_SECOND_RING_AIR, ForgeOfGodsRingsStructureString.SECOND_RING_AIR) .addShape(STRUCTURE_PIECE_THIRD_RING, ForgeOfGodsRingsStructureString.THIRD_RING) + .addShape(STRUCTURE_PIECE_THIRD_RING_AIR, ForgeOfGodsRingsStructureString.THIRD_RING_AIR) .addElement('A', classicHatches(TEXTURE_INDEX + 3, 1, GodforgeCasings, 3)) .addElement('B', ofBlock(GodforgeCasings, 0)) .addElement('C', ofBlock(GodforgeCasings, 1)) @@ -223,6 +245,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .dot(3) .buildAndChain(GodforgeCasings, 0)) .addElement('K', ofBlock(GodforgeCasings, 6)) + .addElement('L', ofBlock(Blocks.air, 0)) .build(); public GT_MetaTileEntity_EM_ForgeOfGods(int aID, String aName, String aNameRegional) { @@ -250,7 +273,15 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo int colorIndex, boolean aActive, boolean aRedstone) { if (side == facing) { return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1), - new TT_RenderedExtendedFacingTexture(ScreenON) }; + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .glow() + .build() }; } return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1) }; } @@ -258,10 +289,10 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo @Override public void construct(ItemStack stackSize, boolean hintsOnly) { structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1, stackSize, hintsOnly); - if (isUpgradeActive(26) && stackSize.stackSize > 1) { + if (stackSize.stackSize > 1) { buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 11, -67); } - if (isUpgradeActive(29) && stackSize.stackSize > 2) { + if (stackSize.stackSize > 2) { buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -76); } } @@ -280,36 +311,69 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo moduleHatches.clear(); - // Check structure of multi. - if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) { + // Check structure of multi + if (isRenderActive) { + if (!structureCheck_EM(STRUCTURE_PIECE_SHAFT, 63, 14, 1) + || !structureCheck_EM(STRUCTURE_PIECE_FIRST_RING_AIR, 63, 14, -59)) { + destroyRenderer(); + return false; + } + } else if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) { return false; } - // Check there is 1 input bus. + if (internalBattery != 0 && !isRenderActive) { + createRenderer(); + } + + // Check there is 1 input bus if (mInputBusses.size() != 1) { return false; } - // Make sure there are no energy hatches. + // Check there is 1 me output bus + { + if (mOutputBusses.size() != 1) { + return false; + } - if (mEnergyHatches.size() > 0) { - return false; + if (!(mOutputBusses.get(0) instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) { + return false; + } } - if (mExoticEnergyHatches.size() > 0) { - return false; + // Make sure there are no energy hatches + { + if (mEnergyHatches.size() > 0) { + return false; + } + + if (mExoticEnergyHatches.size() > 0) { + return false; + } } - // Make sure there is 1 input hatch. + // Make sure there is 1 input hatch if (mInputHatches.size() != 1) { return false; } - if (isUpgradeActive(26) && checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { - ringAmount = 2; - if (isUpgradeActive(29) && checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { + if (isUpgradeActive(26)) { + if (checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { + ringAmount = 2; + } + if (isRenderActive && ringAmount >= 2 && !checkPiece(STRUCTURE_PIECE_SECOND_RING_AIR, 55, 11, -67)) { + destroyRenderer(); + } + } + + if (isUpgradeActive(29)) { + if (checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { ringAmount = 3; } + if (isRenderActive && ringAmount == 3 && !checkPiece(STRUCTURE_PIECE_THIRD_RING_AIR, 47, 13, -76)) { + destroyRenderer(); + } } return true; @@ -325,10 +389,12 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo // Check and drain fuel if (ticker % (5 * SECONDS) == 0) { ticker = 0; - FluidStack fluidInHatch = null; + startRecipeProcessing(); + FluidStack[] fluidInHatch = null; + boolean fuelDrained = false; if (mInputHatches != null && mInputHatches.size() != 0) { - fluidInHatch = mInputHatches.get(0) - .getFluid(); + fluidInHatch = this.getStoredFluids() + .toArray(new FluidStack[0]); } int maxModuleCount = 8; @@ -338,43 +404,67 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo if (upgrades[29]) { maxModuleCount += 4; } - if (getBaseMetaTileEntity().isAllowedToWork()) { + if (mInputBusses.size() != 0) { if (internalBattery == 0) { - - for (ItemStack itemStack : mInputBusses.get(0) - .getRealInventory()) { - if (itemStack != null && itemStack.isItemEqual(STELLAR_FUEL)) { - stellarFuelAmount += itemStack.stackSize; - itemStack.stackSize = 0; + GT_MetaTileEntity_Hatch_InputBus inputBus = mInputBusses.get(0); + ItemStack[] inputBusInventory = inputBus.getRealInventory(); + if (inputBusInventory != null) { + for (int i = 0; i < inputBusInventory.length; i++) { + ItemStack itemStack = inputBusInventory[i]; + if (itemStack != null && itemStack.isItemEqual(STELLAR_FUEL)) { + int stacksize = itemStack.stackSize; + if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { + ItemStack realItem = meBus.getRealInventory()[i + 16]; + if (realItem == null) { + break; + } + stacksize = realItem.stackSize; + } + inputBus.decrStackSize(i, stacksize); + stellarFuelAmount += stacksize; + inputBus.updateSlots(); + } } } neededStartupFuel = calculateStartupFuelConsumption(this); if (stellarFuelAmount >= neededStartupFuel) { stellarFuelAmount -= neededStartupFuel; increaseBattery(neededStartupFuel); + createRenderer(); } } else { 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 (fluidInHatch != null && fuelConsumption < Integer.MAX_VALUE) { + for (FluidStack fluid : fluidInHatch) { + if (fluid.isFluidEqual(validFuelList.get(selectedFuelType))) { + FluidStack fluidNeeded = new FluidStack( + validFuelList.get(selectedFuelType), + (int) fuelConsumption); + FluidStack fluidReal; + if (mInputHatches.get(0) instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { + fluidReal = meHatch.drain(ForgeDirection.UNKNOWN, fluidNeeded, true); + } else { + fluidReal = mInputHatches.get(0) + .drain(fluidNeeded.amount, true); + } + if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) { + reduceBattery(fuelConsumptionFactor); + } else { + totalFuelConsumed += getFuelFactor(); + if (batteryCharging) { + increaseBattery(fuelConsumptionFactor); + } + } + fuelDrained = true; } } + if (!fuelDrained) { + reduceBattery(fuelConsumptionFactor); + } } else { reduceBattery(fuelConsumptionFactor); } } - } else { - reduceBattery(fuelConsumptionFactor); } determineCompositionMilestoneLevel(); @@ -383,6 +473,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo if (!debugMode) { determineGravitonShardAmount(); } + if (upgrades[30] && gravitonShardEjection) { + ejectGravitonShards(); + } // Do module calculations and checks if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) { @@ -408,6 +501,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } } if (mEfficiency < 0) mEfficiency = 0; + endRecipeProcessing(); } } } @@ -456,7 +550,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } } - private void createRenderBlock() { + private void createRenderer() { IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); @@ -464,9 +558,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo int y = gregTechTileEntity.getYCoord(); int z = gregTechTileEntity.getZCoord(); - double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; this.getBaseMetaTileEntity() .getWorld() @@ -480,25 +574,77 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo rendererTileEntity.setRenderSize(20); rendererTileEntity.setRenderRotationSpeed(5); + + switch (ringAmount) { + case 2 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); + } + case 3 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); + buildPiece(STRUCTURE_PIECE_THIRD_RING_AIR, null, false, 47, 13, -76); + } + default -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + } + } + + isRenderActive = true; + } + + private void destroyRenderer() { + + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + + switch (ringAmount) { + case 2 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); + } + case 3 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); + buildPiece(STRUCTURE_PIECE_THIRD_RING, null, false, 47, 13, -76); + } + default -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + } + } + + isRenderActive = false; + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + destroyRenderer(); } @Override public String[] getInfoData() { ArrayList<String> str = new ArrayList<>(Arrays.asList(super.getInfoData())); - str.add(TOOLTIP_BAR); + str.add(SCANNER_INFO_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); + str.add(SCANNER_INFO_BAR); return str.toArray(new String[0]); } @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - createRenderBlock(); - } - - @Override public void onRemoval() { if (moduleHatches != null && moduleHatches.size() > 0) { for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { @@ -528,6 +674,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo buildContext.addSyncedWindow(MILESTONE_WINDOW_ID, this::createMilestoneWindow); buildContext.addSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID, this::createIndividualMilestoneWindow); buildContext.addSyncedWindow(MANUAL_INSERTION_WINDOW_ID, this::createManualInsertionWindow); + buildContext.addSyncedWindow(GENERAL_INFO_WINDOW_ID, this::createGeneralInfoWindow); builder.widget( new ButtonWidget().setOnClick( (clickData, widget) -> { @@ -571,6 +718,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .setSize(74, 34)) .widget(createPowerSwitchButton()) .widget(createBatteryButton(builder)) + .widget(createEjectionSwitch(builder)) .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { if (val) { getBaseMetaTileEntity().enableWorking(); @@ -605,10 +753,21 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); button.add(TecTechUITextures.OVERLAY_BUTTON_FLAG); return button.toArray(new IDrawable[0]); + }) .addTooltip(translateToLocal("fog.button.milestones.tooltip")) .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 91)); + .setPos(174, 91)) + .widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(GENERAL_INFO_WINDOW_ID); + }) + .setSize(18, 18) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.clickhere")) + .setPos(172, 67) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); } @Override @@ -647,6 +806,40 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo return (ButtonWidget) button; } + protected ButtonWidget createEjectionSwitch(IWidgetBuilder<?> builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (upgrades[30]) { + gravitonShardEjection = !gravitonShardEjection; + } + }) + .setPlayClickSound(upgrades[30]) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + if (!upgrades[30]) { + return ret.toArray(new IDrawable[0]); + } + if (gravitonShardEjection) { + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + ret.add(TecTechUITextures.OVERLAY_EJECTION_ON); + } else { + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + ret.add(TecTechUITextures.OVERLAY_EJECTION_LOCKED); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> gravitonShardEjection, val -> gravitonShardEjection = val), + builder) + .setPos(26, 91) + .setSize(16, 16) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> upgrades[30], val -> upgrades[30] = val), builder); + if (upgrades[30]) { + button.addTooltip(translateToLocal("fog.button.ejection.tooltip")); + button.setTooltipShowUpDelay(TOOLTIP_DELAY); + } + return (ButtonWidget) button; + } + protected Widget createBatteryButton(IWidgetBuilder<?> builder) { Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); @@ -750,6 +943,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .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.5")) .setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( TextWidget.localised("gt.blockmachines.multimachine.FOG.fueltype") @@ -922,72 +1116,56 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(37, 70) - .addTooltip(milestoneProgressText(0, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(37, 70)) .widget( new ProgressBar().setProgress(() -> recipeMilestonePercentage) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(233, 70) - .addTooltip(milestoneProgressText(1, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(233, 70)) .widget( new ProgressBar().setProgress(() -> fuelMilestonePercentage) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(37, 215) - .addTooltip(milestoneProgressText(2, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(37, 215)) .widget( new ProgressBar().setProgress(() -> structureMilestonePercentage) .setDirection(ProgressBar.Direction.RIGHT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(233, 215) - .addTooltip(milestoneProgressText(3, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(233, 215)) .widget( new ProgressBar().setProgress(() -> invertedPowerMilestonePercentage) .setDirection(ProgressBar.Direction.LEFT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(37, 70) - .addTooltip(milestoneProgressText(0, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(37, 70)) .widget( new ProgressBar().setProgress(() -> invertedRecipeMilestonePercentage) .setDirection(ProgressBar.Direction.LEFT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(233, 70) - .addTooltip(milestoneProgressText(1, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(233, 70)) .widget( new ProgressBar().setProgress(() -> invertedFuelMilestonePercentage) .setDirection(ProgressBar.Direction.LEFT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(37, 215) - .addTooltip(milestoneProgressText(2, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(37, 215)) .widget( new ProgressBar().setProgress(() -> invertedStructureMilestonePercentage) .setDirection(ProgressBar.Direction.LEFT) .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130) .setSynced(true, false) .setSize(130, 7) - .setPos(233, 215) - .addTooltip(milestoneProgressText(3, false)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .setPos(233, 215)) .widget( ButtonWidget.closeWindowButton(true) .setPos(382, 6)); @@ -1076,7 +1254,21 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .setScale(0.7f) .setDefaultColor(EnumChatFormatting.WHITE) .setSize(140, 30) - .setPos(5, 90)); + .setPos(5, 90)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (clickData.mouseButton == 0) { + noFormatting = !noFormatting; + } + }) + .setSize(10, 10) + .addTooltip(translateToLocal("fog.button.formatting.tooltip")) + .setBackground(TecTechUITextures.OVERLAY_CYCLIC_BLUE) + .setPos(5, 135) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> noFormatting, val -> noFormatting = val), + builder)); return builder.build(); } @@ -1111,15 +1303,29 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private int[] followupUpgrades = new int[] {}; private boolean allPrereqRequired = false; private boolean isUpradeSplitStart = false; + private boolean doesCurrentUpgradeRequireExtraMats = false; private boolean[] upgrades = new boolean[31]; + private boolean[] materialPaidUpgrades = new boolean[7]; protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { final Scrollable scrollable = new Scrollable().setVerticalScroll(); final int PARENT_WIDTH = 300; - final int PARENT_HEIGHT = 1000; + final int PARENT_HEIGHT = 300; ModularWindow.Builder builder = ModularWindow.builder(PARENT_WIDTH, PARENT_HEIGHT); - scrollable.widget( - createUpgradeBox(0, 0, 3, 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, + true, + 0, + new Pos2d(126, 56), + scrollable)) .widget( createUpgradeBox( 1, @@ -1129,6 +1335,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 2, 3 }, false, + false, 1, new Pos2d(126, 116), scrollable)) @@ -1141,6 +1348,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 4, 5 }, false, + false, 1, new Pos2d(96, 176), scrollable)) @@ -1153,6 +1361,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 5, 6 }, false, + false, 1, new Pos2d(156, 176), scrollable)) @@ -1165,6 +1374,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 8 }, false, + false, 1, new Pos2d(66, 236), scrollable)) @@ -1177,6 +1387,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 7 }, false, + true, 1, new Pos2d(126, 236), scrollable)) @@ -1189,6 +1400,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 10 }, false, + false, 1, new Pos2d(186, 236), scrollable)) @@ -1201,6 +1413,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 8, 9, 10 }, false, + true, 2, new Pos2d(126, 296), scrollable)) @@ -1213,6 +1426,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo true, new int[] { 11 }, false, + false, 2, new Pos2d(56, 356), scrollable)) @@ -1225,6 +1439,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] {}, false, + false, 2, new Pos2d(126, 356), scrollable)) @@ -1237,6 +1452,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo true, new int[] { 11 }, false, + false, 2, new Pos2d(196, 356), scrollable)) @@ -1249,6 +1465,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 12, 13, 14 }, false, + true, 2, new Pos2d(126, 416), scrollable)) @@ -1261,6 +1478,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 17 }, true, + false, 3, new Pos2d(66, 476), scrollable)) @@ -1273,6 +1491,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 18 }, true, + false, 3, new Pos2d(126, 476), scrollable)) @@ -1285,6 +1504,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 15, 19 }, true, + false, 3, new Pos2d(186, 476), scrollable)) @@ -1297,6 +1517,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] {}, false, + false, 4, new Pos2d(246, 496), scrollable)) @@ -1309,6 +1530,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] {}, false, + false, 4, new Pos2d(6, 556), scrollable)) @@ -1321,6 +1543,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 16, 20 }, false, + false, 3, new Pos2d(66, 536), scrollable)) @@ -1333,6 +1556,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 21 }, false, + false, 3, new Pos2d(126, 536), scrollable)) @@ -1345,6 +1569,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 22 }, false, + false, 3, new Pos2d(186, 536), scrollable)) @@ -1357,6 +1582,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 23 }, false, + false, 3, new Pos2d(66, 596), scrollable)) @@ -1369,6 +1595,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 23 }, false, + false, 3, new Pos2d(126, 596), scrollable)) @@ -1381,6 +1608,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 23 }, false, + false, 3, new Pos2d(186, 596), scrollable)) @@ -1393,6 +1621,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 24 }, false, + false, 4, new Pos2d(126, 656), scrollable)) @@ -1405,6 +1634,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 25 }, false, + false, 5, new Pos2d(126, 718), scrollable)) @@ -1417,6 +1647,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 26 }, false, + false, 6, new Pos2d(36, 758), scrollable)) @@ -1429,6 +1660,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 27 }, false, + true, 7, new Pos2d(36, 848), scrollable)) @@ -1441,6 +1673,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 28 }, false, + false, 8, new Pos2d(126, 888), scrollable)) @@ -1453,6 +1686,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 29 }, false, + false, 9, new Pos2d(216, 848), scrollable)) @@ -1465,6 +1699,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] { 30 }, false, + true, 10, new Pos2d(216, 758), scrollable)) @@ -1477,6 +1712,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo false, new int[] {}, false, + true, 12, new Pos2d(126, 798), scrollable)) @@ -1484,55 +1720,54 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo builder.widget( new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_STAR) - .setPos(0, 350) + .setPos(0, 0) .setSize(300, 300)) .widget( scrollable.setSize(292, 292) - .setPos(4, 354)) + .setPos(4, 4)) .widget( ButtonWidget.closeWindowButton(true) - .setPos(282, 354)); + .setPos(282, 4)); if (debugMode) { - builder.widget( - new MultiChildWidget() - .addChild( - new ButtonWidget().setOnClick((clickData, widget) -> upgrades = new boolean[31]) - .setSize(40, 15) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .addChild( - new TextWidget(translateToLocal("fog.debug.resetbutton.text")) - .setTextAlignment(Alignment.Center) - .setScale(0.57f) - .setMaxWidth(36) - .setPos(3, 3)) - .addChild( - new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val) - .setGetter(() -> gravitonShardsAvailable) - .setBounds(0, 112) - .setDefaultValue(0) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(25, 18) - .setPos(4, 16) - .addTooltip(translateToLocal("fog.debug.gravitonshardsetter.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) - .addChild( - new ButtonWidget().setOnClick((clickData, widget) -> Arrays.fill(upgrades, true)) - .setSize(40, 15) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .addTooltip(translateToLocal("fog.debug.unlockall.text")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(0, 35)) - .addChild( - new TextWidget(translateToLocal("fog.debug.unlockall.text")).setTextAlignment(Alignment.Center) - .setScale(0.57f) - .setMaxWidth(36) - .setPos(3, 38)) - .setPos(4, 354)); + builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + upgrades = new boolean[31]; + materialPaidUpgrades = new boolean[7]; + }) + .setSize(40, 15) + .setBackground(GT_UITextures.BUTTON_STANDARD) + .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addChild( + new TextWidget(translateToLocal("fog.debug.resetbutton.text")).setTextAlignment(Alignment.Center) + .setScale(0.57f) + .setMaxWidth(36) + .setPos(3, 3)) + .addChild( + new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val) + .setGetter(() -> gravitonShardsAvailable) + .setBounds(0, 112) + .setDefaultValue(0) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(25, 18) + .setPos(4, 16) + .addTooltip(translateToLocal("fog.debug.gravitonshardsetter.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) + .addChild( + new ButtonWidget().setOnClick((clickData, widget) -> Arrays.fill(upgrades, true)) + .setSize(40, 15) + .setBackground(GT_UITextures.BUTTON_STANDARD) + .addTooltip(translateToLocal("fog.debug.unlockall.text")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(0, 35)) + .addChild( + new TextWidget(translateToLocal("fog.debug.unlockall.text")).setTextAlignment(Alignment.Center) + .setScale(0.57f) + .setMaxWidth(36) + .setPos(3, 38)) + .setPos(4, 4)); } return builder.build(); @@ -1582,7 +1817,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo int WIDTH = 250; int HEIGHT = 250; int LORE_POS = 110; - if (currentUpgradeID == 0) { + if (currentUpgradeID == 0 || currentUpgradeID == 30) { WIDTH = 300; HEIGHT = 300; LORE_POS = 85; @@ -1611,14 +1846,14 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .addChild( new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID))) .setTextAlignment(Alignment.CenterLeft) - .setDefaultColor(0x9c9c9c) + .setDefaultColor(EnumChatFormatting.WHITE) .setSize(WIDTH - 15, LORE_POS - 30) .setPos(9, 30)) .addChild( new TextWidget( EnumChatFormatting.ITALIC + translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) .setTextAlignment(Alignment.Center) - .setDefaultColor(0x9c9c9c) + .setDefaultColor(0xbbbdbd) .setSize(WIDTH - 15, (int) (HEIGHT * 0.9) - LORE_POS) .setPos(9, LORE_POS)) .addChild( @@ -1656,26 +1891,30 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo unlockedPrereqUpgrades++; } } - if (allPrereqRequired) { - if (unlockedPrereqUpgrades == prereqUpgrades.length - && gravitonShardsAvailable >= gravitonShardCost) { - gravitonShardsAvailable -= gravitonShardCost; - gravitonShardsSpent += gravitonShardCost; - upgrades[currentUpgradeID] = true; - } - } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { - if (isUpradeSplitStart) { - for (int splitUpgrade : FIRST_SPLIT_UPGRADES) { - if (upgrades[splitUpgrade]) { - unlockedSplitUpgrades++; + if (!doesCurrentUpgradeRequireExtraMats + || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)]) { + if (allPrereqRequired) { + if (unlockedPrereqUpgrades == prereqUpgrades.length + && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; + upgrades[currentUpgradeID] = true; + } + } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { + if (isUpradeSplitStart) { + for (int splitUpgrade : FIRST_SPLIT_UPGRADES) { + if (upgrades[splitUpgrade]) { + unlockedSplitUpgrades++; + } } + unlockedSplitUpgrades -= (ringAmount - 1); + } + if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; + upgrades[currentUpgradeID] = true; } - unlockedSplitUpgrades -= (ringAmount - 1); - } - if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { - gravitonShardsAvailable -= gravitonShardCost; - gravitonShardsSpent += gravitonShardCost; - upgrades[currentUpgradeID] = true; } } } else { @@ -1706,22 +1945,51 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .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))); + if (Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .contains(currentUpgradeID)) { + builder.widget(createMaterialInputButton(currentUpgradeID, WIDTH / 2 - 40, (int) (HEIGHT * 0.9), builder)); + } return builder.build(); } + private Widget createMaterialInputButton(int upgradeID, int xCoord, int yCoord, IWidgetBuilder<?> builder) { + return new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient() && doesCurrentUpgradeRequireExtraMats) { + widget.getContext() + .openSyncedWindow(MANUAL_INSERTION_WINDOW_ID); + widget.getContext() + .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + widget.getContext() + .closeWindow(UPGRADE_TREE_WINDOW_ID); + } + }) + .setPlayClickSound(doesCurrentUpgradeRequireExtraMats) + .setBackground(() -> { + if (doesCurrentUpgradeRequireExtraMats) { + if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)]) { + return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_CHECKMARK_18x18 }; + } else { + return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_EXCLAMATION_POINT_18x18 }; + } + } else { + return new IDrawable[] { GT_UITextures.TRANSPARENT }; + } + }) + .setPos(xCoord, yCoord) + .setSize(15, 15) + .dynamicTooltip(this::upgradeMaterialRequirements) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.materialrequirements.tooltip.clickhere")) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)], + val -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)] = val), + builder); + } + /** * @param upgradeID ID of the upgrade * @param colorCode Number deciding which colored background to use, 0 for blue, 1 for purple, 2 for @@ -1733,12 +2001,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo * 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 requiresExtraMaterials Whether this upgrade requires materials other than graviton shards to unlock * @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 milestone, int[] prerequisiteUpgradeIDs, - boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, int shardCost, Pos2d pos, - IWidgetBuilder<?> builder) { + boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, + boolean requiresExtraMaterials, int shardCost, Pos2d pos, IWidgetBuilder<?> builder) { return new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { currentUpgradeID = upgradeID; currentColorCode = colorCode; @@ -1748,51 +2017,46 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo allPrereqRequired = requireAllPrerequisites; followupUpgrades = followingUpgradeIDs; isUpradeSplitStart = isStartOfSplit; + doesCurrentUpgradeRequireExtraMats = requiresExtraMaterials; if (!widget.isClient()) widget.getContext() .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); }) .setSize(40, 15) .setBackground(() -> { if (upgrades[upgradeID]) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED }; + return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD }; + return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_32x16 }; } }) .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)) + new TextWidget(translateToLocal("fog.upgrade.tt.short." + upgradeID)).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setSize(34, 9) + .setPos(3, 4)) .setPos(pos) .attachSyncer( new FakeSyncWidget.BooleanSyncer(() -> upgrades[upgradeID], val -> upgrades[upgradeID] = val), builder); } - List<ItemStack> inputs = new ArrayList<>( - Arrays.asList( - ItemList.Electric_Motor_UMV.get(13L), - ItemList.Electric_Pump_UXV.get(32L), - ItemList.Electric_Piston_UXV.get(32L), - ItemList.Robot_Arm_UXV.get(32L), - ItemList.Superconducting_Magnet_Solenoid_UIV.get(48L), - ItemList.NaquadriaSupersolid.get(32L), - CustomItemList.astralArrayFabricator.get(36L), - CustomItemList.Machine_Multi_EyeOfHarmony.get(2L))); - protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { + ItemStack[] inputs = godforgeUpgradeMats.get(currentUpgradeID); final int WIDTH = 189; - final int HEIGHT = 84; + final int HEIGHT = 106; final int PARENT_WIDTH = getGUIWidth(); final int PARENT_HEIGHT = getGUIHeight(); final MultiChildWidget columns = new MultiChildWidget(); final DynamicPositionedColumn column1 = new DynamicPositionedColumn(); final DynamicPositionedColumn column2 = new DynamicPositionedColumn(); final DynamicPositionedColumn column3 = new DynamicPositionedColumn(); - List<DynamicPositionedColumn> columnList = Arrays.asList(column1, column2, column3); + final DynamicPositionedColumn column4 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column5 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column6 = new DynamicPositionedColumn(); + List<DynamicPositionedColumn> columnList = Arrays.asList(column1, column2, column3, column4, column5, column6); ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); builder.setGuiTint(getGUIColorization()); @@ -1809,66 +2073,413 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo .phantom(false) .background(getGUITextureSet().getItemSlot()) .build() - .setPos(111, 6)); - for (int i = 0; i < inputs.size(); i++) { + .setPos(112, 6)); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getWindow() + .closeWindow(); + widget.getContext() + .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); + widget.getContext() + .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + } + }) + .setBackground(ModularUITextures.VANILLA_BACKGROUND, new Text("x")) + .setPos(179, 0) + .setSize(10, 10)); + builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + ArrayList<ItemStack> list = new ArrayList<>(inputSlotHandler.getStacks()); + list.removeIf(Objects::isNull); + int foundInputs = 0; + int[] foundInputIndices = new int[inputs.length]; + for (ItemStack inputStack : list) { + for (ItemStack requiredStack : inputs) { + if (ItemStack.areItemStacksEqual(requiredStack, inputStack)) { + foundInputIndices[foundInputs] = inputSlotHandler.getStacks() + .indexOf(inputStack); + foundInputs++; + } + } + } + if (foundInputs == inputs.length) { + for (int index : foundInputIndices) { + inputSlotHandler.extractItem(index, inputSlotHandler.getStackInSlot(index).stackSize, false); + } + materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)] = true; + } + } + }) + .setPlayClickSound(true) + .setBackground(GT_UITextures.BUTTON_STANDARD) + .setSize(179, 18)) + .addChild( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.consumeUpgradeMats")) + .setTextAlignment(Alignment.Center) + .setScale(0.75f) + .setPos(0, 1) + .setSize(179, 18)) + .setPos(5, 82) + .setSize(179, 16)); + + int uniqueItems = inputs.length; + for (int i = 0; i < 12; i++) { int index = i; int cleanDiv4 = index / 4; - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_PRESSED) - .setPos(6 + cleanDiv4 * 36, 6 + index % 4 * 18) - .setSize(18, 18)); - columnList.get(cleanDiv4) - .addChild( - new ItemDrawable().setItem(inputs.get(index)) - .asWidget() - .dynamicTooltip(() -> { - List<String> tooltip = new ArrayList<>(); - tooltip.add( - inputs.get(index) != null ? inputs.get(index) - .getDisplayName() : ""); - return tooltip; - }) - .setSize(16, 16)); - } - - columns.addChild( - column1.setSpace(2) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSize(34, 72) - .setPos(1, 1)); - columns.addChild( - column2.setSpace(2) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSize(34, 72) - .setPos(37, 1)); - columns.addChild( - column3.setSpace(2) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSize(34, 72) - .setPos(73, 1)); + if (i < uniqueItems) { + builder.widget( + new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_PRESSED) + .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) + .setSize(18, 18)); + columnList.get(cleanDiv4) + .addChild( + new ItemDrawable().setItem(inputs[index]) + .asWidget() + .dynamicTooltip(() -> { + List<String> tooltip = new ArrayList<>(); + tooltip.add(inputs[index] != null ? inputs[index].getDisplayName() : ""); + return tooltip; + }) + .setSize(16, 16)); + columnList.get(cleanDiv4 + 3) + .addChild( + new TextWidget("x" + inputs[i].stackSize).setTextAlignment(Alignment.CenterLeft) + .setScale(0.8f) + .setSize(18, 8)); + } else { + builder.widget( + new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_DISABLED) + .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) + .setSize(18, 18)); + } + } + + int counter = 0; + for (DynamicPositionedColumn column : columnList) { + int spacing = 2; + int xCord = 1 + counter * 36; + int yCord = 1; + if (counter > 2) { + spacing = 10; + xCord = 19 + (counter - 3) * 36; + yCord = 5; + } + columns.addChild( + column.setSpace(spacing) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setSize(16, 72) + .setPos(xCord, yCord)); + counter++; + } + builder.widget( - columns.setSize(72, 72) - .setPos(6, 6)); + columns.setSize(108, 72) + .setPos(5, 6)); + + return builder.build(); + } + + protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) { + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + final int WIDTH = 300; + final int HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + + builder.setDraggable(true); + scrollable.widget( + new TextWidget(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.introduction")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 13) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.introductioninfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 30) + .setSize(280, 50)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.tableofcontents")) + .setDefaultColor(EnumChatFormatting.AQUA) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 80) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(150)) + .setBackground( + new Text(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 95) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(434)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 110) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1088)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 125) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1412)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 140) + .setSize(150, 15)) + .widget( + TextWidget.dynamicText(this::inversionHeaderText) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 155) + .setSize(150, 15)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (inversion) { + scrollable.setVerticalScrollOffset(1766); + } + }) + .setPlayClickSound(inversion) + .setPos(7, 155) + .setSize(150, 15) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> inversion, (val) -> inversion = val), scrollable)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(127, 160) + .setSize(40, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 177) + .setSize(280, 250)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 440) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.moduleinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 461) + .setSize(280, 620)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1098) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.upgradeinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1115) + .setSize(280, 290)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1422) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1439) + .setSize(280, 320)) + .widget( + TextWidget.dynamicText(this::inversionHeaderText) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1776) + .setSize(280, 15)) + .widget( + TextWidget.dynamicText(this::inversionInfoText) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1793) + .setSize(280, 160)) + .widget( + new TextWidget("").setPos(7, 1965) + .setSize(10, 10)); + + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_GLOW_WHITE) + .setPos(0, 0) + .setSize(300, 300)) + .widget( + scrollable.setSize(292, 292) + .setPos(4, 4)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(284, 4)); + return builder.build(); } @Override public GT_Multiblock_Tooltip_Builder createTooltip() { final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Material Manipulator") // Machine Type: - .addInfo("Controller block for the Forge of Gods") // Controller - .addInfo("Uses a Star to to manipulate metals") - .addSeparator() - .beginStructureBlock(1, 4, 2, false) - .addStructureInfo("Output bus/hatch has to be the ME variant") - .addStructureInfo("Dot 2 of Input Hatch is the Fuel Input Hatch") - .addInputHatch("Any Infinite Spacetime Casing", 1) - .addInputHatch("Any Infinite Spacetime Casing", 2) // Fuel - // Input - // Hatch - .addInputBus("Any Infinite Spacetime Casing", 1) - .addOutputBus("Any Infinite Spacetime Casing", 1) - .addOutputHatch("Any Infinite Spacetime Casing", 1) + tt.addMachineType("Stellar Forge") + .addInfo(EnumChatFormatting.ITALIC + "Also known as Godforge or Gorge for short.") + .addInfo(TOOLTIP_BAR) + .addInfo("Controller block for the Godforge, a massive structure harnessing the thermal,") + .addInfo("gravitational and kinetic energy of a stabilised neutron star for material processing.") + .addInfo( + "This multiblock can house " + EnumChatFormatting.RED + + "up to 16 modules " + + EnumChatFormatting.GRAY + + "which utilize the star to energize materials") + .addInfo("to varying degrees, ranging from regular smelting to matter degeneration.") + .addInfo(TOOLTIP_BAR) + .addInfo( + "This multiblock has an " + EnumChatFormatting.GOLD + + "extensive upgrade tree " + + EnumChatFormatting.GRAY + + "which influences all of its functions,") + .addInfo( + "such as " + EnumChatFormatting.GOLD + + "unlocking new module types, increasing heat levels " + + EnumChatFormatting.GRAY + + "and " + + EnumChatFormatting.GOLD + + "granting") + .addInfo( + EnumChatFormatting.GOLD + "various processing speed bonuses. " + + EnumChatFormatting.GRAY + + "These upgrades can be unlocked by reaching") + .addInfo("certain milestones and/or spending materials.") + .addInfo(TOOLTIP_BAR) + .addInfo( + EnumChatFormatting.GREEN + + "Clicking on the logo in the controller gui opens an extensive information window,") + .addInfo("explaining everything there is to know about this multiblock.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(126, 29, 186, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + "Total blocks needed for the structure with " + EnumChatFormatting.DARK_PURPLE + + "1" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "2" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "3" + + EnumChatFormatting.GRAY + + " rings:") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "3943" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "7279" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "11005" + + EnumChatFormatting.GRAY + + " Transcendentally Amplified Magnetic Confinement Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "2819" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "4831" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "6567" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "272" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "512" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "824" + + EnumChatFormatting.GRAY + + " Celestial Matter Guidance Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "130" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "144" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "158" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "9" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "54" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "155" + + EnumChatFormatting.GRAY + + " Spatially Transcendent Gravitational Lens Block") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "345" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "357" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "397" + + EnumChatFormatting.DARK_PURPLE + + " Remote" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "Medial" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "Central" + + EnumChatFormatting.GRAY + + " Graviton Flow Modulator") + .addStructureInfo( + EnumChatFormatting.GOLD + "36" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Hatch") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Output Bus") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Bus") + .addStructureInfo("--------------------------------------------") .toolTipFinisher(CommonValues.GODFORGE_MARK); return tt; } @@ -1880,7 +2491,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo @Override public String[] getStructureDescription(ItemStack stackSize) { - return new String[] { "Forge of Gods multiblock" }; + return new String[] { EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.FOG.hint.0"), + translateToLocal("gt.blockmachines.multimachine.FOG.hint.1") }; } public int getFuelType() { @@ -1955,7 +2568,8 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo private Text inversionStatusText() { String inversionStatus = ""; if (inversion) { - inversionStatus = EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.inversion"); + inversionStatus = EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.multimachine.FOG.inversionactive"); } return new Text(inversionStatus); } @@ -2072,7 +2686,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } } - if (milestoneProgress[3] < 7) { + if (milestoneProgress[3] <= 7) { structureMilestonePercentage = totalExtensionsBuilt / 7f; } if (inversion) { @@ -2100,6 +2714,18 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo gravitonShardsAvailable = sum - gravitonShardsSpent; } + private void ejectGravitonShards() { + if (mOutputBusses.size() == 1) { + while (gravitonShardsAvailable >= 64) { + addOutput(GT_OreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, 64)); + gravitonShardsAvailable -= 64; + } + addOutput( + GT_OreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, gravitonShardsAvailable)); + gravitonShardsAvailable = 0; + } + } + private Text gravitonShardAmountText(int milestoneID) { int sum; int progress = milestoneProgress[milestoneID]; @@ -2115,14 +2741,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo 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"); + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); progress = totalFuelConsumed; } case 3 -> { @@ -2132,7 +2757,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo default -> { suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); bigProgress = totalPowerConsumed; - if (!shift && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { + if (!noFormatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { return new Text( translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + EnumChatFormatting.GRAY @@ -2149,7 +2774,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } } } - if (!shift) { + if (!noFormatting) { return new Text( translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + EnumChatFormatting.GRAY @@ -2180,7 +2805,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo String suffix; String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress"); Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); - if (Interactable.hasShiftDown()) { + if (noFormatting) { formatting = false; done = new Text( translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") + EnumChatFormatting.DARK_RED @@ -2219,7 +2844,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } case 2: if (milestoneProgress[2] < 7 || inversion) { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuel"); + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); if (inversion) { max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5); } else { @@ -2247,10 +2872,37 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } } + private Text inversionHeaderText() { + return inversion + ? new Text( + EnumChatFormatting.BOLD + "§k2" + + EnumChatFormatting.RESET + + EnumChatFormatting.WHITE + + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.multimachine.FOG.inversion") + + EnumChatFormatting.BOLD + + "§k2") + : new Text(""); + } + + private Text inversionInfoText() { + return inversion ? new Text(translateToLocal("gt.blockmachines.multimachine.FOG.inversioninfotext")) + : new Text(""); + } + + private List<String> upgradeMaterialRequirements() { + if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)]) { + return ImmutableList.of(translateToLocal("fog.button.materialrequirementsmet.tooltip")); + } + return ImmutableList.of(translateToLocal("fog.button.materialrequirements.tooltip")); + } + private void increaseBattery(int amount) { if ((internalBattery + amount) <= maxBatteryCharge) { internalBattery += amount; } else { + internalBattery = maxBatteryCharge; batteryCharging = false; } } @@ -2263,6 +2915,7 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo module.disconnect(); } } + destroyRenderer(); } else { internalBattery -= amount; totalFuelConsumed += amount; @@ -2302,8 +2955,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); NBT.setLong("totalFuelConsumed", totalFuelConsumed); NBT.setInteger("starFuelStored", stellarFuelAmount); + NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); - // Store booleanArray of all upgrades + // Store booleanArrays of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); int upgradeIndex = 0; @@ -2313,6 +2967,16 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo } NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); + + NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeMaterialIndex = 0; + for (Boolean upgrade : materialPaidUpgrades) { + upgradeBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); + upgradeMaterialIndex++; + } + + NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); super.saveNBTData(NBT); } @@ -2329,17 +2993,30 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); NBT.setLong("totalFuelConsumed", totalFuelConsumed); NBT.setInteger("starFuelStored", stellarFuelAmount); + NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); + NBT.setBoolean("isRenderActive", isRenderActive); + NBT.setInteger("ringAmount", ringAmount); // Store booleanArray of all upgrades NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); int upgradeIndex = 0; - for (Boolean upgrade : upgrades) { + for (boolean upgrade : upgrades) { upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade); upgradeIndex++; } NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); + + NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeMaterialIndex = 0; + for (boolean upgrade : materialPaidUpgrades) { + upgradeMaterialBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); + upgradeMaterialIndex++; + } + + NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); super.saveNBTData(NBT); } @@ -2356,6 +3033,9 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo totalRecipesProcessed = NBT.getLong("totalRecipesProcessed"); totalFuelConsumed = NBT.getLong("totalFuelConsumed"); stellarFuelAmount = NBT.getInteger("starFuelStored"); + gravitonShardEjection = NBT.getBoolean("gravitonShardEjection"); + isRenderActive = NBT.getBoolean("isRenderActive"); + ringAmount = NBT.getInteger("ringAmount"); NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); @@ -2364,6 +3044,13 @@ public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_Multiblo upgrades[upgradeIndex] = upgrade; } + tempBooleanTag = NBT.getCompoundTag("upgradeMaterials"); + + for (int upgradeIndex = 0; upgradeIndex < 7; upgradeIndex++) { + boolean upgrade = tempBooleanTag.getBoolean("upgradeMaterial" + upgradeIndex); + materialPaidUpgrades[upgradeIndex] = upgrade; + } + super.loadNBTData(NBT); } 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 86e8e97993..16d81c8529 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.ArrayList; import java.util.List; import java.util.UUID; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -21,7 +22,6 @@ import net.minecraftforge.common.util.ForgeDirection; 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.gtnewhorizons.modularui.api.drawable.IDrawable; @@ -52,6 +52,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_StructureUtility; public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_MultiblockBase_EM { @@ -79,37 +80,8 @@ 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<GT_MetaTileEntity_EM_BaseModule> STRUCTURE_DEFINITION = StructureDefinition - .<GT_MetaTileEntity_EM_BaseModule>builder() - .addShape( - STRUCTURE_PIECE_MAIN, - 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( - 'B', - GT_StructureUtility.ofHatchAdderOptional( - GT_MetaTileEntity_EM_BaseModule::addClassicToMachineList, - TEXTURE_INDEX, - 1, - 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(); + protected static final String TOOLTIP_BAR = EnumChatFormatting.AQUA + + "--------------------------------------------------------------------------"; public GT_MetaTileEntity_EM_BaseModule(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); @@ -277,7 +249,10 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc @Override public IStructureDefinition<? extends GT_MetaTileEntity_MultiblockBase_EM> getStructure_EM() { - return STRUCTURE_DEFINITION; + if (this instanceof GT_MetaTileEntity_EM_SmeltingModule) { + return getStructureDefinition(GregTech_API.sBlockCasings5, 12); + } + return getStructureDefinition(GodforgeCasings, 8); } @Override @@ -327,7 +302,8 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc .widget(createInputSeparationButton(builder)) .widget(createBatchModeButton(builder)) .widget(createLockToSingleRecipeButton(builder)) - .widget(createVoltageButton(builder)); + .widget(createVoltageButton(builder)) + .widget(createStructureUpdateButton(builder)); } protected Widget createVoltageButton(IWidgetBuilder<?> builder) { @@ -352,7 +328,7 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc }) .addTooltip(translateToLocal("fog.button.voltageconfig.tooltip.01")) .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 129) + .setPos(174, 112) .setSize(16, 16) .attachSyncer( new FakeSyncWidget.BooleanSyncer(() -> isVoltageConfigUnlocked, val -> isVoltageConfigUnlocked = val), @@ -437,6 +413,41 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc return false; } + private static IStructureDefinition<GT_MetaTileEntity_EM_BaseModule> getStructureDefinition(Block coilBlock, + int meta) { + return StructureDefinition.<GT_MetaTileEntity_EM_BaseModule>builder() + .addShape( + STRUCTURE_PIECE_MAIN, + 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 ", " ", " " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " G ", " ", " ", " " } }) + .addElement('A', ofBlock(coilBlock, meta)) + .addElement( + 'B', + GT_StructureUtility.ofHatchAdderOptional( + GT_MetaTileEntity_EM_BaseModule::addClassicToMachineList, + TEXTURE_INDEX, + 1, + 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(); + } + private Text connectionStatus() { String status = EnumChatFormatting.RED + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.false"); @@ -478,8 +489,20 @@ public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_Multibloc 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 ? ScreenON : ScreenOFF) }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), TextureFactory.builder() + .addIcon(ScreenOFF) + .extFacing() + .build() }; } 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 7e5c0d0b94..9c1d5dd8fa 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 @@ -495,12 +495,31 @@ public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_Base public GT_Multiblock_Tooltip_Builder createTooltip() { final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); 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) - .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) + .addInfo("Controller block for the Heliofusion Exoticizer, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for ultra high temperature matter degeneration.") + .addInfo(TOOLTIP_BAR) + .addInfo("The fourth and final module of the Godforge, this module breaks apart the very") + .addInfo("building blocks of matter, producing exotic mixtures in the process. Quark-Gluon Plasma") + .addInfo("can be manufactured right away, but production of Magnetic Monopole Matter (Magmatter)") + .addInfo("requires a fully upgraded Godforge.") + .addInfo("This module is specialized towards acquisition of unique materials.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") .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 cfd0548f9e..0a2bd27ed5 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 @@ -19,6 +19,7 @@ import java.util.ArrayList; import javax.annotation.Nonnull; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; @@ -213,13 +214,31 @@ public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_Base @Override public GT_Multiblock_Tooltip_Builder createTooltip() { final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("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) - .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) + tt.addMachineType("Blast Smelter") + .addInfo("Controller block for the Helioflux Meltig Core, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for high temperature material liquefaction.") + .addInfo(TOOLTIP_BAR) + .addInfo("The second module of the Godforge, this module melts materials directly into") + .addInfo("their liquid form. If an output material does not have a liquid form, it will be output") + .addInfo("as a regular solid instead.") + .addInfo("This module is specialized towards parallel processing.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") .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 8143c6fea4..c8f201d003 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 @@ -16,6 +16,8 @@ import java.util.Objects; import javax.annotation.Nonnull; +import net.minecraft.util.EnumChatFormatting; + import org.jetbrains.annotations.NotNull; import com.github.technus.tectech.util.CommonValues; @@ -213,12 +215,30 @@ public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_Base public GT_Multiblock_Tooltip_Builder createTooltip() { final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); 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) - .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) + .addInfo("Controller block for the Heliothermal Plasma Fabricator, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for extreme temperature matter ionization.") + .addInfo(TOOLTIP_BAR) + .addInfo("The third module of the Godforge, this module infuses materials with extreme amounts") + .addInfo("of heat, ionizing and turning them into plasma directly. Not all plasmas can be produced") + .addInfo("right away, some of them require certain upgrades to be unlocked.") + .addInfo("This module is specialized towards energy and overclock efficiency.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") .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 ee77d7cc95..5126dbfe60 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 @@ -19,6 +19,7 @@ import java.util.List; import javax.annotation.Nonnull; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import org.jetbrains.annotations.NotNull; @@ -215,12 +216,29 @@ public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_Ba public GT_Multiblock_Tooltip_Builder createTooltip() { final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); 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) - .addMaintenanceHatch("Any Infinite Spacetime Casing", 1) + .addInfo("Controller block for the Helioflare Power Forge, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for basic smelting operations at various temperatures.") + .addInfo(TOOLTIP_BAR) + .addInfo("As the first of the Godforge modules, this module performs the most basic") + .addInfo("thermal processing, namely smelting materials identically to a furnace or blast furnace.") + .addInfo("The desired method of processing can be selected in the gui.") + .addInfo("This module is specialized towards speed and high heat levels.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Hypogen Coil Block") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") .toolTipFinisher(CommonValues.GODFORGE_MARK); return tt; } diff --git a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java index 7fda26a29c..94b898a93b 100644 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java @@ -139,7 +139,7 @@ public class GodforgeMath { baseParallel = 512; } if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - baseParallel = 256; + baseParallel = 384; } if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { baseParallel = 36; 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 1bf7eae552..b0b6a2c396 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 @@ -165,4 +165,24 @@ public final class TT_Utility { } return previousValue; } + + public static String[][] appendStringArrays(String[][] firstArray, String[][] secondArray) { + int totalLength = firstArray.length + secondArray.length; + String[][] resultArray = new String[totalLength][]; + + System.arraycopy(firstArray, 0, resultArray, 0, firstArray.length); + System.arraycopy(secondArray, 0, resultArray, firstArray.length, secondArray.length); + return resultArray; + } + + public static String[][] replaceLetters(String[][] array, String replacement) { + String[][] outputArray = new String[array.length][]; + for (int i = 0; i < array.length; i++) { + outputArray[i] = new String[array[i].length]; + for (int j = 0; j < array[i].length; j++) { + outputArray[i][j] = array[i][j].replaceAll("[A-Z]", replacement); + } + } + return outputArray; + } } diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index a11bb7ea6e..74f169681c 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -2554,6 +2554,9 @@ public enum ItemList implements IItemContainer { BetterJukebox_EV, BetterJukebox_IV, WirelessHeadphones, + Thermal_Superconductor, + Relativistic_Heat_Capacitor, + Phononic_Seed_Crystal, ResearchCompleter, // Populated in EMT SpaceElevatorController, // Populated in GTNH-Intergalactic // semicolon after the comment to reduce merge conflicts diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index 2dada8dfb0..3d314c4742 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -20,6 +20,7 @@ import javax.annotation.Nonnull; import net.minecraft.enchantment.Enchantment; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; @@ -37,6 +38,7 @@ import gregtech.common.config.gregtech.ConfigHarvestLevel; import gregtech.common.render.items.CosmicNeutroniumRenderer; import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; import gregtech.common.render.items.GaiaSpiritRenderer; +import gregtech.common.render.items.GlitchEffectRenderer; import gregtech.common.render.items.InfinityRenderer; import gregtech.common.render.items.TranscendentMetalRenderer; import gregtech.common.render.items.UniversiumRenderer; @@ -1976,6 +1978,17 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { MaterialsUEVplus.ExcitedDTSC.mChemicalFormula = "[-Stellar-Stellar-]"; MaterialsUEVplus.DimensionallyTranscendentStellarCatalyst.mChemicalFormula = "Stellar"; PolyAluminiumChloride.mChemicalFormula = "Al\u2082(OH)\u2083Cl\u2083"; + MaterialsUEVplus.QuarkGluonPlasma.mChemicalFormula = EnumChatFormatting.OBFUSCATED + "X" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + "g" + + EnumChatFormatting.OBFUSCATED + + "X"; + MaterialsUEVplus.PhononCrystalSolution.mChemicalFormula = "\u3004"; + MaterialsUEVplus.PhononMedium.mChemicalFormula = "((Si\u2085O\u2081\u2080Fe)\u2083(Bi\u2082Te\u2083)\u2084ZrO\u2082Fe\u2085\u2080C)\u2085Og*Pr\u2081\u2085((C\u2081\u2084Os\u2081\u2081O\u2087Ag\u2083SpH\u2082O)\u2084?\u2081\u2080(Fs\u26B6)\u2086(\u2318\u262F\u262F\u2318)\u2085)\u2086\u3004\u2084"; + MaterialsUEVplus.SixPhasedCopper.mChemicalFormula = "\u2722"; + MaterialsUEVplus.Mellion.mChemicalFormula = "Tn\u2081\u2081Or\u2088Rb\u2081\u2081?\u2087?\u2081\u2083?\u2081\u2083"; + MaterialsUEVplus.Creon.mChemicalFormula = "\u2E0E"; } private static void initSubTags() { @@ -2516,6 +2529,8 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { MaterialsUEVplus.Universium.renderer = new UniversiumRenderer(); MaterialsUEVplus.Eternity.renderer = new InfinityRenderer(); MaterialsUEVplus.MagMatter.renderer = new InfinityRenderer(); + MaterialsUEVplus.SixPhasedCopper.renderer = new GlitchEffectRenderer(); + MaterialsUEVplus.GravitonShard.renderer = new InfinityRenderer(); } private static void fillGeneratedMaterialsMap() { diff --git a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java index 1ff8cc2fb0..7542e1f600 100644 --- a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java +++ b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java @@ -590,6 +590,166 @@ public class MaterialsUEVplus { 1, Dyes._NULL); + public static Materials PhononMedium = new Materials( + 145, + TextureSet.SET_FLUID, + 1.0F, + 0, + 2, + 16, + 255, + 255, + 255, + 0, + "PhononMedium", + "Lossless Phonon Transfer Medium", + -1, + -1, + 500, + 1, + false, + true, + 1, + 1, + 1, + Dyes._NULL); + + public static Materials PhononCrystalSolution = new Materials( + 146, + TextureSet.SET_FLUID, + 1.0F, + 0, + 2, + 16, + 255, + 255, + 255, + 0, + "PhononCrystalSolution", + "Saturated Phononic Crystal Solution", + -1, + -1, + 500, + 1, + false, + true, + 1, + 1, + 1, + Dyes._NULL); + + public static Materials SixPhasedCopper = new Materials( + 147, + TextureSet.SET_SHINY, + 1.0F, + 8 * 2621440, + 26, + 1 | 2 | 64 | 128, + 255, + 120, + 20, + 0, + "SixPhasedCopper", + "Six-Phased Copper", + -1, + -1, + 1000, + 14000, + true, + false, + 2, + 1, + 1, + Dyes._NULL, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1))) + .disableAutoGeneratedBlastFurnaceRecipes() + .disableAutoGeneratedVacuumFreezerRecipe() + .setProcessingMaterialTierEU(TierEU.RECIPE_UEV); + + public static Materials Mellion = new Materials( + 148, + TextureSet.SET_SHINY, + 1.0F, + 8 * 2621440, + 26, + 1 | 2 | 64 | 128, + 60, + 5, + 5, + 0, + "Mellion", + "Mellion", + -1, + -1, + 1000, + 14000, + true, + false, + 2, + 1, + 1, + Dyes._NULL, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1))) + .disableAutoGeneratedBlastFurnaceRecipes() + .disableAutoGeneratedVacuumFreezerRecipe() + .setProcessingMaterialTierEU(TierEU.RECIPE_UEV); + + public static Materials Creon = new Materials( + 149, + TextureSet.SET_SHINY, + 1.0F, + 8 * 2621440, + 26, + 1 | 2 | 64 | 128, + 70, + 0, + 70, + 0, + "Creon", + "Creon", + -1, + -1, + 1000, + 14000, + true, + false, + 2, + 1, + 1, + Dyes._NULL, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1))) + .disableAutoGeneratedBlastFurnaceRecipes() + .disableAutoGeneratedVacuumFreezerRecipe() + .setProcessingMaterialTierEU(TierEU.RECIPE_UEV) + .setHasCorrespondingPlasma(true); + + public static Materials GravitonShard = new Materials( + 150, + new TextureSet("GravitonShard", true), + 1.0F, + 8 * 2621440, + 26, + 256, + 255, + 255, + 255, + 0, + "GravitonShard", + "Graviton Shard", + -1, + -1, + 100000, + 100000, + false, + false, + 2, + 1, + 1, + Dyes._NULL, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 150))) + .disableAutoGeneratedBlastFurnaceRecipes() + .disableAutoGeneratedVacuumFreezerRecipe(); + /** * called by Materials. Can be safely called multiple times. exists to allow Materials ensure this class is * initialized diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index d0c9399980..8e80f41a05 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -701,6 +701,8 @@ public enum OrePrefixes { dustSmall.mNotGeneratedItems.add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter); dustTiny.mNotGeneratedItems.add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter); + cell.disableComponent(MaterialsUEVplus.GravitonShard); + // ingot.mNotGeneratedItems.add(Materials.Ichorium); nugget.mNotGeneratedItems.add(Materials.Gold); plate.mNotGeneratedItems.add(Materials.Paper); @@ -780,6 +782,7 @@ public enum OrePrefixes { nanite.mGeneratedItems.add(MaterialsUEVplus.BlackDwarfMatter); nanite.mGeneratedItems.add(Materials.Glowstone); nanite.mGeneratedItems.add(MaterialsUEVplus.Eternity); + nanite.mGeneratedItems.add(MaterialsUEVplus.SixPhasedCopper); // ----- gear.mGeneratedItems.add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter); @@ -788,6 +791,8 @@ public enum OrePrefixes { frame.mGeneratedItems.add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter); frameGt.mGeneratedItems.add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter); + gem.mGeneratedItems.add(MaterialsUEVplus.GravitonShard); + dust.mGeneratedItems.addAll(dustPure.mGeneratedItems); dust.mGeneratedItems.addAll(dustImpure.mGeneratedItems); dust.mGeneratedItems.addAll(dustRefined.mGeneratedItems); @@ -1001,7 +1006,8 @@ public enum OrePrefixes { OrePrefixes.gemExquisite, OrePrefixes.gearGt, OrePrefixes.itemCasing, - OrePrefixes.nanite)); + OrePrefixes.nanite, + OrePrefixes.cell)); /** * Yes this Value can be changed to add Bits for the MetaGenerated-Item-Check. */ diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 4a5142138a..7caa8f41e5 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -1161,6 +1161,7 @@ public class Textures { BLOCK_UNIVERSIUM, BLOCK_ETERNITY, BLOCK_MAGMATTER, + BLOCK_SIXPHASEDCOPPER, BLOCK_ORIHARUKON, @@ -1573,7 +1574,7 @@ public class Textures { BLOCK_BLAZE }, STORAGE_BLOCKS12 = { BLOCK_CRYOLITE, BLOCK_SILICONSG, BLOCK_NICKELALUMINIUM, BLOCK_SPACETIME, BLOCK_TRANSCENDENTMETAL, BLOCK_ORIHARUKON, BLOCK_WHITEDWARFMATTER, BLOCK_BLACKDWARFMATTER, - BLOCK_UNIVERSIUM, BLOCK_ETERNITY, BLOCK_MAGMATTER }; + BLOCK_UNIVERSIUM, BLOCK_ETERNITY, BLOCK_MAGMATTER, BLOCK_SIXPHASEDCOPPER }; public static final ITexture[] HIDDEN_TEXTURE = { TextureFactory.builder() .addIcon(HIDDEN_FACE) diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java index a5301179c2..7d24a9e339 100644 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java +++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java @@ -204,6 +204,7 @@ import static gregtech.common.items.ID_MetaItem_03.NuclearStar; import static gregtech.common.items.ID_MetaItem_03.Optical_Cpu_Containment_Housing; import static gregtech.common.items.ID_MetaItem_03.Optically_Compatible_Memory; import static gregtech.common.items.ID_MetaItem_03.Optically_Perfected_CPU; +import static gregtech.common.items.ID_MetaItem_03.Phononic_Seed_Crystal; import static gregtech.common.items.ID_MetaItem_03.Quark_Catalyst_Housing; import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Bottom; import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Charm; @@ -212,7 +213,9 @@ import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Stran import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Top; import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Unaligned; import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Up; +import static gregtech.common.items.ID_MetaItem_03.Relativistic_Heat_Capacitor; import static gregtech.common.items.ID_MetaItem_03.Spinneret; +import static gregtech.common.items.ID_MetaItem_03.Thermal_Superconductor; import static gregtech.common.items.ID_MetaItem_03.Timepiece; import static gregtech.common.items.ID_MetaItem_03.Transdimensional_Alignment_Matrix; import static gregtech.common.items.ID_MetaItem_03.Tube_Wires; @@ -1186,6 +1189,13 @@ public class GT_MetaGenerated_Item_03 extends GT_MetaGenerated_Item_X32 { "Enables Dimensional Convergence on the DTPF."), o)); + ItemList.Thermal_Superconductor + .set(addItem(Thermal_Superconductor.ID, "Thermal Superconductor", "With the power of second sound!", o)); + ItemList.Relativistic_Heat_Capacitor + .set(addItem(Relativistic_Heat_Capacitor.ID, "Relativistic Heat Capacitor", "Thermal Resonance?", o)); + ItemList.Phononic_Seed_Crystal + .set(addItem(Phononic_Seed_Crystal.ID, "Phononic Seed Crystal", "Perfect Thermal Conductance", o)); + ItemList.White_Dwarf_Shape_Extruder_Plate.set( addItem( White_Dwarf_Shape_Extruder_Plate.ID, diff --git a/src/main/java/gregtech/common/items/ID_MetaItem_03.java b/src/main/java/gregtech/common/items/ID_MetaItem_03.java index fea5a687df..64b3f07249 100644 --- a/src/main/java/gregtech/common/items/ID_MetaItem_03.java +++ b/src/main/java/gregtech/common/items/ID_MetaItem_03.java @@ -229,7 +229,10 @@ public enum ID_MetaItem_03 { White_Dwarf_Shape_Extruder_Turbine_Blade(755), White_Dwarf_Shape_Extruder_ToolHeadDrill(756), Timepiece(757), - Transdimensional_Alignment_Matrix(758); + Transdimensional_Alignment_Matrix(758), + Thermal_Superconductor(759), + Relativistic_Heat_Capacitor(760), + Phononic_Seed_Crystal(761); public final int ID; diff --git a/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java b/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java new file mode 100644 index 0000000000..f7e4413c97 --- /dev/null +++ b/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java @@ -0,0 +1,124 @@ +package gregtech.common.render.items; + +import java.util.Random; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +import codechicken.lib.render.TextureUtils; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; +import gregtech.api.util.GT_Utility; + +public class GlitchEffectRenderer extends GT_GeneratedMaterial_Renderer { + + public Random rand = new Random(); + int[] red = new int[] { 255, 50, 50, 192 }; + int[] cyan = new int[] { 0, 220, 220, 160 }; + int counter = 0; + double offsetRed = 0; + double offsetCyan = 0; + + private void applyGlitchEffect(ItemRenderType type, boolean shouldModulateColor, int[] color, IIcon... icons) { + double offset; + for (IIcon icon : icons) { + if (icon == null) continue; + if (counter % 2 == 0) { + offset = offsetRed; + } else { + offset = offsetCyan; + } + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + + Tessellator t = Tessellator.instance; + + if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { + t.startDrawingQuads(); + if (shouldModulateColor) { + t.setColorRGBA_F(color[0] / 255.0F, color[1] / 255.0F, color[2] / 255.0F, color[3] / 255.0F); + } else { + t.setColorRGBA_F(1f, 1f, 1f, 0.75f); + } + t.addVertexWithUV(0 + offset, 0 + offset, 0, icon.getMinU(), icon.getMinV()); + t.addVertexWithUV(0 + offset, 16 + offset, 0, icon.getMinU(), icon.getMaxV()); + t.addVertexWithUV(16 + offset, 16 + offset, 0, icon.getMaxU(), icon.getMaxV()); + t.addVertexWithUV(16 + offset, 0 + offset, 0, icon.getMaxU(), icon.getMinV()); + t.draw(); + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + } + counter++; + } + + @Override + protected void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor, + int pass, Object... data) { + short metaData = (short) item.getItemDamage(); + if (!(item.getItem() instanceof IGT_ItemWithMaterialRenderer itemRenderer)) return; + + int currentFrame = (int) ((System.nanoTime() % 4_000_000_000L) / 20_000_000L); + boolean timing = currentFrame <= 20; + + if (timing && currentFrame % 5 == 0) { + offsetRed = rand.nextDouble() * 1.7 * Math.signum(rand.nextGaussian()); + offsetCyan = rand.nextDouble() * 1.7 * Math.signum(rand.nextGaussian()); + } + + IIcon itemIcon = itemRenderer.getIcon(metaData, pass); + IIcon overlay = itemRenderer.getOverlayIcon(metaData, pass); + FluidStack aFluid = GT_Utility.getFluidForFilledItem(item, true); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + if (shouldModulateColor) { + short[] modulation = itemRenderer.getRGBa(item); + GL11.glColor4f( + modulation[0] / 255.0F, + modulation[1] / 255.0F, + modulation[2] / 255.0F, + modulation[3] / 255.0F); + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + + if (itemIcon != null) { + markNeedsAnimationUpdate(itemIcon); + renderRegularItem(type, item, itemIcon, aFluid == null); + } + + if (overlay != null && aFluid != null && aFluid.getFluid() != null) { + IIcon fluidIcon = aFluid.getFluid() + .getIcon(aFluid); + if (fluidIcon != null) { + markNeedsAnimationUpdate(fluidIcon); + // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc. + renderContainedFluid(type, aFluid, fluidIcon); + } + } + + if (overlay != null) { + GL11.glColor3f(1.0F, 1.0F, 1.0F); + TextureUtils.bindAtlas(itemRenderer.getSpriteNumber()); + markNeedsAnimationUpdate(overlay); + renderItemOverlay(type, overlay); + } + + if (type == ItemRenderType.INVENTORY && timing) { + GL11.glDisable(GL11.GL_DEPTH_TEST); + applyGlitchEffect(type, shouldModulateColor, cyan, itemIcon, overlay); + GL11.glEnable(GL11.GL_DEPTH_TEST); + applyGlitchEffect(type, shouldModulateColor, red, itemIcon, overlay); + + } + GL11.glDisable(GL11.GL_BLEND); + } +} diff --git a/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java b/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java index 1b3802306c..836756a18a 100644 --- a/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java +++ b/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java @@ -163,6 +163,23 @@ public class GT_NaniteChain { .eut(1_000_000_000) .addTo(nanoForgeRecipes); + // Six-Phased Copper Nanites - Used in Phononic Crystal production for the godforge + GT_Values.RA.stdBuilder() + .itemInputs( + aUIVTierLens, + MaterialsUEVplus.SixPhasedCopper.getBlocks(16), + ItemList.Circuit_Chip_SoC2.get(64), + ItemList.Circuit_Chip_SoC2.get(64), + ItemList.Circuit_Chip_SoC2.get(64)) + .itemOutputs(MaterialsUEVplus.SixPhasedCopper.getNanite(8)) + .fluidInputs( + Materials.UUMatter.getFluid(500_000), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(50_000)) + .metadata(NANO_FORGE_TIER, 3) + .duration(100 * SECONDS) + .eut(2_000_000_000) + .addTo(nanoForgeRecipes); + // White Dwarf Matter Nanites. Used to make Magnetohydrodynamically constrained star matter. GT_Values.RA.stdBuilder() .itemInputs( diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java index c2631632c6..217be9082a 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java @@ -48,6 +48,7 @@ import gregtech.api.util.ExternalMaterials; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; +import gtPlusPlus.core.material.ALLOY; public class AssemblerRecipes implements Runnable { @@ -3532,6 +3533,31 @@ public class AssemblerRecipes implements Runnable { } } + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, MaterialsUEVplus.TranscendentMetal, 1), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.SuperconductorUIVBase, 64), + ALLOY.QUANTUM.getPlate(8), + ItemList.Electric_Pump_UIV.get(1)) + .fluidInputs(MaterialsUEVplus.PhononMedium.getFluid(100)) + .itemOutputs(ItemList.Thermal_Superconductor.get(1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Thermal_Superconductor.get(2), + ALLOY.QUANTUM.getPlate(12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SuperconductorUIVBase, 8), + GT_OreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SixPhasedCopper, 3), + ItemList.Field_Generator_UEV.get(1)) + .fluidInputs(MaterialsUEVplus.PhononMedium.getFluid(500)) + .itemOutputs(ItemList.Relativistic_Heat_Capacitor.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); } /** diff --git a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java index 519d584136..311c5b1941 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java @@ -10,6 +10,7 @@ import static gregtech.api.util.GT_RecipeBuilder.TICKS; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.util.GT_ModHandler; @@ -230,5 +231,23 @@ public class AutoclaveRecipes implements Runnable { .duration(60 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(autoclaveRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 1L), + GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.Mellion, 32L)) + .itemOutputs(ItemList.Phononic_Seed_Crystal.get(8L)) + .fluidInputs(Materials.Grade8PurifiedWater.getFluid(32_000L)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(autoclaveRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.MagMatter, 1)) + .itemOutputs(ItemList.Phononic_Seed_Crystal.get(5)) + .fluidInputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(250)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_UXV) + .addTo(autoclaveRecipes); } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java index 192422437a..33149b2ff3 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java @@ -7,6 +7,7 @@ import static gregtech.api.util.GT_RecipeBuilder.TICKS; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import goodgenerator.items.MyMaterial; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -315,6 +316,13 @@ public class BenderRecipes implements Runnable { .eut(8) .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.tairitsu.get(OrePrefixes.ingot, 9), GT_Utility.getIntegratedCircuit(9)) + .itemOutputs(MyMaterial.tairitsu.get(OrePrefixes.plateDense, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(benderRecipes); + if (GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 1L) != null) { GT_Values.RA.stdBuilder() .itemInputs( diff --git a/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java index 6a95493f8c..84833c933d 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java @@ -651,6 +651,28 @@ public class BlastFurnaceRecipes implements Runnable { .eut(TierEU.RECIPE_HV) .metadata(COIL_HEAT, 573) .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Phononic_Seed_Crystal.get(1), + MaterialsUEVplus.SixPhasedCopper.getNanite(1), + Materials.Dilithium.getDust(16), + GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(MaterialsUEVplus.Mellion.getMolten(128 * 144L)) + .fluidOutputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(1000)) + .duration(300 * SECONDS) + .eut((int) TierEU.RECIPE_UIV) + .metadata(COIL_HEAT, 17000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MaterialsUEVplus.Mellion.getDust(1), GT_Utility.getIntegratedCircuit(11)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 1)) + .fluidInputs(Materials.Radon.getGas(1000)) + .duration(50 * SECONDS) + .eut((int) TierEU.RECIPE_UXV) + .metadata(COIL_HEAT, 14000) + .addTo(blastFurnaceRecipes); } public void registerPrimitiveBlastFurnaceRecipes() { diff --git a/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java index 8ca67db192..7be13ecbe4 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java @@ -10,6 +10,10 @@ import static gregtech.api.util.GT_RecipeBuilder.TICKS; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; import gregtech.api.GregTech_API; import gregtech.api.enums.Dyes; @@ -311,6 +315,14 @@ public class ChemicalBathRecipes implements Runnable { .eut(TierEU.RECIPE_LV) .addTo(chemicalBathRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(WerkstoffLoader.CubicZirconia.get(OrePrefixes.gemExquisite, 1)) + .itemOutputs(Materials.Firestone.getGems(1)) + .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2hotcoolant"), 250)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(chemicalBathRecipes); + // Na + H2O = NaOH + H GT_Values.RA.stdBuilder() .itemInputs(Materials.Sodium.getDust(1)) diff --git a/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java index 78d8319907..a5144260c2 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java @@ -11,6 +11,8 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -247,6 +249,13 @@ public class CompressorRecipes implements Runnable { .eut(4) .addTo(compressorRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.gem, 9)) + .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.block, 1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + if (Railcraft.isModLoaded()) { GT_Values.RA.stdBuilder() .itemInputs(RailcraftToolItems.getCoalCoke(9)) diff --git a/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java index 88c07e365e..3d53de7d2a 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java @@ -8,6 +8,7 @@ import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.TierEU; +import gtPlusPlus.core.material.ELEMENT; public class FusionReactorRecipes implements Runnable { @@ -270,6 +271,14 @@ public class FusionReactorRecipes implements Runnable { .addTo(fusionRecipes); // FT3 GT_Values.RA.stdBuilder() + .fluidInputs(Materials.Cobalt.getMolten(144), ELEMENT.getInstance().NEON.getFluidStack(144)) + .fluidOutputs(Materials.Rubidium.getMolten(144)) + .duration(1 * SECONDS + 4 * TICKS) + .eut(98304) + .metadata(FUSION_THRESHOLD, 500000000) + .addTo(fusionRecipes); // FT3 + + GT_Values.RA.stdBuilder() .fluidInputs(Materials.Lutetium.getMolten(288), Materials.Vanadium.getMolten(288)) .fluidOutputs(Materials.Plutonium241.getPlasma(288)) .duration(4 * TICKS) diff --git a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java index 9e0d3e4780..1b8cbb4dcd 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java @@ -20,6 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import goodgenerator.items.MyMaterial; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -1718,5 +1719,20 @@ public class MixerRecipes implements Runnable { .duration(5 * SECONDS) .eut(100) .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + Materials.Tritanium.getDust(11), + MyMaterial.orundum.get(OrePrefixes.dust, 8), + Materials.Rubidium.getDust(11), + Materials.FierySteel.getDust(7), + Materials.Firestone.getDust(13), + MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 13), + GT_Utility.getIntegratedCircuit(6)) + .itemOutputs(MaterialsUEVplus.Mellion.getDust(63)) + .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(5000)) + .duration(15 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(mixerRecipes); } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java index 2763bb8d77..e648205b7a 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java @@ -1,6 +1,7 @@ package gregtech.loaders.postload.recipes; import static goodgenerator.loader.Loaders.huiCircuit; +import static gregtech.api.enums.Mods.Avaritia; import static gregtech.api.enums.Mods.NewHorizonsCoreMod; import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes; import static gregtech.api.util.GT_ModHandler.getModItem; @@ -15,6 +16,7 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.TierEU; import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.material.ELEMENT; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; public class PlasmaForgeRecipes implements Runnable { @@ -49,5 +51,23 @@ public class PlasmaForgeRecipes implements Runnable { .eut((int) TierEU.RECIPE_UEV) .metadata(COIL_HEAT, 10800) .addTo(plasmaForgeRecipes); + + if (Avaritia.isModLoaded()) { + // Six-Phased Copper + GT_Values.RA.stdBuilder() + .itemInputs(getModItem(Avaritia.ID, "Singularity", 8, 5)) + .fluidInputs( + ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(72 * 144), + ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(4 * 72 * 144), + ELEMENT.STANDALONE.HYPOGEN.getFluidStack(36 * 144), + ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(8 * 72 * 144), + ELEMENT.STANDALONE.RHUGNOR.getFluidStack(18 * 144), + MaterialsUEVplus.Mellion.getMolten(72 * 144)) + .fluidOutputs(MaterialsUEVplus.SixPhasedCopper.getMolten(72 * 144L)) + .duration(60 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .metadata(COIL_HEAT, 12600) + .addTo(plasmaForgeRecipes); + } } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java index 123f9903ea..b1cd1b76f3 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java @@ -2,10 +2,14 @@ package gregtech.loaders.postload.recipes; import static gregtech.api.recipe.RecipeMaps.transcendentPlasmaMixerRecipes; +import net.minecraftforge.fluids.FluidStack; + import gregtech.api.enums.GT_Values; 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 TranscendentPlasmaMixerRecipes implements Runnable { @@ -138,5 +142,19 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(24)) + .fluidInputs( + new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 1000), + Materials.Thorium.getPlasma(1000L), + new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 1000), + Materials.Calcium.getPlasma(1000L), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1000L)) + .fluidOutputs(MaterialsUEVplus.Creon.getPlasma(5000L)) + .duration(100) + .eut(TierEU.RECIPE_UMV) + .noOptimize() + .addTo(transcendentPlasmaMixerRecipes); + } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java index b3fd9a392b..a5150948ce 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java @@ -409,5 +409,14 @@ public class VacuumFreezerRecipes implements Runnable { .duration(1 * SECONDS) .eut(TierEU.RECIPE_UIV) .addTo(vacuumFreezerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 9L)) + .fluidInputs(MaterialsUEVplus.Creon.getPlasma(1296L)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, MaterialsUEVplus.Mellion, 9L)) + .fluidOutputs(MaterialsUEVplus.Creon.getMolten(1296L)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(vacuumFreezerRecipes); } } diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java index fda6c4c9e8..f4c682d848 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java @@ -666,7 +666,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { new Materials[] { Materials.Cryolite, Materials.SiliconSG, MaterialsKevlar.NickelAluminide, MaterialsUEVplus.SpaceTime, MaterialsUEVplus.TranscendentMetal, Materials.Oriharukon, MaterialsUEVplus.WhiteDwarfMatter, MaterialsUEVplus.BlackDwarfMatter, MaterialsUEVplus.Universium, - MaterialsUEVplus.Eternity, MaterialsUEVplus.MagMatter }, + MaterialsUEVplus.Eternity, MaterialsUEVplus.MagMatter, MaterialsUEVplus.SixPhasedCopper }, OrePrefixes.block, gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS12); @@ -1276,6 +1276,24 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.QuarkGluonPlasma, 1L), ItemList.Cell_Empty.get(1L)); + GT_FluidFactory.builder("PhononMedium") + .withLocalizedName(MaterialsUEVplus.PhononMedium.mLocalizedName) + .withStateAndTemperature(LIQUID, 500) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.PhononMedium) + .registerBContainers( + GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononMedium, 1L), + ItemList.Cell_Empty.get(1L)); + + GT_FluidFactory.builder("PhononCrystalSolution") + .withLocalizedName(MaterialsUEVplus.PhononCrystalSolution.mLocalizedName) + .withStateAndTemperature(LIQUID, 500) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.PhononCrystalSolution) + .registerBContainers( + GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononCrystalSolution, 1L), + ItemList.Cell_Empty.get(1L)); + GT_FluidFactory.builder("fieryblood") .withLocalizedName("Fiery Blood") .withStateAndTemperature(LIQUID, 6400) diff --git a/src/main/java/gtPlusPlus/core/item/ModItems.java b/src/main/java/gtPlusPlus/core/item/ModItems.java index c276a31be8..2253b024a7 100644 --- a/src/main/java/gtPlusPlus/core/item/ModItems.java +++ b/src/main/java/gtPlusPlus/core/item/ModItems.java @@ -341,7 +341,7 @@ public final class ModItems { MaterialGenerator.generate(ELEMENT.STANDALONE.WHITE_METAL); MaterialGenerator.generateOreMaterialWithAllExcessComponents(ELEMENT.STANDALONE.GRANITE); MaterialGenerator.generateOreMaterialWithAllExcessComponents(ELEMENT.STANDALONE.RUNITE); - MaterialGenerator.generate(ELEMENT.STANDALONE.DRAGON_METAL, false); + MaterialGenerator.generate(ELEMENT.STANDALONE.DRAGON_METAL); MISC_MATERIALS.run(); @@ -941,6 +941,9 @@ public final class ModItems { MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.TRINIUM_REINFORCED_STEEL); MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.CHRONOMATIC_GLASS); + // Gear + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.GEAR, ELEMENT.STANDALONE.RHUGNOR); + // Special Sillyness if (true) { diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java index 9cc82b2f1d..5da803b392 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java +++ b/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java @@ -50,10 +50,14 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + import cpw.mods.fml.common.Loader; +import goodgenerator.items.MyMaterial; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.util.GT_ModHandler; @@ -856,6 +860,20 @@ public class RECIPES_GREGTECH { .eut(TierEU.RECIPE_UEV) .duration(9 * MINUTES) .addTo(alloyBlastSmelterRecipes); + + // lossless phonon transfer medium + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(5), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.dust, 5), + MyMaterial.metastableOganesson.get(OrePrefixes.dust, 1), + Materials.Praseodymium.getDust(15), + Materials.SuperconductorUIVBase.getDust(6)) + .fluidInputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(4000L)) + .fluidOutputs(MaterialsUEVplus.PhononMedium.getFluid(1000L)) + .eut(TierEU.RECIPE_UIV) + .duration(2 * MINUTES) + .addTo(alloyBlastSmelterRecipes); } private static void dehydratorRecipes() { diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png Binary files differnew file mode 100644 index 0000000000..35edc97700 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png.mcmeta new file mode 100644 index 0000000000..8e55e43baf --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononcrystalsolution.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png Binary files differnew file mode 100644 index 0000000000..44aec7f5f2 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png.mcmeta new file mode 100644 index 0000000000..0645f48c62 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.phononmedium.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png Binary files differnew file mode 100644 index 0000000000..d4c9ac279a --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png.mcmeta new file mode 100644 index 0000000000..1a89bc6ae4 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/BLOCK_SIXPHASEDCOPPER.png.mcmeta @@ -0,0 +1 @@ +{ "animation": { "frametime": 1, "frames": [ 0, 1, 0, 1, 0, { "index": 2, "time": 75 } ] } }
\ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png Binary files differnew file mode 100644 index 0000000000..5eab133d58 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png.mcmeta new file mode 100644 index 0000000000..7ab8340b0c --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/GODFORGE_CONTROLLER_GLOW.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":16 + } +}
\ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png Binary files differnew file mode 100644 index 0000000000..d1f964aeb5 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png.mcmeta new file mode 100644 index 0000000000..0abd1dd96d --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/PHONON_CONDUIT.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/759.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/759.png Binary files differnew file mode 100644 index 0000000000..304bbac41d --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/759.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png Binary files differnew file mode 100644 index 0000000000..b3e1f2220c --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png.mcmeta b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png.mcmeta new file mode 100644 index 0000000000..a668e18a77 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/760.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 2}} diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png Binary files differnew file mode 100644 index 0000000000..1e74ae5e0f --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png.mcmeta b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png.mcmeta new file mode 100644 index 0000000000..d3ca55b4b9 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/761.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 1}} diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png Binary files differnew file mode 100644 index 0000000000..95ade3cd21 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png.mcmeta b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png.mcmeta new file mode 100644 index 0000000000..ed13b2b055 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 5}}
\ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem_OVERLAY.png Binary files differnew file mode 100644 index 0000000000..3f0d6efcac --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/GravitonShard/gem_OVERLAY.png diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 3bfc3a13e7..5ae57eb9e0 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -886,68 +886,100 @@ achievement.gt.stabilisation_field_generator.8=Gallifreyan Stabilisation Field G fog.upgrade.confirm=Construct fog.upgrade.tt.0=upgrade start -fog.upgrade.tt.1=upgrade 11 -fog.upgrade.tt.2=upgrade 21 -fog.upgrade.tt.3=upgrade 22 -fog.upgrade.tt.4=upgrade 31 -fog.upgrade.tt.5=upgrade 32 -fog.upgrade.tt.6=upgrade 33 -fog.upgrade.tt.7=upgrade 41 -fog.upgrade.tt.8=upgrade 51 -fog.upgrade.tt.9=upgrade 52 -fog.upgrade.tt.10=upgrade 53 -fog.upgrade.tt.11=upgrade 61 -fog.upgrade.tt.12=upgrade 71 -fog.upgrade.tt.13=upgrade 72 -fog.upgrade.tt.14=upgrade 73 -fog.upgrade.tt.15=upgrade 74 -fog.upgrade.tt.16=upgrade 80 -fog.upgrade.tt.17=upgrade 81 -fog.upgrade.tt.18=upgrade 82 -fog.upgrade.tt.19=upgrade 83 -fog.upgrade.tt.20=upgrade 91 -fog.upgrade.tt.21=upgrade 92 -fog.upgrade.tt.22=upgrade 93 -fog.upgrade.tt.23=upgrade 101 -fog.upgrade.tt.24=upgrade 111 -fog.upgrade.tt.25=upgrade 121 -fog.upgrade.tt.26=upgrade 131 -fog.upgrade.tt.27=upgrade 141 -fog.upgrade.tt.28=upgrade 151 -fog.upgrade.tt.29=upgrade 161 -fog.upgrade.tt.30=upgrade end - -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.tt.1=Improved Gravitational Convection Coils +fog.upgrade.tt.2=Spacetime Topology Expansion Modulator +fog.upgrade.tt.3=Cosmic Fuel Chamber Expansion +fog.upgrade.tt.4=Graviton-Induced Superconductivity System +fog.upgrade.tt.5=Fluid Dynamics Integration Module +fog.upgrade.tt.6=Superluminal Amplifier +fog.upgrade.tt.7=Gravitational Plasma Containment Inductor +fog.upgrade.tt.8=Relativistic Electron Capacitor +fog.upgrade.tt.9=Graviton Entanglement Modulator +fog.upgrade.tt.10=Closed Timelike Curve Disruption Device +fog.upgrade.tt.11=Quark-Gluon Plasma Isolation Unit +fog.upgrade.tt.12=Singularity Exposure Fuel Compression Process +fog.upgrade.tt.13=Transfinite Construction Techniques +fog.upgrade.tt.14=Gravitationally Guided Electron Beam Emitter +fog.upgrade.tt.15=Temporal Plasma Transformation Process +fog.upgrade.tt.16=Duplicity of Potency +fog.upgrade.tt.17=Critical Neutrino Tunnelling Integration +fog.upgrade.tt.18=Extreme Pulsar Exposure Chambers +fog.upgrade.tt.19=Internal Micro-Kugelblitz Generator +fog.upgrade.tt.20=Neutron Degeneracy Pressure Exposure +fog.upgrade.tt.21=Parity of Singularity +fog.upgrade.tt.22=Disparity of Rarity +fog.upgrade.tt.23=Null-Gravity Modulation Sheath +fog.upgrade.tt.24=Synthetic Element Decay Stabilization +fog.upgrade.tt.25=Paradoxical Attainment +fog.upgrade.tt.26=Cosmically Duplicate +fog.upgrade.tt.27=Transfinite Stellar Existence +fog.upgrade.tt.28=The Boundless Flow +fog.upgrade.tt.29=Effortless Existence +fog.upgrade.tt.30=Orion’s Arm Genesis Schema + +fog.upgrade.tt.short.0=START +fog.upgrade.tt.short.1=IGCC +fog.upgrade.tt.short.2=STEM +fog.upgrade.tt.short.3=CFCE +fog.upgrade.tt.short.4=GISS +fog.upgrade.tt.short.5=FDIM +fog.upgrade.tt.short.6=SA +fog.upgrade.tt.short.7=GPCI +fog.upgrade.tt.short.8=REC +fog.upgrade.tt.short.9=GEM +fog.upgrade.tt.short.10=CTCDD +fog.upgrade.tt.short.11=QGPIU +fog.upgrade.tt.short.12=SEFCP +fog.upgrade.tt.short.13=TCT +fog.upgrade.tt.short.14=GGEBE +fog.upgrade.tt.short.15=TPTP +fog.upgrade.tt.short.16=DoP +fog.upgrade.tt.short.17=CNTI +fog.upgrade.tt.short.18=EPEC +fog.upgrade.tt.short.19=IMKG +fog.upgrade.tt.short.20=NDPE +fog.upgrade.tt.short.21=PoS +fog.upgrade.tt.short.22=DoR +fog.upgrade.tt.short.23=NGMS +fog.upgrade.tt.short.24=SEDS +fog.upgrade.tt.short.25=PA +fog.upgrade.tt.short.26=CD +fog.upgrade.tt.short.27=TSE +fog.upgrade.tt.short.28=TBF +fog.upgrade.tt.short.29=EE +fog.upgrade.tt.short.30=END + +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 gravitational 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.4=Graviton shards not only affect matter, but also energy: with high enough concentrations of stellar fuel, superconductivity is induced within the Forge purely through gravitational forces. What other properties could 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.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 as the electrical potential continues to increase. 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.10=Increasing the concentration of graviton shards near the material processing regions of the Forge warps spacetime so significantly that it manipulates materials from the causal future and past. This essentially doubles the material input capacity and processing capabilities. 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.12=Exposure to graviton-induced micro black holes 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 begins to exhibit infinite fractal-like properties within finite space, further increasing processing capacity. Though this requires a commensurate increase in stellar fuel to ensure energy reaches matter deep within the chamber. +fog.upgrade.lore.14=Utilising the unique energy-manipulating properties of graviton shards, electricity can be more efficiently utilised within the Forge. Guiding electrons with gravity rather than matter or electromagnetic forces results in less power loss and thus greater processing speeds. fog.upgrade.lore.15=Similar to the Quantum Force Transformer, the quantum-mechanical properties of graviton shards facilitate the ability for the Forge to complete a complex series of nuclear fusion processes in a single event by directly manipulating the subatomic particles of the materials themselves. fog.upgrade.lore.16=Another instance of the entanglement-like effects of graviton shards, the simple Power Forge module now also exhibits the improvements made to the Melting Core module of the Forge. This allows for greater efficiency in both processing and allocation of the precious few graviton shards that can be obtained. -fog.upgrade.lore.17=Typical smelting techniques become too inefficient at extreme temperatures. Graviton shards allow for new methods of processing that can better take advantage of the abundant heat available within the Forge, such as manipulating spacetime to better transfer heat to the processed materials than regular matter ever could. -fog.upgrade.lore.18=As the heat available within the Forge continues to increase, it becomes possible for more material to be processed as it requires less proximity to the star’s surface. Graviton shards facilitate the manipulation of increased material quantities across larger regions of space within the Forge. -fog.upgrade.lore.19=Continual improvements to energy storage density using graviton shards improves both the efficiency of the Forge and improvements to heat utilisation for processing. Reaching this threshold of energy density allows the extreme spacetime bending to transfer the heat of the star more directly to the processed materials, increasing the effectiveness of heat in the smelting process. -fog.upgrade.lore.20=Normally increasing heat indefinitely has extreme diminishing returns when processing materials, but graviton shards allow for heat to more acutely affect input materials by manipulating them ever closer to the star at the centre of the Forge. At such levels of heat, the bonds between atoms are broken, allowing for the most quick and pure processing possible. +fog.upgrade.lore.17=Typical smelting techniques for exotic materials become too inefficient even at extreme temperatures. Graviton shards facilitate the tunnelling of unprecedented numbers of critically energized neutrinos for vastly improved heat transfer to the target material, one of the most efficient methods of transforming electrical energy into heat for materials. +fog.upgrade.lore.18=Graviton shards can manipulate not just processing matter, but the star at the centre of the Forge itself. By rotating the star at relativistic speeds, the resulting pulsar bursts can impart more energy per unit of time than mere static exposure. This results in faster processing of larger quantities of materials. +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 the singularity threshold of energy has a twofold effect on processing efficiency: the gravitational effects can be used to manipulate the matter itself, while the micro-kugelblitzes paradoxically make their energy more available for use in the Forge. +fog.upgrade.lore.20=Normally increasing heat indefinitely has extreme diminishing returns when processing materials, but graviton shards allow for other heating options than standard electrically generated heat. Using graviton shards, encasing the target material in extremely degenerate matter compresses it so greatly that it heats up beyond what would be typically possible in the Forge. 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.22=Returning to the first upgrade of the Forge with the myriad discoveries about graviton shards allows it to run much faster than previously possible. It is sometimes important to review the most basic of assumptions when working outside the known laws of physics, for the simplest facts may be the most powerful. +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 sheath of gravitational-neutralising material is installed across the Forge to protect the more conventional machinery and only improves efficiency the larger the structure becomes. +fog.upgrade.lore.24=Improvements in understanding of the gravitational containment effects of graviton shards allow the Forge to process and handle the most exotic of plasmas, including typically nanosecond-lived synthetic transactinide elements. It also extends their lifetime for external usage by stabilizing the atomic nucleus with small quantities of gravitons. fog.upgrade.lore.25=Further utilisation of the quantum entanglement-like properties of graviton shards allows the effects of other module upgrades to also apply to the exotic module. However, because of the extreme nature of spacetime within this module and the materials it handles, these benefits are reduced as per the inverse square law. -fog.upgrade.lore.26=As additional rings are placed closer to the star at the centre of the Forge, the gravitational stress drastically increases on the structure. Graviton shards alleviate these stresses and also allow for upgrades made in other similar modules to apply to the new ring’s modules through the use of localized spacetime bridges. -fog.upgrade.lore.27=A huge development in the capabilities of the Forge has been achieved with the use of large quantities of graviton shards – the ability to indefinitely feed the star with stellar fuel. Obviously, this has diminishing returns but the processing potential is immense thanks to extreme gravitational distortion containing the star regardless of its energy level. +fog.upgrade.lore.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 while also creating localized spacetime bridges to link the two rings and their modules’ respective upgrades. +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. While this has diminishing returns, the star can exist indefinitely despite the extremely accelerated energy expenditure from endless material processing. fog.upgrade.lore.28=The usage of graviton shards in electrical systems to create localised miniature energy wormholes has allowed for such efficient power transfer that effectively unlimited electricity may be utilized by the Forge. More power means faster processing, quicker material movement, and better utilization of graviton shard related upgrades. -fog.upgrade.lore.29=The final structural upgrade to the Forge required the most advanced understanding of graviton shards and their applications in extreme environments. With this, the last 4 module slots of the Forge of the Gods are available to construct, completing the single greatest structure in human history. The power of the sun in the palm of your hand. -fog.upgrade.lore.30=*insert lore here* upgrade end +fog.upgrade.lore.29=The final external structural upgrade to the Forge requires 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, ascending your operation to unseen heights of technological mastery. +fog.upgrade.lore.30=With total mastery of the Forge of the Gods achieved, it is possible to begin a new universe-spanning initiative. It is now possible to quantize and extract graviton shards for use outside the Forge in powerful new technological endeavours; produce the most exotic plasmas beyond merely periodic elements; and most importantly, begin to understand the immense power of magmatter, a form of matter made entirely of magnetic monopoles with density and stability billions of times that of conventional bosonic matter. It is with this development you realise that the completion of the Forge was not the end goal, but merely a stepping stone to universal transcendence. 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) @@ -962,7 +994,7 @@ fog.upgrade.text.9=Increases maximum fuel consumption by 1 Stellar Fuel Unit/sec 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.13=Improves the formula of SA 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. @@ -971,7 +1003,7 @@ fog.upgrade.text.18=Unlocks a multiplier to maximum parallel based on current he 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.22=Improves IGCC 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 @@ -979,7 +1011,7 @@ fog.upgrade.text.26=Allows construction of the second ring and adds 4 module slo 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.upgrade.text.30=Unlocks Magmatter production in the Heliofusion Exoticizer, creation of exotic plasmas in the Heliothermal Plasma Fabricator and Graviton Shard ejection. fog.debug.resetbutton.text=Reset fog.debug.resetbutton.tooltip=Resets all upgrades to zero @@ -996,6 +1028,11 @@ 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 +fog.button.materialrequirements.tooltip=Upgrade needs additional materials +fog.button.materialrequirementsmet.tooltip=All materials supplied +fog.button.materialrequirements.tooltip.clickhere=Click to open material insertion window +fog.button.ejection.tooltip=Toggle Graviton Shard Ejection +fog.button.formatting.tooltip=Toggle Number Formatting achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods @@ -1015,7 +1052,8 @@ gt.blockmachines.multimachine.FOG.fuelinfo.0=The Stellar Fuel Consumption Factor gt.blockmachines.multimachine.FOG.fuelinfo.1=Dimensionally Transcendent Residue: factor*300*1.15^factor gt.blockmachines.multimachine.FOG.fuelinfo.2=Condensed Raw Stellar Plasma Mixture: factor*2*1.08^factor gt.blockmachines.multimachine.FOG.fuelinfo.3=Magnetohydrodynamically Constrained Star Matter: factor/25 -gt.blockmachines.multimachine.FOG.fuelinfo.4=Upgrades can influence these formulas, the changes are listed in the respective upgrades' descriptions. +gt.blockmachines.multimachine.FOG.fuelinfo.4=This factor also determines the base heat of the multiblock: Heat=log1.5(factor)*1000+12601 +gt.blockmachines.multimachine.FOG.fuelinfo.5=Upgrades can influence these formulas, the changes are listed in the respective upgrades' descriptions. gt.blockmachines.multimachine.FOG.fueltype=Click to Select Fuel Type gt.blockmachines.multimachine.FOG.fuelusage=Fuel Usage gt.blockmachines.multimachine.FOG.plasmamultistep=Multi-Step plasma @@ -1034,16 +1072,34 @@ 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.inversionactive=Inversion Active +gt.blockmachines.multimachine.FOG.inversion=Inversion +gt.blockmachines.multimachine.FOG.inversioninfotext=Once all milestones of the Forge reach tier 7, inversion activates. This uncaps the maximum tier of all milestones and allows to scale infinitely. The scaling of each milestone changes from exponential to linear, but the granted graviton shard amount keeps increasing. The amount of progress needed for each subsequent milestone is as much as needed for the 7th tier of each milestone. The Composition milestone is once again an exception, as that continues to scale by 1 each tier, with it's own formula for calculating progress. Each module type is given a value, ranging from 1 for the Helioflare Power Forge to 5 for the Heliofusion Exoticizer in magmatter mode, then the amount of each module present is substracted by 1 and multiplied by its value. These values are added up and divided by 5, this is the final milestone tier on top of the base 7. gt.blockmachines.multimachine.FOG.powermilestone=Charge gt.blockmachines.multimachine.FOG.recipemilestone=Conversion gt.blockmachines.multimachine.FOG.fuelmilestone=Catalyst gt.blockmachines.multimachine.FOG.purchasablemilestone=Composition gt.blockmachines.multimachine.FOG.power=EU Consumed gt.blockmachines.multimachine.FOG.recipes=Recipes Processed -gt.blockmachines.multimachine.FOG.fuel=Fuel Units Consumed +gt.blockmachines.multimachine.FOG.fuelconsumed=Fuel Units Consumed gt.blockmachines.multimachine.FOG.extensions=Extensions Built gt.blockmachines.multimachine.FOG.shardgain=Graviton Shards gained +gt.blockmachines.multimachine.FOG.consumeUpgradeMats=Click to consume upgrade materials, supply §4exact§r stacksizes +gt.blockmachines.multimachine.FOG.clickhere=Confused? Click here for some general info +gt.blockmachines.multimachine.FOG.introduction=§NIntroduction +gt.blockmachines.multimachine.FOG.introductioninfotext=There's a lot going on in the Forge of the Gods, which can be quite confusing at first. This menu aims to explain everything that is happening and all the capabilities/mechanics of the forge. +gt.blockmachines.multimachine.FOG.tableofcontents=§NTable of Contents: +gt.blockmachines.multimachine.FOG.fuel=Fuel +gt.blockmachines.multimachine.FOG.modules=Modules +gt.blockmachines.multimachine.FOG.upgrades=Upgrades +gt.blockmachines.multimachine.FOG.milestones=Milestones +gt.blockmachines.multimachine.FOG.fuelinfotext=Once the structure of the Forge is built and the multiblock is formed, just simply turning it on is not sufficient to make it functional. The Forge must be supplied with a certain amount of Star Fuel (the item) to actually boot up. The amount of Star Fuel needed depends on the current fuel consumption factor, which can be set in the fuel configuration menu. By default the maximum is 5, but it can be increased later on with upgrades. Star Fuel scaling is as follows: factor*25*1.2^factor. Star Fuel can be supplied via an input bus, it gets consumed periodically and stored internally. Once there is enough Star Fuel stored in the multi, it turns on for real (allowing modules to connect) and converts the consumed Star Fuel into stored Stellar Fuel. From this point onwards, the Forge must be fueled via one of the liquid fuels (type can be selected in the fuel config menu). If there isn't enough of the selected fuel present in the input hatch, the stored fuel amount will decrease and if it reaches 0, the Forge enters the previous 'off' state where modules disconnect and it has to be supplied with Star Fuel again. The amount of internally stored Stellar Fuel (liquid) can be increased by turning on battery charging, this will cause the fuel usage to double, but half of it will be stored in the internal battery. +gt.blockmachines.multimachine.FOG.moduleinfotext=There are 4 types of modules that can be used in the Forge, the Helioflare Power Forge, Helioflux Melting Core, Heliothermal Plasma Fabricator and Heliofusion Exoticizer. These modules are separate multiblocks that have to be built into the Godforge structure at their designated spots. Once built, these modules have to connect to the Godforge, which happens automatically if all requirements for the respective module are met. Alternatively, there is a button to refresh their status without waiting for the timer. Each of these modules has its specialized functionality & requirements and is affected differently by certain upgrades. The first unlocked module is the §BHelioflare Power Forge§6, which simply put is a blast furnace even more powerful than the mega version. Additionally, this module has a furnace mode, turning it into a hyper powerful multi smelter. This module is unlocked by default and has 1024 base parallel. The second unlock is the §BHelioflux Melting Core§6, which also processes blast furnace recipes, but with a twist, the outputs are ejected in their molten form instead of hot/regular ingots. If an output does not have a molten form, it will output its regular form. This module has to be unlocked by an upgrade to function and has 512 base parallel. The third module is the §BHeliothermal Plasma Fabricator§6, which possesses a unique recipemap featuring direct material to plasma conversion recipes. These recipes are grouped by two properties, fusion tier and steps required, limiting which recipes can be processed before their respective upgrades are unlocked. Unlike regular fusion, these recipes produce the plasma of the input material. This module has 384 base parallel. The fourth and last module is the §BHeliofusion Exoticizer§6, a module capable of producing quark gluon plasma and later on magmatter. This module has unique automation challenges for both materials, so it is recommended to have two of these, as they have to be locked to either one of the materials. The common rule for both modes' automation challenges is as follows: the module outputs materials at the start of a recipe cycle and waits for the correct inputs to arrive before starting the actual processing of the output material. If producing quark-gluon plasma, the module outputs up 7 different fluids/tiny piles with amounts between 1 and 64, and their corresponding plasmas and amounts have to be returned in order for the recipe to process. For each L of fluid, a bucket of plasma and for each tiny pile an ingot's worth of plasma must be returned for the recipe to work. The amount of initial outputs scales with parallel amount. If magmatter mode is active, the automation challenge changes. Now the module outputs 1-50L of tachyon rich temporal fluid, 51-100L of spatially enlarged fluid and one tiny pile of a high tier material. The challenge is to return both the tachyon rich and spatially enlarged fluids, plus as much plasma of the tiny pile's material (in ingots) as the difference between the amounts of spatially enlarged and tachyon rich fluid. Once all of these have been returned in the correct amounts, the recipe will start to process and output magmatter. The initial input amounts (except the tiny pile) scale with parallel. This module has 36 base parallel and only scales in multiples of nine. +gt.blockmachines.multimachine.FOG.upgradeinfotext=Uprades are the heart and soul of the Godforge, they unlock most of its functionality and processing power. The upgrade tree can be accessed via its button on the main gui and each upgrade node can be clicked for more information on its effects and unlock requirements. In general, each upgrade can only be unlocked if the prior one is unlocked and there are enough available graviton shards. One exception to this is the first upgrade, as that one has no prior upgrade. Some upgrades can also have extra material costs, which are denoted next to the unlock button if applicable. If an upgrade has more than 1 connected prior upgrade, then there are two options, either the upgrade requires ALL connected prior upgrades or AT LEAST ONE (indicated by the connection's color). Upgrades can be refunded by simply pressing the unlock button again, but this only works if ALL connected later upgrades are not active/unlocked. The block of upgrades following the unlock of the Heliufusion Exoticizer module are special, as they are what is considered §Bthe Split§6. As the name suggests, only one path out of the three may be chosen at first, and the others will be locked. Each path has specialized buffs that are primarily targeted towards a specific module, and thus affect other module types with reduced effect (unless stated otherwise). The amount of unlockable paths depends on the amount of rings the Godforge has, which in turn are limited by later upgrades. +gt.blockmachines.multimachine.FOG.milestoneinfotext=Milestones are essential for upgrading the Godforge, as they are the source of graviton shards, the main currency needed for unlocking upgrades. In essence, milestones are just what their name suggests, thresholds that when reached, grant graviton shards. There are four types of milestones, Charge, Conversion, Catalyst and Composition, each referring to a stat of the Godforge. Each milestone has 7 tiers, each being harder to reach than the last, but also granting more graviton shards. The first tier grants 1 graviton shard, the second 2, etc. The §BCharge§6 milestone scales off total power consumption of all modules combined, the first tier being unlocked at 1e15 EU consumed, and each subsequent milestone scaling by 9x. The §BConversion§6 milestone scales off total recipes processed across all modules (excluding the Helioflare Power Forge's furnace mode) and its first tier is unlocked at 10M processed recipes. Following tiers scale by 6x. The §BCatalyst§6 milestone is based on the Forge's fuel consumption, counted in Stellar Fuel units (the number entered in the fuel config menu). Reaching the first tier requires 10,000 fuel units to be consumed, and each tier above scales by 3x. Last but not least, the §BComposition§6 milestone works a bit differently, as it scales off the Forge's structure. Milestone levels are granted for each unique type of module present in the structure (Helifusion Exoticizer modules on quark-gluon and magmatter mode count as unique) and for each additional ring built. Your research suggests that something strange might happen if all milestones reach their final tier... Make sure to check back! + +gt.blockmachines.multimachine.FOG.hint.0=1 - Classic Hatches or Transcendentally Amplified Magnetic Confinement Casing +gt.blockmachines.multimachine.FOG.hint.1=2 - Module Controllers or Singularity Reinforced Stellar Shielding Casing # Optical Circuits achievement.gt.metaitem.03.32155=Optical Assembly diff --git a/src/main/resources/assets/tectech/textures/gui/background/star.png b/src/main/resources/assets/tectech/textures/gui/background/star.png Binary files differindex ad21ad0868..17872e9cf6 100644 --- a/src/main/resources/assets/tectech/textures/gui/background/star.png +++ b/src/main/resources/assets/tectech/textures/gui/background/star.png diff --git a/src/main/resources/assets/tectech/textures/gui/button/boxed_checkmark.png b/src/main/resources/assets/tectech/textures/gui/button/boxed_checkmark.png Binary files differnew file mode 100644 index 0000000000..3c22d97c9b --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/button/boxed_checkmark.png diff --git a/src/main/resources/assets/tectech/textures/gui/button/boxed_exclamation_point.png b/src/main/resources/assets/tectech/textures/gui/button/boxed_exclamation_point.png Binary files differnew file mode 100644 index 0000000000..f013b5aa13 --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/button/boxed_exclamation_point.png diff --git a/src/main/resources/assets/tectech/textures/gui/button/purple.png b/src/main/resources/assets/tectech/textures/gui/button/purple.png Binary files differnew file mode 100644 index 0000000000..60af6ebc6f --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/button/purple.png diff --git a/src/main/resources/assets/tectech/textures/gui/button/purple_pressed.png b/src/main/resources/assets/tectech/textures/gui/button/purple_pressed.png Binary files differnew file mode 100644 index 0000000000..88339c7576 --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/button/purple_pressed.png 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 Binary files differindex 07c606ec11..149b9f0f10 100644 --- 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 diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/eject.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/eject.png Binary files differnew file mode 100644 index 0000000000..51b15adb5c --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/eject.png diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/eject_disabled.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/eject_disabled.png Binary files differnew file mode 100644 index 0000000000..f3c9e0d13f --- /dev/null +++ b/src/main/resources/assets/tectech/textures/gui/overlay_button/eject_disabled.png |