Skip to content

Commit

Permalink
Preview versions optifine compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
FlowArg committed Nov 4, 2020
1 parent bac3737 commit ef54a86
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -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("_", " ") +"</a>", "").replace("<a href='downloadx?f=" + optifineVersion + "&x=", "").replace(" ", "");
}
catch (IOException e)
{
this.getLogger().printStackTrace(e);
}

return "";
}


@Override
public void onStop() {
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ allprojects {
}
}

version '1.2.7'
version '1.2.8'
archivesBaseName = "flowupdater"

artifacts {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/fr/flowarg/flowupdater/FlowUpdater.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ private FlowUpdater(VanillaVersion version, ILogger logger, UpdaterOptions updat
{
this.logger = logger;
this.version = version;
this.logger.info(String.format("------------------------- FlowUpdater for Minecraft %s v%s -------------------------", this.version.getName(), "1.2.7"));
this.logger.info(String.format("------------------------- FlowUpdater for Minecraft %s v%s -------------------------", this.version.getName(), "1.2.8"));
this.externalFiles = externalFiles;
this.postExecutions = postExecutions;
this.forgeVersion = forgeVersion;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fr.flowarg.flowupdater.download.json;

public class OptifineInfo
{
private final String version;
private final boolean preview;

public OptifineInfo(String version, boolean preview)
{
this.version = version;
this.preview = preview;
}

public String getVersion()
{
return this.version;
}

public boolean isPreview()
{
return this.preview;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public void loadOptifinePlugin(File dir, AbstractForgeVersion forgeVersion)
try
{
final OptifinePlugin optifinePlugin = OptifinePlugin.instance;
final Optifine optifine = optifinePlugin.getOptifine(forgeVersion.getOptifine());
final Optifine optifine = optifinePlugin.getOptifine(forgeVersion.getOptifine().getVersion(), forgeVersion.getOptifine().isPreview());
this.downloadInfos.setOptifine(optifine);
} catch (Exception e)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,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.IOUtils;
import fr.flowarg.flowupdater.utils.ModFileDeleter;
import fr.flowarg.flowupdater.utils.PluginManager;
Expand All @@ -37,7 +38,7 @@ public abstract class AbstractForgeVersion
protected final IProgressCallback callback;
protected final List<CurseFileInfos> curseMods;
protected final ModFileDeleter fileDeleter;
protected final String optifine;
protected final OptifineInfo optifine;
protected final CurseModPackInfos modPackInfos;
protected List<Object> allCurseMods;
protected URL installerUrl;
Expand All @@ -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<Mod> mods, List<CurseFileInfos> curseMods, String forgeVersion, VanillaVersion vanilla, IProgressCallback callback, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPackInfos)
protected AbstractForgeVersion(ILogger logger, List<Mod> mods, List<CurseFileInfos> curseMods, String forgeVersion, VanillaVersion vanilla, IProgressCallback callback, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPackInfos)
{
this.logger = logger;
this.mods = mods;
Expand Down Expand Up @@ -235,7 +236,7 @@ public List<CurseFileInfos> getCurseMods()
{
return this.curseMods;
}
public String getOptifine()
public OptifineInfo getOptifine()
{
return this.optifine;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -35,7 +36,7 @@ public ForgeVersionBuilder(ForgeVersionType type)
private final BuilderArgument<List<CurseFileInfos>> curseModsArgument = new BuilderArgument<List<CurseFileInfos>>("CurseMods", ArrayList::new).optional();
private final BuilderArgument<Boolean> nogGuiArgument = new BuilderArgument<>("NoGui", () -> true).optional();
private final BuilderArgument<ModFileDeleter> fileDeleterArgument = new BuilderArgument<>("ModFileDeleter", () -> new ModFileDeleter(false)).optional();
private final BuilderArgument<String> optifineArgument = new BuilderArgument<String>("Optifine").optional();
private final BuilderArgument<OptifineInfo> optifineArgument = new BuilderArgument<OptifineInfo>("Optifine").optional();
private final BuilderArgument<CurseModPackInfos> modPackArgument = new BuilderArgument<CurseModPackInfos>("ModPack").optional();

public ForgeVersionBuilder withForgeVersion(String forgeVersion)
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Mod> mods, List<CurseFileInfos> curseMods, boolean noGui, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPack)
NewForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List<Mod> mods, List<CurseFileInfos> curseMods, boolean noGui, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPack)
{
super(logger, mods, curseMods, forgeVersion, vanilla, callback, fileDeleter, optifine, modPack);
this.noGui = noGui;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -25,7 +26,7 @@
*/
public class OldForgeVersion extends AbstractForgeVersion
{
OldForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List<Mod> mods, List<CurseFileInfos> curseMods, ModFileDeleter fileDeleter, String optifine, CurseModPackInfos modPack)
OldForgeVersion(String forgeVersion, VanillaVersion vanilla, ILogger logger, IProgressCallback callback, List<Mod> mods, List<CurseFileInfos> curseMods, ModFileDeleter fileDeleter, OptifineInfo optifine, CurseModPackInfos modPack)
{
super(logger, mods, curseMods, forgeVersion, vanilla, callback, fileDeleter, optifine, modPack);
}
Expand Down

0 comments on commit ef54a86

Please sign in to comment.