diff --git a/gradle.properties b/gradle.properties index bb21fb1c7..4c81d029d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ group = org.quiltmc description = The mod loading component of Quilt url = https://github.com/quiltmc/quilt-loader # Don't forget to change this in QuiltLoaderImpl as well -quilt_loader = 0.26.4-beta.2 +quilt_loader = 0.26.4-beta.3 # Fabric & Quilt Libraries asm = 9.6 diff --git a/src/main/java/org/quiltmc/loader/impl/QuiltLoaderImpl.java b/src/main/java/org/quiltmc/loader/impl/QuiltLoaderImpl.java index 145102260..1447059d8 100644 --- a/src/main/java/org/quiltmc/loader/impl/QuiltLoaderImpl.java +++ b/src/main/java/org/quiltmc/loader/impl/QuiltLoaderImpl.java @@ -132,7 +132,7 @@ public final class QuiltLoaderImpl { public static final int ASM_VERSION = Opcodes.ASM9; - public static final String VERSION = "0.26.4-beta.2"; + public static final String VERSION = "0.26.4-beta.3"; public static final String MOD_ID = "quilt_loader"; public static final String DEFAULT_MODS_DIR = "mods"; public static final String DEFAULT_CACHE_DIR = ".cache"; diff --git a/src/main/java/org/quiltmc/loader/impl/plugin/QuiltPluginManagerImpl.java b/src/main/java/org/quiltmc/loader/impl/plugin/QuiltPluginManagerImpl.java index 512c940ae..f7845a9ad 100644 --- a/src/main/java/org/quiltmc/loader/impl/plugin/QuiltPluginManagerImpl.java +++ b/src/main/java/org/quiltmc/loader/impl/plugin/QuiltPluginManagerImpl.java @@ -1590,24 +1590,37 @@ ModSolveResultImpl getPartialSolution() throws ModSolvingError, TimeoutException Map, LoadOptionResult> extraResults; final Map, Map> optionMap = new HashMap<>(); - for (LoadOption option : solution) { + try { + for (LoadOption option : solution) { - boolean load = true; - if (LoadOption.isNegated(option)) { - option = option.negate(); - load = false; - } + boolean load = true; + if (LoadOption.isNegated(option)) { + option = option.negate(); + load = false; + } - if (load && option instanceof ModLoadOption) { - ModLoadOption mod = (ModLoadOption) option; - putMod(directModsMap, mod.id(), mod); + if (load && option instanceof ModLoadOption) { + ModLoadOption mod = (ModLoadOption) option; + putMod(directModsMap, mod.id(), mod); - for (ProvidedMod provided : mod.metadata().provides()) { - putMod(providedModsMap, provided.id(), mod); + for (ProvidedMod provided : mod.metadata().provides()) { + putMod(providedModsMap, provided.id(), mod); + } } - } - putHierarchy(option, load, optionMap); + putHierarchy(option, load, optionMap); + } + } catch (ModSolvingError cause) { + // Something went wrong during solving + StringBuilder errorDesc = new StringBuilder("The solver returned a solution with duplicate mods!\n"); + errorDesc.append(cause.getMessage()); + errorDesc.append("\n\nCurrent Solution:"); + for (LoadOption option : solution) { + errorDesc.append("\n\t-" + option); + } + errorDesc.append("\n\n"); + solver.appendRules(errorDesc); + throw new ModSolvingError(errorDesc.toString(), cause); } extraResults = new HashMap<>(); diff --git a/src/main/java/org/quiltmc/loader/impl/solver/Sat4jWrapper.java b/src/main/java/org/quiltmc/loader/impl/solver/Sat4jWrapper.java index 8380ee401..ca926da32 100644 --- a/src/main/java/org/quiltmc/loader/impl/solver/Sat4jWrapper.java +++ b/src/main/java/org/quiltmc/loader/impl/solver/Sat4jWrapper.java @@ -241,6 +241,16 @@ public void cancel() { cancelled = true; } + // ############# + // # Debugging # + // ############# + + /** Appends all current rules and options using the {@link SolverPreProcessor} format. */ + public void appendRules(StringBuilder sb) { + InputRuleSet ruleSet = new InputRuleSet(optionToWeight, ruleToDefinitions); + SolverPreProcessor.appendRuleSet(ruleSet, ruleSet, str -> sb.append("\n" + str)); + } + // ############ // # Internal # // ############