mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-01-09 00:59:44 +03:00
[FEATURE] Mutually exclusive optional mods (XOR logic)
This commit is contained in:
parent
0c23b59749
commit
ca87e0c726
3 changed files with 25 additions and 0 deletions
|
@ -254,6 +254,12 @@ public void updateOptionalGraph() {
|
||||||
file.conflict[i] = getOptionalFile(file.conflictFile[i].name);
|
file.conflict[i] = getOptionalFile(file.conflictFile[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(file.xorConflictFile != null) {
|
||||||
|
file.xorConflict = new OptionalFile[file.xorConflictFile.length];
|
||||||
|
for(int i = 0; i < file.xorConflictFile.length; ++i) {
|
||||||
|
file.xorConflict[i] = getOptionalFile(file.xorConflictFile[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,6 +375,10 @@ public void verify() {
|
||||||
if (s == null)
|
if (s == null)
|
||||||
throw new IllegalArgumentException(String.format("Found null entry in updateOptional.%s.dependenciesFile", f.name));
|
throw new IllegalArgumentException(String.format("Found null entry in updateOptional.%s.dependenciesFile", f.name));
|
||||||
}
|
}
|
||||||
|
if(f.xorConflictFile != null) for (OptionalDepend s : f.xorConflictFile) {
|
||||||
|
if (s == null)
|
||||||
|
throw new IllegalArgumentException(String.format("Found null entry in updateOptional.%s.xorConflictFile", f.name));
|
||||||
|
}
|
||||||
if (f.triggersList != null) {
|
if (f.triggersList != null) {
|
||||||
for (OptionalTrigger trigger : f.triggersList) {
|
for (OptionalTrigger trigger : f.triggersList) {
|
||||||
if (trigger == null)
|
if (trigger == null)
|
||||||
|
|
|
@ -24,10 +24,14 @@ public class OptionalFile {
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
public OptionalDepend[] conflictFile;
|
public OptionalDepend[] conflictFile;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
|
public OptionalDepend[] xorConflictFile;
|
||||||
|
@LauncherNetworkAPI
|
||||||
public transient OptionalFile[] dependencies;
|
public transient OptionalFile[] dependencies;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
public transient OptionalFile[] conflict;
|
public transient OptionalFile[] conflict;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
|
public transient OptionalFile[] xorConflict;
|
||||||
|
@LauncherNetworkAPI
|
||||||
public int subTreeLevel = 1;
|
public int subTreeLevel = 1;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
public boolean isPreset;
|
public boolean isPreset;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
public class OptionalView {
|
public class OptionalView {
|
||||||
|
@ -111,6 +112,11 @@ public void enable(OptionalFile file, boolean manual, BiConsumer<OptionalFile, B
|
||||||
disable(conflict, callback);
|
disable(conflict, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(file.xorConflict != null) {
|
||||||
|
for(OptionalFile xorConflict : file.xorConflict) {
|
||||||
|
disable(xorConflict, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disable(OptionalFile file, BiConsumer<OptionalFile, Boolean> callback) {
|
public void disable(OptionalFile file, BiConsumer<OptionalFile, Boolean> callback) {
|
||||||
|
@ -129,6 +135,11 @@ public void disable(OptionalFile file, BiConsumer<OptionalFile, Boolean> callbac
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (file.xorConflict != null) {
|
||||||
|
if (Arrays.stream(file.xorConflict).noneMatch(this::isEnabled)) {
|
||||||
|
enable(file.xorConflict[0], false, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean contains(OptionalFile file, OptionalFile[] array) {
|
private boolean contains(OptionalFile file, OptionalFile[] array) {
|
||||||
|
|
Loading…
Reference in a new issue