From 187ea0936189223863027ccc3a2982c1dd96a480 Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Sat, 7 Sep 2024 12:28:02 +0800 Subject: [PATCH 1/2] Fix AAL tooltips (#3087) Co-authored-by: Martin Robertz Co-authored-by: boubou19 --- src/main/java/ggfab/mte/MTEAdvAssLine.java | 15 +++++++++++++-- src/main/resources/assets/ggfab/lang/en_US.lang | 9 --------- src/main/resources/assets/ggfab/lang/zh_CN.lang | 11 +---------- .../resources/assets/gregtech/lang/en_US.lang | 2 +- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/main/java/ggfab/mte/MTEAdvAssLine.java b/src/main/java/ggfab/mte/MTEAdvAssLine.java index 941f42e3412..5474cdd04ba 100644 --- a/src/main/java/ggfab/mte/MTEAdvAssLine.java +++ b/src/main/java/ggfab/mte/MTEAdvAssLine.java @@ -22,6 +22,7 @@ import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import static gregtech.api.util.GTStructureUtility.ofHatchAdder; import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gregtech.api.util.GTUtility.formatNumbers; import java.util.ArrayList; import java.util.Arrays; @@ -41,6 +42,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; @@ -63,6 +65,7 @@ import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; +import ggfab.ConfigurationHandler; import ggfab.GGConstants; import ggfab.mui.ClickableTextWidget; import gregtech.api.GregTechAPI; @@ -104,6 +107,7 @@ public class MTEAdvAssLine extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { private static final ItemStack NOT_CHECKED = new ItemStack(Blocks.dirt); + public static final double LASER_OVERCLOCK_PENALTY_FACTOR = ConfigurationHandler.INSTANCE.getLaserOCPenaltyFactor(); private static final String STRUCTURE_PIECE_FIRST = "first"; private static final String STRUCTURE_PIECE_LATER = "later"; private static final String STRUCTURE_PIECE_LAST = "last"; @@ -305,10 +309,16 @@ protected MultiblockTooltipBuilder createTooltip() { tt.addMachineType("Assembling Line") .addInfo("Controller block for the Advanced Assembling Line") .addInfo("Built exactly the same as standard Assembling Line") - .addInfo("Place in world to get more info. It will be a lengthy read.") .addInfo("Assembling Line with item pipelining") .addInfo("All fluids are however consumed at start") .addInfo("Use voltage of worst energy hatch for overclocking") + .addInfo("Perform normal overclock with given voltage") + .addInfo("Perform laser overclock with extra amperages from multi-amp energy hatches") + .addInfo("Each laser overclock reduces recipe time by 50%") + .addInfo( + "and multiplies power by (4 + " + formatNumbers(LASER_OVERCLOCK_PENALTY_FACTOR) + + " * total laser overclock count)") + .addInfo(EnumChatFormatting.BOLD + "Will not overclock beyond 1 tick.") .addInfo("EU/t is (number of slices working) * (overclocked EU/t)") .addSeparator() .beginVariableStructureBlock(5, 16, 4, 4, 3, 3, false) @@ -768,7 +778,8 @@ public CheckRecipeResult checkProcessing() { OverclockCalculator laserOCCalculator = new OverclockCalculator().setRecipeEUt(recipe.mEUt) .setDurationUnderOneTickSupplier(() -> ((double) (recipe.mDuration) / recipe.mInputs.length)) - .setEutIncreasePerOCSupplier(overclock -> 4 + 0.3 * Math.max(overclock - normalOverclockCount, 0)) + .setEutIncreasePerOCSupplier( + overclock -> 4 + LASER_OVERCLOCK_PENALTY_FACTOR * Math.max(overclock - normalOverclockCount, 0)) .setParallel(originalMaxParallel) .setEUt(inputEUt / recipe.mInputs.length); diff --git a/src/main/resources/assets/ggfab/lang/en_US.lang b/src/main/resources/assets/ggfab/lang/en_US.lang index 14b4343dfed..730a5094ea8 100644 --- a/src/main/resources/assets/ggfab/lang/en_US.lang +++ b/src/main/resources/assets/ggfab/lang/en_US.lang @@ -1,14 +1,5 @@ ggfab.recipe.toolcast=Tool Casting Machine -ggfab.info.advassline.0=Advanced Assembly Line Help -ggfab.info.advassline.1=This is advanced assembly line from §6GigaGram§rFab. -ggfab.info.advassline.2=It supports item pipelining. That is, it will mimic a real assembly line by consuming ingredients one by one instead of all at start. In effect, it offers a parallelism up to however many item input this recipe requires. -ggfab.info.advassline.3=You can think of an advanced assembly line as a collection of assembly slices. Each assembly slice is capably of processing each step independent of other slices. -ggfab.info.advassline.4=It will start processing once the input bus contents align with any stored data stick. The first slice will consume the input in Bus #1. After (recipe time/number of inputs) time, the first slice's work is concluded and will start the second slice. At the same time, first slice will look for input in input bus #1. If there are still enough input there slice #1 will start working again. -ggfab.info.advassline.5=The terminal slice (the n-th slice, where n is number of item input in recipe) will put the recipe output in output bus when it has concluded his work. Whenever a non-terminal slice finished its work, it will try to pass the work onto next slice. If the next slice cannot find the materials in its input bus, the just-finished slice will remain in §4STUCK§r state and hang the assembly line. To help locate these §4STUCK§r assembly lines, the controller's front face will have its status light turned orange. -ggfab.info.advassline.6=The EU/t cost of this machine is number of slices active multiplied by the original recipe EU/t. §4STUCK§r slices do not consume power. It will use the worst energy supplying hatch's input voltage for recipe tier calculation and normal imperfect overclock. -ggfab.info.advassline.7=With exotic energy hatches, it can overclock beyond usual voltage tier, but will consume even more power than usual imperfect overclock. Every §2laser overclock§r will add %s to power exponent. -ggfab.info.advassline.8=1 §2laser overclock§r will have 50%% recipe time and use %s%% power. 2 §2laser overclock§r will have 25%% recipe time and use %s%% (%s * %s) power. Will not overclock beyond 1 tick. Machine first tries to parallelize, then normal imperfect overclock, then §2laser overclock§r. ggfab.waila.advassline.slice=Slice #%s: %s s / %s s ggfab.waila.advassline.slice.small=Slice #%s: %s ticks / %s ticks ggfab.waila.advassline.slice.idle=Slice #%s: Idle diff --git a/src/main/resources/assets/ggfab/lang/zh_CN.lang b/src/main/resources/assets/ggfab/lang/zh_CN.lang index c5a2da901dc..331793be6ca 100644 --- a/src/main/resources/assets/ggfab/lang/zh_CN.lang +++ b/src/main/resources/assets/ggfab/lang/zh_CN.lang @@ -1,12 +1,3 @@ -ggfab.info.advassline.0=高级装配线教程 -ggfab.info.advassline.1=爱来自 §6GigaGram§rFab 与 w -ggfab.info.advassline.2=这种新式装配线支持流水线式装配,也就是说,这种装配线会逐一从输入总线中获取原材料,而不是像其他GT机器一样在启动时获取所有原材料。这种工作模式使得他获得了等同与当前配方物品输入数量的并行数。 -ggfab.info.advassline.3=你可以将高级装配线想象成一组装配刀片机,每个装配刀片可以互相独立的工作。 -ggfab.info.advassline.4=高级装配线会在输入总线第一格的内容与任意一个闪存记录的配方相符合时开始工作。第一装配刀片会从第一个输入总线获取输入。在(配方时间/物品输入个数)的时间后,第一装配刀片的工作结束了,之后便会将半成品转交给第二装配刀片,然后第二装配刀片再从自己的输入总线中获取输入。于此同时,在第二装配刀片工作时,第一装配刀片会继续尝试从第一输入总线中获取输入,如果这里仍然有足够的输入,则第一装配刀片会直接开始工作。 -ggfab.info.advassline.5=如果一个配方有n个输入,那么第N个装配刀片就是最终装配刀片,在他完成工作时就会将成品放到末尾的输出总线中。除最终装配刀片外,其他装配刀片在自己的工作结束时都会试图将半成品交给下一个刀片。如果下一个刀片无法从自己的输入总线中找到输入,则上一片刀片会停留在§4停滞§r状态,并最终使整个装配线阻塞。为了帮助你发现阻塞的装配线,任何含有§4停滞§r状态的装配刀片的装配线将会亮起橙红色指示灯。 -ggfab.info.advassline.6=高级装配线的瞬时能耗是正在工作的装配刀片的数量乘以当前配方的EU/t。§4停滞§r状态的装配刀片不会消耗能量。额外需要注意的是,本机器会使用所有能量供应舱室中最低的电压等级来计算配方等级与普通的非完美超频。 -ggfab.info.advassline.7=在使用一些特殊的能量供应舱室时,高级装配线可以进行额外的超频(称为§2激光超频§r),但是会使用比非完美超频更多的能量。每个§2激光超频§r会使得能量指数增加%s。 -ggfab.info.advassline.8=一层激光超频会使配方时间变为50%%,但会使用%s%%能量。二层激光超频会使配方时间变为25%%,但会使用%s%% (%s * %s)能量。激光超频仍然不会越过1tick极限。高级装配线在计算超频时会优先考虑并行,然后考虑非完美超频,最后进行§2激光超频§r。 ggfab.waila.advassline.slice=装配刀片 #%s: %s秒 / %s秒 ggfab.waila.advassline.slice.small=装配刀片 #%s: %s刻 / %s刻 ggfab.waila.advassline.slice.idle=装配刀片 #%s: 空闲 @@ -25,4 +16,4 @@ ggfab.info.biome=群系: ggfab.tooltip.linked_input_bus.change_freq_warn=如果这是最后一个本频道的输入总线,改变频道会使剩余的内容物洒在地上! ggfab.tooltip.linked_input_bus.private=私有频道不会与其余玩家共享 -ggfab.tooltip.linked_input_bus.private.1=如果这是最后一个本频道的输入总线,改变频道会使剩余的内容物洒在地上! \ No newline at end of file +ggfab.tooltip.linked_input_bus.private.1=如果这是最后一个本频道的输入总线,改变频道会使剩余的内容物洒在地上! diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang index c981c982bb4..e4609fd52de 100644 --- a/src/main/resources/assets/gregtech/lang/en_US.lang +++ b/src/main/resources/assets/gregtech/lang/en_US.lang @@ -515,7 +515,7 @@ GT5U.gui.text.fuel_quality_too_high=§7Fuel quality too high to run without boos GT5U.gui.text.no_data_sticks=§7No Data Sticks found GT5U.gui.text.bio_upgrade_missing=§7Recipe needs Bio Upgrade to start GT5U.gui.text.electromagnet_missing=§7Needs an Electromagnet to run -GT5U.gui.text.electromagnet_insufficient=§7Electromagnet too weak to handle exotic energy hatches +GT5U.gui.text.electromagnet_insufficient=§7Electromagnet too weak to handle multi-amp energy hatches GT5U.gui.text.laser_insufficient=§7Laser source is too weak to run this recipe GT5U.gui.text.cleanroom_running=§aCleanroom running GT5U.gui.text.no_machine=§7No valid processing machine From 67607edb5343c892e46767db782da3b7da0f4c5a Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 7 Sep 2024 02:42:52 -0500 Subject: [PATCH 2/2] Rebalance DSS + Proto-Halkonite (#3098) Co-authored-by: Martin Robertz --- .../postload/recipes/PlasmaForgeRecipes.java | 68 +++++++++++++++---- .../recipes/VacuumFreezerRecipes.java | 6 +- 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java index 5cf731c1ed1..478e0c0d97b 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java @@ -6,6 +6,7 @@ import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes; import static gregtech.api.util.GTModHandler.getModItem; import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; import net.minecraft.item.ItemStack; @@ -82,38 +83,77 @@ public void run() { .itemInputs() .fluidInputs( Materials.StableBaryonicMatter.getFluid(250), - GGMaterial.metastableOganesson.getMolten(288), + GGMaterial.metastableOganesson.getMolten(144), Materials.Grade8PurifiedWater.getFluid(400), - new FluidStack(celestialTungstenPlasma, 32 * 144), + new FluidStack(celestialTungstenPlasma, 24 * 144), Materials.RadoxSuperHeavy.getFluid(2000), - MaterialsUEVplus.ExcitedDTCC.getFluid(1000)) + MaterialsUEVplus.ExcitedDTPC.getFluid(1000)) .fluidOutputs( MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(7500), - MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(500)) - .duration(60 * SECONDS) + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(250)) + .duration(30 * SECONDS) .eut((int) TierEU.RECIPE_UIV) .metadata(COIL_HEAT, 10800) .addTo(plasmaForgeRecipes); - // Better recipe, unlocks with AwDr coil and uses heavy radox, which can be produced in the QFT. + // Better recipe, unlocks with Hypogen coil. // This recipe takes UMV power but processes 4x input and output as the original recipe, making it a free POC - // over - // the original recipe + // over the original recipe. Only increases the cost of baryonic and water, making the ratio much cheaper. GTValues.RA.stdBuilder() .itemInputs() .fluidInputs( Materials.StableBaryonicMatter.getFluid(1000), - GGMaterial.metastableOganesson.getMolten(288 * 4), + GGMaterial.metastableOganesson.getMolten(144), Materials.Grade8PurifiedWater.getFluid(1600), - new FluidStack(celestialTungstenPlasma, 128 * 144), - Materials.RadoxHeavy.getFluid(8000), - MaterialsUEVplus.ExcitedDTRC.getFluid(4000)) + new FluidStack(celestialTungstenPlasma, 24 * 144), + Materials.RadoxSuperHeavy.getFluid(2000), + MaterialsUEVplus.ExcitedDTRC.getFluid(2000)) .fluidOutputs( MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(30000), - MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(2000)) - .duration(60 * SECONDS) + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1000)) + .duration(30 * SECONDS) .eut((int) TierEU.RECIPE_UMV) .metadata(COIL_HEAT, 12600) .addTo(plasmaForgeRecipes); + + // Better recipe, unlocks with Eternal coil. + // Doubles the cost across the board, but outputs 3x more. + // Switches to Heavy Radox, which can be mass-produced with the QFT. + GTValues.RA.stdBuilder() + .itemInputs() + .fluidInputs( + Materials.StableBaryonicMatter.getFluid(2000), + GGMaterial.metastableOganesson.getMolten(144 * 2), + Materials.Grade8PurifiedWater.getFluid(3200), + new FluidStack(celestialTungstenPlasma, 48 * 144), + Materials.RadoxHeavy.getFluid(4000), + MaterialsUEVplus.ExcitedDTEC.getFluid(2000)) + .fluidOutputs( + MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(90000), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(2000)) + .duration(30 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .metadata(COIL_HEAT, 13500) + .addTo(plasmaForgeRecipes); + + // Best recipe, unlocks with Stellar Catalyst. + // Quadruples the cost of everything except for Metastable and Celestial, which are only doubled, + // but gives 4x the output. + GTValues.RA.stdBuilder() + .itemInputs() + .fluidInputs( + Materials.StableBaryonicMatter.getFluid(8000), + GGMaterial.metastableOganesson.getMolten(144 * 4), + Materials.Grade8PurifiedWater.getFluid(12800), + new FluidStack(celestialTungstenPlasma, 96 * 144), + Materials.RadoxHeavy.getFluid(32000), + MaterialsUEVplus.ExcitedDTSC.getFluid(2000)) + .fluidOutputs( + MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(360000), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(4000)) + .duration(7 * SECONDS + 10 * TICKS) + .eut((int) TierEU.RECIPE_UXV) + .metadata(COIL_HEAT, 13500) + .addTo(plasmaForgeRecipes); } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java index 813897b3cd5..10acaabbde1 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java @@ -447,9 +447,9 @@ private void addProtoHalkonitePartRecipe(OrePrefixes prefix, final int multiplie .itemInputs(GTOreDictUnificator.get(prefix, MaterialsUEVplus.HotProtoHalkonite, multiplier)) .itemOutputs(GTOreDictUnificator.get(prefix, MaterialsUEVplus.ProtoHalkonite, multiplier)) .fluidInputs( - MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid((long) partFraction * multiplier), - Materials.SuperCoolant.getFluid(partFraction * multiplier * 10L)) - .duration((int) (multiplier * (10 * SECONDS * partFraction / 144.0))) + MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid((long) partFraction * multiplier / 4), + Materials.SuperCoolant.getFluid(partFraction * multiplier * 4L)) + .duration((int) (multiplier * (SECONDS * partFraction / 144.0))) .eut(TierEU.RECIPE_UIV) .noOptimize() .addTo(vacuumFreezerRecipes);