diff --git a/OptifinePlugin/src/main/java/fr/antoineok/flowupdater/optifineplugin/OptifinePlugin.java b/OptifinePlugin/src/main/java/fr/antoineok/flowupdater/optifineplugin/OptifinePlugin.java index cc0c2c51..2ff8db6c 100644 --- a/OptifinePlugin/src/main/java/fr/antoineok/flowupdater/optifineplugin/OptifinePlugin.java +++ b/OptifinePlugin/src/main/java/fr/antoineok/flowupdater/optifineplugin/OptifinePlugin.java @@ -31,21 +31,18 @@ public void onStart() { * @return the object that defines the plugin * @throws IOException if the version is invalid or not found */ - public Optifine getOptifine(String optifineVersion) throws IOException { - - String name = "OptiFine_" + optifineVersion + ".jar"; - if(optifineVersion.startsWith("preview")) - name = optifineVersion + ".jar"; - - HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse("http://optifine.net/downloadx")).newBuilder(); + public Optifine getOptifine(String optifineVersion, boolean preview) throws IOException + { + final String name = preview ? optifineVersion + ".jar" : "OptiFine_" + optifineVersion + ".jar"; + final HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse("http://optifine.net/downloadx")).newBuilder(); urlBuilder.addQueryParameter("f", name); - urlBuilder.addQueryParameter("x", this.getJson(optifineVersion)); + urlBuilder.addQueryParameter("x", preview ? this.getJsonPreview(optifineVersion) : this.getJson(optifineVersion)); - String newUrl = urlBuilder.build().toString(); - Request request = new Request.Builder() + final String newUrl = urlBuilder.build().toString(); + final Request request = new Request.Builder() .url(newUrl) .build(); - Response response = client.newCall(request).execute(); + final Response response = client.newCall(request).execute(); final int length = Integer.parseInt(Objects.requireNonNull(response.header("Content-Length"))); assert response.body() != null; @@ -55,7 +52,7 @@ public Optifine getOptifine(String optifineVersion) throws IOException { Files.copy(response.body().byteStream(), output.toPath(), StandardCopyOption.REPLACE_EXISTING); response.body().close(); - if(length <= 25) + if(length <= 40) throw new IOException("Given version of Optifine not found."); return new Optifine(name, length); @@ -108,6 +105,35 @@ private String getJson(String optifineVersion) { return ""; } + private String getJsonPreview(String optifineVersion) { + Request request = new Request.Builder() + .url("http://optifine.net/adloadx?f=" + optifineVersion) + .build(); + try + { + Response response = client.newCall(request).execute(); + assert response.body() != null; + String resp = response.body().string(); + String[] respLine = resp.split("\n"); + response.body().close(); + String keyLine = ""; + for(String line : respLine) { + if(line.contains("downloadx?f=preview")) { + keyLine = line; + break; + } + } + + return keyLine.replace("' onclick='onDownload()'>" + optifineVersion.replace("_", " ") +"", "").replace(" curseMods; protected final ModFileDeleter fileDeleter; - protected final String optifine; + protected final OptifineInfo optifine; protected final CurseModPackInfos modPackInfos; protected List allCurseMods; protected URL installerUrl; @@ -54,7 +55,7 @@ public abstract class AbstractForgeVersion * @param fileDeleter {@link ModFileDeleter} used to cleanup mods dir. * @param optifine Optifine version to install. */ - protected AbstractForgeVersion(ILogger logger, List mods, List curseMods, String forgeVersion, VanillaVersion vanilla, IProgressCallback callback, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPackInfos) + protected AbstractForgeVersion(ILogger logger, List mods, List curseMods, String forgeVersion, VanillaVersion vanilla, IProgressCallback callback, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPackInfos) { this.logger = logger; this.mods = mods; @@ -235,7 +236,7 @@ public List getCurseMods() { return this.curseMods; } - public String getOptifine() + public OptifineInfo getOptifine() { return this.optifine; } diff --git a/src/main/java/fr/flowarg/flowupdater/versions/ForgeVersionBuilder.java b/src/main/java/fr/flowarg/flowupdater/versions/ForgeVersionBuilder.java index 6eb0196b..e274df39 100644 --- a/src/main/java/fr/flowarg/flowupdater/versions/ForgeVersionBuilder.java +++ b/src/main/java/fr/flowarg/flowupdater/versions/ForgeVersionBuilder.java @@ -6,6 +6,7 @@ import fr.flowarg.flowupdater.download.json.CurseFileInfos; import fr.flowarg.flowupdater.download.json.CurseModPackInfos; import fr.flowarg.flowupdater.download.json.Mod; +import fr.flowarg.flowupdater.download.json.OptifineInfo; import fr.flowarg.flowupdater.utils.ModFileDeleter; import fr.flowarg.flowupdater.utils.builderapi.BuilderArgument; import fr.flowarg.flowupdater.utils.builderapi.BuilderException; @@ -35,7 +36,7 @@ public ForgeVersionBuilder(ForgeVersionType type) private final BuilderArgument> curseModsArgument = new BuilderArgument>("CurseMods", ArrayList::new).optional(); private final BuilderArgument nogGuiArgument = new BuilderArgument<>("NoGui", () -> true).optional(); private final BuilderArgument fileDeleterArgument = new BuilderArgument<>("ModFileDeleter", () -> new ModFileDeleter(false)).optional(); - private final BuilderArgument optifineArgument = new BuilderArgument("Optifine").optional(); + private final BuilderArgument optifineArgument = new BuilderArgument("Optifine").optional(); private final BuilderArgument modPackArgument = new BuilderArgument("ModPack").optional(); public ForgeVersionBuilder withForgeVersion(String forgeVersion) @@ -86,7 +87,7 @@ public ForgeVersionBuilder withFileDeleter(ModFileDeleter fileDeleter) return this; } - public ForgeVersionBuilder withOptifine(String optifine) + public ForgeVersionBuilder withOptifine(OptifineInfo optifine) { this.optifineArgument.set(optifine); return this; diff --git a/src/main/java/fr/flowarg/flowupdater/versions/NewForgeVersion.java b/src/main/java/fr/flowarg/flowupdater/versions/NewForgeVersion.java index b5379899..76a1fd26 100644 --- a/src/main/java/fr/flowarg/flowupdater/versions/NewForgeVersion.java +++ b/src/main/java/fr/flowarg/flowupdater/versions/NewForgeVersion.java @@ -6,6 +6,7 @@ import fr.flowarg.flowupdater.download.json.CurseFileInfos; import fr.flowarg.flowupdater.download.json.CurseModPackInfos; import fr.flowarg.flowupdater.download.json.Mod; +import fr.flowarg.flowupdater.download.json.OptifineInfo; import fr.flowarg.flowupdater.utils.ModFileDeleter; import java.io.BufferedInputStream; @@ -27,7 +28,7 @@ public class NewForgeVersion extends AbstractForgeVersion private final String[] compatibleVersions = {"1.16", "1.15", "1.14", "1.13", "1.12.2-14.23.5.285"}; private final boolean noGui; - NewForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List mods, List curseMods, boolean noGui, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPack) + NewForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List mods, List curseMods, boolean noGui, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPack) { super(logger, mods, curseMods, forgeVersion, vanilla, callback, fileDeleter, optifine, modPack); this.noGui = noGui; diff --git a/src/main/java/fr/flowarg/flowupdater/versions/OldForgeVersion.java b/src/main/java/fr/flowarg/flowupdater/versions/OldForgeVersion.java index b1a6f0e5..fdb644b6 100644 --- a/src/main/java/fr/flowarg/flowupdater/versions/OldForgeVersion.java +++ b/src/main/java/fr/flowarg/flowupdater/versions/OldForgeVersion.java @@ -6,6 +6,7 @@ import fr.flowarg.flowupdater.download.json.CurseFileInfos; import fr.flowarg.flowupdater.download.json.CurseModPackInfos; import fr.flowarg.flowupdater.download.json.Mod; +import fr.flowarg.flowupdater.download.json.OptifineInfo; import fr.flowarg.flowupdater.utils.ModFileDeleter; import java.io.BufferedInputStream; @@ -25,7 +26,7 @@ */ public class OldForgeVersion extends AbstractForgeVersion { - OldForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List mods, List curseMods, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPack) + OldForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List mods, List curseMods, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPack) { super(logger, mods, curseMods, forgeVersion, vanilla, callback, fileDeleter, optifine, modPack); }