diff options
author | GDCloud <93287602+GDCloudstrike@users.noreply.github.com> | 2024-07-02 00:15:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-02 00:15:24 +0200 |
commit | b2cbfcf522d9dd13ce89a38d8a5767a8a64cecd8 (patch) | |
tree | 8ff82ca19775c32a4291c482d04dd0eec2173dab /src | |
parent | 39ad916f6d67ba8238a2909d5e8e7fc85f79e5e2 (diff) | |
download | GT5-Unofficial-b2cbfcf522d9dd13ce89a38d8a5767a8a64cecd8.tar.gz GT5-Unofficial-b2cbfcf522d9dd13ce89a38d8a5767a8a64cecd8.tar.bz2 GT5-Unofficial-b2cbfcf522d9dd13ce89a38d8a5767a8a64cecd8.zip |
Add Dimensional Convergence, a new DTPF mode (#2669)
* store astral arrays internally
* save to item nbt
* initial implementation
* uncap running time and add syncer for convergence status
* adjust tooltips and add localisation
* add comments
* this should not be here
* small text adjustments
* Add bonus for using higher tier CoAl casings (#2668)
* add bonus for higher tier casings
* add tooltip info
* Fix a vat recipe conflict (#2677)
add circuit
* update
* Fix EBF & multi smelter scanner info (#2681)
fix
* Put some sanity in GT_MetaGenerated_Item_01 (#2649)
* set coin ids in enum
* extract coin shapeless recipes
* Arrows
* splitting more
* mold shapes
* big split
* split behaviors
* spotless
* enumerated shapes
* more enum work
* continuing enum work
* new batch of enum work
* last enum work
* Sort enum by IDs
* move enum into its own class
* public field
* Put some sanity in GT_MetaGenerated_Item_02/03 and in GT_MetaGenerated_Tool_01 (#2659)
* enum work
* sorting the class
* extracting the enum in its own class
* initial enum work for GT_MetaGenerated_Item_03
* split
* finished enum work
* extract enum in its own class
* migrate to enum
* remove duplicated recipes
* sorted enums
* extracted enum in its own class
* spotless
* fix compilation errors
* spotless
* fix mistake
* Add oredict for LV and HV circuits (try no 2) (#2682)
* blacklist ic2 ciruits from unificator
* fix 2 circuit oredicts
* move cleanroom assembler recipe
* remove unittest that needs nhcoremod to work
* fix electronic circuit recipe
* move recipe to better place and avoid duplicates
* move fluid filter recipe
* Clean crafting achievements (#2662)
* clean up crafting achievements
* spotless
* make crop tooltip appropriate (#2684)
change tooltip
* Move some mixins to hodgepodge (#2633)
* Move some mixins to hodgepodge
* store astral arrays internally
* save to item nbt
* initial implementation
* uncap running time and add syncer for convergence status
* adjust tooltips and add localisation
* add comments
* this should not be here
* small text adjustments
* add transdimensional alignment matrix
* add recipe
* require alignment matrix
* capital c
* fix catalyst tier being off by one
* swap some items around
* update aligment matrix tooltip
---------
Co-authored-by: chochem <40274384+chochem@users.noreply.github.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: HoleFish <48403212+HoleFish@users.noreply.github.com>
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Co-authored-by: Jason Mitchell <mitchej@gmail.com>
Diffstat (limited to 'src')
9 files changed, 324 insertions, 13 deletions
diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java b/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java index 2a0e7edc0d..5fa648670c 100644 --- a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java +++ b/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java @@ -39,6 +39,7 @@ import com.github.technus.tectech.thing.CustomItemList; import com.rwtema.extrautils.ExtraUtils; import fox.spiteful.avaritia.compat.ticon.Tonkers; +import goodgenerator.items.MyMaterial; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsBotania; @@ -811,6 +812,26 @@ public class ResearchStationAssemblyLine implements Runnable { ItemList.Casing_Dim_Trans.get(1), 20 * 20, 32_000_000); + + // Transdimensional Alignment Matrix + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemList.MicroTransmitter_UV.get(1), + 32_000_000, + 8192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.EOH_Infinite_Energy_Casing.get(1), + GregtechItemList.SpaceTimeContinuumRipper.get(4), ItemList.Robot_Arm_UMV.get(64), + ItemList.Sensor_UMV.get(16), ItemList.Field_Generator_UMV.get(4), ItemList.ZPM5.get(1), + ItemList.EnergisedTesseract.get(32), + GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Flerovium, 64), + MyMaterial.metastableOganesson.get(OrePrefixes.plateDense, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1024 * 144), Materials.Lead.getPlasma(64 * 144), + MaterialsUEVplus.Space.getMolten(64 * 144) }, + ItemList.Transdimensional_Alignment_Matrix.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UMV); } // Deep Dark Portal diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index 64e1907507..bb5bf1f3e7 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -1,5 +1,13 @@ package gregtech.api.enums; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.AQUA; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_AQUA; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.OBFUSCATED; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.RESET; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.animatedText; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.chain; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.text; import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.enums.Mods.IndustrialCraft2; @@ -9,6 +17,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.function.Supplier; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -614,6 +623,30 @@ public class GT_Values { + EnumChatFormatting.LIGHT_PURPLE + "minecraft7771"; + public static final Supplier<String> AuthorCloud = chain( + text("Author: " + EnumChatFormatting.AQUA + EnumChatFormatting.BOLD), + animatedText( + "C", + 1, + 500, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + "\u238B" + RESET + AQUA + BOLD, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + "\u0B83" + RESET + AQUA + BOLD, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + BOLD + "\u29BC" + RESET + AQUA + BOLD), + text(EnumChatFormatting.AQUA + EnumChatFormatting.BOLD.toString() + "loud" + EnumChatFormatting.RESET), + animatedText( + " ", + 1, + 500, + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + "\u238B", + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + "\u0B83", + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + BOLD + "\u29BC")); + public static final String AuthorQuerns = "Author: " + EnumChatFormatting.RED + "Querns"; public static final String AuthorSilverMoon = "Author: " + EnumChatFormatting.AQUA + "SilverMoon"; public static final String AuthorTheEpicGamer274 = "Author: " + "TheEpicGamer274"; diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index fa20a45c95..ac810f8eaf 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -450,6 +450,7 @@ public enum ItemList implements IItemContainer { Tesseract, EnergisedTesseract, Timepiece, + Transdimensional_Alignment_Matrix, Steam_Valve_LV, Steam_Valve_MV, diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java index 814f542226..49419aa47f 100644 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java +++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java @@ -1,5 +1,6 @@ package gregtech.common.items; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_METRICS_TRANSMITTER; import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UEV; @@ -204,6 +205,7 @@ import static gregtech.common.items.ID_MetaItem_03.Optically_Compatible_Memory; import static gregtech.common.items.ID_MetaItem_03.Optically_Perfected_CPU; import static gregtech.common.items.ID_MetaItem_03.Spinneret; import static gregtech.common.items.ID_MetaItem_03.Timepiece; +import static gregtech.common.items.ID_MetaItem_03.Transdimensional_Alignment_Matrix; import static gregtech.common.items.ID_MetaItem_03.Tube_Wires; import static gregtech.common.items.ID_MetaItem_03.UHV_Coil; import static gregtech.common.items.ID_MetaItem_03.ULV_Coil; @@ -1109,6 +1111,15 @@ public class GT_MetaGenerated_Item_03 extends GT_MetaGenerated_Item_X32 { .set(addItem(Optically_Compatible_Memory.ID, "Optically Compatible Memory", "Its in the name!", o)); ItemList.Timepiece.set(addItem(Timepiece.ID, "Timepiece", "Beware of the kid with the hat", o)); + ItemList.Transdimensional_Alignment_Matrix.set( + addItem( + Transdimensional_Alignment_Matrix.ID, + "Transdimensional Alignment Matrix", + String.join( + "/n ", + "Device supporting the alignment of transdimensional spaces.", + "Enables Dimensional Convergence on the DTPF."), + o)); ItemList.White_Dwarf_Shape_Extruder_Plate.set( addItem( @@ -1251,6 +1262,7 @@ public class GT_MetaGenerated_Item_03 extends GT_MetaGenerated_Item_X32 { "White Dwarf Extruder Shape (Drill Head)", "White Dwarf Extruder Shape for a Drill Head")); registerAllTieredTooltips(); + registerAllAnimatedTooltips(); initOrePrefixes(); initOreDictUnificatorEntries(); registerCovers(); @@ -1298,6 +1310,10 @@ public class GT_MetaGenerated_Item_03 extends GT_MetaGenerated_Item_X32 { registerTieredTooltip(ItemList.Circuit_TranscendentMainframe.get(1), MAX); } + private void registerAllAnimatedTooltips() { + addItemTooltip(ItemList.Transdimensional_Alignment_Matrix.get(1), GT_Values.AuthorCloud); + } + private void initOreDictUnificatorEntries() { GT_OreDictUnificator .set(OrePrefixes.componentCircuit, Materials.Resistor, ItemList.Circuit_Parts_Resistor.get(1L)); diff --git a/src/main/java/gregtech/common/items/ID_MetaItem_03.java b/src/main/java/gregtech/common/items/ID_MetaItem_03.java index 25083fee3c..fac8fd3841 100644 --- a/src/main/java/gregtech/common/items/ID_MetaItem_03.java +++ b/src/main/java/gregtech/common/items/ID_MetaItem_03.java @@ -219,7 +219,8 @@ public enum ID_MetaItem_03 { White_Dwarf_Shape_Extruder_Small_Gear(754), White_Dwarf_Shape_Extruder_Turbine_Blade(755), White_Dwarf_Shape_Extruder_ToolHeadDrill(756), - Timepiece(757); + Timepiece(757), + Transdimensional_Alignment_Matrix(758); public final int ID; diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java index 1eef27c8f1..a9cb2121a5 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java @@ -14,12 +14,19 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_OFF; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; import static gregtech.api.util.GT_StructureUtility.ofCoil; import static gregtech.api.util.GT_Utility.filterValidMTEs; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import javax.annotation.Nonnull; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -28,21 +35,37 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import net.minecraft.world.ChunkCoordIntPair; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; +import com.github.technus.tectech.thing.gui.TecTechUITextures; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.ItemList; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -72,9 +95,35 @@ public class GT_MetaTileEntity_PlasmaForge extends private static final double maximum_discount = 0.5d; // Valid fuels which the discount will get applied to. - private static final FluidStack[] valid_fuels = { MaterialsUEVplus.ExcitedDTEC.getFluid(1L), - MaterialsUEVplus.ExcitedDTRC.getFluid(1L), MaterialsUEVplus.ExcitedDTPC.getFluid(1L), - MaterialsUEVplus.ExcitedDTCC.getFluid(1L), MaterialsUEVplus.ExcitedDTSC.getFluid(1L) }; + private static final FluidStack[] valid_fuels = { MaterialsUEVplus.ExcitedDTCC.getFluid(1L), + MaterialsUEVplus.ExcitedDTPC.getFluid(1L), MaterialsUEVplus.ExcitedDTRC.getFluid(1L), + MaterialsUEVplus.ExcitedDTEC.getFluid(1L), MaterialsUEVplus.ExcitedDTSC.getFluid(1L) }; + + private static final HashMap<Fluid, Pair<Long, Float>> FUEL_ENERGY_VALUES = new HashMap<>() { + + { + put( + MaterialsUEVplus.ExcitedDTCC.getFluid(1L) + .getFluid(), + Pair.of(14_514_983L, 1 / 8f)); + put( + MaterialsUEVplus.ExcitedDTPC.getFluid(1L) + .getFluid(), + Pair.of(66_768_460L, 1 / 4f)); + put( + MaterialsUEVplus.ExcitedDTRC.getFluid(1L) + .getFluid(), + Pair.of(269_326_451L, 1 / 2f)); + put( + MaterialsUEVplus.ExcitedDTEC.getFluid(1L) + .getFluid(), + Pair.of(1_073_007_393L, 1f)); + put( + MaterialsUEVplus.ExcitedDTSC.getFluid(1L) + .getFluid(), + Pair.of(4_276_767_521L, 2f)); + } + }; private static final int min_input_hatch = 0; private static final int max_input_hatch = 7; @@ -89,7 +138,9 @@ public class GT_MetaTileEntity_PlasmaForge extends private double discount = 1; private int mHeatingCapacity = 0; private long running_time = 0; + private boolean convergence = false; private HeatingCoilLevel mCoilLevel; + private GT_OverclockCalculator overclockCalculator; @SuppressWarnings("SpellCheckingInspection") private static final String[][] structure_string = new String[][] { { " ", @@ -526,19 +577,41 @@ public class GT_MetaTileEntity_PlasmaForge extends @Override protected GT_Multiblock_Tooltip_Builder createTooltip() { GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addInfo("Transcending Dimensional Boundaries.") + tt.addMachineType("Plasma Forge, DTPF") + .addInfo("Transcending Dimensional Boundaries.") .addInfo( "Takes " + EnumChatFormatting.RED + GT_Utility.formatNumbers(max_efficiency_time_in_ticks / (3600 * 20)) + EnumChatFormatting.GRAY + " hours of continuous run time to fully breach dimensional") - .addInfo("boundaries and achieve maximum efficiency. This reduces fuel") .addInfo( - "consumption by up to " + EnumChatFormatting.RED + "boundaries and achieve maximum efficiency, reducing fuel consumption by up to " + + EnumChatFormatting.RED + GT_Utility.formatNumbers(100 * maximum_discount) + "%" + EnumChatFormatting.GRAY - + ". Supports overclocking beyond MAX voltage.") + + ".") + .addInfo("Multidimensional spaces can be perfectly aligned and synchronized in this state, ") + .addInfo( + "allowing " + EnumChatFormatting.GOLD + + "Dimensional Convergence " + + EnumChatFormatting.GRAY + + "to occur. To reach the required stability threshold,") + .addInfo( + "a " + EnumChatFormatting.AQUA + + "Transdimensional Alignment Matrix " + + EnumChatFormatting.GRAY + + "must be placed in the controller.") + .addInfo( + "When " + EnumChatFormatting.GOLD + + "Convergence " + + EnumChatFormatting.GRAY + + "is active, it allows the forge to perform " + + EnumChatFormatting.RED + + "Perfect Overclocks" + + EnumChatFormatting.GRAY + + ",") + .addInfo("but the extra power cost is instead added in form of increased catalyst amounts.") .addInfo( "When no recipe is running, fuel discount decays x" + EnumChatFormatting.RED + GT_Utility.formatNumbers(efficiency_decay_rate) @@ -678,7 +751,7 @@ public class GT_MetaTileEntity_PlasmaForge extends public CheckRecipeResult checkProcessing() { CheckRecipeResult recipe_process = super.checkProcessing(); if (recipe_process.wasSuccessful()) { - running_time = Math.min(running_time + mMaxProgresstime, (long) max_efficiency_time_in_ticks); + running_time = running_time + mMaxProgresstime; } return recipe_process; } @@ -690,14 +763,18 @@ public class GT_MetaTileEntity_PlasmaForge extends @Nonnull @Override protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) + overclockCalculator = super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) .setMachineHeat(mHeatingCapacity); + if (discount == maximum_discount && convergence) { + overclockCalculator = overclockCalculator.enablePerfectOC(); + } + return overclockCalculator; } @NotNull @Override protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return super.createParallelHelper(recipeAfterDiscount(recipe)); + return super.createParallelHelper(recipeAfterAdjustments(recipe)); } @Override @@ -709,17 +786,27 @@ public class GT_MetaTileEntity_PlasmaForge extends } @Nonnull - protected GT_Recipe recipeAfterDiscount(@Nonnull GT_Recipe recipe) { + protected GT_Recipe recipeAfterAdjustments(@Nonnull GT_Recipe recipe) { GT_Recipe tRecipe = recipe.copy(); + boolean adjusted = false; outside: for (int i = 0; i < recipe.mFluidInputs.length; i++) { for (FluidStack fuel : valid_fuels) { if (tRecipe.mFluidInputs[i].isFluidEqual(fuel)) { recalculateDiscount(); + if (discount == maximum_discount && convergence && overclockCalculator != null) { + calculateCatalystIncrease(tRecipe, i, false); + } tRecipe.mFluidInputs[i].amount = (int) Math.round(tRecipe.mFluidInputs[i].amount * discount); + adjusted = true; break outside; } } } + // Convergence adjusts the recipe even if it has no catalyst input + if (!adjusted && discount == maximum_discount && convergence && overclockCalculator != null) { + recalculateDiscount(); + calculateCatalystIncrease(tRecipe, 0, true); + } return tRecipe; } @@ -870,6 +957,7 @@ public class GT_MetaTileEntity_PlasmaForge extends + GT_Utility.formatNumbers(100 * (1 - discount)) + EnumChatFormatting.RESET + "%", + "Convergence: " + (convergence ? EnumChatFormatting.GREEN + "Active" : EnumChatFormatting.RED + "Inactive"), "-----------------------------------------" }; } @@ -881,6 +969,61 @@ public class GT_MetaTileEntity_PlasmaForge extends discount = Math.max(maximum_discount, discount); } + private int catalystTypeForRecipesWithoutCatalyst = 1; + + private void calculateCatalystIncrease(GT_Recipe recipe, int index, boolean withoutCatalyst) { + long machineConsumption = overclockCalculator.getConsumption(); + int numberOfOverclocks = (int) Math.ceil(calculateTier(machineConsumption) - GT_Utility.getTier(recipe.mEUt)); + double recipeDuration = recipe.mDuration / Math.pow(4, numberOfOverclocks); + // Power difference between regular and perfect OCs for this recipe duration + long extraPowerNeeded = (long) ((Math.pow(2, numberOfOverclocks) - 1) * machineConsumption * recipeDuration); + int inputFluids = recipe.mFluidInputs.length; + int outputFluids = recipe.mFluidOutputs.length; + int extraCatalystNeeded; + Fluid validFuel; + if (!withoutCatalyst) { + validFuel = recipe.mFluidInputs[index].getFluid(); + extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) + .getLeft()); + recipe.mFluidInputs[index].amount += extraCatalystNeeded; + // Increase present catalyst and residue by calculated amount + for (int j = 0; j < outputFluids; j++) { + if (recipe.mFluidOutputs[j] + .isFluidEqual(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1))) { + recipe.mFluidOutputs[j].amount += (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) + .getRight()); + } + } + } else { + // Add chosen catalyst as recipe input + validFuel = valid_fuels[catalystTypeForRecipesWithoutCatalyst - 1].getFluid(); + extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) + .getLeft()); + FluidStack[] newInputFluids = new FluidStack[inputFluids + 1]; + for (int i = 0; i < inputFluids; i++) { + newInputFluids[i] = recipe.mFluidInputs[i].copy(); + } + newInputFluids[inputFluids] = new FluidStack(validFuel, extraCatalystNeeded / 2); + recipe.mFluidInputs = newInputFluids; + // Add residue as recipe output + FluidStack[] newOutputFluids = new FluidStack[outputFluids + 1]; + for (int i = 0; i < outputFluids; i++) { + newOutputFluids[i] = recipe.mFluidOutputs[i].copy(); + } + newOutputFluids[outputFluids] = new FluidStack( + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1), + (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) + .getRight())); + recipe.mFluidOutputs = newOutputFluids; + } + } + + private static final double LN2 = Math.log(2); + + private double calculateTier(long voltage) { + return (1 + Math.max(0, (Math.log(voltage) / LN2) - 5) / 2); + } + @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { @@ -931,6 +1074,13 @@ public class GT_MetaTileEntity_PlasmaForge extends if (mMaxProgresstime == 0) { running_time = Math.max(0, running_time - (long) efficiency_decay_rate); } + if (aTick % 100 == 0) { + ItemStack controllerStack = this.getControllerSlot(); + if (convergence && (controllerStack == null + || !controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1)))) { + convergence = false; + } + } } } @@ -952,10 +1102,90 @@ public class GT_MetaTileEntity_PlasmaForge extends return SoundResource.GT_MACHINES_PLASMAFORGE_LOOP.resourceLocation; } + private static final int CATALYST_WINDOW_ID = 10; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(CATALYST_WINDOW_ID, this::createCatalystWindow); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + ItemStack controllerStack = this.getControllerSlot(); + if (clickData.mouseButton == 0) { + if (controllerStack != null + && controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1))) { + convergence = !convergence; + } + } else if (clickData.mouseButton == 1 && !widget.isClient()) { + widget.getContext() + .openSyncedWindow(CATALYST_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + if (convergence) { + ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON); + } else { + ret.add(GT_UITextures.BUTTON_STANDARD); + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); + } + return ret.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("GT5U.DTPF.convergencebutton")) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.0")) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.1")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 129) + .setSize(16, 16) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> convergence, (val) -> convergence = val), builder)); + super.addUIWidgets(builder, buildContext); + } + + protected ModularWindow createCatalystWindow(final EntityPlayer player) { + final int WIDTH = 58; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("GT5U.DTPF.catalysttier") + .setPos(3, 4) + .setSize(50, 20)) + .widget( + new NumericWidget().setSetter(val -> catalystTypeForRecipesWithoutCatalyst = (int) val) + .setGetter(() -> catalystTypeForRecipesWithoutCatalyst) + .setBounds(1, 5) + .setDefaultValue(1) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(50, 18) + .setPos(4, 25) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) + .addTooltip(translateToLocal("GT5U.DTPF.catalystinfotooltip")) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer( + () -> catalystTypeForRecipesWithoutCatalyst, + (val) -> catalystTypeForRecipesWithoutCatalyst = val), + builder)); + return builder.build(); + } + @Override public void saveNBTData(NBTTagCompound aNBT) { aNBT.setLong("eRunningTime", running_time); aNBT.setDouble("eLongDiscountValue", discount); + aNBT.setInteger("catalystType", catalystTypeForRecipesWithoutCatalyst); + aNBT.setBoolean("convergence", convergence); super.saveNBTData(aNBT); } @@ -963,6 +1193,8 @@ public class GT_MetaTileEntity_PlasmaForge extends public void loadNBTData(final NBTTagCompound aNBT) { running_time = aNBT.getLong("eRunningTime"); discount = aNBT.getDouble("eLongDiscountValue"); + catalystTypeForRecipesWithoutCatalyst = aNBT.getInteger("catalystType"); + convergence = aNBT.getBoolean("convergence"); super.loadNBTData(aNBT); } diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang index 055724277c..e0f13820f7 100644 --- a/src/main/resources/assets/gregtech/lang/en_US.lang +++ b/src/main/resources/assets/gregtech/lang/en_US.lang @@ -68,6 +68,12 @@ GT5U.LHE.steam=(in steam) GT5U.LHE.superheated=Superheated GT5U.LHE.threshold=threshold +GT5U.DTPF.convergencebutton=Allow Convergence +GT5U.DTPF.convergencebuttontooltip.0=Requires Transdimensional Aligment Matrix in controller slot +GT5U.DTPF.convergencebuttontooltip.1=Right Click to open catalyst selection menu +GT5U.DTPF.catalysttier=Catalyst Tier +GT5U.DTPF.catalystinfotooltip=Tier of additional catalyst to use for recipes without catalyst in them, from 1-Crude to 5-Stellar + GT5U.fusion.req=EU Required GT5U.fusion.plasma=Plasma Output @@ -1432,7 +1438,7 @@ fluid.Monomethylhydrazine=Monomethylhydrazine fluid.binnibacteriafluid=binnibacteriafluid fluid.barnadafisarboriatorisfluid=barnadafisarboriatorisfluid fluid.GelatinMixture=GelatinMixture -fluid.sludge=Sludge +fluid.sludge=sludge fluid.Formaldehyde=Formaldehyde fluid.tcetieisfucusserratusfluid=tcetieisfucusserratusfluid fluid.MeatExtract=MeatExtract diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png Binary files differnew file mode 100644 index 0000000000..1ad5bc5e05 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png.mcmeta b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png.mcmeta new file mode 100644 index 0000000000..0dab81071f --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 3}}
\ No newline at end of file |