aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-02-03 10:58:56 +0800
committershedaniel <daniel@shedaniel.me>2021-02-03 10:58:56 +0800
commitcbb00df99a2f178b42fbcdf22a9e51ea22d0e3a4 (patch)
tree1f842279fdce2f8dc1505daf77e8a18b9d6c668c /src/main/java/net/fabricmc
parent6b8188e688a556e0950458a59ab16d7b4e58236f (diff)
downloadarchitectury-loom-cbb00df99a2f178b42fbcdf22a9e51ea22d0e3a4.tar.gz
architectury-loom-cbb00df99a2f178b42fbcdf22a9e51ea22d0e3a4.tar.bz2
architectury-loom-cbb00df99a2f178b42fbcdf22a9e51ea22d0e3a4.zip
Still takes about a minute to download all the assets, should be much better than 5 minutes.
Diffstat (limited to 'src/main/java/net/fabricmc')
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java2
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java153
2 files changed, 82 insertions, 73 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java
index 10797e00..41cda1b1 100644
--- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java
+++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java
@@ -271,7 +271,7 @@ public final class RunConfigSettings implements Named {
* Configure run config with the default server options.
*/
public void data() {
- mode("data");
+ environment("data");
defaultMainClass(getExtension().isForge() ? Constants.ForgeUserDev.LAUNCH_TESTING : Constants.Knot.KNOT_SERVER);
}
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java
index b1913436..5709e38c 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/assets/MinecraftAssetsProvider.java
@@ -29,10 +29,8 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
-import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -42,6 +40,10 @@ import com.google.common.hash.Hashing;
import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
+import me.tongfei.progressbar.DelegatingProgressBarConsumer;
+import me.tongfei.progressbar.ProgressBar;
+import me.tongfei.progressbar.ProgressBarBuilder;
+import me.tongfei.progressbar.ProgressBarStyle;
import org.gradle.api.GradleException;
import org.gradle.api.Project;
@@ -52,7 +54,6 @@ import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionInfo;
import net.fabricmc.loom.util.Checksum;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DownloadUtil;
-import net.fabricmc.loom.util.gradle.ProgressLogger;
public class MinecraftAssetsProvider {
public static void provide(MinecraftProvider minecraftProvider, Project project) throws IOException {
@@ -98,8 +99,7 @@ public class MinecraftAssetsProvider {
}
}
- Deque<ProgressLogger> loggers = new ConcurrentLinkedDeque<>();
- ExecutorService executor = Executors.newFixedThreadPool(Math.min(10, Math.max(Runtime.getRuntime().availableProcessors() / 2, 1)));
+ ExecutorService executor = Executors.newFixedThreadPool(Math.min(16, Math.max(Runtime.getRuntime().availableProcessors() * 2, 1)));
int toDownload = 0;
AssetIndex index;
@@ -112,92 +112,101 @@ public class MinecraftAssetsProvider {
Map<String, AssetObject> parent = index.getFileMap();
- for (Map.Entry<String, AssetObject> entry : parent.entrySet()) {
- AssetObject object = entry.getValue();
- String sha1 = object.getHash();
- String filename = "objects" + File.separator + sha1.substring(0, 2) + File.separator + sha1;
- File file = new File(assets, filename);
-
- String localFileChecksum = !file.exists() ? null : checksumInfos.computeIfAbsent(entry.getKey(), path -> {
- try {
- return Files.asByteSource(file).hash(Hashing.sha1()).toString();
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- });
+ ProgressBar[] progressBar = {null};
- if (LoomGradlePlugin.refreshDeps || localFileChecksum == null || !localFileChecksum.equals(sha1)) {
- if (offline) {
- if (file.exists()) {
- project.getLogger().warn("Outdated asset " + entry.getKey());
- } else {
- throw new GradleException("Asset " + entry.getKey() + " not found at " + file.getAbsolutePath());
+ try {
+ for (Map.Entry<String, AssetObject> entry : parent.entrySet()) {
+ AssetObject object = entry.getValue();
+ String sha1 = object.getHash();
+ String filename = "objects" + File.separator + sha1.substring(0, 2) + File.separator + sha1;
+ File file = new File(assets, filename);
+
+ String localFileChecksum = !file.exists() ? null : checksumInfos.computeIfAbsent(entry.getKey(), path -> {
+ try {
+ return Files.asByteSource(file).hash(Hashing.sha1()).toString();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
}
- } else {
- toDownload++;
- executor.execute(() -> {
- ProgressLogger progressLogger;
-
- if (loggers.isEmpty()) {
- //Create a new logger if we need one
- progressLogger = ProgressLogger.getProgressFactory(project, MinecraftAssetsProvider.class.getName());
- progressLogger.start("Downloading assets...", "assets");
+ });
+
+ if (LoomGradlePlugin.refreshDeps || localFileChecksum == null || !localFileChecksum.equals(sha1)) {
+ if (offline) {
+ if (file.exists()) {
+ project.getLogger().warn("Outdated asset " + entry.getKey());
} else {
- // use a free logger if we can
- progressLogger = loggers.pop();
+ throw new GradleException("Asset " + entry.getKey() + " not found at " + file.getAbsolutePath());
+ }
+ } else {
+ toDownload++;
+
+ if (progressBar[0] == null) {
+ progressBar[0] = new ProgressBarBuilder()
+ .setConsumer(new DelegatingProgressBarConsumer(project.getLogger()::lifecycle))
+ .setInitialMax(toDownload)
+ .setUpdateIntervalMillis(2000)
+ .setTaskName(":downloading assets")
+ .setStyle(ProgressBarStyle.ASCII)
+ .showSpeed()
+ .build();
}
- String assetName = entry.getKey();
- int end = assetName.lastIndexOf("/") + 1;
+ progressBar[0].maxHint(toDownload);
- if (end > 0) {
- assetName = assetName.substring(end);
- }
+ executor.execute(() -> {
+ String assetName = entry.getKey();
+ int end = assetName.lastIndexOf("/") + 1;
- project.getLogger().debug(":downloading asset " + assetName);
- progressLogger.progress(String.format("%-30.30s", assetName) + " - " + sha1);
+ if (end > 0) {
+ assetName = assetName.substring(end);
+ }
- try {
- DownloadUtil.downloadIfChanged(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, project.getLogger(), true);
- } catch (IOException e) {
- throw new RuntimeException("Failed to download: " + assetName, e);
- }
+ project.getLogger().debug(":downloading asset " + assetName);
- if (localFileChecksum == null) {
- checksumInfos.put(entry.getKey(), sha1);
- }
+ try {
+ DownloadUtil.downloadIfChanged(new URL(Constants.RESOURCES_BASE + sha1.substring(0, 2) + "/" + sha1), file, project.getLogger(), true);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to download: " + assetName, e);
+ }
+
+ if (localFileChecksum == null) {
+ checksumInfos.put(entry.getKey(), sha1);
+ }
- //Give this logger back
- loggers.add(progressLogger);
- });
+ synchronized (progressBar[0]) {
+ progressBar[0].step();
+ }
+ });
+ }
}
}
- }
- project.getLogger().info("Took " + stopwatch.stop() + " to iterate " + parent.size() + " asset index.");
+ project.getLogger().info("Took " + stopwatch.stop() + " to iterate " + parent.size() + " asset index.");
- if (toDownload > 0) {
- project.getLogger().lifecycle(":downloading " + toDownload + " asset" + (toDownload == 1 ? "" : "s") + "...");
- }
+ if (toDownload > 0) {
+ project.getLogger().lifecycle(":downloading " + toDownload + " asset" + (toDownload == 1 ? "" : "s") + "...");
+ }
- checksumInfo.getParentFile().mkdirs();
+ checksumInfo.getParentFile().mkdirs();
- try (FileWriter writer = new FileWriter(checksumInfo)) {
- gson.toJson(checksumInfos, writer);
- }
+ try (FileWriter writer = new FileWriter(checksumInfo)) {
+ gson.toJson(checksumInfos, writer);
+ }
- //Wait for the assets to all download
- executor.shutdown();
+ //Wait for the assets to all download
+ executor.shutdown();
- try {
- if (executor.awaitTermination(2, TimeUnit.HOURS)) {
- executor.shutdownNow();
+ try {
+ if (executor.awaitTermination(2, TimeUnit.HOURS)) {
+ executor.shutdownNow();
+ }
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ } finally {
+ if (progressBar[0] != null) {
+ progressBar[0].close();
}
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
}
-
- loggers.forEach(ProgressLogger::completed);
}
}