diff --git a/subprocess/src/main/java/net/creeperhost/creeperlauncher/install/tasks/modloader/forge/ForgeV2InstallTask.java b/subprocess/src/main/java/net/creeperhost/creeperlauncher/install/tasks/modloader/forge/ForgeV2InstallTask.java index 9f3fa63c..61704faf 100644 --- a/subprocess/src/main/java/net/creeperhost/creeperlauncher/install/tasks/modloader/forge/ForgeV2InstallTask.java +++ b/subprocess/src/main/java/net/creeperhost/creeperlauncher/install/tasks/modloader/forge/ForgeV2InstallTask.java @@ -27,6 +27,7 @@ import net.creeperhost.creeperlauncher.minecraft.jsons.VersionManifest; import net.creeperhost.creeperlauncher.pack.CancellationToken; import net.creeperhost.creeperlauncher.pack.Instance; +import net.creeperhost.creeperlauncher.storage.settings.Settings; import net.creeperhost.creeperlauncher.util.StreamGobblerLog; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; @@ -327,7 +328,11 @@ private void runProcessor(@Nullable CancellationToken cancelToken, VersionManife LOGGER.warn("Output '{}' failed to validate.", output); LOGGER.warn(" Expected: {}", value); LOGGER.warn(" Got : {}", hash); - validated = false; + if (Settings.ignoreForgeProcessorOutputHashes()) { + LOGGER.warn("Ignoring invalid hash. Workaround active."); + } else { + validated = false; + } } else { LOGGER.info("Output '{}' Validated: {}", output, hash); } diff --git a/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/Settings.java b/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/Settings.java index 71768979..e7924223 100644 --- a/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/Settings.java +++ b/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/Settings.java @@ -150,6 +150,10 @@ public static long getSpeedLimit() { public static int getThreadLimit() { return settingsData.download().threadLimit(); } + + public static boolean ignoreForgeProcessorOutputHashes() { + return settingsData.workaround().ignoreForgeProcessorOutputHashes(); + } public static final String DEFAULT_SPEC = "1.0.0"; @@ -213,6 +217,9 @@ private SettingsData migrate() { new SettingsData.DownloadSettings( getOrDefault("threadLimit", Integer::parseInt, DEFAULT_SETTINGS.download().threadLimit()), getOrDefault("speedLimit", Long::parseLong, DEFAULT_SETTINGS.download().speedLimit()) + ), + new SettingsData.WorkaroundSettings( + false ) ); } diff --git a/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/SettingsData.java b/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/SettingsData.java index a1e29d22..e5b9209a 100644 --- a/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/SettingsData.java +++ b/subprocess/src/main/java/net/creeperhost/creeperlauncher/storage/settings/SettingsData.java @@ -26,8 +26,9 @@ public class SettingsData { private AppearanceSettings appearance; private ProxySettings proxy; private DownloadSettings download; + private WorkaroundSettings workaround; - public SettingsData(String spec, Path instanceLocation, GeneralSettings general, InstanceSettings instanceDefaults, AppearanceSettings appearance, ProxySettings proxy, DownloadSettings download) { + public SettingsData(String spec, Path instanceLocation, GeneralSettings general, InstanceSettings instanceDefaults, AppearanceSettings appearance, ProxySettings proxy, DownloadSettings download, WorkaroundSettings workaround) { this.spec = spec; this.instanceLocation = instanceLocation; this.general = general; @@ -35,6 +36,7 @@ public SettingsData(String spec, Path instanceLocation, GeneralSettings general, this.appearance = appearance; this.proxy = proxy; this.download = download; + this.workaround = workaround; } // Writer @@ -110,6 +112,9 @@ public static SettingsData createDefault() { new DownloadSettings( Settings.getDefaultThreadLimit(), 0 + ), + new WorkaroundSettings( + false ) ); } @@ -152,6 +157,10 @@ public DownloadSettings download() { return download; } + public WorkaroundSettings workaround() { + return workaround; + } + public void setSpec(String spec) { this.spec = spec; } @@ -390,4 +399,17 @@ public long speedLimit() { return speedLimit; } } + + public static final class WorkaroundSettings { + + public boolean ignoreForgeProcessorOutputHashes; + + public WorkaroundSettings(boolean ignoreForgeProcessorOutputHashes) { + this.ignoreForgeProcessorOutputHashes = ignoreForgeProcessorOutputHashes; + } + + public boolean ignoreForgeProcessorOutputHashes() { + return ignoreForgeProcessorOutputHashes; + } + } }