From 91aa525b35ae794565b80b399ce4482d69899745 Mon Sep 17 00:00:00 2001 From: Serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:34:38 -0600 Subject: [PATCH] Limit multiblock recipe tier by energy hatches (#2139) --- .../capability/impl/AbstractRecipeLogic.java | 2 +- .../capability/impl/BoilerRecipeLogic.java | 2 +- .../capability/impl/EnergyContainerList.java | 27 ++++ .../impl/MultiblockRecipeLogic.java | 71 ++++++--- .../capability/impl/PrimitiveRecipeLogic.java | 2 +- .../capability/impl/RecipeLogicEnergy.java | 2 +- .../api/capability/impl/RecipeLogicSteam.java | 2 +- .../impl/SteamMultiblockRecipeLogic.java | 2 +- .../multiblock/MultiblockDisplayText.java | 25 +++- .../RecipeMapMultiblockController.java | 1 + .../electric/MetaTileEntityCrackingUnit.java | 2 + .../MetaTileEntityElectricBlastFurnace.java | 1 + .../electric/MetaTileEntityFusionReactor.java | 2 +- .../electric/MetaTileEntityMultiSmelter.java | 2 + .../MetaTileEntityProcessingArray.java | 11 +- .../electric/MetaTileEntityPyrolyseOven.java | 2 + .../MetaTileEntityResearchStation.java | 2 + .../MetaTileEntityLargeCombustionEngine.java | 2 +- .../MetaTileEntityMachineRecipeLoader.java | 135 +++++++----------- .../resources/assets/gregtech/lang/en_us.lang | 3 + .../impl/AbstractRecipeLogicTest.java | 2 +- 21 files changed, 180 insertions(+), 120 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 5e8f2a3cffb..9f222dce3be 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -110,7 +110,7 @@ public AbstractRecipeLogic(MetaTileEntity tileEntity, RecipeMap recipeMap, bo /** * @return the maximum voltage the machine can use/handle for recipe searching */ - protected abstract long getMaxVoltage(); + public abstract long getMaxVoltage(); /** * diff --git a/src/main/java/gregtech/api/capability/impl/BoilerRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/BoilerRecipeLogic.java index 211a9777d30..d16ecba4bbd 100644 --- a/src/main/java/gregtech/api/capability/impl/BoilerRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/BoilerRecipeLogic.java @@ -306,7 +306,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { GTLog.logger.error("Large Boiler called getMaxVoltage(), this should not be possible!"); return 0; } diff --git a/src/main/java/gregtech/api/capability/impl/EnergyContainerList.java b/src/main/java/gregtech/api/capability/impl/EnergyContainerList.java index b136aef0bb5..4d296a86e78 100644 --- a/src/main/java/gregtech/api/capability/impl/EnergyContainerList.java +++ b/src/main/java/gregtech/api/capability/impl/EnergyContainerList.java @@ -14,17 +14,32 @@ public class EnergyContainerList implements IEnergyContainer { private final long inputAmperage; private final long outputAmperage; + /** The highest single energy container's input voltage in the list. */ + private final long highestInputVoltage; + /** The number of energy containers at the highest input voltage in the list. */ + private final int numHighestInputContainers; + public EnergyContainerList(@Nonnull List energyContainerList) { this.energyContainerList = energyContainerList; long totalInputVoltage = 0; long totalOutputVoltage = 0; long inputAmperage = 0; long outputAmperage = 0; + long highestInputVoltage = 0; + int numHighestInputContainers = 0; for (IEnergyContainer container : energyContainerList) { totalInputVoltage += container.getInputVoltage() * container.getInputAmperage(); totalOutputVoltage += container.getOutputVoltage() * container.getOutputAmperage(); inputAmperage += container.getInputAmperage(); outputAmperage += container.getOutputAmperage(); + if (container.getInputVoltage() > highestInputVoltage) { + highestInputVoltage = container.getInputVoltage(); + } + } + for (IEnergyContainer container : energyContainerList) { + if (container.getInputVoltage() == highestInputVoltage) { + numHighestInputContainers++; + } } long[] voltageAmperage = calculateVoltageAmperage(totalInputVoltage, inputAmperage); @@ -33,6 +48,8 @@ public EnergyContainerList(@Nonnull List energyContainerList) voltageAmperage = calculateVoltageAmperage(totalOutputVoltage, outputAmperage); this.outputVoltage = voltageAmperage[0]; this.outputAmperage = voltageAmperage[1]; + this.highestInputVoltage = highestInputVoltage; + this.numHighestInputContainers = numHighestInputContainers; } /** @@ -163,6 +180,16 @@ public long getEnergyCapacity() { return energyCapacity; } + /** The highest single voltage of an energy container in this list. */ + public long getHighestInputVoltage() { + return highestInputVoltage; + } + + /** The number of parts with voltage specified in {@link EnergyContainerList#getHighestInputVoltage()} in this list. */ + public int getNumHighestInputContainers() { + return numHighestInputContainers; + } + /** * Always < 4. A list with amps > 4 will always be compacted into more voltage at fewer amps. * diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index a1527987d85..f46d95abaa1 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -302,7 +302,31 @@ protected void modifyOverclockPost(int[] overclockResults, @Nonnull IRecipePrope @Override public long getMaximumOverclockVoltage() { - return getMaxVoltage(); + IEnergyContainer energyContainer = getEnergyContainer(); + if (energyContainer instanceof EnergyContainerList) { + long voltage; + long amperage; + if (energyContainer.getInputVoltage() > energyContainer.getOutputVoltage()) { + voltage = energyContainer.getInputVoltage(); + amperage = energyContainer.getInputAmperage(); + } else { + voltage = energyContainer.getOutputVoltage(); + amperage = energyContainer.getOutputAmperage(); + } + + if (amperage == 1) { + // amperage is 1 when the energy is not exactly on a tier + + // the voltage for recipe search is always on tier, so take the closest lower tier + return GTValues.V[GTUtility.getFloorTierByVoltage(voltage)]; + } else { + // amperage != 1 means the voltage is exactly on a tier + // ignore amperage, since only the voltage is relevant for recipe search + // amps are never > 3 in an EnergyContainerList + return voltage; + } + } + return Math.max(energyContainer.getInputVoltage(), energyContainer.getOutputVoltage()); } @Nonnull @@ -370,32 +394,35 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { IEnergyContainer energyContainer = getEnergyContainer(); - if (energyContainer instanceof EnergyContainerList) { - long voltage; - long amperage; - if (energyContainer.getInputVoltage() > energyContainer.getOutputVoltage()) { - voltage = energyContainer.getInputVoltage(); - amperage = energyContainer.getInputAmperage(); - } else { - voltage = energyContainer.getOutputVoltage(); - amperage = energyContainer.getOutputAmperage(); - } - - if (amperage == 1) { - // amperage is 1 when the energy is not exactly on a tier - - // the voltage for recipe search is always on tier, so take the closest lower tier + if (!consumesEnergy()) { + // Generators + long voltage = energyContainer.getOutputVoltage(); + long amperage = energyContainer.getOutputAmperage(); + if (energyContainer instanceof EnergyContainerList && amperage == 1) { + // Amperage is 1 when the energy is not exactly on a tier. + // The voltage for recipe search is always on tier, so take the closest lower tier. + // List check is done because single hatches will always be a "clean voltage," no need + // for any additional checks. return GTValues.V[GTUtility.getFloorTierByVoltage(voltage)]; + } + return voltage; + } else { + // Machines + if (energyContainer instanceof EnergyContainerList energyList) { + long highestVoltage = energyList.getHighestInputVoltage(); + if (energyList.getNumHighestInputContainers() > 1) { + // allow tier + 1 if there are multiple hatches present at the highest tier + int tier = GTUtility.getTierByVoltage(highestVoltage); + return GTValues.V[Math.min(tier + 1, GTValues.MAX)]; + } else { + return highestVoltage; + } } else { - // amperage != 1 means the voltage is exactly on a tier - // ignore amperage, since only the voltage is relevant for recipe search - // amps are never > 3 in an EnergyContainerList - return voltage; + return energyContainer.getInputVoltage(); } } - return Math.max(energyContainer.getInputVoltage(), energyContainer.getOutputVoltage()); } @Nullable diff --git a/src/main/java/gregtech/api/capability/impl/PrimitiveRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/PrimitiveRecipeLogic.java index 2555e02a53c..683b51ffda9 100644 --- a/src/main/java/gregtech/api/capability/impl/PrimitiveRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/PrimitiveRecipeLogic.java @@ -39,7 +39,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return GTValues.LV; } diff --git a/src/main/java/gregtech/api/capability/impl/RecipeLogicEnergy.java b/src/main/java/gregtech/api/capability/impl/RecipeLogicEnergy.java index c45a10ffb09..c618fa377b0 100644 --- a/src/main/java/gregtech/api/capability/impl/RecipeLogicEnergy.java +++ b/src/main/java/gregtech/api/capability/impl/RecipeLogicEnergy.java @@ -41,7 +41,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return Math.max(energyContainer.get().getInputVoltage(), energyContainer.get().getOutputVoltage()); } diff --git a/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java b/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java index a52d6601318..c2944e24a0b 100644 --- a/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java +++ b/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java @@ -221,7 +221,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return GTValues.V[GTValues.LV]; } diff --git a/src/main/java/gregtech/api/capability/impl/SteamMultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/SteamMultiblockRecipeLogic.java index 2799bea054c..70cee480210 100644 --- a/src/main/java/gregtech/api/capability/impl/SteamMultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/SteamMultiblockRecipeLogic.java @@ -111,7 +111,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return GTValues.V[GTValues.LV]; } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockDisplayText.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockDisplayText.java index 89dbefb0111..cf34d8094b9 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockDisplayText.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockDisplayText.java @@ -89,14 +89,35 @@ public Builder addEnergyUsageLine(IEnergyContainer energyContainer) { // wrap in text component to keep it from being formatted ITextComponent voltageName = new TextComponentString(GTValues.VNF[GTUtility.getFloorTierByVoltage(maxVoltage)]); - textList.add(TextComponentUtil.translationWithColor( + ITextComponent bodyText = TextComponentUtil.translationWithColor( TextFormatting.GRAY, "gregtech.multiblock.max_energy_per_tick", - energyFormatted, voltageName)); + energyFormatted, voltageName); + ITextComponent hoverText = TextComponentUtil.translationWithColor(TextFormatting.GRAY, "gregtech.multiblock.max_energy_per_tick_hover"); + textList.add(TextComponentUtil.setHover(bodyText, hoverText)); } return this; } + /** + * Adds the max Recipe Tier that this multiblock can use for recipe lookup. + *
+ * Added if the structure is formed and if the passed tier is a valid energy tier index for {@link GTValues#VNF}. + */ + public Builder addEnergyTierLine(int tier) { + if (!isStructureFormed) return this; + if (tier < GTValues.ULV || tier > GTValues.MAX) return this; + + ITextComponent voltageName = new TextComponentString(GTValues.VNF[tier]); + ITextComponent bodyText = TextComponentUtil.translationWithColor( + TextFormatting.GRAY, + "gregtech.multiblock.max_recipe_tier", + voltageName); + ITextComponent hoverText = TextComponentUtil.translationWithColor(TextFormatting.GRAY, "gregtech.multiblock.max_recipe_tier_hover"); + textList.add(TextComponentUtil.setHover(bodyText, hoverText)); + return this; + } + /** * Adds the exact EU/t that this multiblock needs to run. *
diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 07c8f87228e..25857cf5538 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -139,6 +139,7 @@ protected void addDisplayText(List textList) { MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(recipeMapWorkable.getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addParallelsLine(recipeMapWorkable.getParallelLimit()) .addWorkingStatusLine() .addProgressLine(recipeMapWorkable.getProgressPercent()); diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java index 931e411ea97..5386c82fa0c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java @@ -12,6 +12,7 @@ import gregtech.api.pattern.PatternMatchContext; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.recipeproperties.IRecipePropertyStorage; +import gregtech.api.util.GTUtility; import gregtech.api.util.TextComponentUtil; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; @@ -80,6 +81,7 @@ protected void addDisplayText(List textList) { MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addCustom(tl -> { // Coil energy discount line if (isStructureFormed()) { diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityElectricBlastFurnace.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityElectricBlastFurnace.java index 87e6362b5c7..2136e3a2d91 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityElectricBlastFurnace.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityElectricBlastFurnace.java @@ -69,6 +69,7 @@ protected void addDisplayText(List textList) { MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addCustom(tl -> { // Coil heat capacity line if (isStructureFormed()) { diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java index aaa13d17686..957fbbe570f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityFusionReactor.java @@ -554,7 +554,7 @@ protected double getOverclockingVoltageMultiplier() { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return Math.min(GTValues.V[tier], super.getMaxVoltage()); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityMultiSmelter.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityMultiSmelter.java index 68919a5bc94..f6c6f6241de 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityMultiSmelter.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityMultiSmelter.java @@ -11,6 +11,7 @@ import gregtech.api.recipes.RecipeBuilder; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.machines.RecipeMapFurnace; +import gregtech.api.util.GTUtility; import gregtech.api.util.TextComponentUtil; import gregtech.api.util.TextFormattingUtil; import gregtech.client.renderer.ICubeRenderer; @@ -50,6 +51,7 @@ protected void addDisplayText(List textList) { MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(recipeMapWorkable.getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addCustom(tl -> { if (isStructureFormed()) { // Heating coil discount diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityProcessingArray.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityProcessingArray.java index 34dab5a22af..a680fd7e0bd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityProcessingArray.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityProcessingArray.java @@ -107,12 +107,14 @@ public ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) { @Override protected void addDisplayText(List textList) { + ProcessingArrayWorkable logic = (ProcessingArrayWorkable) recipeMapWorkable; + MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(recipeMapWorkable.getEnergyContainer()) + .addEnergyTierLine(logic.currentMachineStack == ItemStack.EMPTY ? -1 : logic.machineTier) .addCustom(tl -> { if (isStructureFormed()) { - ProcessingArrayWorkable logic = (ProcessingArrayWorkable) recipeMapWorkable; // Machine mode text // Shared text components for both states @@ -357,6 +359,13 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul return super.findRecipe(Math.min(super.getMaxVoltage(), this.machineVoltage), inputs, fluidInputs); } + @Override + public long getMaxVoltage() { + // Allow the PA to use as much power as provided, since tier is gated by the machine anyway. + // UI text uses the machine stack's tier instead of the getMaxVoltage() tier as well. + return super.getMaximumOverclockVoltage(); + } + @Override protected int getNumberOfOCs(int recipeEUt) { if (!isAllowOverclocking()) return 0; diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java index 90e6a0c5cbb..6aa26293409 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java @@ -12,6 +12,7 @@ import gregtech.api.pattern.PatternMatchContext; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.recipeproperties.IRecipePropertyStorage; +import gregtech.api.util.GTUtility; import gregtech.api.util.TextComponentUtil; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; @@ -99,6 +100,7 @@ protected void addDisplayText(List textList) { MultiblockDisplayText.builder(textList, isStructureFormed()) .setWorkingStatus(recipeMapWorkable.isWorkingEnabled(), recipeMapWorkable.isActive()) .addEnergyUsageLine(recipeMapWorkable.getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addCustom(tl -> { if (isStructureFormed()) { int processingSpeed = coilTier == 0 ? 75 : 50 * (coilTier + 1); diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityResearchStation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityResearchStation.java index cad1696cfa5..e7c20439a0c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityResearchStation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityResearchStation.java @@ -19,6 +19,7 @@ import gregtech.api.pattern.PatternMatchContext; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMaps; +import gregtech.api.util.GTUtility; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; import gregtech.common.ConfigHolder; @@ -221,6 +222,7 @@ protected void addDisplayText(List textList) { "gregtech.multiblock.work_paused", "gregtech.machine.research_station.researching") .addEnergyUsageLine(recipeMapWorkable.getEnergyContainer()) + .addEnergyTierLine(GTUtility.getTierByVoltage(recipeMapWorkable.getMaxVoltage())) .addComputationUsageExactLine(getRecipeMapWorkable().getCurrentDrawnCWUt()) .addParallelsLine(recipeMapWorkable.getParallelLimit()) .addWorkingStatusLine() diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/generator/MetaTileEntityLargeCombustionEngine.java b/src/main/java/gregtech/common/metatileentities/multi/electric/generator/MetaTileEntityLargeCombustionEngine.java index dec10605d52..7499bbf37f4 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/generator/MetaTileEntityLargeCombustionEngine.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/generator/MetaTileEntityLargeCombustionEngine.java @@ -370,7 +370,7 @@ protected boolean shouldSearchForRecipes() { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { //this multiplies consumption through parallel if (isOxygenBoosted) return GTValues.V[tier] * 2; diff --git a/src/main/java/gregtech/loaders/recipe/MetaTileEntityMachineRecipeLoader.java b/src/main/java/gregtech/loaders/recipe/MetaTileEntityMachineRecipeLoader.java index ef3da2ffa86..838e6ecc757 100644 --- a/src/main/java/gregtech/loaders/recipe/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MetaTileEntityMachineRecipeLoader.java @@ -617,101 +617,86 @@ public static void init() { // 4A Energy Hatches ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[EV]) .input(ENERGY_INPUT_HATCH[EV]) - .input(POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_EV) .input(wireGtQuadruple, Aluminium, 2) + .input(plate, Titanium, 2) .output(ENERGY_INPUT_HATCH_4A[0]) .duration(100).EUt(VA[HV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[IV]) .input(ENERGY_INPUT_HATCH[IV]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_IV) .input(wireGtQuadruple, Tungsten, 2) + .input(plate, TungstenSteel, 2) .output(ENERGY_INPUT_HATCH_4A[1]) .duration(100).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[LuV]) .input(ENERGY_INPUT_HATCH[LuV]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_LuV) .input(wireGtQuadruple, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 2) .output(ENERGY_INPUT_HATCH_4A[2]) .duration(100).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[ZPM]) .input(ENERGY_INPUT_HATCH[ZPM]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_ZPM) .input(wireGtQuadruple, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 2) .output(ENERGY_INPUT_HATCH_4A[3]) .duration(100).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[UV]) .input(ENERGY_INPUT_HATCH[UV]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_UV) .input(wireGtQuadruple, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 2) .output(ENERGY_INPUT_HATCH_4A[4]) .duration(100).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(ENERGY_INPUT_HATCH[UHV], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(wireGtDouble, RutheniumTriniumAmericiumNeutronate) + .input(ENERGY_INPUT_HATCH[UHV]) .input(wireGtQuadruple, Europium, 2) + .input(plate, Neutronium, 2) .output(ENERGY_INPUT_HATCH_4A[5]) .duration(100).EUt(VA[UV]).buildAndRegister(); // 16A Energy Hatches ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[IV]) + .input(TRANSFORMER[IV]) .input(ENERGY_INPUT_HATCH_4A[1]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_IV) .input(wireGtOctal, Tungsten, 2) + .input(plate, TungstenSteel, 4) .output(ENERGY_INPUT_HATCH_16A[0]) .duration(200).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[LuV]) + .input(TRANSFORMER[LuV]) .input(ENERGY_INPUT_HATCH_4A[2]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_LuV) .input(wireGtOctal, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 4) .output(ENERGY_INPUT_HATCH_16A[1]) .duration(200).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[ZPM]) + .input(TRANSFORMER[ZPM]) .input(ENERGY_INPUT_HATCH_4A[3]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_ZPM) .input(wireGtOctal, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 4) .output(ENERGY_INPUT_HATCH_16A[2]) .duration(200).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[UV]) + .input(TRANSFORMER[UV]) .input(ENERGY_INPUT_HATCH_4A[4]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_UV) .input(wireGtOctal, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 4) .output(ENERGY_INPUT_HATCH_16A[3]) .duration(200).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() + .input(HI_AMP_TRANSFORMER[UV]) .input(ENERGY_INPUT_HATCH_4A[5], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(wireGtDouble, RutheniumTriniumAmericiumNeutronate) .input(wireGtOctal, Europium, 2) + .input(plate, Neutronium, 4) .output(ENERGY_INPUT_HATCH_16A[4]) .duration(200).EUt(VA[UV]).buildAndRegister(); @@ -720,145 +705,127 @@ public static void init() { ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[IV]) .input(ENERGY_INPUT_HATCH_16A[0]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_IV, 2) .input(wireGtHex, Tungsten, 2) + .input(plate, TungstenSteel, 6) .output(SUBSTATION_ENERGY_INPUT_HATCH[0]) .duration(400).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[LuV]) .input(ENERGY_INPUT_HATCH_16A[1]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_LuV, 2) .input(wireGtHex, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 6) .output(SUBSTATION_ENERGY_INPUT_HATCH[1]) .duration(400).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[ZPM]) .input(ENERGY_INPUT_HATCH_16A[2]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_ZPM, 2) .input(wireGtHex, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 6) .output(SUBSTATION_ENERGY_INPUT_HATCH[2]) .duration(400).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[UV]) .input(ENERGY_INPUT_HATCH_16A[3]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_UV, 2) .input(wireGtHex, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 6) .output(SUBSTATION_ENERGY_INPUT_HATCH[3]) .duration(400).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(ENERGY_INPUT_HATCH_16A[4], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate) + .input(POWER_TRANSFORMER[UV]) + .input(ENERGY_INPUT_HATCH_16A[4]) .input(wireGtHex, Europium, 2) + .input(plate, Neutronium, 6) .output(SUBSTATION_ENERGY_INPUT_HATCH[4]) .duration(400).EUt(VA[UV]).buildAndRegister(); // 4A Dynamo Hatches ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[EV]) .input(ENERGY_OUTPUT_HATCH[EV]) - .input(POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_EV) .input(wireGtQuadruple, Aluminium, 2) + .input(plate, Titanium, 2) .output(ENERGY_OUTPUT_HATCH_4A[0]) .duration(100).EUt(VA[HV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[IV]) .input(ENERGY_OUTPUT_HATCH[IV]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_IV) .input(wireGtQuadruple, Tungsten, 2) + .input(plate, TungstenSteel, 2) .output(ENERGY_OUTPUT_HATCH_4A[1]) .duration(100).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[LuV]) .input(ENERGY_OUTPUT_HATCH[LuV]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_LuV) .input(wireGtQuadruple, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 2) .output(ENERGY_OUTPUT_HATCH_4A[2]) .duration(100).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(TRANSFORMER[ZPM]) .input(ENERGY_OUTPUT_HATCH[ZPM]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_ZPM) .input(wireGtQuadruple, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 2) .output(ENERGY_OUTPUT_HATCH_4A[3]) .duration(100).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(TRANSFORMER[UV]) .input(ENERGY_OUTPUT_HATCH[UV]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(VOLTAGE_COIL_UV) .input(wireGtQuadruple, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 2) .output(ENERGY_OUTPUT_HATCH_4A[4]) .duration(100).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(ENERGY_OUTPUT_HATCH[UHV], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT) - .input(wireGtDouble, RutheniumTriniumAmericiumNeutronate) + .input(ENERGY_OUTPUT_HATCH[UHV]) .input(wireGtQuadruple, Europium, 2) + .input(plate, Neutronium, 2) .output(ENERGY_OUTPUT_HATCH_4A[5]) .duration(100).EUt(VA[UV]).buildAndRegister(); // 16A Dynamo Hatches ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[IV]) + .input(TRANSFORMER[IV]) .input(ENERGY_OUTPUT_HATCH_4A[1]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_IV) .input(wireGtOctal, Tungsten, 2) + .input(plate, TungstenSteel, 4) .output(ENERGY_OUTPUT_HATCH_16A[0]) .duration(200).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[LuV]) + .input(TRANSFORMER[LuV]) .input(ENERGY_OUTPUT_HATCH_4A[2]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_LuV) .input(wireGtOctal, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 4) .output(ENERGY_OUTPUT_HATCH_16A[1]) .duration(200).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[ZPM]) + .input(TRANSFORMER[ZPM]) .input(ENERGY_OUTPUT_HATCH_4A[3]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_ZPM) .input(wireGtOctal, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 4) .output(ENERGY_OUTPUT_HATCH_16A[2]) .duration(200).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(HI_AMP_TRANSFORMER[UV]) + .input(TRANSFORMER[UV]) .input(ENERGY_OUTPUT_HATCH_4A[4]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(VOLTAGE_COIL_UV) .input(wireGtOctal, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 4) .output(ENERGY_OUTPUT_HATCH_16A[3]) .duration(200).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(ENERGY_OUTPUT_HATCH_4A[5], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 2) - .input(wireGtDouble, RutheniumTriniumAmericiumNeutronate) + .input(HI_AMP_TRANSFORMER[UV]) + .input(ENERGY_OUTPUT_HATCH_4A[5]) .input(wireGtOctal, Europium, 2) + .input(plate, Neutronium, 4) .output(ENERGY_OUTPUT_HATCH_16A[4]) .duration(200).EUt(VA[UV]).buildAndRegister(); @@ -867,44 +834,40 @@ public static void init() { ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[IV]) .input(ENERGY_OUTPUT_HATCH_16A[0]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_IV, 2) .input(wireGtHex, Tungsten, 2) + .input(plate, TungstenSteel, 6) .output(SUBSTATION_ENERGY_OUTPUT_HATCH[0]) .duration(400).EUt(VA[EV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[LuV]) .input(ENERGY_OUTPUT_HATCH_16A[1]) - .input(HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_LuV, 2) .input(wireGtHex, NiobiumTitanium, 2) + .input(plate, RhodiumPlatedPalladium, 6) .output(SUBSTATION_ENERGY_OUTPUT_HATCH[1]) .duration(400).EUt(VA[IV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[ZPM]) .input(ENERGY_OUTPUT_HATCH_16A[2]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_ZPM, 2) .input(wireGtHex, VanadiumGallium, 2) + .input(plate, NaquadahAlloy, 6) .output(SUBSTATION_ENERGY_OUTPUT_HATCH[2]) .duration(400).EUt(VA[LuV]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() .input(POWER_TRANSFORMER[UV]) .input(ENERGY_OUTPUT_HATCH_16A[3]) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(VOLTAGE_COIL_UV, 2) .input(wireGtHex, YttriumBariumCuprate, 2) + .input(plate, Darmstadtium, 6) .output(SUBSTATION_ENERGY_OUTPUT_HATCH[3]) .duration(400).EUt(VA[ZPM]).buildAndRegister(); ASSEMBLER_RECIPES.recipeBuilder() - .input(ENERGY_OUTPUT_HATCH_16A[4], 2) - .input(ULTRA_HIGH_POWER_INTEGRATED_CIRCUIT, 4) - .input(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate) + .input(POWER_TRANSFORMER[UV]) + .input(ENERGY_OUTPUT_HATCH_16A[4]) .input(wireGtHex, Europium, 2) + .input(plate, Neutronium, 6) .output(SUBSTATION_ENERGY_OUTPUT_HATCH[4]) .duration(400).EUt(VA[UV]).buildAndRegister(); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index e178e75b770..38f6999c437 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -5515,7 +5515,10 @@ gregtech.multiblock.invalid_structure=Invalid structure. gregtech.multiblock.invalid_structure.tooltip=This block is a controller of the multiblock structure. For building help, see structure template in JEI. gregtech.multiblock.validation_failed=Invalid amount of inputs/outputs. gregtech.multiblock.max_energy_per_tick=Max EU/t: %s (%s) +gregtech.multiblock.max_energy_per_tick_hover=The maximum EU/t available for running recipes or overclocking gregtech.multiblock.max_energy_per_tick_amps=Max EU/t: %s (%sA %s) +gregtech.multiblock.max_recipe_tier=Max Recipe Tier: %s +gregtech.multiblock.max_recipe_tier_hover=The maximum tier of recipes that can be run gregtech.multiblock.generation_eu=Outputting: §a%s EU/t gregtech.multiblock.universal.no_problems=No Maintenance Problems! gregtech.multiblock.universal.has_problems=Has Maintenance Problems! diff --git a/src/test/java/gregtech/api/capability/impl/AbstractRecipeLogicTest.java b/src/test/java/gregtech/api/capability/impl/AbstractRecipeLogicTest.java index 42e58ebf008..ecd26210a42 100644 --- a/src/test/java/gregtech/api/capability/impl/AbstractRecipeLogicTest.java +++ b/src/test/java/gregtech/api/capability/impl/AbstractRecipeLogicTest.java @@ -77,7 +77,7 @@ protected boolean drawEnergy(int recipeEUt, boolean simulate) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } };