aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAntifluxfield <lyj_299792458@163.com>2018-01-02 22:41:36 +0800
committerDream-Master <dream-master@gmx.net>2018-01-02 16:01:13 +0100
commit1c01e2cac238922748fe603ed3335a9d4c9c30c6 (patch)
tree720f9718f6e7da78cf884504c5256ed01624b238 /src/main
parent2bee19327145d65e4395a4b28b6e6057a5624bec (diff)
downloadGT5-Unofficial-1c01e2cac238922748fe603ed3335a9d4c9c30c6.tar.gz
GT5-Unofficial-1c01e2cac238922748fe603ed3335a9d4c9c30c6.tar.bz2
GT5-Unofficial-1c01e2cac238922748fe603ed3335a9d4c9c30c6.zip
Fix #1039
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java37
-rw-r--r--src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java2
2 files changed, 38 insertions, 1 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
index 7552f5ea85..f124f0f69c 100644
--- a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
+++ b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
@@ -15,6 +15,7 @@ import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -32,6 +33,7 @@ import static gregtech.api.enums.GT_Values.*;
public class GT_OreDictUnificator {
private static final /*ConcurrentHash*/Map<String, ItemStack> sName2StackMap = new /*ConcurrentHash*/HashMap<String, ItemStack>();
private static final /*ConcurrentHash*/Map<GT_ItemStack, ItemData> sItemStack2DataMap = new /*ConcurrentHash*/HashMap<GT_ItemStack, ItemData>();
+ private static final /*ConcurrentHash*/Map<GT_ItemStack, List<ItemStack>> sUnificationTable = new /*ConcurrentHash*/HashMap<GT_ItemStack, List<ItemStack>>();
private static final GT_HashSet<GT_ItemStack> sNoUnificationList = new GT_HashSet<GT_ItemStack>();
public static volatile int VERSION = 509;
private static int isRegisteringOre = 0, isAddingOre = 0;
@@ -39,6 +41,7 @@ public class GT_OreDictUnificator {
static {
GregTech_API.sItemStackMappings.add(sItemStack2DataMap);
+ GregTech_API.sItemStackMappings.add(sUnificationTable);
}
/**
@@ -153,6 +156,40 @@ public class GT_OreDictUnificator {
return GT_Utility.copyAmount(aStack.stackSize, rStack);
}
+ public static List<ItemStack> getNonUnifiedStacks(Object obj) {
+ synchronized (sUnificationTable) {
+ if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) {
+ for (GT_ItemStack tGTStack0 : sItemStack2DataMap.keySet()) {
+ ItemStack tStack0 = tGTStack0.toStack();
+ ItemStack tStack1 = get(false, tStack0);
+ if (!GT_Utility.areStacksEqual(tStack0, tStack1)) {
+ GT_ItemStack tGTStack1 = new GT_ItemStack(tStack1);
+ List<ItemStack> list = sUnificationTable.get(tGTStack1);
+ if (list == null) sUnificationTable.put(tGTStack1, list = new ArrayList<ItemStack>());
+ if (!list.contains(tStack0)) list.add(tStack0);
+ }
+ }
+ }
+ }
+ ItemStack[] aStacks = {};
+ if (obj instanceof ItemStack) aStacks = new ItemStack[]{(ItemStack) obj};
+ else if (obj instanceof ItemStack[]) aStacks = (ItemStack[]) obj;
+ else if (obj instanceof List) aStacks = (ItemStack[]) ((List)obj).toArray(new ItemStack[0]);
+ List<ItemStack> rList = new ArrayList<ItemStack>();
+ for (ItemStack aStack : aStacks) {
+ rList.add(aStack);
+ List<ItemStack> tList = sUnificationTable.get(new GT_ItemStack(get(false, aStack)));
+ if (tList != null) {
+ for (ItemStack tStack : tList) {
+ ItemStack tStack1 = GT_Utility.copyAmount(aStack.stackSize, tStack);
+ tStack1.setTagCompound(aStack.getTagCompound());
+ rList.add(tStack1);
+ }
+ }
+ }
+ return rList;
+ }
+
public static void addItemData(ItemStack aStack, ItemData aData) {
if (GT_Utility.isStackValid(aStack) && getItemData(aStack) == null && aData != null) setItemData(aStack, aData);
}
diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
index 99adf8c3d4..ab819461ea 100644
--- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
+++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
@@ -332,7 +332,7 @@ public class GT_NEI_DefaultHandler
}
public FixedPositionedStack(Object object, int x, int y, int aChance) {
- super(object, x, y, true);
+ super(GT_OreDictUnificator.getNonUnifiedStacks(object), x, y, true);
this.mChance = aChance;
}