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/main/java | |
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/main/java')
50 files changed, 2332 insertions, 533 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() { |