From 63f3b6c2bc54eb1ca18c180468c9a0551b4707ed Mon Sep 17 00:00:00 2001 From: Technus Date: Fri, 12 May 2017 19:25:09 +0200 Subject: Refactoring 4th time --- .../elementalMatter/classes/cElementalDecay.java | 10 +- .../classes/cElementalDefinition.java | 13 +- .../classes/cElementalDefinitionStack.java | 7 +- .../classes/cElementalDefinitionStackMap.java | 123 ++++---- .../classes/cElementalInstanceStack.java | 28 +- .../classes/cElementalInstanceStackMap.java | 107 +++---- .../cElementalMutableDefinitionStackMap.java | 326 +++++++++++++++++++++ .../classes/cElementalPrimitive.java | 4 +- .../elementalMatter/classes/rElementalRecipe.java | 8 +- .../classes/rElementalRecipeTree.java | 16 +- .../definitions/dAtomDefinition.java | 41 +-- .../definitions/dComplexAspectDefinition.java | 6 +- .../definitions/dHadronDefinition.java | 14 +- .../interfaces/iElementalDefinition.java | 4 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 5 - 15 files changed, 531 insertions(+), 181 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalMutableDefinitionStackMap.java (limited to 'src/main/java/com') diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDecay.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDecay.java index 19d3b1566b..7891c273ba 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDecay.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDecay.java @@ -12,7 +12,7 @@ public final class cElementalDecay { //Or cast null into ARRAY type but this static is more convenient!!! public static final cElementalDecay[] noProduct = new cElementalDecay[0]; //this in turn can be used to tell that the thing should just vanish - public final cElementalDefinitionStackMap outputStacks; + public final cElementalMutableDefinitionStackMap outputStacks; public final float probability; public cElementalDecay(iElementalDefinition... outSafe) { @@ -24,7 +24,7 @@ public final class cElementalDecay { for (int i = 0; i < outArr.length; i++) { outArr[i] = new cElementalDefinitionStack(outSafe[i], 1); } - this.outputStacks = new cElementalDefinitionStackMap(outArr); + this.outputStacks = new cElementalMutableDefinitionStackMap(outArr); this.probability = probability; } @@ -33,15 +33,15 @@ public final class cElementalDecay { } public cElementalDecay(float probability, cElementalDefinitionStack... out) { - this.outputStacks = new cElementalDefinitionStackMap(out); + this.outputStacks = new cElementalMutableDefinitionStackMap(out); this.probability = probability; } - public cElementalDecay(cElementalDefinitionStackMap tree) { + public cElementalDecay(cElementalMutableDefinitionStackMap tree) { this(2F, tree); } - public cElementalDecay(float probability, cElementalDefinitionStackMap tree) { + public cElementalDecay(float probability, cElementalMutableDefinitionStackMap tree) { this.outputStacks = tree; this.probability = probability; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java index e1223f823b..cac239c894 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinition.java @@ -6,6 +6,7 @@ import com.github.technus.tectech.elementalMatter.interfaces.iHasElementalDefini import net.minecraft.nbt.NBTTagCompound; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -15,15 +16,19 @@ import static com.github.technus.tectech.elementalMatter.definitions.cPrimitiveD * Created by danie_000 on 23.01.2017. */ public abstract class cElementalDefinition implements iElementalDefinition { - //add text based creators for recipe formula input? - private static final Map nbtCreationBind = new TreeMap<>();//creator methods in subclasses + //Nothing array + public static final iElementalDefinition[] nothing = new cElementalPrimitive[0]; + //add text based creators for recipe formula input? + private static final Map nbtCreationBind = new HashMap<>();//creator methods in subclasses protected static Method addCreatorFromNBT(byte b, Method m) { return nbtCreationBind.put(b, m); } - //Nothing array - public static final iElementalDefinition[] nothing = new cElementalPrimitive[0]; + @Override + protected final Object clone() { + return this;//IMMUTABLE + } public static iElementalDefinition fromNBT(NBTTagCompound nbt) { try { diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStack.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStack.java index d32f034fb4..1bff45172a 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStack.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStack.java @@ -18,9 +18,14 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition this.amount = amount; } + @Override + protected final Object clone() { + return this;//IMMUTABLE + } + @Override public iElementalDefinition getDefinition() { - return definition; + return definition;//IMMUTABLE } @Override diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStackMap.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStackMap.java index 1abffb7a26..d41554c5ef 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStackMap.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalDefinitionStackMap.java @@ -6,50 +6,47 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import java.util.Map; -import java.util.TreeMap; import static com.github.technus.tectech.elementalMatter.definitions.cPrimitiveDefinition.debug__; /** - * Created by danie_000 on 22.01.2017. + * Created by Tec on 12.05.2017. */ -public final class cElementalDefinitionStackMap implements Comparable { - private Map tree = new TreeMap<>(); - - //Constructors - public cElementalDefinitionStackMap() { +public class cElementalDefinitionStackMap/*IMMUTABLE*/ extends cElementalMutableDefinitionStackMap {//TODO MAKE IMMUTABLE + public cElementalDefinitionStackMap(cElementalMutableDefinitionStackMap mutable) { + map=mutable.Clone().map; } - @Deprecated - public cElementalDefinitionStackMap(iElementalDefinition... in) { - if (in == null) return; - for (iElementalDefinition definition : in) - tree.put(definition, new cElementalDefinitionStack(definition, 1)); + //IMMUTABLES DONT NEED IT + @Override + protected Object clone() { + return this; } - public cElementalDefinitionStackMap(cElementalDefinitionStack... in) { - if (in == null) return; - for (cElementalDefinitionStack stack : in) - tree.put(stack.definition, stack); + @Override + @Deprecated + public final cElementalMutableDefinitionStackMap Clone() { + return null; } - private cElementalDefinitionStackMap(Map in) { - if (in == null) return; - tree = in; + @Override + public final cElementalMutableDefinitionStackMap mutable() { + return new cElementalMutableDefinitionStackMap(map); } - public cElementalDefinitionStackMap(cElementalDefinitionStackMap in) { - this(in.tree); + @Override + public cElementalDefinitionStackMap immutable() { + return this; } - @Override - protected Object clone() throws CloneNotSupportedException { - return new cElementalDefinitionStackMap(tree); + @Deprecated + public Map getRawMap() { + return mutable().getRawMap(); } @Override - public int compareTo(cElementalDefinitionStackMap o) { - if (tree.size() != o.tree.size()) return tree.size() - o.tree.size(); + public int compareTo(cElementalMutableDefinitionStackMap o) { + if (map.size() != o.map.size()) return map.size() - o.map.size(); cElementalDefinitionStack[] ofThis = values(), ofThat = o.values(); for (int i = 0; i < ofThat.length; i++) { int result = ofThis[i].compareTo(ofThat[i]); @@ -60,32 +57,32 @@ public final class cElementalDefinitionStackMap implements Comparable 0) { - tree.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); + map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; } else if (diff == 0) { - tree.remove(instance.definition); + map.remove(instance.definition); return true; } } @@ -104,7 +101,7 @@ public final class cElementalDefinitionStackMap implements Comparable 0) { - tree.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); + map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; } else if (diff == 0) { - tree.remove(stack.definition); + map.remove(stack.definition); return true; } } @@ -155,7 +152,7 @@ public final class cElementalDefinitionStackMap implements Comparable inTreeUnsafe) { - this.tree.putAll(inTreeUnsafe); + this.map.putAll(inTreeUnsafe); } - public void putReplaceAll(cElementalDefinitionStackMap inContainerUnsafe) { - putReplaceAll(inContainerUnsafe.tree); + public void putReplaceAll(cElementalMutableDefinitionStackMap inContainerUnsafe) { + putReplaceAll(inContainerUnsafe.map); } //Put unify public cElementalDefinitionStack putUnify(cElementalDefinitionStack def) { - return tree.put(def.definition, def.unifyIntoNew(tree.get(def.definition))); + return map.put(def.definition, def.unifyIntoNew(map.get(def.definition))); } @Deprecated @@ -207,19 +204,19 @@ public final class cElementalDefinitionStackMap implements Comparable 0; + return map.size() > 0; } //NBT @@ -272,35 +269,35 @@ public final class cElementalDefinitionStackMap implements Comparable { - private Map tree = new TreeMap<>(); +public class cElementalInstanceStackMap implements Comparable { + private Map map = new TreeMap<>(); //Constructors public cElementalInstanceStackMap() { @@ -24,15 +24,14 @@ public final class cElementalInstanceStackMap implements Comparable in) { - if (in == null) return; - if (copy) { + private cElementalInstanceStackMap(boolean clone, Map in) { + if (clone) { for (cElementalInstanceStack instance : in.values()) { - tree.put(instance.definition, instance.getCopy()); + map.put(instance.definition, instance.Clone()); } } else { - tree = in; + map = in; } } public cElementalInstanceStackMap(cElementalInstanceStackMap inSafe) { - this(true, inSafe.tree); + this(true, inSafe.map); } public cElementalInstanceStackMap(boolean copy, cElementalInstanceStackMap in) { - this(copy, in.tree); + this(copy, in.map); } @Override - protected Object clone() throws CloneNotSupportedException { - return new cElementalInstanceStackMap(tree); + protected final Object clone() { + return Clone(); + } + + public final cElementalInstanceStackMap Clone(){ + return new cElementalInstanceStackMap(map); + } + + @Deprecated + public Map getRawMap() { + return map; } @Override public int compareTo(cElementalInstanceStackMap o) { - if (tree.size() != o.tree.size()) return tree.size() - o.tree.size(); + if (map.size() != o.map.size()) return map.size() - o.map.size(); cElementalInstanceStack[] ofThis = values(), ofThat = o.values(); for (int i = 0; i < ofThat.length; i++) { int result = ofThis[i].compareTo(ofThat[i]); @@ -78,32 +85,32 @@ public final class cElementalInstanceStackMap implements Comparable stacksCount) { + if (map.size() > stacksCount) { iElementalDefinition[] keys = this.keys(); for (int i = stacksCount; i < keys.length; i++) { - massRemoved += tree.get(keys[i]).getDefinitionStack().getMass(); - tree.remove(keys[i]); + massRemoved += map.get(keys[i]).getDefinitionStack().getMass(); + map.remove(keys[i]); } } @@ -203,25 +210,25 @@ public final class cElementalInstanceStackMap implements Comparable inTreeUnsafe) { - this.tree.putAll(inTreeUnsafe); + this.map.putAll(inTreeUnsafe); } public void putReplaceAll(cElementalInstanceStackMap inContainerUnsafe) { - putReplaceAll(inContainerUnsafe.tree); + putReplaceAll(inContainerUnsafe.map); } //Put unify public cElementalInstanceStack putUnify(cElementalInstanceStack instance) { - return tree.put(instance.definition, instance.unifyIntoThis(tree.get(instance.definition))); + return map.put(instance.definition, instance.unifyIntoThis(map.get(instance.definition))); } public void putUnifyAll(cElementalInstanceStack... instances) { @@ -235,18 +242,18 @@ public final class cElementalInstanceStackMap implements Comparable 0; + return map.size() > 0; } //Tick Content @@ -295,7 +302,7 @@ public final class cElementalInstanceStackMap implements Comparable {//TODO MAKE MUTABLE AF + protected Map map; + + //Constructors + Clone, all make a whole new OBJ. + public cElementalMutableDefinitionStackMap() {map=new TreeMap<>();} + + @Deprecated + public cElementalMutableDefinitionStackMap(iElementalDefinition... in) { + map=new TreeMap<>(); + for (iElementalDefinition definition : in) + map.put(definition, new cElementalDefinitionStack(definition, 1)); + } + + public cElementalMutableDefinitionStackMap(cElementalDefinitionStack... in) { + map=new TreeMap<>(); + for (cElementalDefinitionStack stack : in) + map.put(stack.definition, stack); + } + + public cElementalMutableDefinitionStackMap(Map in) { + this(true,in); + } + + public cElementalMutableDefinitionStackMap(boolean clone, Map in) { + if (clone) { + map = new TreeMap<>(); + for (cElementalDefinitionStack stack : in.values()) + map.put(stack.definition, stack); + } else { + map = in; + } + } + + @Override + protected Object clone() {//Equal to making new obj... + return Clone(); + } + + public cElementalMutableDefinitionStackMap Clone(){ + return new cElementalMutableDefinitionStackMap(map); + } + + public cElementalDefinitionStackMap immutable() { + return new cElementalDefinitionStackMap(this); + } + + public cElementalMutableDefinitionStackMap mutable() {return this;} + + @Deprecated + public Map getRawMap() { + return map; + } + + @Override + public int compareTo(cElementalMutableDefinitionStackMap o) { + if (map.size() != o.map.size()) return map.size() - o.map.size(); + cElementalDefinitionStack[] ofThis = values(), ofThat = o.values(); + for (int i = 0; i < ofThat.length; i++) { + int result = ofThis[i].compareTo(ofThat[i]); + if (result != 0) return result; + } + return 0; + } + + //Removers + public void clear() { + map.clear(); + } + + public cElementalDefinitionStack remove(iElementalDefinition def) { + return map.remove(def); + } + + @Deprecated + public cElementalDefinitionStack remove(iHasElementalDefinition has) { + return map.remove(has.getDefinition()); + } + + public void removeAll(iElementalDefinition... definitions) { + for (iElementalDefinition def : definitions) + map.remove(def); + } + + @Deprecated + private void removeAll(iHasElementalDefinition... hasElementals) { + for (iHasElementalDefinition has : hasElementals) + map.remove(has.getDefinition()); + } + + //Remove amounts + public boolean removeAmount(boolean testOnly, cElementalInstanceStack instance) { + final cElementalDefinitionStack target = map.get(instance.definition); + if (target == null) + return false; + if (testOnly) + return target.amount >= instance.amount; + else { + final int diff = target.amount - instance.amount; + if (diff > 0) { + map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); + return true; + } else if (diff == 0) { + map.remove(instance.definition); + return true; + } + } + return false; + } + + public boolean removeAmount(boolean testOnly, cElementalDefinitionStack stack) { + final cElementalDefinitionStack target = map.get(stack.definition); + if (target == null) + return false; + if (testOnly) + return target.amount >= stack.amount; + else { + final int diff = target.amount - stack.amount; + if (diff > 0) { + map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); + return true; + } else if (diff == 0) { + map.remove(stack.definition); + return true; + } + } + return false; + } + + @Deprecated + public boolean removeAmount(boolean testOnly, iElementalDefinition def) { + return removeAmount(testOnly, new cElementalDefinitionStack(def, 1)); + } + + public boolean removeAllAmounts(boolean testOnly, cElementalInstanceStack... instances) { + boolean test = true; + for (cElementalInstanceStack stack : instances) + test &= removeAmount(true, stack); + if (testOnly || !test) return test; + for (cElementalInstanceStack stack : instances) + removeAmount(false, stack); + return true; + } + + public boolean removeAllAmounts(boolean testOnly, cElementalDefinitionStack... stacks) { + boolean test = true; + for (cElementalDefinitionStack stack : stacks) + test &= removeAmount(true, stack); + if (testOnly || !test) return test; + for (cElementalDefinitionStack stack : stacks) + removeAmount(false, stack); + return true; + } + + @Deprecated + public boolean removeAllAmounts(boolean testOnly, iElementalDefinition... definitions) { + final cElementalDefinitionStack[] stacks = new cElementalDefinitionStack[definitions.length]; + for (int i = 0; i < stacks.length; i++) + stacks[i] = new cElementalDefinitionStack(definitions[i], 1); + return removeAllAmounts(testOnly, stacks); + } + + public boolean removeAllAmounts(boolean testOnly, cElementalMutableDefinitionStackMap container) { + return removeAllAmounts(testOnly, container.values()); + } + + public boolean removeAllAmounts(boolean testOnly, cElementalInstanceStackMap container) { + return removeAllAmounts(testOnly, container.values()); + } + + //Put replace + public cElementalDefinitionStack putReplace(cElementalDefinitionStack defStackUnsafe) { + return map.put(defStackUnsafe.definition, defStackUnsafe); + } + + public void putReplaceAll(cElementalDefinitionStack... defStacks) { + for (cElementalDefinitionStack defStack : defStacks) + this.map.put(defStack.definition, defStack); + } + + private void putReplaceAll(Map inTreeUnsafe) { + this.map.putAll(inTreeUnsafe); + } + + public void putReplaceAll(cElementalMutableDefinitionStackMap inContainerUnsafe) { + putReplaceAll(inContainerUnsafe.map); + } + + //Put unify + public cElementalDefinitionStack putUnify(cElementalDefinitionStack def) { + return map.put(def.definition, def.unifyIntoNew(map.get(def.definition))); + } + + @Deprecated + public cElementalDefinitionStack putUnify(iElementalDefinition def) { + return putUnify(new cElementalDefinitionStack(def, 1)); + } + + public void putUnifyAll(cElementalDefinitionStack... defs) { + for (cElementalDefinitionStack def : defs) + putUnify(def); + } + + @Deprecated + public void putUnifyAll(iElementalDefinition... defs) { + for (iElementalDefinition def : defs) + putUnify(def); + } + + private void putUnifyAll(Map inTreeUnsafe) { + for (cElementalDefinitionStack in : inTreeUnsafe.values()) + putUnify(in); + } + + public void putUnifyAll(cElementalMutableDefinitionStackMap containerUnsafe) { + putUnifyAll(containerUnsafe.map); + } + + //Getters + public cElementalDefinitionStack getDefinitionStack(iElementalDefinition def) { + return map.get(def); + } + + public String[] getElementalInfo() { + final String[] info = new String[map.size() * 3]; + int i = 0; + for (cElementalDefinitionStack defStack : map.values()) { + info[i] = EnumChatFormatting.BLUE + defStack.definition.getName(); + info[i + 1] = EnumChatFormatting.AQUA + defStack.definition.getSymbol(); + info[i + 2] = "Amount " + EnumChatFormatting.GREEN + defStack.amount; + i += 3; + } + return info; + } + + public cElementalDefinitionStack[] values() { + return map.values().toArray(new cElementalDefinitionStack[0]); + } + + public iElementalDefinition[] keys() { + return map.keySet().toArray(new iElementalDefinition[0]); + } + + //Tests + public boolean containsDefinition(iElementalDefinition def) { + return map.containsKey(def); + } + + public boolean containsDefinitionStack(cElementalDefinitionStack inst) { + return map.containsValue(inst); + } + + public int size() { + return map.size(); + } + + public boolean hasStacks() { + return map.size() > 0; + } + + //NBT + public NBTTagCompound getInfoNBT() { + final NBTTagCompound nbt = new NBTTagCompound(); + final String[] info = getElementalInfo(); + nbt.setInteger("i", info.length); + for (int i = 0; i < info.length; i++) + nbt.setString(Integer.toString(i), info[i]); + return nbt; + } + + public static String[] infoFromNBT(NBTTagCompound nbt) { + final String[] strings = new String[nbt.getInteger("i")]; + for (int i = 0; i < strings.length; i++) + strings[i] = nbt.getString(Integer.toString(i)); + return strings; + } + + public NBTTagCompound toNBT() { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("i", map.size()); + int i = 0; + for (cElementalDefinitionStack defStack : map.values()) + nbt.setTag(Integer.toString(i++), defStack.toNBT()); + return nbt; + } + + public static cElementalMutableDefinitionStackMap fromNBT(NBTTagCompound nbt) throws tElementalException { + final cElementalDefinitionStack[] defStacks = new cElementalDefinitionStack[nbt.getInteger("i")]; + for (int i = 0; i < defStacks.length; i++) { + defStacks[i] = cElementalDefinitionStack.fromNBT(nbt.getCompoundTag(Integer.toString(i))); + if (defStacks[i].definition.equals(debug__)) + throw new tElementalException("Something went Wrong"); + } + return new cElementalMutableDefinitionStackMap(defStacks); + } + + //stackUp + @Deprecated + public static cElementalMutableDefinitionStackMap stackUpTree(iElementalDefinition... in) { + final cElementalMutableDefinitionStackMap inTree = new cElementalMutableDefinitionStackMap(); + for (iElementalDefinition def : in) { + inTree.putUnify(new cElementalDefinitionStack(def, 1)); + } + return inTree; + } + + public static cElementalMutableDefinitionStackMap stackUpTree(cElementalDefinitionStack... in) { + final cElementalMutableDefinitionStackMap inTree = new cElementalMutableDefinitionStackMap(); + inTree.putUnifyAll(in); + return inTree; + } +} diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalPrimitive.java index 2e489835e2..8aaceee368 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalPrimitive.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/cElementalPrimitive.java @@ -34,7 +34,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { public final byte color; //-1/-2/-3 anti matter generations, +1/+2/+3 matter generations, 0 self anti public final byte type; - private cElementalPrimitive anti; + private cElementalPrimitive anti;//IMMUTABLE private cElementalDecay[] elementalDecays; private byte naturalDecayInstant; private byte energeticDecayInstant; @@ -120,7 +120,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } @Override - public final cElementalDefinitionStackMap getSubParticles() { + public final cElementalMutableDefinitionStackMap getSubParticles() { return null; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipe.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipe.java index 5e87924be7..c8222ef583 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipe.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipe.java @@ -7,17 +7,17 @@ import net.minecraftforge.fluids.FluidStack; * Created by Tec on 02.03.2017. */ public class rElementalRecipe implements Comparable { - public final cElementalDefinitionStackMap inEM; - public final cElementalDefinitionStackMap outEM; + public final cElementalMutableDefinitionStackMap inEM; + public final cElementalMutableDefinitionStackMap outEM; public final ItemStack[] outItems; public final FluidStack[] outFluids; public Object[] extension = null; public final short comparableID; public rElementalRecipe( - cElementalDefinitionStackMap inEMnotNull, + cElementalMutableDefinitionStackMap inEMnotNull, short comparableID, - cElementalDefinitionStackMap outEM, + cElementalMutableDefinitionStackMap outEM, ItemStack[] outItems, FluidStack[] outFluids) { this.inEM = inEMnotNull; diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipeTree.java b/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipeTree.java index c0a1dc4555..0834d2e49e 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipeTree.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/classes/rElementalRecipeTree.java @@ -8,7 +8,7 @@ import java.util.TreeMap; */ public class rElementalRecipeTree { //Multimap for multiple recipes from the same thing - you know parameters might differ the output - private TreeMap > recipes = new TreeMap<>(); + private TreeMap > recipes = new TreeMap<>(); public rElementalRecipeTree() {} @@ -26,33 +26,33 @@ public class rElementalRecipeTree { put(recipe); } - public Map findExact(cElementalDefinitionStackMap in) { + public Map findExact(cElementalMutableDefinitionStackMap in) { return recipes.get(in); } - public Map findTopMatch(cElementalDefinitionStackMap in) { - for (cElementalDefinitionStackMap requirement : recipes.descendingKeySet()) + public Map findTopMatch(cElementalMutableDefinitionStackMap in) { + for (cElementalMutableDefinitionStackMap requirement : recipes.descendingKeySet()) if (in.removeAllAmounts(true, requirement)) return recipes.get(requirement); return null; } public Map findTopMatch(cElementalInstanceStackMap in, boolean testOnly) { - for (cElementalDefinitionStackMap requirement : recipes.descendingKeySet()) + for (cElementalMutableDefinitionStackMap requirement : recipes.descendingKeySet()) if (in.removeAllAmounts(testOnly, requirement)) return recipes.get(requirement); return null; } - public Map findBottomMatch(cElementalDefinitionStackMap in) { - for (cElementalDefinitionStackMap requirement : recipes.keySet()) + public Map findBottomMatch(cElementalMutableDefinitionStackMap in) { + for (cElementalMutableDefinitionStackMap requirement : recipes.keySet()) if (in.removeAllAmounts(true, requirement)) return recipes.get(requirement); return null; } public Map findBottomMatch(cElementalInstanceStackMap in, boolean testOnly) { - for (cElementalDefinitionStackMap requirement : recipes.keySet()) + for (cElementalMutableDefinitionStackMap requirement : recipes.keySet()) if (in.removeAllAmounts(testOnly, requirement)) return recipes.get(requirement); return null; diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dAtomDefinition.java index 5b392dc820..d369115568 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dAtomDefinition.java @@ -11,7 +11,7 @@ import net.minecraftforge.fluids.FluidStack; import java.util.*; -import static com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStackMap.stackUpTree; +import static com.github.technus.tectech.elementalMatter.classes.cElementalMutableDefinitionStackMap.stackUpTree; import static com.github.technus.tectech.elementalMatter.definitions.eBosonDefinition.boson_Y__; import static com.github.technus.tectech.elementalMatter.definitions.eBosonDefinition.deadEnd; @@ -47,7 +47,8 @@ public final class dAtomDefinition extends cElementalDefinition { //private final ItemStack itemThing; public final int isotope; public final int element; - private final cElementalDefinitionStackMap elementalStacks; + + private final cElementalMutableDefinitionStackMap elementalStacks;//CLONED I/O //stable is rawLifeTime>=10^9 @@ -56,29 +57,29 @@ public final class dAtomDefinition extends cElementalDefinition { @Deprecated public dAtomDefinition(iElementalDefinition... things) throws tElementalException { - this(true, stackUpTree(things)); + this(false, true, stackUpTree(things)); } @Deprecated private dAtomDefinition(boolean check, iElementalDefinition... things) throws tElementalException { - this(check, stackUpTree(things)); + this(false, check, stackUpTree(things)); } public dAtomDefinition(cElementalDefinitionStack... things) throws tElementalException { - this(true, stackUpTree(things)); + this(false, true, stackUpTree(things)); } private dAtomDefinition(boolean check, cElementalDefinitionStack... things) throws tElementalException { - this(check, stackUpTree(things)); + this(false, check, stackUpTree(things)); } - public dAtomDefinition(cElementalDefinitionStackMap things) throws tElementalException { - this(true, things); + public dAtomDefinition(cElementalMutableDefinitionStackMap things) throws tElementalException { + this(true, true, things); } - private dAtomDefinition(boolean check, cElementalDefinitionStackMap things) throws tElementalException { + private dAtomDefinition(boolean clone, boolean check, cElementalMutableDefinitionStackMap things) throws tElementalException { if (check && !canTheyBeTogether(things)) throw new tElementalException("Atom Definition error"); - this.elementalStacks = things; + this.elementalStacks = clone?things.Clone():things; float mass = 0; int cLeptons = 0; @@ -190,7 +191,7 @@ public final class dAtomDefinition extends cElementalDefinition { return rawLifeTime; } - private static boolean canTheyBeTogether(cElementalDefinitionStackMap stacks) { + private static boolean canTheyBeTogether(cElementalMutableDefinitionStackMap stacks) { boolean nuclei = false; for (cElementalDefinitionStack stack : stacks.values()) if (stack.definition instanceof dHadronDefinition) { @@ -273,8 +274,8 @@ public final class dAtomDefinition extends cElementalDefinition { } @Override - public cElementalDefinitionStackMap getSubParticles() { - return elementalStacks; + public cElementalMutableDefinitionStackMap getSubParticles() { + return elementalStacks.Clone(); } @Override @@ -300,7 +301,7 @@ public final class dAtomDefinition extends cElementalDefinition { } private cElementalDecay[] Emmision(cElementalDefinitionStack emit) { - final cElementalDefinitionStackMap tree = new cElementalDefinitionStackMap(elementalStacks.values()); + final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values()); if (tree.removeAmount(false, emit)) { try { return new cElementalDecay[]{ @@ -316,7 +317,7 @@ public final class dAtomDefinition extends cElementalDefinition { } private cElementalDecay[] alphaDecay() { - final cElementalDefinitionStackMap tree = new cElementalDefinitionStackMap(elementalStacks.values()); + final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values()); if (tree.removeAllAmounts(false, dHadronDefinition.hadron_n2, dHadronDefinition.hadron_p2)) { try { return new cElementalDecay[]{ @@ -332,7 +333,7 @@ public final class dAtomDefinition extends cElementalDefinition { } private cElementalDecay[] MbetaDecay() { - final cElementalDefinitionStackMap tree = new cElementalDefinitionStackMap(elementalStacks.values()); + final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values()); if (tree.removeAmount(false, dHadronDefinition.hadron_n1)) { try { tree.putUnify(dHadronDefinition.hadron_p1); @@ -349,7 +350,7 @@ public final class dAtomDefinition extends cElementalDefinition { } private cElementalDecay[] PbetaDecay() { - final cElementalDefinitionStackMap tree = new cElementalDefinitionStackMap(elementalStacks.values()); + final cElementalMutableDefinitionStackMap tree = new cElementalMutableDefinitionStackMap(elementalStacks.values()); if (tree.removeAmount(false, dHadronDefinition.hadron_p1)) { try { tree.putUnify(dHadronDefinition.hadron_n1); @@ -411,10 +412,10 @@ public final class dAtomDefinition extends cElementalDefinition { @Override public iElementalDefinition getAnti() { - cElementalDefinitionStack[] elementalStacks = this.elementalStacks.values(); - cElementalDefinitionStack[] antiElements = new cElementalDefinitionStack[elementalStacks.length]; + cElementalDefinitionStack[] antiStacks = this.elementalStacks.values(); + cElementalDefinitionStack[] antiElements = new cElementalDefinitionStack[antiStacks.length]; for (int i = 0; i < antiElements.length; i++) { - antiElements[i] = new cElementalDefinitionStack(elementalStacks[i].definition.getAnti(), elementalStacks[i].amount); + antiElements[i] = new cElementalDefinitionStack(antiStacks[i].definition.getAnti(), antiStacks[i].amount); } try { return new dAtomDefinition(false, antiElements); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dComplexAspectDefinition.java index 17cec96169..b3c6c910d8 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dComplexAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dComplexAspectDefinition.java @@ -17,10 +17,10 @@ public class dComplexAspectDefinition extends cElementalDefinition { private static final byte nbtType = (byte) 'c'; - private final cElementalDefinitionStackMap aspectStacks; + private final cElementalMutableDefinitionStackMap aspectStacks; public dComplexAspectDefinition(cElementalDefinitionStack[] tree) throws tElementalException{//todo constructors - aspectStacks=new cElementalDefinitionStackMap(); + aspectStacks=new cElementalMutableDefinitionStackMap(); } @Override @@ -81,7 +81,7 @@ public class dComplexAspectDefinition extends cElementalDefinition { } @Override - public cElementalDefinitionStackMap getSubParticles() { + public cElementalMutableDefinitionStackMap getSubParticles() { return aspectStacks; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dHadronDefinition.java index ed91c43d32..dadd3e7c79 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/dHadronDefinition.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; -import static com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStackMap.stackUpTree; +import static com.github.technus.tectech.elementalMatter.classes.cElementalMutableDefinitionStackMap.stackUpTree; import static com.github.technus.tectech.elementalMatter.definitions.eBosonDefinition.boson_Y__; /** @@ -37,7 +37,7 @@ public final class dHadronDefinition extends cElementalDefinition { public final byte type; //private final FluidStack fluidThing; //private final ItemStack itemThing; - private final cElementalDefinitionStackMap quarkStacks; + private final cElementalMutableDefinitionStackMap quarkStacks; @Deprecated public dHadronDefinition(eQuarkDefinition... quarks) throws tElementalException { @@ -57,11 +57,11 @@ public final class dHadronDefinition extends cElementalDefinition { this(check, stackUpTree(quarks)); } - public dHadronDefinition(cElementalDefinitionStackMap quarks) throws tElementalException { + public dHadronDefinition(cElementalMutableDefinitionStackMap quarks) throws tElementalException { this(true, quarks); } - private dHadronDefinition(boolean check, cElementalDefinitionStackMap quarks) throws tElementalException { + private dHadronDefinition(boolean check, cElementalMutableDefinitionStackMap quarks) throws tElementalException { if (check && !canTheyBeTogether(quarks)) throw new tElementalException("Hadron Definition error"); this.quarkStacks = quarks; @@ -97,7 +97,7 @@ public final class dHadronDefinition extends cElementalDefinition { } //public but u can just try{}catch(){} the constructor it still calls this method - private static boolean canTheyBeTogether(cElementalDefinitionStackMap stacks) { + private static boolean canTheyBeTogether(cElementalMutableDefinitionStackMap stacks) { int amount = 0; for (cElementalDefinitionStack quarks : stacks.values()) { if (!(quarks.definition instanceof eQuarkDefinition)) return false; @@ -155,7 +155,7 @@ public final class dHadronDefinition extends cElementalDefinition { } @Override - public cElementalDefinitionStackMap getSubParticles() { + public cElementalMutableDefinitionStackMap getSubParticles() { return quarkStacks; } @@ -250,7 +250,7 @@ public final class dHadronDefinition extends cElementalDefinition { @Override public iElementalDefinition getAnti() { - cElementalDefinitionStackMap anti = new cElementalDefinitionStackMap(); + cElementalMutableDefinitionStackMap anti = new cElementalMutableDefinitionStackMap(); for (cElementalDefinitionStack stack : quarkStacks.values()) anti.putReplace(new cElementalDefinitionStack(stack.definition.getAnti(), stack.amount)); try { diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/interfaces/iElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/interfaces/iElementalDefinition.java index 90154a3c5a..cff7bd9697 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/interfaces/iElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/interfaces/iElementalDefinition.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.elementalMatter.interfaces; import com.github.technus.tectech.elementalMatter.classes.cElementalDecay; -import com.github.technus.tectech.elementalMatter.classes.cElementalDefinitionStackMap; +import com.github.technus.tectech.elementalMatter.classes.cElementalMutableDefinitionStackMap; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; @@ -37,7 +37,7 @@ public interface iElementalDefinition extends Comparable { float getRawLifeTime();//defined in static fields or generated - cElementalDefinitionStackMap getSubParticles();//contents... null if none + cElementalMutableDefinitionStackMap getSubParticles();//contents... null if none ItemStack materializesIntoItem(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index fbde43068e..579b3c8f3a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -11,19 +11,14 @@ import com.github.technus.tectech.elementalMatter.definitions.dAtomDefinition; import com.github.technus.tectech.elementalMatter.definitions.dHadronDefinition; import com.github.technus.tectech.elementalMatter.definitions.eLeptonDefinition; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.casing.GT_Container_CasingsTT; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.i