aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2018-02-12 02:31:11 +1000
committerJordan Byrne <draknyte1@hotmail.com>2018-02-12 02:31:11 +1000
commit8e6804ae4c193aac5a4a9c119c0411f314a42cba (patch)
tree4000ef17a495d63487a9760829f55f8850c7e9d4 /src/Java/gtPlusPlus
parent8f69fec821185ae46fceca42fe54aa625ea40ba5 (diff)
downloadGT5-Unofficial-8e6804ae4c193aac5a4a9c119c0411f314a42cba.tar.gz
GT5-Unofficial-8e6804ae4c193aac5a4a9c119c0411f314a42cba.tar.bz2
GT5-Unofficial-8e6804ae4c193aac5a4a9c119c0411f314a42cba.zip
$ Minor tweaks to Matter Fabricator recipe generator caching.
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r--src/Java/gtPlusPlus/core/util/Utils.java41
-rw-r--r--src/Java/gtPlusPlus/core/util/array/Pair.java8
-rw-r--r--src/Java/gtPlusPlus/core/util/item/ItemUtils.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java93
4 files changed, 95 insertions, 49 deletions
diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java
index effe0952f7..0909e4bf2d 100644
--- a/src/Java/gtPlusPlus/core/util/Utils.java
+++ b/src/Java/gtPlusPlus/core/util/Utils.java
@@ -2,9 +2,14 @@ package gtPlusPlus.core.util;
import java.awt.Color;
import java.awt.Graphics;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.ArrayList;
@@ -15,6 +20,8 @@ import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
+import javax.xml.bind.DatatypeConverter;
+
import org.apache.commons.lang3.EnumUtils;
import cpw.mods.fml.common.FMLCommonHandler;
@@ -821,4 +828,38 @@ public class Utils {
}
+ public static String calculateChecksumMD5(Object bytes) {
+ byte[] result = new byte[] {};
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutput out = null;
+ try {
+ out = new ObjectOutputStream(bos);
+ out.writeObject(bytes);
+ out.flush();
+ result = bos.toByteArray();
+ }
+ catch (IOException e) {
+ } finally {
+ try {
+ bos.close();
+ }
+ catch (IOException e) {}
+ }
+ return calculateChecksumMD5(result);
+ }
+
+ public static String calculateChecksumMD5(byte[] bytes) {
+ MessageDigest md;
+ try {
+ md = MessageDigest.getInstance("MD5");
+ md.update(bytes);
+ byte[] digest = md.digest();
+ String myHash = DatatypeConverter.printHexBinary(digest).toUpperCase();
+ return myHash;
+ }
+ catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/util/array/Pair.java b/src/Java/gtPlusPlus/core/util/array/Pair.java
index ec5971c449..1d2c0ef7cb 100644
--- a/src/Java/gtPlusPlus/core/util/array/Pair.java
+++ b/src/Java/gtPlusPlus/core/util/array/Pair.java
@@ -1,7 +1,13 @@
package gtPlusPlus.core.util.array;
-public class Pair<K,V> {
+import java.io.Serializable;
+public class Pair<K,V> implements Serializable {
+
+ /**
+ * SVUID
+ */
+ private static final long serialVersionUID = 1250550491092812443L;
private final K key;
private final V value;
diff --git a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
index 3d21a845bc..367539b49d 100644
--- a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
@@ -3,8 +3,6 @@ package gtPlusPlus.core.util.item;
import java.util.ArrayList;
import java.util.List;
-import org.apache.commons.lang3.reflect.FieldUtils;
-
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
import gregtech.api.enums.Materials;
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
index c6498ff889..a64057f3cc 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java
@@ -32,6 +32,7 @@ import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.array.AutoMap;
import gtPlusPlus.core.util.array.Pair;
+import gtPlusPlus.core.util.array.Triplet;
import gtPlusPlus.core.util.fluid.FluidUtils;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.math.MathUtils;
@@ -176,7 +177,7 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
if (h.getItem() == CI.getNumberedCircuit(0).getItem()) {
this.mMode = getGUICircuit(new ItemStack[] {h});
}
-
+
}
}
}
@@ -337,26 +338,27 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
return new GregtechMetaTileEntity_MassFabricator(this.mName);
}
- public static Map<Integer, GT_Recipe> mCachedRecipeMap = new ConcurrentHashMap<Integer, GT_Recipe>();
+ public static Map<String, GT_Recipe> mCachedRecipeMap = new ConcurrentHashMap<String, GT_Recipe>();
/**
* Special Recipe Generator
*/
- private GT_Recipe generateCustomRecipe(int mode, ItemStack[] aItemInputs) {
+ private GT_Recipe generateCustomRecipe(int mode, ItemStack[] aItemInputs, FluidStack[] aFluidInputs) {
ItemStack[] inputs = null;
ItemStack[] outputs = null;
FluidStack fluidIn = null;
FluidStack fluidOut = null;
- Pair<Integer, ItemStack[]> K = new Pair<Integer, ItemStack[]>(mode, aItemInputs);
- int mapKey = ((K.getValue().length < 1 || K.getValue() == null) ? -1 : K.hashCode());
+ Triplet<Integer, ItemStack[], FluidStack[]> K = new Triplet<Integer, ItemStack[], FluidStack[]>(mode, aItemInputs, aFluidInputs);
+ //int mapKey = ((K == null || aItemInputs == null || aItemInputs.length < 1) ? -1 : K.hashCode());
+ String mapKey = Utils.calculateChecksumMD5(K);
if (mCachedRecipeMap.containsKey(mapKey)) {
Logger.INFO("2.x. Returning Cached Result.");
return mCachedRecipeMap.get(mapKey);
}
final boolean oldRecipe = Utils.invertBoolean(CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK);
- Logger.INFO("2.x.1");
+ Logger.INFO("2.x.1 | "+mapKey);
int baseEuCost = 0;
int baseTimeCost = 0;
@@ -462,31 +464,30 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
if (oldRecipe) {
baseEuCost = (baseEuCost/8);
}
-
+
Recipe_GT B = null;
try {
- B = new Recipe_GT(
- true,
- inputs, //Inputs
- outputs, //Outputs
- null, // Special?
- new int[] {10000}, //Chances
- new FluidStack[] {fluidIn}, //Fluid Inputs
- new FluidStack[] {fluidOut}, //Fluid Outputs
- baseTimeCost, //duration
- baseEuCost, //eu/t
- 0);
+ B = new Recipe_GT(
+ true,
+ inputs, //Inputs
+ outputs, //Outputs
+ null, // Special?
+ new int[] {10000}, //Chances
+ new FluidStack[] {fluidIn}, //Fluid Inputs
+ new FluidStack[] {fluidOut}, //Fluid Outputs
+ baseTimeCost, //duration
+ baseEuCost, //eu/t
+ 0);
}
catch (Throwable t) {
t.printStackTrace();
}
- Logger.INFO("2.x.6");
- //Map Key
- mCachedRecipeMap.put(B == null ? -1 : mapKey, B);
- Logger.INFO("2.x.7");
- Recipe_GT.Gregtech_Recipe_Map.sMatterFab2Recipes.add(B);
- Logger.INFO("2.x.8");
+ //Cache generated recipe
+ if (B != null) {
+ mCachedRecipeMap.put(mapKey, B);
+ Recipe_GT.Gregtech_Recipe_Map.sMatterFab2Recipes.add(B);
+ }
//The Recipe Itself.
return B;
@@ -526,23 +527,23 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
while (totalScrap > 0) {
Logger.INFO("2.x.4.x.6.xx | "+index);
//if (index < mOutputs.length) {
- if (mOutputs[index] == null) { //TODO
- Logger.WARNING("2.x.4.x.6.1");
- mOutputs[index] = getScrapPile();
- totalScrap--;
- }
- else {
- Logger.WARNING("2.x.4.x.6.2");
- if (mOutputs[index].stackSize < 64) {
- mOutputs[index].stackSize++;
- totalScrap--;
- }
+ if (mOutputs[index] == null) { //TODO
+ Logger.WARNING("2.x.4.x.6.1");
+ mOutputs[index] = getScrapPile();
+ totalScrap--;
+ }
+ else {
+ Logger.WARNING("2.x.4.x.6.2");
+ if (mOutputs[index].stackSize < 64) {
+ mOutputs[index].stackSize++;
+ totalScrap--;
}
-
- if (mOutputs[index] != null && mOutputs[index].stackSize >= 64) {
- Logger.WARNING("2.x.4.x.6.0");
- index++;
- }
+ }
+
+ if (mOutputs[index] != null && mOutputs[index].stackSize >= 64) {
+ Logger.WARNING("2.x.4.x.6.0");
+ index++;
+ }
//}
}
}
@@ -582,22 +583,22 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
return mOutput;
}
- private GT_Recipe getFakeRecipeForMode(ItemStack[] aItemInputs) {
+ private GT_Recipe getFakeRecipeForMode(ItemStack[] aItemInputs, FluidStack[] aFluidInputs) {
if (this.mMode == JUNK_TO_SCRAP) {
Logger.WARNING("2.1");
- return generateCustomRecipe(JUNK_TO_SCRAP, aItemInputs);
+ return generateCustomRecipe(JUNK_TO_SCRAP, aItemInputs, aFluidInputs);
}
else if (this.mMode == JUNK_TO_UUA) {
Logger.WARNING("2.2");
- return generateCustomRecipe(JUNK_TO_UUA, aItemInputs);
+ return generateCustomRecipe(JUNK_TO_UUA, aItemInputs, aFluidInputs);
}
else if (this.mMode == SCRAP_UUA) {
Logger.WARNING("2.3");
- return generateCustomRecipe(SCRAP_UUA, aItemInputs);
+ return generateCustomRecipe(SCRAP_UUA, aItemInputs, aFluidInputs);
}
else if (this.mMode == PRODUCE_UUM) {
Logger.WARNING("2.4");
- return generateCustomRecipe(PRODUCE_UUM, aItemInputs);
+ return generateCustomRecipe(PRODUCE_UUM, aItemInputs, aFluidInputs);
}
else {
Logger.WARNING("2.5");
@@ -654,7 +655,7 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo
Logger.INFO("1.");
Logger.INFO("2.");
- mFakeRecipe = getFakeRecipeForMode(aItemInputs);
+ mFakeRecipe = getFakeRecipeForMode(aItemInputs, aFluidInputs);
Logger.INFO("3.");
long tVoltage = getMaxInputVoltage();