Cached Minecraft jars

This commit is contained in:
huangyuhui
2018-01-27 14:05:39 +08:00
parent 1a572be52e
commit 418be689f2
17 changed files with 133 additions and 38 deletions

View File

@@ -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) {

View File

@@ -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

View File

@@ -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() {

View File

@@ -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();