From 557e45e61b93ac4238741029d76d4f70ebe5ced4 Mon Sep 17 00:00:00 2001 From: miozune Date: Mon, 4 Dec 2023 05:40:50 +0900 Subject: Migrate to new RecipeMap (#261) * Migrate to new RecipeMap * update gradle+deps+bs --------- Co-authored-by: Martin Robertz --- .../java/com/github/technus/tectech/TecTech.java | 4 +- .../github/technus/tectech/loader/MainLoader.java | 3 +- .../com/github/technus/tectech/nei/IMCForNEI.java | 45 --- .../github/technus/tectech/nei/NEI_TT_Config.java | 35 -- .../tectech/nei/TT_NEI_EyeOfHarmonyHandler.java | 33 -- .../tectech/nei/TT_NEI_ResearchHandler.java | 358 ------------------ .../technus/tectech/nei/TT_NEI_ScannerHandler.java | 358 ------------------ .../tectech/recipe/EyeOfHarmonyFrontend.java | 202 +++++++++++ .../tectech/recipe/EyeOfHarmonyRecipeStorage.java | 4 +- .../tectech/recipe/ResearchStationFrontend.java | 94 +++++ .../github/technus/tectech/recipe/TT_recipe.java | 403 --------------------- .../technus/tectech/recipe/TT_recipeAdder.java | 13 +- .../technus/tectech/recipe/TecTechRecipeMaps.java | 49 +++ .../tectech/thing/gui/TecTechUITextures.java | 8 + .../multi/GT_MetaTileEntity_EM_EyeOfHarmony.java | 8 + .../multi/GT_MetaTileEntity_EM_research.java | 75 +--- .../multi/GT_MetaTileEntity_TM_microwave.java | 3 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 9 - 18 files changed, 381 insertions(+), 1323 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 (limited to 'src/main/java') diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 292ebeb7e3..0845e02736 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.MainLoader; 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 class TecTech { FMLCommonHandler.instance().bus().register(enderWorldSavedData); MinecraftForge.EVENT_BUS.register(enderWorldSavedData); + TecTechRecipeMaps.init(); MainLoader.preLoad(); } @@ -95,7 +96,6 @@ public class TecTech { 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 cacf236134..5681a2128e 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.ProgressManager; 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 @@ public final class MainLoader { } } } - 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 033882609b..0000000000 --- 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 1523302a24..0000000000 --- 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 7d8e982443..0000000000 --- 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 e87350b2b9..0000000000 --- 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 04558efad8..0000000000 --- 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 0000000000..b2070f22bf --- /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 8aa801e153..1ef3955a06 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 class 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 0000000000..130a75c0cf --- /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 e044dccacc..0000000000 --- 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") + ": " -