aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech
diff options
context:
space:
mode:
authorConnor-Colenso <52056774+Connor-Colenso@users.noreply.github.com>2022-07-13 14:39:50 +0100
committerGitHub <noreply@github.com>2022-07-13 14:39:50 +0100
commit2fba044e24176b19d7c9f1280bbbf368d7439b7a (patch)
tree250488f4682b9d419812a90468bf91c58d9e3882 /src/main/java/gregtech
parent37cbe0b02ac20a99abb99082ece9ca3387d9b638 (diff)
downloadGT5-Unofficial-2fba044e24176b19d7c9f1280bbbf368d7439b7a.tar.gz
GT5-Unofficial-2fba044e24176b19d7c9f1280bbbf368d7439b7a.tar.bz2
GT5-Unofficial-2fba044e24176b19d7c9f1280bbbf368d7439b7a.zip
DTPF Changes (#1129)
* Add overclocking. Require 1 of any energy hatch to form. Change TT support to allow recipes to start as long as total voltage is sufficient. * More OpV purging + cleanup * Save EU_per_tick to NBT. Reset EU_per_tick when machine stops to 0. Change a few comments Co-authored-by: GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech')
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java69
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java84
2 files changed, 109 insertions, 44 deletions
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
index 6dca327429..ed22331360 100644
--- a/src/main/java/gregtech/api/enums/GT_Values.java
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -111,32 +111,67 @@ public class GT_Values {
* The short Names for the Voltages
*/
public static final String[] VN =
- new String[]{"ULV", "LV", "MV",
- "HV", "EV", "IV",
- "LuV", "ZPM", "UV",
- "UHV", "UEV", "UIV",
- "UMV", "UXV", "OpV",
- "MAX"};
+ new String[]{
+ "ULV", // 0
+ "LV", // 1
+ "MV", // 2
+ "HV", // 3
+ "EV", // 4
+ "IV", // 5
+ "LuV", // 6
+ "ZPM", // 7
+ "UV", // 8
+ "UHV", // 9
+ "UEV", // 10
+ "UIV", // 11
+ "UMV", // 12
+ "UXV", // 13
+ "MAX", // 14
+ "ERROR VOLTAGE" // 15
+ };
/**
* The long Names for the Voltages
*/
public static final String[] VOLTAGE_NAMES =
new String[]{
- "Ultra Low Voltage", "Low Voltage", "Medium Voltage",
- "High Voltage", "Extreme Voltage", "Insane Voltage",
- "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage",
- "Ultimate High Voltage", "Ultimate Extreme Voltage", "Ultimate Insane Voltage",
- "Ultimate Mega Voltage", "Ultimate Extended Mega Voltage", "Maximum Voltage", "Error Voltage"};
+ "Ultra Low Voltage", // 0
+ "Low Voltage", // 1
+ "Medium Voltage", // 2
+ "High Voltage", // 3
+ "Extreme Voltage", // 4
+ "Insane Voltage", // 5
+ "Ludicrous Voltage", // 6
+ "ZPM Voltage", // 7
+ "Ultimate Voltage", // 8
+ "Ultimate High Voltage", // 9
+ "Ultimate Extreme Voltage", // 10
+ "Ultimate Insane Voltage", // 11
+ "Ultimate Mega Voltage", // 12
+ "Ultimate Extended Mega Voltage", // 13
+ "Maximum Voltage", // 14
+ "Error Voltage" // 15
+ };
public static final String[] TIER_COLORS =
new String[]{
- EnumChatFormatting.RED.toString(), EnumChatFormatting.GRAY.toString(), EnumChatFormatting.AQUA.toString(),
- EnumChatFormatting.GOLD.toString(), EnumChatFormatting.DARK_PURPLE.toString(), EnumChatFormatting.DARK_BLUE.toString(),
- EnumChatFormatting.LIGHT_PURPLE.toString(), EnumChatFormatting.WHITE.toString(), EnumChatFormatting.DARK_AQUA.toString(),
- EnumChatFormatting.DARK_RED.toString(), EnumChatFormatting.GREEN.toString(), EnumChatFormatting.DARK_GREEN.toString(),
- EnumChatFormatting.YELLOW.toString(), EnumChatFormatting.UNDERLINE.toString(), EnumChatFormatting.BOLD.toString(),
- EnumChatFormatting.OBFUSCATED.toString()};
+ EnumChatFormatting.RED.toString(), // ULV, 0
+ EnumChatFormatting.GRAY.toString(), // LV, 1
+ EnumChatFormatting.AQUA.toString(), // MV, 2
+ EnumChatFormatting.GOLD.toString(), // HV, 3
+ EnumChatFormatting.DARK_PURPLE.toString(), // EV, 4
+ EnumChatFormatting.DARK_BLUE.toString(), // IV, 5
+ EnumChatFormatting.LIGHT_PURPLE.toString(), // LuV, 6
+ EnumChatFormatting.WHITE.toString(), // ZPM, 7
+ EnumChatFormatting.DARK_AQUA.toString(), // UV, 8
+ EnumChatFormatting.DARK_RED.toString(), // UHV, 9
+ EnumChatFormatting.GREEN.toString(), // UEV, 10
+ EnumChatFormatting.DARK_GREEN.toString(), // UIV, 11
+ EnumChatFormatting.YELLOW.toString(), // UMV, 12
+ EnumChatFormatting.UNDERLINE.toString(), // UXV, 13
+ EnumChatFormatting.BOLD.toString(), // MAX, 14
+ EnumChatFormatting.OBFUSCATED.toString() // ~~~, 15
+ };
/**
* This way it is possible to have a Call Hierarchy of NullPointers in ItemStack based Functions, and also because most of the time I don't know what kind of Data Type the "null" stands for
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 1f50223ef3..a9f9d016db 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
@@ -31,12 +31,12 @@ import java.util.List;
import java.util.ArrayList;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
-import static gregtech.api.enums.GT_Values.V;
+import static gregtech.api.enums.GT_Values.TIER_COLORS;
import static gregtech.api.enums.GT_Values.VN;
import static gregtech.api.enums.Textures.BlockIcons.*;
import static gregtech.api.util.GT_StructureUtility.ofCoil;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional;
-
+import static java.lang.Math.*;
public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMultiFurnace<GT_MetaTileEntity_PlasmaForge> implements IConstructable {
@@ -48,6 +48,11 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
private int mHeatingCapacity = 0;
long running_time = 0;
+ private long EU_per_tick = 0;
+
+ // Saves recomputing this every recipe check for overclocking.
+ private static final double log4 = log(4);
+
private final int min_input_hatch = 0;
private final int max_input_hatch = 6;
private final int min_output_hatch = 0;
@@ -135,7 +140,7 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
tt.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 + GT_Utility.formatNumbers(100*maximum_discount) + "%" + EnumChatFormatting.GRAY + ". Does not overclock.")
+ .addInfo("consumption by up to " + EnumChatFormatting.RED + GT_Utility.formatNumbers(100*maximum_discount) + "%" + EnumChatFormatting.GRAY + ". Supports overclocking beyond MAX voltage.")
.addInfo("Author: " +
EnumChatFormatting.DARK_RED + EnumChatFormatting.BOLD + EnumChatFormatting.ITALIC + EnumChatFormatting.UNDERLINE + "C" +
EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + EnumChatFormatting.ITALIC + EnumChatFormatting.UNDERLINE + "o" +
@@ -145,20 +150,18 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
.addSeparator()
.beginStructureBlock(33, 24, 33, false)
.addStructureInfo("DTPF Structure is too complex! See schematic for details.")
- .addStructureInfo("2112 Heating coils required.")
- .addStructureInfo("120 Dimensional bridge blocks required.")
- .addStructureInfo("1270 Dimensional injection casings required.")
- .addStructureInfo("2121 Dimensionally transcendent casings required.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "2112" + EnumChatFormatting.GRAY + " Heating coils required.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "120" + EnumChatFormatting.GRAY + " Dimensional bridge blocks required.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "1270" + EnumChatFormatting.GRAY + " Dimensional injection casings required.")
+ .addStructureInfo(EnumChatFormatting.GOLD + "2121" + EnumChatFormatting.GRAY + " Dimensionally transcendent casings required.")
.addStructureInfo("--------------------------------------------")
- .addStructureInfo("Requires 1-2 energy hatches or 1 TT energy hatch.")
- .addStructureInfo("Requires 1 maintenance hatch.")
- .addStructureInfo("Requires 0-6 input hatches.")
- .addStructureInfo("Requires 0-2 output hatches.")
- .addStructureInfo("Requires 0-2 input busses.")
- .addStructureInfo("Requires 0-2 output busses.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + "2" + EnumChatFormatting.GRAY + " energy hatches or " + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " TT energy hatch.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " maintenance hatch.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + min_input_hatch + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + max_input_hatch + EnumChatFormatting.GRAY + " input hatches.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + min_output_hatch + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + max_output_hatch + EnumChatFormatting.GRAY + " output hatches.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + min_input_bus + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + max_input_bus + EnumChatFormatting.GRAY + " input busses.")
+ .addStructureInfo("Requires " + EnumChatFormatting.GOLD + min_output_bus + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + max_input_bus + EnumChatFormatting.GRAY + " output busses.")
.addStructureInfo("--------------------------------------------")
- .addStructureInfo("If you are having difficulties with the blueprint")
- .addStructureInfo("you can rotate the controller. This multi is symmetrical.")
.toolTipFinisher("Gregtech");
return tt;
}
@@ -224,23 +227,34 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
protected boolean processRecipe(ItemStack[] tItems, FluidStack[] tFluids) {
- // Get information about multi configuration.
+ // Gets the EU input of the
long tVoltage = GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList());
- byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage));
+ long tAmps = GT_ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList());
+
+ long tTotalEU = tVoltage * tAmps;
+ System.out.println(tTotalEU);
+
+ // Hacky method to determine if double energy hatches are being used.
+ if (getExoticAndNormalEnergyHatchList().get(0) instanceof GT_MetaTileEntity_Hatch_Energy) {
+ tTotalEU /= 2L;
+ }
// Look up recipe. If not found it will return null.
GT_Recipe tRecipe_0 = GT_Recipe.GT_Recipe_Map.sPlasmaForgeRecipes.findRecipe(
getBaseMetaTileEntity(),
false,
- V[tTier],
+ tTotalEU,
tFluids,
tItems
);
- // Sanity check.
+ // Check if recipe found.
if (tRecipe_0 == null)
return false;
+ System.out.println("Recipe found");
+
+
// If coil heat capacity is too low, refuse to start recipe.
if (mHeatingCapacity <= tRecipe_0.mSpecialValue)
return false;
@@ -259,13 +273,19 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
}
// Takes items/fluids from hatches/busses.
- if (!tRecipe_1.isRecipeInputEqual(true, tFluids, tItems)) {
+ if (!tRecipe_1.isRecipeInputEqual(true, tFluids, tItems))
return false;
- }
- // Vital recipe info.
- mEUt = -tRecipe_0.mEUt;
- mMaxProgresstime = tRecipe_0.mDuration;
+
+ // Logic for overclocking calculations.
+ double EU_input_tier = log(tTotalEU) / log4;
+ double EU_recipe_tier = log(tRecipe_0.mEUt) / log4;
+ long overclock_count = (long) floor(EU_input_tier - EU_recipe_tier);
+
+ // Vital recipe info. Calculate overclocks here if necessary.
+ EU_per_tick = (long) -(tRecipe_0.mEUt * pow(4, overclock_count));
+
+ mMaxProgresstime = (int) (tRecipe_0.mDuration / pow(2, overclock_count));
mMaxProgresstime = Math.max(1, mMaxProgresstime);
// Output items/fluids.
@@ -281,10 +301,13 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ // Reset heating capacity.
this.mHeatingCapacity = 0;
+ // Get heating capacity from coils in structure.
setCoilLevel(HeatingCoilLevel.None);
+ // Check the main structure
if (!checkPiece(STRUCTURE_PIECE_MAIN, 16, 21, 16))
return false;
@@ -325,6 +348,10 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
}
}
+ // If there are no energy hatches or TT energy hatches, structure will fail to form.
+ if ((mEnergyHatches.size() == 0) && (mExoticEnergyHatches.size() == 0))
+ return false;
+
// One maintenance hatch only. Mandatory.
if (mMaintenanceHatches.size() != 1)
return false;
@@ -358,10 +385,11 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
@Override
public boolean onRunningTick(ItemStack aStack) {
- if (mEUt < 0) {
- if (!drainEnergyInput(-mEUt)) {
+ if (EU_per_tick < 0) {
+ if (!drainEnergyInput(-EU_per_tick)) {
running_time = 0;
discount = 1;
+ EU_per_tick = 0;
criticalStopMachine();
return false;
}
@@ -392,7 +420,7 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
EnumChatFormatting.GREEN + GT_Utility.formatNumbers(storedEnergy) + EnumChatFormatting.RESET + " EU / " +
EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(maxEnergy) + EnumChatFormatting.RESET + " EU",
StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " +
- EnumChatFormatting.RED + GT_Utility.formatNumbers(-mEUt) + EnumChatFormatting.RESET + " EU/t",
+ EnumChatFormatting.RED + GT_Utility.formatNumbers(-EU_per_tick) + EnumChatFormatting.RESET + " EU/t",
StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " +
EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList())) + EnumChatFormatting.RESET + " EU/t(*" + EnumChatFormatting.YELLOW + GT_Utility.formatNumbers(GT_ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList())) + EnumChatFormatting.RESET + "A) " +
StatCollector.translateToLocal("GT5U.machines.tier") + ": " +
@@ -450,12 +478,14 @@ public class GT_MetaTileEntity_PlasmaForge extends GT_MetaTileEntity_AbstractMul
@Override
public void saveNBTData(NBTTagCompound aNBT) {
aNBT.setLong("eRunningTime", running_time);
+ aNBT.setLong("eLongEUPerTick", EU_per_tick);
super.saveNBTData(aNBT);
}
@Override
public void loadNBTData(final NBTTagCompound aNBT) {
running_time = aNBT.getLong("eRunningTime");
+ EU_per_tick = aNBT.getLong("eLongEUPerTick");
super.loadNBTData(aNBT);
}
}