diff --git a/common/addons/config-distributors b/common/addons/config-distributors index 63f907860..56bac9279 160000 --- a/common/addons/config-distributors +++ b/common/addons/config-distributors @@ -1 +1 @@ -Subproject commit 63f9078601657ce79cfd7a94c926ccbb63eed73a +Subproject commit 56bac927999a4a82f36ab2696885f2b35e1fc008 diff --git a/common/addons/config-feature b/common/addons/config-feature index 648e8a700..d2cd833fc 160000 --- a/common/addons/config-feature +++ b/common/addons/config-feature @@ -1 +1 @@ -Subproject commit 648e8a70060fed2d84bdcec17a9e9c742039a3f3 +Subproject commit d2cd833fcfc06f5785bf74ac9fb0b104908604c3 diff --git a/common/addons/config-locators b/common/addons/config-locators index 9aca4dad9..bf177a6c9 160000 --- a/common/addons/config-locators +++ b/common/addons/config-locators @@ -1 +1 @@ -Subproject commit 9aca4dad904dc1e0b4a4e2e8cb89683e68890aa7 +Subproject commit bf177a6c93a3757954a699ce0ef4aeb9e766bc8e diff --git a/common/implementation/src/main/java/com/dfsek/terra/addon/DependencySorter.java b/common/implementation/src/main/java/com/dfsek/terra/addon/DependencySorter.java index fd8646804..a02d9aeea 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/addon/DependencySorter.java +++ b/common/implementation/src/main/java/com/dfsek/terra/addon/DependencySorter.java @@ -42,25 +42,31 @@ public class DependencySorter { sortDependencies(dependency, sort); - if(sort.contains(dependency)) { - throw new CircularDependencyException( - "Addon " + addon.getID() + " has circular dependency beginning with " + dependency.getID()); - } - - sort.add(dependency); // add it to the list. } }); } + private void checkDependencies(BaseAddon base, BaseAddon current) { + current.getDependencies().forEach((id, range) -> { + BaseAddon dependency = addons.get(id); + if(dependency.getID().equals(base.getID())) { + throw new CircularDependencyException( + "Addon " + base.getID() + " has circular dependency beginning with " + dependency.getID()); + } + checkDependencies(base, dependency); + }); + } public List sort() { List sorted = new ArrayList<>(); for(int i = addonList.size() - 1; i >= 0; i--) { BaseAddon addon = addonList.get(i); + + checkDependencies(addon, addon); + addonList.remove(i); - - System.out.println(addon.getID() + ": " + visited.get(addon.getID())); + if(!visited.get(addon.getID())) { sortDependencies(addon, sorted); }