Cached Minecraft jars
This commit is contained in:
@@ -311,7 +311,7 @@ public class DefaultGameRepository implements GameRepository {
|
||||
}
|
||||
|
||||
public File getModpackConfiguration(String version) {
|
||||
return new File(getRunDirectory(version), "modpack.json");
|
||||
return new File(getVersionRoot(version), "modpack.json");
|
||||
}
|
||||
|
||||
public boolean isModpack(String version) {
|
||||
|
||||
@@ -34,6 +34,7 @@ import java.util.function.Function;
|
||||
final class CoupleTask<P extends Task> extends Task {
|
||||
|
||||
private final boolean relyingOnDependents;
|
||||
private final boolean failIfDependentsFail;
|
||||
private final Collection<Task> dependents;
|
||||
private final List<Task> dependencies = new LinkedList<>();
|
||||
private final ExceptionalFunction<AutoTypingMap<String>, Task, ?> succ;
|
||||
@@ -45,10 +46,11 @@ final class CoupleTask<P extends Task> extends Task {
|
||||
* @param succ a callback that returns the task runs after pred, succ will be executed asynchronously. You can do something that relies on the result of pred.
|
||||
* @param relyingOnDependents true if this task chain will be broken when task pred fails.
|
||||
*/
|
||||
public CoupleTask(P pred, ExceptionalFunction<AutoTypingMap<String>, Task, ?> succ, boolean relyingOnDependents) {
|
||||
public CoupleTask(P pred, ExceptionalFunction<AutoTypingMap<String>, Task, ?> succ, boolean relyingOnDependents, boolean failIfDependentsFail) {
|
||||
this.dependents = Collections.singleton(pred);
|
||||
this.succ = succ;
|
||||
this.relyingOnDependents = relyingOnDependents;
|
||||
this.failIfDependentsFail = failIfDependentsFail;
|
||||
|
||||
setSignificance(TaskSignificance.MODERATE);
|
||||
}
|
||||
@@ -58,6 +60,9 @@ final class CoupleTask<P extends Task> extends Task {
|
||||
Task task = succ.apply(getVariables());
|
||||
if (task != null)
|
||||
dependencies.add(task);
|
||||
|
||||
if (failIfDependentsFail && !isDependentsSucceeded())
|
||||
throw new SilentException();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -69,6 +69,16 @@ public abstract class Task {
|
||||
return Schedulers.defaultScheduler();
|
||||
}
|
||||
|
||||
private boolean dependentsSucceeded = false;
|
||||
|
||||
public boolean isDependentsSucceeded() {
|
||||
return dependentsSucceeded;
|
||||
}
|
||||
|
||||
void setDependentsSucceeded() {
|
||||
dependentsSucceeded = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* True if requires all {@link #getDependents} finishing successfully.
|
||||
* <p>
|
||||
@@ -239,7 +249,7 @@ public abstract class Task {
|
||||
}
|
||||
|
||||
public final Task then(ExceptionalFunction<AutoTypingMap<String>, Task, ?> b) {
|
||||
return new CoupleTask<>(this, b, true);
|
||||
return new CoupleTask<>(this, b, true, false);
|
||||
}
|
||||
|
||||
public final Task with(Task b) {
|
||||
@@ -247,7 +257,15 @@ public abstract class Task {
|
||||
}
|
||||
|
||||
public final Task with(ExceptionalFunction<AutoTypingMap<String>, Task, ?> b) {
|
||||
return new CoupleTask<>(this, b, false);
|
||||
return new CoupleTask<>(this, b, false, false);
|
||||
}
|
||||
|
||||
public final Task finalized(Task b) {
|
||||
return finalized(s -> b);
|
||||
}
|
||||
|
||||
public final Task finalized(ExceptionalFunction<AutoTypingMap<String>, Task, ?> b) {
|
||||
return new CoupleTask<>(this, b, false, true);
|
||||
}
|
||||
|
||||
public static Task empty() {
|
||||
|
||||
@@ -159,6 +159,9 @@ public final class TaskExecutor {
|
||||
if (!doDependentsSucceeded && task.isRelyingOnDependents() || canceled)
|
||||
throw new SilentException();
|
||||
|
||||
if (doDependentsSucceeded)
|
||||
task.setDependentsSucceeded();
|
||||
|
||||
task.setVariables(variables);
|
||||
task.execute();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user