diff options
Diffstat (limited to 'src/Java/gtPlusPlus/api/objects')
-rw-r--r-- | src/Java/gtPlusPlus/api/objects/data/AutoMap.java | 10 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/api/objects/minecraft/NoConflictGTRecipeMap.java | 94 |
2 files changed, 99 insertions, 5 deletions
diff --git a/src/Java/gtPlusPlus/api/objects/data/AutoMap.java b/src/Java/gtPlusPlus/api/objects/data/AutoMap.java index 7ffa2deb42..b3762dd243 100644 --- a/src/Java/gtPlusPlus/api/objects/data/AutoMap.java +++ b/src/Java/gtPlusPlus/api/objects/data/AutoMap.java @@ -9,6 +9,7 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable { * The Internal Map */ protected final Map<Integer, V> mInternalMap; + protected final Map<String, Integer> mInternalNameMap; /** * The Internal ID @@ -23,6 +24,7 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable { public AutoMap(Map<Integer, V> defaultMapType) { mInternalMap = defaultMapType; + mInternalNameMap = new HashMap<String, Integer>(); } @Override @@ -46,6 +48,7 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable { } public synchronized V set(V object){ + mInternalNameMap.put(""+object.hashCode(), (mInternalID+1)); return mInternalMap.put(mInternalID++, object); } @@ -93,5 +96,12 @@ public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable { public synchronized final int getInternalID() { return mInternalID; } + + public synchronized final boolean remove(V value) { + if (this.mInternalMap.containsValue(value)) { + return this.mInternalMap.remove(mInternalNameMap.get(""+value.hashCode()), value); + } + return false; + } } diff --git a/src/Java/gtPlusPlus/api/objects/minecraft/NoConflictGTRecipeMap.java b/src/Java/gtPlusPlus/api/objects/minecraft/NoConflictGTRecipeMap.java index 0aeaedb01d..78e925fe04 100644 --- a/src/Java/gtPlusPlus/api/objects/minecraft/NoConflictGTRecipeMap.java +++ b/src/Java/gtPlusPlus/api/objects/minecraft/NoConflictGTRecipeMap.java @@ -1,13 +1,14 @@ package gtPlusPlus.api.objects.minecraft; import java.util.Collection; +import java.util.Iterator; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Recipe; import gtPlusPlus.api.objects.data.AutoMap; -public class NoConflictGTRecipeMap { +public class NoConflictGTRecipeMap implements Collection<GT_Recipe> { private AutoMap<GT_Recipe> mRecipeCache = new AutoMap<GT_Recipe>(); private final IGregTechTileEntity mMachineType; @@ -15,25 +16,108 @@ public class NoConflictGTRecipeMap { public NoConflictGTRecipeMap () { this(null); } - + public NoConflictGTRecipeMap (IGregTechTileEntity tile0) { this.mMachineType = tile0; } public boolean put(GT_Recipe recipe) { return add(recipe); } - + public boolean add(GT_Recipe recipe) { return mRecipeCache.setValue(recipe); } - + public Collection<GT_Recipe> getRecipeMap() { return mRecipeCache.values(); } - + public boolean isMapValidForMachine(IGregTechTileEntity tile) { return tile == mMachineType; } + @Override + public boolean addAll(Collection<? extends GT_Recipe> arg0) { + int a = 0; + for (Object v : arg0) { + if (!this.mRecipeCache.containsValue((GT_Recipe) v)) { + this.mRecipeCache.put((GT_Recipe) v); + a++; + } + } + return a > 0; + } + + @Override + public void clear() { + mRecipeCache.clear(); + } + + @Override + public boolean contains(Object arg0) { + return mRecipeCache.containsValue((GT_Recipe) arg0); + } + + @Override + public boolean containsAll(Collection<?> arg0) { + int a = 0; + for (Object v : arg0) { + if (this.mRecipeCache.containsValue((GT_Recipe) v)) { + a++; + } + } + return a == arg0.size(); + } + + @Override + public boolean isEmpty() { + return mRecipeCache.isEmpty(); + } + + @Override + public Iterator<GT_Recipe> iterator() { + return mRecipeCache.iterator(); + } + + @Override + public boolean remove(Object arg0) { + return mRecipeCache.remove((GT_Recipe) arg0); + } + + @Override + public boolean removeAll(Collection<?> arg0) { + int a = 0; + for (Object v : arg0) { + if (this.mRecipeCache.containsValue((GT_Recipe) v)) { + this.mRecipeCache.remove((GT_Recipe) v); + a++; + } + } + return a > 0; + } + + @Override + public boolean retainAll(Collection<?> arg0) { + int mStartSize = this.mRecipeCache.size(); + this.mRecipeCache = (AutoMap<GT_Recipe>) arg0; + int mEndsize = this.mRecipeCache.size(); + return mStartSize != mEndsize; + } + + @Override + public int size() { + return this.mRecipeCache.size(); + } + + @Override + public Object[] toArray() { + return this.mRecipeCache.toArray(); + } + + @Override + public <T> T[] toArray(T[] arg0) { + return (T[]) this.mRecipeCache.toArray(); + } + } |