aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/api/objects/minecraft
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/api/objects/minecraft')
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java4
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java71
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java57
-rw-r--r--src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java39
4 files changed, 170 insertions, 1 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
index 4fb6b9d8a7..476926826b 100644
--- a/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ItemStackData.java
@@ -27,7 +27,9 @@ public class ItemStackData {
}
public ItemStack getStack() {
- return ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
}
}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
new file mode 100644
index 0000000000..947b0a97b4
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftDataStack.java
@@ -0,0 +1,71 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+import net.minecraft.item.ItemStack;
+import thaumcraft.api.aspects.AspectList;
+
+public class ThaumcraftDataStack extends Stack<ThaumcraftItemStackData> {
+
+ private final int mStackSize;
+
+ public ThaumcraftDataStack() {
+ this(Integer.MAX_VALUE);
+ }
+
+ public ThaumcraftDataStack(int aMaxSize) {
+ mStackSize = aMaxSize;
+ }
+
+ public boolean containsItemStack(ItemStack aStack, boolean aAddItemStackIfMissingFromStack) {
+ return getItemStackIndex(aStack) != -1;
+ }
+
+ private int getItemStackIndex(ItemStack aStack) {
+ if (this.empty() || aStack == null) {
+ return -1;
+ }
+ Iterator<ThaumcraftItemStackData> iterator = this.iterator();
+ int aIndex = 0;
+ while(iterator.hasNext()){
+ ThaumcraftItemStackData value = iterator.next();
+ if (value.doesItemStackDataMatch(aStack)) {
+ //int index = this.search(value);
+ return aIndex;
+ }
+ aIndex++;
+ }
+ return -1;
+ }
+
+ public AspectList getAspectsForStack(ItemStack aStack) {
+ if (aStack != null) {
+ int aIndex = getItemStackIndex(aStack);
+ if (!this.empty()) {
+ if (aIndex != -1) {
+ ThaumcraftItemStackData aValue = this.elementAt(aIndex);
+ if (aValue != null) {
+ return aValue.getAspectList();
+ }
+ }
+ }
+ if (this.empty() || aIndex == -1) {
+ ThaumcraftItemStackData aTemp = new ThaumcraftItemStackData(aStack);
+ this.push(aTemp);
+ return aTemp.getAspectList();
+ }
+ }
+ return new AspectList();
+ }
+
+ @Override
+ public ThaumcraftItemStackData push(ThaumcraftItemStackData item) {
+ if (this.size() >= this.mStackSize) {
+ this.pop();
+ }
+ return super.push(item);
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
new file mode 100644
index 0000000000..1e9ea49dbf
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftItemStackData.java
@@ -0,0 +1,57 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager;
+
+public class ThaumcraftItemStackData {
+
+ protected final Item mItem;
+ protected final int mDamage;
+ protected final int mStackSize;
+ protected final NBTTagCompound mNBT;
+ protected final String mUniqueDataTag;
+ private final AspectList mAspectList;
+
+ public ThaumcraftItemStackData (ItemStack aStack) {
+ mItem = aStack.getItem();
+ mDamage = aStack.getItemDamage();
+ mStackSize = aStack.stackSize;
+ mNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ mUniqueDataTag = ""+Item.getIdFromItem(mItem)+""+mDamage+""+mNBT.getId();
+ mAspectList = ThaumcraftCraftingManager.getObjectTags(aStack);
+ }
+
+ public String getUniqueDataIdentifier() {
+ return this.mUniqueDataTag;
+ }
+
+ public ItemStack getStack() {
+ ItemStack aTemp = ItemUtils.simpleMetaStack(mItem, mDamage, mStackSize);
+ aTemp.setTagCompound(mNBT);
+ return aTemp;
+ }
+
+ public AspectList getAspectList() {
+ return mAspectList;
+ }
+
+ public boolean doesItemStackDataMatch(ItemStack aStack) {
+ if (aStack == null) {
+ return false;
+ }
+ Item aItem = aStack.getItem();
+ int aMeta = aStack.getItemDamage();
+ if (aItem != null) {
+ if (aItem == mItem && aMeta == mDamage) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
new file mode 100644
index 0000000000..1e16527065
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/objects/minecraft/ThaumcraftSmeltingCache.java
@@ -0,0 +1,39 @@
+package gtPlusPlus.api.objects.minecraft;
+
+import java.util.HashMap;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class ThaumcraftSmeltingCache {
+
+ HashMap<String, Boolean> mInternalCache = new HashMap<String, Boolean>();
+
+ public void addItemToCache(ItemStack aStack, Boolean aSmelting) {
+ String aKey = getUniqueKey(aStack);
+ mInternalCache.put(aKey, aSmelting);
+ }
+
+ public int canSmelt(ItemStack aStack) {
+ String aKey = getUniqueKey(aStack);
+ Boolean aCanSmeltValue = mInternalCache.get(aKey);
+ if (aCanSmeltValue != null) {
+ if (aCanSmeltValue) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ return -1;
+ }
+
+ public static final String getUniqueKey(ItemStack aStack) {
+ Item aItem = aStack.getItem();
+ int aDamage = aStack.getItemDamage();
+ NBTTagCompound aNBT = (aStack.getTagCompound() != null ? aStack.getTagCompound() : new NBTTagCompound());
+ return ""+Item.getIdFromItem(aItem)+""+aDamage+""+aNBT.getId();
+ }
+
+}