aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGDCloud <93287602+GDCloudstrike@users.noreply.github.com>2024-07-02 00:15:24 +0200
committerGitHub <noreply@github.com>2024-07-02 00:15:24 +0200
commitb2cbfcf522d9dd13ce89a38d8a5767a8a64cecd8 (patch)
tree8ff82ca19775c32a4291c482d04dd0eec2173dab /src
parent39ad916f6d67ba8238a2909d5e8e7fc85f79e5e2 (diff)
downloadGT5-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')
-rw-r--r--src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java21
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java33
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java16
-rw-r--r--src/main/java/gregtech/common/items/ID_MetaItem_03.java3
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java254
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang8
-rw-r--r--src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.pngbin0 -> 471 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png.mcmeta1
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
new file mode 100644
index 0000000000..1ad5bc5e05
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.03/758.png
Binary files differ
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