diff --git a/src/main/java/org/cyclops/integratedcrafting/api/crafting/CraftingJobDependencyGraph.java b/src/main/java/org/cyclops/integratedcrafting/api/crafting/CraftingJobDependencyGraph.java index 8e5643d13..37c6cf9a8 100644 --- a/src/main/java/org/cyclops/integratedcrafting/api/crafting/CraftingJobDependencyGraph.java +++ b/src/main/java/org/cyclops/integratedcrafting/api/crafting/CraftingJobDependencyGraph.java @@ -153,7 +153,10 @@ public void addDependency(CraftingJob craftingJob, int dependency) { jobDependencies = new IntArrayList(); dependencies.put(craftingJob.getId(), jobDependencies); } - jobDependencies.add(dependency); + // An edge is only stored once, as crafting interfaces add the edges of their jobs again when they re-register + if (!jobDependencies.contains(dependency)) { + jobDependencies.add(dependency); + } // Save reverse link IntCollection jobDependents = dependents.get(dependency); @@ -161,7 +164,9 @@ public void addDependency(CraftingJob craftingJob, int dependency) { jobDependents = new IntArrayList(); dependents.put(dependency, jobDependents); } - jobDependents.add(craftingJob.getId()); + if (!jobDependents.contains(craftingJob.getId())) { + jobDependents.add(craftingJob.getId()); + } } public void removeDependency(int craftingJob, int dependency) { diff --git a/src/test/java/org/cyclops/integratedcrafting/api/crafting/TestCraftingJobDependencyGraph.java b/src/test/java/org/cyclops/integratedcrafting/api/crafting/TestCraftingJobDependencyGraph.java index 31082fc60..a61b9e5e0 100644 --- a/src/test/java/org/cyclops/integratedcrafting/api/crafting/TestCraftingJobDependencyGraph.java +++ b/src/test/java/org/cyclops/integratedcrafting/api/crafting/TestCraftingJobDependencyGraph.java @@ -71,6 +71,23 @@ public void testSingleDependencyDouble() { assertThat(Sets.newHashSet(g.getDependents(J1)), equalTo(Sets.newHashSet(J0))); } + @Test + public void testSingleDependencyDoubleStoredOnce() { + g.addDependency(J0, J1); + g.addDependency(J0, J1.getId()); + assertThat(Lists.newArrayList(g.getDependencies(J0)), equalTo(Lists.newArrayList(J1))); + assertThat(Lists.newArrayList(g.getDependents(J1)), equalTo(Lists.newArrayList(J0))); + } + + @Test + public void testSingleDependencyDoubleRemove() { + g.addDependency(J0, J1); + g.addDependency(J0, J1); + g.removeDependency(0, 1); + assertThat(Sets.newHashSet(g.getCraftingJobs()), equalTo(Sets.newHashSet())); + assertThat(g.hasDependencies(J0), equalTo(false)); + } + @Test public void testSingleDependencyRemove() { g.addDependency(J0, J1);