From 557e45e61b93ac4238741029d76d4f70ebe5ced4 Mon Sep 17 00:00:00 2001 From: miozune Date: Mon, 4 Dec 2023 05:40:50 +0900 Subject: [PATCH] Migrate to new RecipeMap (#261) * Migrate to new RecipeMap * update gradle+deps+bs --------- Co-authored-by: Martin Robertz --- .gitignore | 11 +- build.gradle | 23 +- dependencies.gradle | 12 +- gradle/wrapper/gradle-wrapper.jar | Bin 62076 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 5 +- .../com/github/technus/tectech/TecTech.java | 4 +- .../technus/tectech/loader/MainLoader.java | 3 +- .../github/technus/tectech/nei/IMCForNEI.java | 45 -- .../technus/tectech/nei/NEI_TT_Config.java | 35 -- .../nei/TT_NEI_EyeOfHarmonyHandler.java | 33 -- .../tectech/nei/TT_NEI_ResearchHandler.java | 358 ---------------- .../tectech/nei/TT_NEI_ScannerHandler.java | 358 ---------------- .../tectech/recipe/EyeOfHarmonyFrontend.java | 202 +++++++++ .../recipe/EyeOfHarmonyRecipeStorage.java | 4 +- .../recipe/ResearchStationFrontend.java | 94 ++++ .../technus/tectech/recipe/TT_recipe.java | 403 ------------------ .../tectech/recipe/TT_recipeAdder.java | 13 +- .../tectech/recipe/TecTechRecipeMaps.java | 49 +++ .../tectech/thing/gui/TecTechUITextures.java | 8 + .../GT_MetaTileEntity_EM_EyeOfHarmony.java | 8 + .../multi/GT_MetaTileEntity_EM_research.java | 75 +--- .../multi/GT_MetaTileEntity_TM_microwave.java | 3 +- .../GT_MetaTileEntity_MultiblockBase_EM.java | 9 - .../gui/multimachines/ResearchFake.png | Bin 1972 -> 0 bytes .../resources/assets/tectech/lang/en_US.lang | 12 + .../textures/gui/picture/rack_large.png | Bin 166 -> 332 bytes .../gui/progressbar/research_station_1.png | Bin 0 -> 114 bytes .../gui/progressbar/research_station_2.png | Bin 0 -> 172 bytes .../gui/progressbar/research_station_3.png | Bin 0 -> 281 bytes 30 files changed, 418 insertions(+), 1352 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/nei/IMCForNEI.java delete mode 100644 src/main/java/com/github/technus/tectech/nei/NEI_TT_Config.java delete mode 100644 src/main/java/com/github/technus/tectech/nei/TT_NEI_EyeOfHarmonyHandler.java delete mode 100644 src/main/java/com/github/technus/tectech/nei/TT_NEI_ResearchHandler.java delete mode 100644 src/main/java/com/github/technus/tectech/nei/TT_NEI_ScannerHandler.java create mode 100644 src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java create mode 100644 src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/TT_recipe.java create mode 100644 src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java delete mode 100644 src/main/resources/assets/gregtech/textures/gui/multimachines/ResearchFake.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/research_station_1.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/research_station_2.png create mode 100644 src/main/resources/assets/tectech/textures/gui/progressbar/research_station_3.png diff --git a/.gitignore b/.gitignore index 3274a536d..27a8ae0f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .gradle .settings /.idea/ +/.vscode/ /run/ /build/ /eclipse/ @@ -25,7 +26,13 @@ whitelist.json *.iml *.ipr *.iws -src/main/resources/mixins.*.json +src/main/resources/mixins.*([!.]).json *.bat -.vscode/settings.json +*.DS_Store +!gradlew.bat .factorypath +addon.local.gradle +addon.local.gradle.kts +addon.late.local.gradle +addon.late.local.gradle.kts +layout.json \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4e31dc883..8507c7dfb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -//version: 1700844281 +//version: 1701530445 /* DO NOT CHANGE THIS FILE! Also, you may replace this file at any time if there is an update available. @@ -28,27 +28,12 @@ import java.util.concurrent.TimeUnit buildscript { repositories { - mavenCentral() - - maven { - name 'forge' - url 'https://maven.minecraftforge.net' - } maven { // GTNH RetroFuturaGradle and ASM Fork name "GTNH Maven" url "http://jenkins.usrv.eu:8081/nexus/content/groups/public/" allowInsecureProtocol = true } - maven { - name 'sonatype' - url 'https://oss.sonatype.org/content/repositories/snapshots/' - } - maven { - name 'Scala CI dependencies' - url 'https://repo1.maven.org/maven2/' - } - mavenLocal() } } @@ -793,12 +778,12 @@ ext.java17PatchDependenciesCfg = configurations.create("java17PatchDependencies" } dependencies { - def lwjgl3ifyVersion = '1.5.1' + def lwjgl3ifyVersion = '1.5.7' if (modId != 'lwjgl3ify') { java17Dependencies("com.github.GTNewHorizons:lwjgl3ify:${lwjgl3ifyVersion}") } if (modId != 'hodgepodge') { - java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.3.17') + java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.3.35') } java17PatchDependencies("com.github.GTNewHorizons:lwjgl3ify:${lwjgl3ifyVersion}:forgePatches") {transitive = false} @@ -1310,7 +1295,7 @@ def addCurseForgeRelation(String type, String name) { // Updating -def buildscriptGradleVersion = "8.2.1" +def buildscriptGradleVersion = "8.5" tasks.named('wrapper', Wrapper).configure { gradleVersion = buildscriptGradleVersion diff --git a/dependencies.gradle b/dependencies.gradle index 82674050a..d546b3726 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,14 +2,14 @@ dependencies { shadowImplementation('com.github.GTNewHorizons:AVRcore:1.0.1') - api('com.github.GTNewHorizons:GT5-Unofficial:5.09.44.90:dev') + api('com.github.GTNewHorizons:GT5-Unofficial:5.09.44.96:dev') api('com.github.GTNewHorizons:Yamcl:0.5.86:dev') implementation('com.github.GTNewHorizons:GTNEIOrePlugin:1.1.3:dev') compileOnly("TGregworks:TGregworks:1.7.10-GTNH-1.0.23:deobf") {transitive=false} - compileOnly('com.github.GTNewHorizons:TinkersConstruct:1.10.11-GTNH:dev') {transitive=false} + compileOnly('com.github.GTNewHorizons:TinkersConstruct:1.10.12-GTNH:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:OpenComputers:1.9.19-GTNH:dev') {transitive=false} - compileOnly('com.github.GTNewHorizons:GTplusplus:1.10.32:dev') {transitive=false} + compileOnly('com.github.GTNewHorizons:GTplusplus:1.10.34:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:Avaritia:1.46:dev') {transitive=false} compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive=false} @@ -17,9 +17,9 @@ dependencies { // for testing EOH recipes //runtimeOnlyNonPublishable("TGregworks:TGregworks:1.7.10-GTNH-1.0.23:deobf") - //runtimeOnlyNonPublishable('com.github.GTNewHorizons:TinkersConstruct:1.10.11-GTNH:dev') - //runtimeOnlyNonPublishable('com.github.GTNewHorizons:NewHorizonsCoreMod:2.2.40:dev') - //runtimeOnlyNonPublishable('com.github.GTNewHorizons:GoodGenerator:0.7.6:dev') { + //runtimeOnlyNonPublishable('com.github.GTNewHorizons:TinkersConstruct:1.10.12-GTNH:dev') + //runtimeOnlyNonPublishable('com.github.GTNewHorizons:NewHorizonsCoreMod:2.2.43:dev') + //runtimeOnlyNonPublishable('com.github.GTNewHorizons:GoodGenerator:0.7.9:dev') { // exclude group: "com.github.GTNewHorizons", module: "TecTech" //} //runtimeOnlyNonPublishable("curse.maven:extra-utilities-225561:2264384") {transitive=false} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a79e29d3e0ab67b14947c167a862655af9b..033e24c4cdf41af1ab109bc7f253b2b887023340 100644 GIT binary patch delta 16170 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 delta 14892 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 17a8ddce2..1af9e0930 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cbb4..fcb6fca14 100755 --- a/gradlew +++ b/gradlew @@ -130,10 +130,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 292ebeb7e..0845e0273 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -9,9 +9,9 @@ import com.github.technus.tectech.loader.TecTechConfig; import com.github.technus.tectech.loader.gui.CreativeTabTecTech; import com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData; -import com.github.technus.tectech.nei.IMCForNEI; import com.github.technus.tectech.proxy.CommonProxy; import com.github.technus.tectech.recipe.EyeOfHarmonyRecipeStorage; +import com.github.technus.tectech.recipe.TecTechRecipeMaps; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; @@ -85,6 +85,7 @@ public void PreLoad(FMLPreInitializationEvent PreEvent) { FMLCommonHandler.instance().bus().register(enderWorldSavedData); MinecraftForge.EVENT_BUS.register(enderWorldSavedData); + TecTechRecipeMaps.init(); MainLoader.preLoad(); } @@ -95,7 +96,6 @@ public void Load(FMLInitializationEvent event) { MainLoader.load(); MainLoader.addAfterGregTechPostLoadRunner(); - IMCForNEI.IMCSender(); } @Mod.EventHandler 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 cacf23613..5681a2128 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -28,6 +28,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; +import gregtech.api.recipe.RecipeMaps; import gregtech.api.util.GT_Recipe; @SuppressWarnings("deprecation") @@ -146,7 +147,7 @@ private static void FixBrokenFusionRecipes() { } } } - for (GT_Recipe r : GT_Recipe.GT_Recipe_Map.sFusionRecipes.mRecipeList) { + for (GT_Recipe r : RecipeMaps.fusionRecipes.getAllRecipes()) { Fluid fluid = binds.get(r.mFluidOutputs[0].getFluid()); if (fluid != null) { if (DEBUG_MODE) { diff --git a/src/main/java/com/github/technus/tectech/nei/IMCForNEI.java b/src/main/java/com/github/technus/tectech/nei/IMCForNEI.java deleted file mode 100644 index 033882609..000000000 --- a/src/main/java/com/github/technus/tectech/nei/IMCForNEI.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.github.technus.tectech.nei; - -import static com.github.technus.tectech.Reference.MODID; -import static gregtech.api.enums.Mods.NotEnoughItems; - -import net.minecraft.nbt.NBTTagCompound; - -import cpw.mods.fml.common.event.FMLInterModComms; - -public class IMCForNEI { - - public static void IMCSender() { - if (!NotEnoughItems.isModLoaded()) { - return; - } - sendHandler("gt.recipe.eyeofharmony", "gregtech:gt.blockmachines:15410", 1); - sendCatalyst("gt.recipe.eyeofharmony", "gregtech:gt.blockmachines:15410"); - } - - private static void sendHandler(String aName, String aBlock, int aMaxRecipesPerPage) { - NBTTagCompound aNBT = new NBTTagCompound(); - aNBT.setString("handler", aName); - aNBT.setString("modName", MODID); - aNBT.setString("modId", MODID); - aNBT.setBoolean("modRequired", true); - aNBT.setString("itemName", aBlock); - aNBT.setInteger("handlerHeight", 135); - aNBT.setInteger("handlerWidth", 166); - aNBT.setInteger("maxRecipesPerPage", aMaxRecipesPerPage); - aNBT.setInteger("yShift", 6); - FMLInterModComms.sendMessage("NotEnoughItems", "registerHandlerInfo", aNBT); - } - - private static void sendCatalyst(String aName, String aStack, int aPriority) { - NBTTagCompound aNBT = new NBTTagCompound(); - aNBT.setString("handlerID", aName); - aNBT.setString("itemName", aStack); - aNBT.setInteger("priority", aPriority); - FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", aNBT); - } - - private static void sendCatalyst(String aName, String aStack) { - sendCatalyst(aName, aStack, 0); - } -} diff --git a/src/main/java/com/github/technus/tectech/nei/NEI_TT_Config.java b/src/main/java/com/github/technus/tectech/nei/NEI_TT_Config.java deleted file mode 100644 index 1523302a2..000000000 --- a/src/main/java/com/github/technus/tectech/nei/NEI_TT_Config.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.technus.tectech.nei; - -import com.github.technus.tectech.recipe.TT_recipe; - -import codechicken.nei.api.IConfigureNEI; -import cpw.mods.fml.common.FMLCommonHandler; - -public class NEI_TT_Config implements IConfigureNEI { // must be NEI*Config - - public static boolean sIsAdded = true; - public static TT_NEI_ResearchHandler TT_RH; - public static TT_NEI_ScannerHandler TT_SH; - public static TT_NEI_EyeOfHarmonyHandler TT_EOH; - - @Override - public void loadConfig() { - sIsAdded = false; - if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { - TT_RH = new TT_NEI_ResearchHandler(TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes); - TT_SH = new TT_NEI_ScannerHandler(TT_recipe.GT_Recipe_MapTT.sScannableFakeRecipes); - TT_EOH = new TT_NEI_EyeOfHarmonyHandler(TT_recipe.GT_Recipe_MapTT.sEyeofHarmonyRecipes); - } - sIsAdded = true; - } - - @Override - public String getName() { - return "TecTech NEI Plugin"; - } - - @Override - public String getVersion() { - return "(1.0)"; - } -} diff --git a/src/main/java/com/github/technus/tectech/nei/TT_NEI_EyeOfHarmonyHandler.java b/src/main/java/com/github/technus/tectech/nei/TT_NEI_EyeOfHarmonyHandler.java deleted file mode 100644 index 7d8e98244..000000000 --- a/src/main/java/com/github/technus/tectech/nei/TT_NEI_EyeOfHarmonyHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.technus.tectech.nei; - -import static com.github.technus.tectech.Reference.MODID; - -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Recipe; -import gregtech.nei.GT_NEI_DefaultHandler; - -public class TT_NEI_EyeOfHarmonyHandler extends GT_NEI_DefaultHandler { - - public TT_NEI_EyeOfHarmonyHandler(final GT_Recipe.GT_Recipe_Map tMap) { - super(tMap); - if (!NEI_TT_Config.sIsAdded) { - - FMLInterModComms.sendRuntimeMessage( - GT_Values.GT, - "NEIPlugins", - "register-crafting-handler", - MODID + "@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - @Override - public TemplateRecipeHandler newInstance() { - return new TT_NEI_EyeOfHarmonyHandler(this.mRecipeMap); - } -} diff --git a/src/main/java/com/github/technus/tectech/nei/TT_NEI_ResearchHandler.java b/src/main/java/com/github/technus/tectech/nei/TT_NEI_ResearchHandler.java deleted file mode 100644 index e87350b2b..000000000 --- a/src/main/java/com/github/technus/tectech/nei/TT_NEI_ResearchHandler.java +++ /dev/null @@ -1,358 +0,0 @@ -package com.github.technus.tectech.nei; - -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static gregtech.api.enums.ItemList.Display_Fluid; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.recipe.TT_recipe; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.ItemList; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class TT_NEI_ResearchHandler extends TemplateRecipeHandler { - - protected final TT_recipe.GT_Recipe_MapTT mRecipeMap; - - public TT_NEI_ResearchHandler(TT_recipe.GT_Recipe_MapTT aRecipeMap) { - mRecipeMap = aRecipeMap; - transferRects.add( - new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier())); - if (!NEI_TT_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - TecTech.instance, - "NEIPlugins", - "register-crafting-handler", - Reference.MODID + '@' + getRecipeName() + '@' + getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - public List getSortedRecipes() { - List result = new ArrayList<>(mRecipeMap.mRecipeList); - Collections.sort(result); - return result; - } - - public static void drawText(int aX, int aY, String aString, int aColor) { - Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor); - } - - @Override - public TemplateRecipeHandler newInstance() { - NEI_TT_Config.TT_RH = new TT_NEI_ResearchHandler(mRecipeMap); - return NEI_TT_Config.TT_RH; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOverlayIdentifier())) { - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - arecipes.add(new CachedDefaultRecipe(tRecipe)); - } - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack aResult) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult); - - ArrayList tResults = new ArrayList<>(); - tResults.add(aResult); - tResults.add(GT_OreDictUnificator.get(true, aResult)); - if (tPrefixMaterial != null && !tPrefixMaterial.mBlackListed - && !tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty()) { - for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { - tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); - } - } - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true); - if (tFluid != null) { - tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if (tData.fluid.isFluidEqual(tFluid)) { - tResults.add(GT_Utility.copy(tData.filledContainer)); - } - } - } - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe); - for (ItemStack tStack : tResults) { - if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) { - arecipes.add(tNEIRecipe); - break; - } - } - } - } - } - - @Override - public void loadUsageRecipes(ItemStack aInput) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput); - - ArrayList tInputs = new ArrayList<>(); - tInputs.add(aInput); - tInputs.add(GT_OreDictUnificator.get(false, aInput)); - if (tPrefixMaterial != null && !tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty()) { - for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { - tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); - } - } - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true); - if (tFluid != null) { - tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if (tData.fluid.isFluidEqual(tFluid)) { - tInputs.add(GT_Utility.copy(tData.filledContainer)); - } - } - } - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe); - for (ItemStack tStack : tInputs) { - if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) { - arecipes.add(tNEIRecipe); - break; - } - } - } - } - } - - @Override - public String getOverlayIdentifier() { - return mRecipeMap.mNEIName; - } - - @Override - public void drawBackground(int recipe) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78); - } - - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public String getRecipeName() { - return GT_LanguageManager.getTranslation(mRecipeMap.mUnlocalizedName); - } - - @Override - public String getGuiTexture() { - return mRecipeMap.mNEIGUIPath; - } - - @Override - public List handleItemTooltip(GuiRecipe gui, ItemStack aStack, List currenttip, - int aRecipeIndex) { - TemplateRecipeHandler.CachedRecipe tObject = arecipes.get(aRecipeIndex); - if (tObject instanceof CachedDefaultRecipe tRecipe) { - for (PositionedStack tStack : tRecipe.mOutputs) { - if (aStack == tStack.item) { - if (!(tStack instanceof FixedPositionedStack) || ((FixedPositionedStack) tStack).mChance <= 0 - || ((FixedPositionedStack) tStack).mChance == 10000) { - break; - } - currenttip.add( - trans("150", "Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 - + '.' - + (((FixedPositionedStack) tStack).mChance % 100 < 10 - ? "0" + ((FixedPositionedStack) tStack).mChance % 100 - : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) - + '%'); - break; - } - } - for (PositionedStack tStack : tRecipe.mInputs) { - if (aStack == tStack.item) { - if (Display_Fluid.isStackEqual(tStack.item, true, true) || tStack.item.stackSize != 0) { - break; - } - currenttip.add(trans("151", "Does not get consumed in the process")); - break; - } - } - } - return currenttip; - } - - @Override - public void drawExtras(int aRecipeIndex) { - int tEUt = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mEUt; - int computation = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mDuration; - String[] recipeDesc = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc(); - if (recipeDesc == null) { - int tSpecial = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue; - short ampere = (short) (tSpecial & 0xFFFF), minComputationPerSec = (short) (tSpecial >>> 16); - if (tEUt != 0) { - drawText( - 10, - 73, - trans("152.1", "Max EU: ") + GT_Utility.formatNumbers( - (1 + (computation - minComputationPerSec) / minComputationPerSec) * (long) tEUt - * ampere - * 20) - + " EU", - -16777216); - drawText( - 10, - 83, - trans("153", "Usage: ") + GT_Utility.formatNumbers((long) tEUt * ampere) + " EU/t", - -16777216); - if (mRecipeMap.mShowVoltageAmperageInNEI) { - drawText(10, 93, trans("154", "Voltage: ") + GT_Utility.formatNumbers(tEUt) + " EU", -16777216); - drawText(10, 103, trans("155", "Amperage: ") + GT_Utility.formatNumbers(ampere), -16777216); - } else { - drawText(10, 93, trans("156", "Voltage: unspecified"), -16777216); - drawText(10, 103, trans("157", "Amperage: unspecified"), -16777216); - } - } - drawText(10, 113, "Computation: " + GT_Utility.formatNumbers(computation), -16777216); - drawText(10, 123, "Min Computation: " + GT_Utility.formatNumbers(minComputationPerSec) + " /s", -16777216); - } else { - int i = 0; - for (String descLine : recipeDesc) { - drawText(10, 73 + 10 * i, descLine, -16777216); - i++; - } - } - } - - public static class FixedPositionedStack extends PositionedStack { - - public final int mChance; - public boolean permutated = false; - - public FixedPositionedStack(Object object, int x, int y) { - this(object, x, y, 0); - } - - public FixedPositionedStack(Object object, int x, int y, int aChance) { - super(object, x, y, true); - mChance = aChance; - } - - @Override - public void generatePermutations() { - if (permutated) { - return; - } - ArrayList tDisplayStacks = new ArrayList<>(); - for (ItemStack tStack : items) { - if (GT_Utility.isStackValid(tStack)) { - if (tStack.getItemDamage() == 32767) { - List permutations = ItemList.itemMap.get(tStack.getItem()); - if (!permutations.isEmpty()) { - ItemStack stack; - for (Iterator iterator = permutations.iterator(); iterator - .hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, stack))) { - stack = iterator.next(); - } - } else { - ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize); - base.stackTagCompound = tStack.stackTagCompound; - tDisplayStacks.add(base); - } - } else { - tDisplayStacks.add(GT_Utility.copy(tStack)); - } - } - } - items = tDisplayStacks.toArray(nullItem); - if (items.length == 0) { - items = new ItemStack[] { new ItemStack(Blocks.fire) }; - } - permutated = true; - setPermutationToRender(0); - } - } - - public class CachedDefaultRecipe extends TemplateRecipeHandler.CachedRecipe { - - public final GT_Recipe mRecipe; - public final List mOutputs; - public final List mInputs; - - public CachedDefaultRecipe(GT_Recipe aRecipe) { - mRecipe = aRecipe; - - mOutputs = new ArrayList<>(); - mInputs = new ArrayList<>(); - - int tStartIndex = 0; - if (aRecipe.getRepresentativeInput(tStartIndex) != null) { - mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14 + 9)); - } - if (aRecipe.mSpecialItems != null) { - mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52)); - } - if (aRecipe.getOutput(tStartIndex) != null) { - mOutputs.add( - new FixedPositionedStack( - aRecipe.getOutput(tStartIndex), - 102, - 14 + 9, - aRecipe.getOutputChance(tStartIndex))); - } - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 10, mInputs); - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - return mOutputs; - } - } - - public String trans(String aKey, String aEnglish) { - return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish, false); - } -} diff --git a/src/main/java/com/github/technus/tectech/nei/TT_NEI_ScannerHandler.java b/src/main/java/com/github/technus/tectech/nei/TT_NEI_ScannerHandler.java deleted file mode 100644 index 04558efad..000000000 --- a/src/main/java/com/github/technus/tectech/nei/TT_NEI_ScannerHandler.java +++ /dev/null @@ -1,358 +0,0 @@ -package com.github.technus.tectech.nei; - -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static gregtech.api.enums.ItemList.Display_Fluid; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.recipe.TT_recipe; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.ItemList; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class TT_NEI_ScannerHandler extends TemplateRecipeHandler { - - protected final TT_recipe.GT_Recipe_MapTT mRecipeMap; - - public TT_NEI_ScannerHandler(TT_recipe.GT_Recipe_MapTT aRecipeMap) { - mRecipeMap = aRecipeMap; - transferRects.add(new RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier())); - if (!NEI_TT_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - TecTech.instance, - "NEIPlugins", - "register-crafting-handler", - Reference.MODID + '@' + getRecipeName() + '@' + getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - public List getSortedRecipes() { - List result = new ArrayList<>(mRecipeMap.mRecipeList); - Collections.sort(result); - return result; - } - - public static void drawText(int aX, int aY, String aString, int aColor) { - Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor); - } - - @Override - public TemplateRecipeHandler newInstance() { - NEI_TT_Config.TT_SH = new TT_NEI_ScannerHandler(mRecipeMap); - return NEI_TT_Config.TT_SH; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOverlayIdentifier())) { - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - arecipes.add(new CachedDefaultRecipe(tRecipe)); - } - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack aResult) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult); - - ArrayList tResults = new ArrayList<>(); - tResults.add(aResult); - tResults.add(GT_OreDictUnificator.get(true, aResult)); - if (tPrefixMaterial != null && !tPrefixMaterial.mBlackListed - && !tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty()) { - for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { - tResults.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); - } - } - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aResult, true); - if (tFluid != null) { - tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if (tData.fluid.isFluidEqual(tFluid)) { - tResults.add(GT_Utility.copy(tData.filledContainer)); - } - } - } - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe); - for (ItemStack tStack : tResults) { - if (tNEIRecipe.contains(tNEIRecipe.mOutputs, tStack)) { - arecipes.add(tNEIRecipe); - break; - } - } - } - } - } - - @Override - public void loadUsageRecipes(ItemStack aInput) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput); - - ArrayList tInputs = new ArrayList<>(); - tInputs.add(aInput); - tInputs.add(GT_OreDictUnificator.get(false, aInput)); - if (tPrefixMaterial != null && !tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty()) { - for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { - tInputs.add(GT_OreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); - } - } - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aInput, true); - if (tFluid != null) { - tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if (tData.fluid.isFluidEqual(tFluid)) { - tInputs.add(GT_Utility.copy(tData.filledContainer)); - } - } - } - for (GT_Recipe tRecipe : getSortedRecipes()) { - if (!tRecipe.mHidden) { - CachedDefaultRecipe tNEIRecipe = new CachedDefaultRecipe(tRecipe); - for (ItemStack tStack : tInputs) { - if (tNEIRecipe.contains(tNEIRecipe.mInputs, tStack)) { - arecipes.add(tNEIRecipe); - break; - } - } - } - } - } - - @Override - public String getOverlayIdentifier() { - return mRecipeMap.mNEIName; - } - - @Override - public void drawBackground(int recipe) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(-4, -8, 1, 3, 174, 78); - } - - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public String getRecipeName() { - return GT_LanguageManager.getTranslation(mRecipeMap.mUnlocalizedName); - } - - @Override - public String getGuiTexture() { - // return "gregtech:textures/gui/" + this.mRecipeMap.mUnlocalizedName + ".png"; - return mRecipeMap.mNEIGUIPath; - } - - @Override - public List handleItemTooltip(GuiRecipe gui, ItemStack aStack, List currenttip, - int aRecipeIndex) { - TemplateRecipeHandler.CachedRecipe tObject = arecipes.get(aRecipeIndex); - if (tObject instanceof CachedDefaultRecipe tRecipe) { - for (PositionedStack tStack : tRecipe.mOutputs) { - if (aStack == tStack.item) { - if (!(tStack instanceof FixedPositionedStack) || ((FixedPositionedStack) tStack).mChance <= 0 - || ((FixedPositionedStack) tStack).mChance == 10000) { - break; - } - currenttip.add( - trans("150", "Chance: ") + ((FixedPositionedStack) tStack).mChance / 100 - + '.' - + (((FixedPositionedStack) tStack).mChance % 100 < 10 - ? "0" + ((FixedPositionedStack) tStack).mChance % 100 - : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) - + '%'); - break; - } - } - for (PositionedStack tStack : tRecipe.mInputs) { - if (aStack == tStack.item) { - if (Display_Fluid.isStackEqual(tStack.item, true, true) || tStack.item.stackSize != 0) { - break; - } - currenttip.add(trans("151", "Does not get consumed in the process")); - break; - } - } - } - return currenttip; - } - - @Override - public void drawExtras(int aRecipeIndex) { - int tEUt = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mEUt; - int computation = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mDuration; - String[] recipeDesc = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.getNeiDesc(); - if (recipeDesc == null) { - int tSpecial = ((CachedDefaultRecipe) arecipes.get(aRecipeIndex)).mRecipe.mSpecialValue; - short ampere = (short) (tSpecial & 0xFFFF), minComputationPerSec = (short) (tSpecial >>> 16); - if (tEUt != 0) { - drawText( - 10, - 73, - trans("152.1", "Max EU: ") + GT_Utility.formatNumbers( - (1 + (computation - minComputationPerSec) / minComputationPerSec) * (long) tEUt - * ampere - * 20) - + " EU", - -16777216); - drawText( - 10, - 83, - trans("153", "Usage: ") + GT_Utility.formatNumbers((long) tEUt * ampere) + " EU/t", - -16777216); - if (mRecipeMap.mShowVoltageAmperageInNEI) { - drawText(10, 93, trans("154", "Voltage: ") + GT_Utility.formatNumbers(tEUt) + " EU", -16777216); - drawText(10, 103, trans("155", "Amperage: ") + GT_Utility.formatNumbers(ampere), -16777216); - } else { - drawText(10, 93, trans("156", "Voltage: unspecified"), -16777216); - drawText(10, 103, trans("157", "Amperage: unspecified"), -16777216); - } - } - drawText(10, 113, "Computation: " + GT_Utility.formatNumbers(computation), -16777216); - drawText(10, 123, "Min Computation: " + GT_Utility.formatNumbers(minComputationPerSec) + " /s", -16777216); - } else { - int i = 0; - for (String descLine : recipeDesc) { - drawText(10, 73 + 10 * i, descLine, -16777216); - i++; - } - } - } - - public static class FixedPositionedStack extends PositionedStack { - - public final int mChance; - public boolean permutated = false; - - public FixedPositionedStack(Object object, int x, int y) { - this(object, x, y, 0); - } - - public FixedPositionedStack(Object object, int x, int y, int aChance) { - super(object, x, y, true); - mChance = aChance; - } - - @Override - public void generatePermutations() { - if (permutated) { - return; - } - ArrayList tDisplayStacks = new ArrayList<>(); - for (ItemStack tStack : items) { - if (GT_Utility.isStackValid(tStack)) { - if (tStack.getItemDamage() == 32767) { - List permutations = ItemList.itemMap.get(tStack.getItem()); - if (!permutations.isEmpty()) { - ItemStack stack; - for (Iterator iterator = permutations.iterator(); iterator - .hasNext(); tDisplayStacks.add(GT_Utility.copyAmount(tStack.stackSize, stack))) { - stack = iterator.next(); - } - } else { - ItemStack base = new ItemStack(tStack.getItem(), tStack.stackSize); - base.stackTagCompound = tStack.stackTagCompound; - tDisplayStacks.add(base); - } - } else { - tDisplayStacks.add(GT_Utility.copy(tStack)); - } - } - } - items = tDisplayStacks.toArray(nullItem); - if (items.length == 0) { - items = new ItemStack[] { new ItemStack(Blocks.fire) }; - } - permutated = true; - setPermutationToRender(0); - } - } - - public class CachedDefaultRecipe extends TemplateRecipeHandler.CachedRecipe { - - public final GT_Recipe mRecipe; - public final List mOutputs; - public final List mInputs; - - public CachedDefaultRecipe(GT_Recipe aRecipe) { - mRecipe = aRecipe; - - mOutputs = new ArrayList<>(); - mInputs = new ArrayList<>(); - - int tStartIndex = 0; - if (aRecipe.getRepresentativeInput(tStartIndex) != null) { - mInputs.add(new FixedPositionedStack(aRecipe.getRepresentativeInput(tStartIndex), 48, 14 + 9)); - } - if (aRecipe.mSpecialItems != null) { - mInputs.add(new FixedPositionedStack(aRecipe.mSpecialItems, 120, 52)); - } - if (aRecipe.getOutput(tStartIndex) != null) { - mOutputs.add( - new FixedPositionedStack( - aRecipe.getOutput(tStartIndex), - 102, - 14 + 9, - aRecipe.getOutputChance(tStartIndex))); - } - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 10, mInputs); - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - return mOutputs; - } - } - - public String trans(String aKey, String aEnglish) { - return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish, false); - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java new file mode 100644 index 000000000..b2070f22b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java @@ -0,0 +1,202 @@ +package com.github.technus.tectech.recipe; + +import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; +import static com.google.common.math.LongMath.pow; +import static gregtech.api.util.GT_Utility.formatNumbers; +import static java.lang.Math.min; +import static net.minecraft.util.EnumChatFormatting.BOLD; +import static net.minecraft.util.EnumChatFormatting.DARK_RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; + +import appeng.util.ReadableNumberConverter; +import codechicken.nei.PositionedStack; +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; +import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class EyeOfHarmonyFrontend extends RecipeMapFrontend { + + private static final int xDirMaxCount = 9; + private static final int itemRows = 9, fluidRows = 2; + public static final int maxItemInputs = 1, maxItemOutputs = xDirMaxCount * itemRows, maxFluidInputs = 0, + maxFluidOutputs = xDirMaxCount * fluidRows; + private static final int yOrigin = 8; + private static final long TRILLION = pow(10, 12); + + public EyeOfHarmonyFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + uiPropertiesBuilder.logoPos(new Pos2d(8, yOrigin)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 117 + (itemRows + fluidRows - 4) * 18)) + .neiSpecialInfoFormatter(new EyeOfHarmonySpecialValueFormatter())); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 79, yOrigin, 1, 1); + } + + public static final int maxItemsToRender = 80; + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(min(itemOutputCount, maxItemsToRender + 1), 7, yOrigin + 36, xDirMaxCount, 12); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + return UIHelper.getGridPositions(fluidInputCount, 0, 0, 0, 0); + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + return UIHelper.getGridPositions(fluidOutputCount, 7, yOrigin + 13 * 17 - 7 - 16, xDirMaxCount, 3); + } + + @Override + public List handleNEIItemTooltip(ItemStack stack, List currentTip, + GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); + EyeOfHarmonyRecipe currentRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; + + // Draw tooltip on planet item. + if (stack.isItemEqual(currentRecipe.getRecipeTriggerItem())) { + currentTip.add( + EnumChatFormatting.GRAY + translateToLocalFormatted( + "tt.nei.eoh.total_items", + formatNumbers(currentRecipe.getSumOfItems()))); + return currentTip; + } + + // Draw tooltip on other items. + double percentage = currentRecipe.getItemStackToProbabilityMap().getOrDefault(stack, -1.0); + + if (percentage != -1.0) { + currentTip.add(EnumChatFormatting.GRAY + translateToLocalFormatted("tt.nei.eoh.solid_mass", percentage)); + currentTip.add( + EnumChatFormatting.GRAY + translateToLocalFormatted( + "tt.nei.eoh.item_count", + formatNumbers(currentRecipe.getItemStackToTrueStackSizeMap().get(stack)))); + } + + return currentTip; + } + + @Override + public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + EyeOfHarmonyRecipe EOHRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; + for (PositionedStack stack : neiCachedRecipe.mInputs) { + if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { + if (stack.item.isItemEqual(EOHRecipe.getRecipeTriggerItem())) { + drawNEIOverlayText(translateToLocal("NC"), stack); + } + } + } + for (PositionedStack stack : neiCachedRecipe.mOutputs) { + if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { + if (EOHRecipe.getItemStackToTrueStackSizeMap().containsKey(stack.item)) { + long stackSize = EOHRecipe.getItemStackToTrueStackSizeMap().get(stack.item); + String displayString; + if (stackSize > 9999) { + displayString = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); + } else { + displayString = String.valueOf(stackSize); + } + + drawNEIOverlayText(displayString, stack, 0xffffff, 0.5f, true, Alignment.BottomRight); + } + } + } + } + + private static class EyeOfHarmonySpecialValueFormatter implements INEISpecialInfoFormatter { + + @Override + public List format(RecipeDisplayInfo recipeInfo) { + EyeOfHarmonyRecipe recipe = (EyeOfHarmonyRecipe) recipeInfo.recipe.mSpecialItems; + List result = new ArrayList<>(); + + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.Hydrogen.In", "Hydrogen") + ": " + + formatNumbers(recipe.getHydrogenRequirement()) + + " L"); + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.Helium.In", "Helium") + ": " + + formatNumbers(recipe.getHydrogenRequirement()) + + " L"); + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.SpacetimeTier", "Spacetime Tier") + ": " + + EOH_TIER_FANCY_NAMES[(int) recipe.getSpacetimeCasingTierRequired()]); + + if (recipe.getEUOutput() < TRILLION) { + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " + + formatNumbers(recipe.getEUOutput()) + + " EU"); + } else { + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " + + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUOutput()) + + " EU"); + } + + if (recipe.getEUOutput() < TRILLION) { + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " + + formatNumbers(recipe.getEUStartCost()) + + " EU"); + } else { + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " + + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUStartCost()) + + " EU"); + } + + result.add( + GT_LanguageManager.addStringLocalization("EOH.Recipe.BaseRecipeChance", "Base Recipe Chance") + ": " + + formatNumbers(100 * recipe.getBaseRecipeSuccessChance()) + + "%"); + result.add( + GT_LanguageManager + .addStringLocalization("EOH.Recipe.RecipeEnergyEfficiency", "Recipe Energy Efficiency") + + ": " + + formatNumbers(100 * recipe.getRecipeEnergyEfficiency()) + + "%"); + + if (recipe.getOutputItems().size() > maxItemsToRender) { + result.add( + "" + DARK_RED + + BOLD + + GT_LanguageManager.addStringLocalization("EOH.Recipe.Warning.0", "Warning") + + RESET + + ": " + + GT_LanguageManager + .addStringLocalization("EOH.Recipe.Warning.1", "Not all items displayed.")); + } + + return result; + } + } +} diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java index 8aa801e15..1ef3955a0 100644 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java +++ b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.recipe; import static com.github.technus.tectech.recipe.EyeOfHarmonyRecipe.processHelper; -import static com.github.technus.tectech.recipe.TT_recipe.GT_Recipe_MapTT.sEyeofHarmonyRecipes; +import static com.github.technus.tectech.recipe.TecTechRecipeMaps.eyeOfHarmonyRecipes; import static java.lang.Math.pow; import java.util.ArrayList; @@ -109,7 +109,7 @@ public EyeOfHarmonyRecipeStorage() { ItemStack planetItem = recipe.getRecipeTriggerItem().copy(); planetItem.stackSize = 0; - sEyeofHarmonyRecipes.addRecipe( + eyeOfHarmonyRecipes.addRecipe( false, new ItemStack[] { planetItem }, outputItems.toArray(new ItemStack[0]), diff --git a/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java b/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java new file mode 100644 index 000000000..130a75c0c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java @@ -0,0 +1,94 @@ +package com.github.technus.tectech.recipe; + +import static gregtech.api.util.GT_Utility.trans; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.github.technus.tectech.thing.gui.TecTechUITextures; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ResearchStationFrontend extends RecipeMapFrontend { + + public ResearchStationFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return Collections.singletonList(new Pos2d(52, 33)); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(106, 33)); + } + + @Override + public Pos2d getSpecialItemPosition() { + return new Pos2d(124, 62); + } + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { + long eut = recipeInfo.recipe.mEUt; + int computation = recipeInfo.recipe.mDuration; + short ampere = (short) (recipeInfo.recipe.mSpecialValue & 0xFFFF); + short minComputationPerSec = (short) (recipeInfo.recipe.mSpecialValue >>> 16); + recipeInfo.drawText( + translateToLocalFormatted( + "tt.nei.research.max_eu", + GT_Utility.formatNumbers( + (1 + (computation - minComputationPerSec) / minComputationPerSec) * eut + * ampere + * 20))); + recipeInfo.drawText(trans("153", "Usage: ") + GT_Utility.formatNumbers(eut * ampere) + " EU/t"); + recipeInfo.drawText(trans("154", "Voltage: ") + GT_Utility.formatNumbers(eut) + " EU/t"); + recipeInfo.drawText(trans("155", "Amperage: ") + GT_Utility.formatNumbers(ampere)); + recipeInfo.drawText( + translateToLocalFormatted("tt.nei.research.computation", GT_Utility.formatNumbers(computation))); + recipeInfo.drawText( + translateToLocalFormatted( + "tt.nei.research.min_computation", + GT_Utility.formatNumbers(minComputationPerSec))); + } + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + + @Override + public void addProgressBar(ModularWindow.Builder builder, Supplier progressSupplier, Pos2d windowOffset) { + int bar1Width = 25; + int bar2Width = 11; + int bar3Height = 18; + List> splitProgress = splitProgress(progressSupplier, bar1Width, bar2Width, bar3Height); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_1, bar1Width) + .setDirection(ProgressBar.Direction.RIGHT).setProgress(splitProgress.get(0)) + .setSynced(false, false).setPos(new Pos2d(81, 40).add(windowOffset)).setSize(bar1Width, 5)); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_2, bar2Width) + .setDirection(ProgressBar.Direction.RIGHT).setProgress(splitProgress.get(1)) + .setSynced(false, false).setPos(new Pos2d(124, 40).add(windowOffset)).setSize(bar2Width, 5)); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_3, bar3Height) + .setDirection(ProgressBar.Direction.DOWN).setProgress(splitProgress.get(2)) + .setSynced(false, false).setPos(new Pos2d(128, 44).add(windowOffset)).setSize(10, bar3Height)); + } +} diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java deleted file mode 100644 index e044dccac..000000000 --- a/src/main/java/com/github/technus/tectech/recipe/TT_recipe.java +++ /dev/null @@ -1,403 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static com.google.common.math.LongMath.pow; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static java.lang.Math.min; -import static net.minecraft.util.EnumChatFormatting.BOLD; -import static net.minecraft.util.EnumChatFormatting.DARK_RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.function.Supplier; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; - -import appeng.util.ReadableNumberConverter; -import codechicken.nei.PositionedStack; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Recipe; -import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; -import gregtech.nei.NEIRecipeInfo; - -@SuppressWarnings("SpellCheckingInspection") -public class TT_recipe extends GT_Recipe { - - public static final String E_RECIPE_ID = "eRecipeID"; - - public TT_recipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, - FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { - super( - aOptimize, - aInputs, - aOutputs, - aSpecialItems, - aChances, - aFluidInputs, - aFluidOutputs, - aDuration, - aEUt, - aSpecialValue); - } - - public static class TT_Recipe_Map { - - public static TT_Recipe_Map sCrafterRecipes = new TT_Recipe_Map<>(); - public static TT_Recipe_Map sMachineRecipes = new TT_Recipe_Map<>(); - - private final HashMap mRecipeMap; - - public TT_Recipe_Map() { - mRecipeMap = new HashMap<>(16); - } - - public T findRecipe(String identifier) { - return mRecipeMap.get(identifier); - } - - public T findRecipe(ItemStack dataHandler) { - if (dataHandler == null || dataHandler.stackTagCompound == null) { - return null; - } - return mRecipeMap.get(dataHandler.stackTagCompound.getString(E_RECIPE_ID)); - } - - public void add(T recipe) { - GameRegistry.UniqueIdentifier uid = GameRegistry.findUniqueIdentifierFor(recipe.mOutputs[0].getItem()); - mRecipeMap.put(uid + ":" + recipe.mOutputs[0].getItemDamage(), recipe); - } - - public Collection recipeList() { - return mRecipeMap.values(); - } - } - - public static class GT_Recipe_MapTT extends GT_Recipe.GT_Recipe_Map { - - public static final GT_Recipe_Map sEyeofHarmonyRecipes = new Eye_Of_Harmony_Recipe_Map( - new HashSet<>(250), - "gt.recipe.eyeofharmony", - "Eye of Harmony", - null, - "gregtech:textures/gui/basicmachines/Extractor", - 1, - 9 * 9, - 1, - 0, - 1, - "", - 1, - "", - true, - false) // Custom NEI handler means this must be false. - .setProgressBar(GT_UITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) - .setProgressBarPos(78, 24 + 2).setUsualFluidOutputCount(18).setLogoPos(10, 10); - - public static GT_Recipe_MapTT sResearchableFakeRecipes = new GT_Recipe_MapTT( - new HashSet<>(32), - "gt.recipe.researchStation", - "Research station", - null, - "gregtech:textures/gui/multimachines/ResearchFake", - 1, - 1, - 1, - 0, - 1, - "", - 1, - "", - true, - false); // nei to false - using custom handler - public static GT_Recipe_MapTT sScannableFakeRecipes = new GT_Recipe_MapTT( - new HashSet<>(32), - "gt.recipe.em_scanner", - "EM Scanner Research", - null, - "gregtech:textures/gui/multimachines/ResearchFake", - 1, - 1, - 1, - 0, - 1, - "", - 1, - "", - true, - false); - public static ArrayList sAssemblylineRecipes = new ArrayList<>(); - - public GT_Recipe_MapTT(Collection aRecipeList, String aUnlocalizedName, String aLocalName, - String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, - int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, - int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, - boolean aNEIAllowed) { - super( - aRecipeList, - aUnlocalizedName, - aLocalName, - aNEIName, - aNEIGUIPath, - aUsualInputCount, - aUsualOutputCount, - aMinimalInputItems, - aMinimalInputFluids, - aAmperage, - aNEISpecialValuePre, - aNEISpecialValueMultiplier, - aNEISpecialValuePost, - aShowVoltageAmperageInNEI, - aNEIAllowed); - } - } - - public static class TT_assLineRecipe extends GT_Recipe { - - public final ItemStack mResearchItem; - - public TT_assLineRecipe(boolean aOptimize, ItemStack researchItem, ItemStack[] aInputs, ItemStack[] aOutputs, - Object aSpecialItems, FluidStack[] aFluidInputs, int aDuration, int aEUt, int aSpecialValue) { - super( - aOptimize, - aInputs, - aOutputs, - aSpecialItems, - null, - aFluidInputs, - null, - aDuration, - aEUt, - aSpecialValue); - mResearchItem = researchItem; - } - - } - - public static class Eye_Of_Harmony_Recipe_Map extends GT_Recipe_Map { - - private static final int xDirMaxCount = 9; - private static final int yOrigin = 8; - private static final long TRILLION = pow(10, 12); - - public Eye_Of_Harmony_Recipe_Map(Collection aRecipeList, String aUnlocalizedName, String aLocalName, - String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, - int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, - int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, - boolean aNEIAllowed) { - super( - aRecipeList, - aUnlocalizedName, - aLocalName, - aNEIName, - aNEIGUIPath, - aUsualInputCount, - aUsualOutputCount, - aMinimalInputItems, - aMinimalInputFluids, - aAmperage, - aNEISpecialValuePre, - aNEISpecialValueMultiplier, - aNEISpecialValuePost, - aShowVoltageAmperageInNEI, - aNEIAllowed); - useModularUI(true); - setLogoPos(8, yOrigin); - setNEISpecialInfoFormatter((recipeInfo, applyPrefixAndSuffix) -> { - EyeOfHarmonyRecipe recipe = (EyeOfHarmonyRecipe) recipeInfo.recipe.mSpecialItems; - List result = new ArrayList<>(); - - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.Hydrogen.In", "Hydrogen") + ": " - + formatNumbers(recipe.getHydrogenRequirement()) - + " L"); - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.Helium.In", "Helium") + ": " - + formatNumbers(recipe.getHydrogenRequirement()) - + " L"); - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.SpacetimeTier", "Spacetime Tier") + ": " - + EOH_TIER_FANCY_NAMES[(int) recipe.getSpacetimeCasingTierRequired()]); - - if (recipe.getEUOutput() < TRILLION) { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " - + formatNumbers(recipe.getEUOutput()) - + " EU"); - } else { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " - + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUOutput()) - + " EU"); - } - - if (recipe.getEUOutput() < TRILLION) { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " - + formatNumbers(recipe.getEUStartCost()) - + " EU"); - } else { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " - + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUStartCost()) - + " EU"); - } - - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.BaseRecipeChance", "Base Recipe Chance") - + ": " - + formatNumbers(100 * recipe.getBaseRecipeSuccessChance()) - + "%"); - result.add( - GT_LanguageManager - .addStringLocalization("EOH.Recipe.RecipeEnergyEfficiency", "Recipe Energy Efficiency") - + ": " - + formatNumbers(100 * recipe.getRecipeEnergyEfficiency()) - + "%"); - - if (recipe.getOutputItems().size() > maxItemsToRender) { - result.add( - "" + DARK_RED - + BOLD - + GT_LanguageManager.addStringLocalization("EOH.Recipe.Warning.0", "Warning") - + RESET - + ": " - + GT_LanguageManager - .addStringLocalization("EOH.Recipe.Warning.1", "Not all items displayed.")); - } - - return result; - }); - } - - @Override - public boolean usesSpecialSlot() { - return false; - } - - @Override - public List getItemInputPositions(int itemInputCount) { - return UIHelper.getGridPositions(itemInputCount, 79, yOrigin, 1, 1); - } - - public static final int maxItemsToRender = 80; - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return UIHelper - .getGridPositions(min(itemOutputCount, maxItemsToRender + 1), 7, yOrigin + 36, xDirMaxCount, 12); - } - - @Override - public List getFluidInputPositions(int fluidInputCount) { - return UIHelper.getGridPositions(fluidInputCount, 0, 0, 0, 0); - } - - @Override - public List getFluidOutputPositions(int fluidOutputCount) { - return UIHelper.getGridPositions(fluidOutputCount, 7, yOrigin + 13 * 17 - 7 - 16, xDirMaxCount, 3); - } - - @Override - public ModularWindow.Builder createNEITemplate(IItemHandlerModifiable itemInputsInventory, - IItemHandlerModifiable itemOutputsInventory, IItemHandlerModifiable specialSlotInventory, - IItemHandlerModifiable fluidInputsInventory, IItemHandlerModifiable fluidOutputsInventory, - Supplier progressSupplier, Pos2d windowOffset) { - // Delay setter so that calls to #setUsualFluidInputCount and #setUsualFluidOutputCount are considered - setNEIBackgroundSize(172, 117 + (Math.max(getItemRowCount() + getFluidRowCount() - 4, 0)) * 18); - return super.createNEITemplate( - itemInputsInventory, - itemOutputsInventory, - specialSlotInventory, - fluidInputsInventory, - fluidOutputsInventory, - progressSupplier, - windowOffset); - } - - private int getItemRowCount() { - return (Math.max(mUsualInputCount, mUsualOutputCount) - 1) / xDirMaxCount + 1; - } - - private int getFluidRowCount() { - return (Math.max(getUsualFluidInputCount(), getUsualFluidOutputCount()) - 1) / xDirMaxCount + 1; - } - - @Override - protected void drawNEIText(NEIRecipeInfo recipeInfo, String text, int yShift) { - drawNEIText(recipeInfo, text, 7, yShift); - } - - @Override - public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); - if (stack == null) return currentTip; - - EyeOfHarmonyRecipe currentRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; - - // Draw tooltip on planet item. - if (stack.isItemEqual(currentRecipe.getRecipeTriggerItem())) { - currentTip.add( - EnumChatFormatting.GRAY + translateToLocal("Total Items: ") - + formatNumbers(currentRecipe.getSumOfItems())); - return currentTip; - } - - // Draw tooltip on other items. - double percentage = currentRecipe.getItemStackToProbabilityMap().getOrDefault(stack, -1.0); - - if (percentage != -1.0) { - currentTip.add( - EnumChatFormatting.GRAY + translateToLocal("Percentage of Solid Mass: ") + percentage + "%"); - currentTip.add( - EnumChatFormatting.GRAY + translateToLocal("Item Count: ") - + formatNumbers(currentRecipe.getItemStackToTrueStackSizeMap().get(stack))); - } - - return currentTip; - } - - @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - EyeOfHarmonyRecipe EOHRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; - for (PositionedStack stack : neiCachedRecipe.mInputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - if (stack.item.isItemEqual(EOHRecipe.getRecipeTriggerItem())) { - drawNEIOverlayText(translateToLocal("NC"), stack); - } - } - } - for (PositionedStack stack : neiCachedRecipe.mOutputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - if (EOHRecipe.getItemStackToTrueStackSizeMap().containsKey(stack.item)) { - long stackSize = EOHRecipe.getItemStackToTrueStackSizeMap().get(stack.item); - String displayString; - if (stackSize > 9999) { - displayString = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); - } else { - displayString = String.valueOf(stackSize); - } - - drawNEIOverlayText(displayString, stack, 0xffffff, 0.5f, true, Alignment.BottomRight); - } - } - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java index 083897cc2..366ee0ebb 100644 --- a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java +++ b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java @@ -14,6 +14,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; +import gregtech.api.recipe.RecipeMaps; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine; @@ -48,7 +49,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, } researchAmperage = GT_Utility.clamp(researchAmperage, 1, Short.MAX_VALUE); computationRequiredPerSec = GT_Utility.clamp(computationRequiredPerSec, 1, Short.MAX_VALUE); - TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.addFakeRecipe( + TecTechRecipeMaps.researchStationFakeRecipes.addFakeRecipe( false, new ItemStack[] { aResearchItem }, new ItemStack[] { aOutput }, @@ -58,7 +59,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, totalComputationRequired, researchEUt, researchAmperage | computationRequiredPerSec << 16); - GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes.addFakeRecipe( + RecipeMaps.assemblylineVisualRecipes.addFakeRecipe( false, aInputs, new ItemStack[] { aOutput }, @@ -78,7 +79,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, aOutput, assDuration, assEUt)); - TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes.add( + TecTechRecipeMaps.researchableALRecipeList.add( new GT_Recipe.GT_Recipe_AssemblyLine( aResearchItem, totalComputationRequired / computationRequiredPerSec, @@ -179,7 +180,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, tPersistentHash = tPersistentHash * 31 + researchEUt; tPersistentHash = tPersistentHash * 31 + assDuration; tPersistentHash = tPersistentHash * 31 + assEUt; - TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.addFakeRecipe( + TecTechRecipeMaps.researchStationFakeRecipes.addFakeRecipe( false, new ItemStack[] { aResearchItem }, new ItemStack[] { aOutput }, @@ -189,7 +190,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, totalComputationRequired, researchEUt, researchAmperage | computationRequiredPerSec << 16); - GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes.addFakeRecipe( + RecipeMaps.assemblylineVisualRecipes.addFakeRecipe( false, tInputs, new ItemStack[] { aOutput }, @@ -222,7 +223,7 @@ public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, assEUt, tAlts); recipeTT.setPersistentHash(tPersistentHash); - TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes.add(recipeTT); + TecTechRecipeMaps.researchableALRecipeList.add(recipeTT); return true; } diff --git a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java new file mode 100644 index 000000000..da60084e3 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java @@ -0,0 +1,49 @@ +package com.github.technus.tectech.recipe; + +import java.util.ArrayList; +import java.util.List; + +import com.github.technus.tectech.thing.CustomItemList; +import com.github.technus.tectech.thing.gui.TecTechUITextures; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; + +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.util.GT_Recipe; + +public class TecTechRecipeMaps { + + public static void init() {} + + public static final List researchableALRecipeList = new ArrayList<>(); + + public static final RecipeMap eyeOfHarmonyRecipes = RecipeMapBuilder.of("gt.recipe.eyeofharmony") + .maxIO( + EyeOfHarmonyFrontend.maxItemInputs, + EyeOfHarmonyFrontend.maxItemOutputs, + EyeOfHarmonyFrontend.maxFluidInputs, + EyeOfHarmonyFrontend.maxFluidOutputs) + .minInputs(1, 0).progressBar(GT_UITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) + .progressBarPos(78, 24 + 2).logoPos(10, 10) + .neiHandlerInfo( + builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_EyeOfHarmony.get(1)) + .setMaxRecipesPerPage(1)) + .frontend(EyeOfHarmonyFrontend::new).build(); + public static final RecipeMap researchStationFakeRecipes = RecipeMapBuilder + .of("gt.recipe.researchStation").maxIO(1, 1, 0, 0).useSpecialSlot() + .slotOverlays((index, isFluid, isOutput, isSpecial) -> { + if (isSpecial) { + return GT_UITextures.OVERLAY_SLOT_DATA_ORB; + } + if (isOutput) { + return TecTechUITextures.OVERLAY_SLOT_MESH; + } + return GT_UITextures.OVERLAY_SLOT_MICROSCOPE; + }).addSpecialTexture(19, 12, 84, 60, TecTechUITextures.PICTURE_HEAT_SINK) + .addSpecialTexture(41, 22, 40, 40, TecTechUITextures.PICTURE_RACK_LARGE) + .logo(TecTechUITextures.PICTURE_TECTECH_LOGO).logoSize(18, 18).logoPos(151, 63) + .neiTransferRect(81, 33, 25, 18).neiTransferRect(124, 33, 18, 29).frontend(ResearchStationFrontend::new) + .neiHandlerInfo(builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_Research.get(1))).build(); +} diff --git a/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java b/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java index 5f61ad59a..95dc85429 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 @@ -8,6 +8,7 @@ import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; import com.gtnewhorizons.modularui.api.drawable.UITexture; +@SuppressWarnings("SimplifyStreamApiCallChains") public class TecTechUITextures { public static final AdaptableUITexture BACKGROUND_SCREEN_BLUE = AdaptableUITexture @@ -64,6 +65,13 @@ public class TecTechUITextures { 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"); + public static final UITexture PROGRESSBAR_RESEARCH_STATION_1 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_1"); + public static final UITexture PROGRESSBAR_RESEARCH_STATION_2 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_2"); + public static final UITexture PROGRESSBAR_RESEARCH_STATION_3 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_3"); + public static final UITexture PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo"); public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture .fullImage(MODID, "gui/picture/tectech_logo_dark"); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java index 94a1fe352..2b7b7d708 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java @@ -52,6 +52,7 @@ import org.jetbrains.annotations.NotNull; import com.github.technus.tectech.recipe.EyeOfHarmonyRecipe; +import com.github.technus.tectech.recipe.TecTechRecipeMaps; import com.github.technus.tectech.thing.block.TileEyeOfHarmony; import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -77,6 +78,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.recipe.check.SimpleCheckRecipeResult; @@ -1102,6 +1104,12 @@ private void drainFluidFromHatchesAndStoreInternally() { } } + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return TecTechRecipeMaps.eyeOfHarmonyRecipes; + } + private EyeOfHarmonyRecipe currentRecipe; // Counter for lag prevention. diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index b6e5c1629..d7a4efb19 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,6 +1,5 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -37,7 +36,7 @@ import org.apache.commons.lang3.reflect.FieldUtils; import org.jetbrains.annotations.NotNull; -import com.github.technus.tectech.recipe.TT_recipe; +import com.github.technus.tectech.recipe.TecTechRecipeMaps; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -47,7 +46,6 @@ import com.gtnewhorizon.structurelib.structure.IItemSource; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IHatchElement; @@ -80,7 +78,6 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB // region variables private final ArrayList eHolders = new ArrayList<>(); private GT_Recipe.GT_Recipe_AssemblyLine tRecipe; - private TT_recipe.TT_assLineRecipe aRecipe; private String machineType; private static final String assembly = "Assembly line"; private ItemStack holdItem; @@ -308,7 +305,7 @@ private void makeStick2() { } private boolean iterateRecipes() { - for (GT_Recipe ttRecipe : TT_recipe.GT_Recipe_MapTT.sResearchableFakeRecipes.mRecipeList) { + for (GT_Recipe ttRecipe : TecTechRecipeMaps.researchStationFakeRecipes.getAllRecipes()) { if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { computationRequired = computationRemaining = ttRecipe.mDuration * 20L; mMaxProgresstime = 20; @@ -350,11 +347,10 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac protected CheckRecipeResult checkProcessing_EM() { ItemStack controllerStack = getControllerSlot(); tRecipe = null; - aRecipe = null; if (!eHolders.isEmpty() && eHolders.get(0).mInventory[0] != null) { holdItem = eHolders.get(0).mInventory[0].copy(); if (ItemList.Tool_DataStick.isStackEqual(controllerStack, false, true)) { - for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes) { + for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : TecTechRecipeMaps.researchableALRecipeList) { if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { machineType = assembly; tRecipe = assRecipe; @@ -362,23 +358,6 @@ protected CheckRecipeResult checkProcessing_EM() { if (iterateRecipes()) return SimpleCheckRecipeResult.ofSuccess("researching"); } } - } else if (ItemList.Tool_DataOrb.isStackEqual(controllerStack, false, true)) { - for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sMachineRecipes.recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { - aRecipe = assRecipeTT; - machineType = machine; - // if found - if (iterateRecipes()) return SimpleCheckRecipeResult.ofSuccess("researching"); - } - } - for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sCrafterRecipes.recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { - aRecipe = assRecipeTT; - machineType = crafter; - // if found - if (iterateRecipes()) return SimpleCheckRecipeResult.ofSuccess("researching"); - } - } } else { return CheckRecipeResultRegistry.NO_DATA_STICKS; } @@ -406,33 +385,10 @@ public void outputAfterRecipe_EM() { makeStick(); } } - } else if (aRecipe != null && ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)) { - eHolders.get(0).getBaseMetaTileEntity().setActive(false); - eHolders.get(0).mInventory[0] = null; - - mInventory[1].setStackDisplayName( - GT_LanguageManager.getTranslation(aRecipe.mOutputs[0].getDisplayName()) + ' ' - + machineType - + " Construction Data"); - NBTTagCompound tNBT = mInventory[1].getTagCompound(); // code above makes it not null - - tNBT.setString("eMachineType", machineType); - GameRegistry.UniqueIdentifier uid = GameRegistry.findUniqueIdentifierFor(aRecipe.mOutputs[0].getItem()); - tNBT.setString(E_RECIPE_ID, uid + ":" + aRecipe.mOutputs[0].getItemDamage()); - tNBT.setString( - "author", - EnumChatFormatting.BLUE + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.WHITE - + ' ' - + machineType - + " Recipe Generator"); } } computationRequired = computationRemaining = 0; tRecipe = null; - aRecipe = null; holdItem = null; } @@ -622,7 +578,6 @@ public void stopMachine() { } computationRequired = computationRemaining = 0; tRecipe = null; - aRecipe = null; holdItem = null; } @@ -630,39 +585,19 @@ public void stopMachine() { public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { if (aBaseMetaTileEntity.isServerSide()) { if (computationRemaining > 0) { - aRecipe = null; tRecipe = null; if (holdItem != null) { if (ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { - for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes) { + for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : TecTechRecipeMaps.researchableALRecipeList) { if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, holdItem, true)) { this.tRecipe = tRecipe; machineType = assembly; break; } } - } else if (ItemList.Tool_DataOrb.isStackEqual(mInventory[1], false, true)) { - for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sMachineRecipes - .recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { - aRecipe = assRecipeTT; - machineType = machine; - break; - } - } - if (aRecipe == null) { - for (TT_recipe.TT_assLineRecipe assRecipeTT : TT_recipe.TT_Recipe_Map.sCrafterRecipes - .recipeList()) { - if (GT_Utility.areStacksEqual(assRecipeTT.mResearchItem, holdItem, true)) { - aRecipe = assRecipeTT; - machineType = crafter; - break; - } - } - } } } - if (tRecipe == null && aRecipe == null) { + if (tRecipe == null) { holdItem = null; computationRequired = computationRemaining = 0; mMaxProgresstime = 0; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 291bdd169..e366327b6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -42,6 +42,7 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMaps; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; @@ -179,7 +180,7 @@ public void outputAfterRecipe_EM() { if (entity instanceof Entity) { if (tickedStuff.add((Entity) entity)) { if (inside && entity instanceof EntityItem) { - GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes.findRecipe( + GT_Recipe tRecipe = RecipeMaps.microwaveRecipes.findRecipe( mte, null, true, diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index f47b55b6d..12136371c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -99,7 +99,6 @@ import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.util.GT_HatchElementBuilder; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import gregtech.api.util.IGT_HatchAdder; import gregtech.common.GT_Pollution; @@ -858,14 +857,6 @@ public void loadNBTData(NBTTagCompound aNBT) { } } - /** - * If you want to use GT recipe maps. - */ - @Override - public GT_Recipe.GT_Recipe_Map getRecipeMap() { - return null; - } - /** * Override if needed but usually call super method at start! On machine stop - NOT called directly when soft * hammered to offline state! - it SHOULD cause a full stop like power failure does diff --git a/src/main/resources/assets/gregtech/textures/gui/multimachines/ResearchFake.png b/src/main/resources/assets/gregtech/textures/gui/multimachines/ResearchFake.png deleted file mode 100644 index b80e150877fd23366a2b17451cdde8506c020084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmcIkdpOi-8-9PknaqR+pNYaSeQDZEYYMeA%}<+9k;4@s z45gXuhA1O7X1Ww@&W9MG`pnvL7`x?c7(2H8r~cZ1_IM6k|>TPWmxjnUvtd`uh403kw`y;p6@>BP=YIr(p?0e|rPBUo@2l^MP&6>HVSEI#vrg7a zA>Y840htXMk32y{E-5Dhu#Mbvn(lOng}w4ZKA+zf2?8ncZ{$(-a9#+C*g3lYj9baA zFg-gX+$}jMB&(NeUU&)>B&&$|W>{kzz&m z`eR#inurB;E7WKSC%T*?fFCO?mxGwQzN%k*#3YRQ0rNKK>Le8@9H3| z=%^zjXJA$-N}#A-d}xbMNrfoJDb<&{6c%mjoj@2RsW2$5Kg)l9r=_Z2c-QNG)r%1G z7ru4Dcz==U%ln425S;E{3CwFqS9WWKr`5K)l(mFK3>91e?f zs4_2beP(W5-fJk^FFx}&=2EBw<6(l<>Xl&U{sgVv_bMEvMH=Oh1z1(pVA(z;?>w$U z$!uUw&7P2nbI#dmK#*kf6^Dfb-P#`ZdAE9m7fh7%2CiH?eWj>JNcOCu#36to7-%sr z$XK9yV9zZ^ZnIX*z71OxMXx5I(Ex?#?opU*L>EtC${Q~JD(eZ7(CmM};<*Q}40zwq4mcR$;@)Zu4*vehUoA9WoM#(5I3FL}+zAt(^_)Js zrrSU$_TmXzD@d)=jlojr$wCp8UxoQ&YD%vuw1TTE8kDEVrZ$A;%e;Enr>mvVZO5{k zi`uY{22x{x=uK6v6;y7>nJpo@=$Bp2Y@3??)Z?(@V=s!q`-XO)!K8eq1NW|d?ya$E zGD()0jDC4pJQB*=4j{=3XP&?oyJtR=ir5hl@a{56yL!fltK3IHM*tXEdy$r&A2)^` zg*01=Boq5ST(>zlw#zAKnKsZQ##FaITq&Zz7!<>Z@#G}wR-lu_RyhiV*Q=%mb(LrV zl~(>scEvD4m#uo=z73)B;BhqLM+=KeUz`rEHs#-UO zwSk0i$~1-T=73wcYo~*)dyz=X_^jUQIcU!FiA`E+mJi!_gWFpQ3P6I3i=Y$=*t;oZ+MtA~ zhdnvkAQEFGHYl2Rd5DW2pJ(`)j4>I5%6pHWd7gijQdpJ+Ip?7~gn%0WXsuzb1%ToF z1^~>A5#3rV1cjgw6oO~_WQ@s5DQK<1%rBjYrcWGS%$!@kcYpXKAtHG1-wGH)K#cL6 z8f=kst~#Gmx{pt*K_WUtYYSC|K2q}^CHRb9sV)S|a4DsSIp^G+Xg7l8uiZkHVY?9g zA7)S82)2Y9s*Af3-0Rjol0vZT%A*&;6K;u^(Tpc>JkYOogivVE|1-@A<9 zcAp!zi(?r;B4q#NoFW40&A?1sE>wyfeL#v58^QT7gCpmY9CKFCTJq^o-Ab zd4IWjze?`8liR0!TD{fi*n@ksUuEmcHC&StWSsDh|A1wCPd^8%Xh?t~R^os7guUO- a-r+VX^%TjQknY0(1fH&bE-dSu5}E)PpEnQy diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/research_station_1.png b/src/main/resources/assets/tectech/textures/gui/progressbar/research_station_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c451f81a96fd55337fec425137ffce9f0f58d6 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^l0eMG!3HE9SAPuyQkI@Bjv*T7lT#8Bew=qmK9H1` zcg~^M+sVl(Baid(|Ns9p2%rVfAT#8*}sd*MNpF Nc)I$ztaD0e0s#KpBd7oX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tectech/textures/gui/progressbar/research_station_2.png b/src/main/resources/assets/tectech/textures/gui/progressbar/research_station_2.png new file mode 100644 index 0000000000000000000000000000000000000000..974a02f281aaf6fe0511b34ab6d9d635cabdd74e GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!3HFgJ}hYlQpKJwjv*44r}m%bJ)*$FdOWbo zXug?76Vr<(=5Q^hU7zNe-QxEAHdm+8>*1rK#$rIp^N*wKvZcoQvJ`_~nSjS1R2LsdH^C4@4ehW&CF(9SJ3E*NNSsY*&YCZs&jAKG2W<=naw`0VWf2idDP2%01rQNT{ms1h>Thv<6{<#!zWRvhm63=brF2+@l#;25PLI%t feAKWnsIfc&fbGsRLUlt300000NkvXXu0mjf#uj&u literal 0 HcmV?d00001