diff --git a/ee3_common/com/pahimar/ee3/EquivalentExchange3.java b/ee3_common/com/pahimar/ee3/EquivalentExchange3.java index 9201fa08..707409aa 100644 --- a/ee3_common/com/pahimar/ee3/EquivalentExchange3.java +++ b/ee3_common/com/pahimar/ee3/EquivalentExchange3.java @@ -149,7 +149,7 @@ public class EquivalentExchange3 { // Initialize custom rendering and pre-load textures (Client only) proxy.initRenderingAndTextures(); - + // Load the Transmutation Stone recipes //RecipesTransmutationStone.init(); @@ -166,7 +166,7 @@ public class EquivalentExchange3 { // Initialize the Addon Handler AddonHandler.init(); - + // Initialize the DynEMC system DynEMC dynEMC = DynEMC.getInstance(); } diff --git a/ee3_common/com/pahimar/ee3/emc/DynEMC.java b/ee3_common/com/pahimar/ee3/emc/DynEMC.java index a81f8603..d1368ecf 100644 --- a/ee3_common/com/pahimar/ee3/emc/DynEMC.java +++ b/ee3_common/com/pahimar/ee3/emc/DynEMC.java @@ -56,6 +56,7 @@ public class DynEMC { } private void populateItemList() { + ArrayList subItems = new ArrayList(); /* @@ -148,9 +149,9 @@ public class DynEMC { } } } - + private void populateGraph() { - + for (CustomWrappedStack customWrappedStack : discoveredItems) { ArrayList recipes = RecipeHelper.getReverseRecipes(customWrappedStack); @@ -158,13 +159,13 @@ public class DynEMC { for (IRecipe recipe : recipes) { ArrayList recipeInputs = RecipeHelper.getCollatedRecipeInputs(recipe); - + for (CustomWrappedStack wrappedRecipeInput : recipeInputs) { float weight = wrappedRecipeInput.getStackSize(); - + CustomWrappedStack recipeInput = null; - + if (wrappedRecipeInput.getItemStack() != null) { ItemStack itemStack = wrappedRecipeInput.getItemStack(); @@ -192,12 +193,60 @@ public class DynEMC { } } - @Override - // TODO Make this an actual toString and take out the logging into a debug method - public String toString() { + public int size() { + + return graph.size(); + } + + public List getAllNodes() { + + ArrayList allNodes = new ArrayList(); + + Iterator nodeIter = graph.iterator(); + + while (nodeIter.hasNext()) { + allNodes.add(nodeIter.next()); + } + + return allNodes; + } + + public List getCriticalNodes() { + + ArrayList criticalNodes = new ArrayList(); + + Iterator nodeIter = graph.iterator(); + + while (nodeIter.hasNext()) { + CustomWrappedStack currentNode = nodeIter.next(); + + if (graph.edgesFrom(currentNode).size() == 0) { + criticalNodes.add(currentNode); + } + } + + return criticalNodes; + } + + public List getOrphanNodes() { + + ArrayList criticalNodes = new ArrayList(); + + Iterator nodeIter = graph.iterator(); + + while (nodeIter.hasNext()) { + CustomWrappedStack currentNode = nodeIter.next(); + + if ((graph.edgesFrom(currentNode).size() == 0) && (graph.edgesTo(currentNode).size() == 0)) { + criticalNodes.add(currentNode); + } + } + + return criticalNodes; + } + + public void printDebugDump() { - StringBuilder stringBuilder = new StringBuilder(); - LogHelper.log(Level.INFO, "***** START NODES *****"); Iterator nodeIter = graph.iterator(); while (nodeIter.hasNext()) { @@ -205,7 +254,7 @@ public class DynEMC { LogHelper.log(Level.INFO, "Node: " + node); } LogHelper.log(Level.INFO, "***** END NODES *****"); - + LogHelper.log(Level.INFO, "***** START EDGES FROM *****"); nodeIter = graph.iterator(); while (nodeIter.hasNext()) { @@ -219,7 +268,7 @@ public class DynEMC { } } LogHelper.log(Level.INFO, "***** END EDGES FROM *****"); - + LogHelper.log(Level.INFO, "***** START EDGES TO *****"); nodeIter = graph.iterator(); while (nodeIter.hasNext()) { @@ -235,6 +284,14 @@ public class DynEMC { } } LogHelper.log(Level.INFO, "***** END EDGES TO *****"); + } + + @Override + public String toString() { + + StringBuilder stringBuilder = new StringBuilder(); + + stringBuilder.append(String.format("DynEMC Node Count: %s", graph.size())); return stringBuilder.toString(); } diff --git a/ee3_common/com/pahimar/ee3/emc/graph/WeightedDirectedGraph.java b/ee3_common/com/pahimar/ee3/emc/graph/WeightedDirectedGraph.java index dcb2b544..8caa242b 100644 --- a/ee3_common/com/pahimar/ee3/emc/graph/WeightedDirectedGraph.java +++ b/ee3_common/com/pahimar/ee3/emc/graph/WeightedDirectedGraph.java @@ -119,6 +119,7 @@ public class WeightedDirectedGraph implements Iterable { Set> edgesTo = new TreeSet>(new Comparator>() { public int compare(WeightedEdge o1, WeightedEdge o2) { + return o1.hashCode() - o2.hashCode(); } }); @@ -126,7 +127,7 @@ public class WeightedDirectedGraph implements Iterable { for (T node : graph.keySet()) { if (!node.equals(to)) { Set> edgesFrom = edgesFrom(node); - + for (WeightedEdge fromEdge : edgesFrom) { if (fromEdge.getTarget().equals(to)) { edgesTo.add(new WeightedEdge(fromEdge.getWeight(), node)); @@ -137,17 +138,17 @@ public class WeightedDirectedGraph implements Iterable { return Collections.unmodifiableSet(edgesTo); } - + public void removeNode(T node) { - + if (!(graph.containsKey(node))) { throw new NoSuchElementException("Missing node from graph"); } - + // Remove all edges from and to the node removeAllEdgesFrom(node); removeAllEdgesTo(node); - + // Remove the node graph.remove(node); } @@ -174,7 +175,7 @@ public class WeightedDirectedGraph implements Iterable { graph.get(node).clear(); } - + public void removeAllEdgesTo(T node) { if (!(graph.containsKey(node))) {