Skip to content

Commit 44699d7

Browse files
committed
Added check if forge is installed, added withForgeVersion argument and some fixes
1 parent 5f0a256 commit 44699d7

File tree

5 files changed

+51
-29
lines changed

5 files changed

+51
-29
lines changed

src/main/java/fr/flowarg/flowupdater/FlowUpdater.java

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ public void step(Step step) {}
6767
@Override
6868
public void init() {}
6969
};
70+
71+
/** Default logger */
72+
public static final ILogger DEFAULT_LOGGER = new Logger("[FlowUpdater]", new File(".", "updater/latest.log"));
7073

7174
/**
7275
* Basic constructor to construct a new {@link FlowUpdater}.
@@ -78,31 +81,20 @@ public void init() {}
7881
* @param postExecutions Post executions are called after update.
7982
*/
8083
private FlowUpdater(IVanillaVersion version, ILogger logger, boolean silentUpdate,
81-
IProgressCallback callback, List<ExternalFile> externalFiles, List<Runnable> postExecutions)
84+
IProgressCallback callback, List<ExternalFile> externalFiles, List<Runnable> postExecutions, IForgeVersion forgeVersion)
8285
{
8386
this.logger = logger;
87+
this.version = version;
88+
this.logFile = this.logger.getLogFile();
8489
this.externalFiles = externalFiles;
8590
this.postExecutions = postExecutions;
91+
this.forgeVersion = forgeVersion;
8692
this.isSilent = silentUpdate;
87-
this.logFile = this.logger.getLogFile();
88-
try
89-
{
90-
if (!this.logFile.exists())
91-
{
92-
this.logFile.getParentFile().mkdirs();
93-
this.logFile.createNewFile();
94-
}
95-
}
96-
catch (IOException e)
97-
{
98-
e.printStackTrace();
99-
}
100-
this.logger.info(String.format("------------------------- FlowUpdater for Minecraft %s v%s -------------------------", version.getName(), "1.1.6"));
101-
this.version = version;
10293
this.downloadInfos = new DownloadInfos();
10394
this.callback = callback;
10495
this.callback.init();
10596
this.vanillaReader = new VanillaReader(this.version, this.logger, this.isSilent, this.callback, this.downloadInfos);
97+
this.logger.info(String.format("------------------------- FlowUpdater for Minecraft %s v%s -------------------------", this.version.getName(), "1.1.6"));
10698
}
10799

108100
/**
@@ -126,7 +118,9 @@ public void update(File dir, boolean downloadServer) throws IOException
126118

127119
if (this.getForgeVersion() != null)
128120
{
129-
this.forgeVersion.install(dir);
121+
if(!this.forgeVersion.isForgeAlreadyInstalled(dir))
122+
this.forgeVersion.install(dir);
123+
else this.logger.info("Detected forge ! Skipping installation...");
130124
this.forgeVersion.installMods(new File(dir, "mods/"));
131125
}
132126
}
@@ -238,7 +232,9 @@ public DownloadInfos getDownloadInfos()
238232
/**
239233
* Necessary if you want install a Forge version.
240234
* @param forgeVersion Forge version to install.
235+
* @deprecated Prefer use {@link FlowUpdaterBuilder#withForgeVersion(IForgeVersion)}
241236
*/
237+
@Deprecated
242238
public void setForgeVersion(IForgeVersion forgeVersion)
243239
{
244240
this.forgeVersion = forgeVersion;
@@ -250,12 +246,13 @@ public void setForgeVersion(IForgeVersion forgeVersion)
250246
*/
251247
public static class FlowUpdaterBuilder
252248
{
253-
private BuilderArgument<IVanillaVersion> versionArgument = new BuilderArgument<IVanillaVersion>(null).required();
254-
private BuilderArgument<ILogger> loggerArgument = new BuilderArgument<ILogger>(null).required();
255-
private BuilderArgument<Boolean> silentUpdateArgument = new BuilderArgument<Boolean>(null).optional();
256-
private BuilderArgument<IProgressCallback> progressCallbackArgument = new BuilderArgument<IProgressCallback>(null).optional();
257-
private BuilderArgument<List<ExternalFile>> externalFilesArgument = new BuilderArgument<List<ExternalFile>>(null).optional();
258-
private BuilderArgument<List<Runnable>> postExecutionsArgument = new BuilderArgument<List<Runnable>>(null).optional();
249+
private final BuilderArgument<IVanillaVersion> versionArgument = new BuilderArgument<IVanillaVersion>(null).required();
250+
private final BuilderArgument<ILogger> loggerArgument = new BuilderArgument<ILogger>(null).required();
251+
private final BuilderArgument<Boolean> silentUpdateArgument = new BuilderArgument<Boolean>(null).optional();
252+
private final BuilderArgument<IProgressCallback> progressCallbackArgument = new BuilderArgument<IProgressCallback>(null).optional();
253+
private final BuilderArgument<List<ExternalFile>> externalFilesArgument = new BuilderArgument<List<ExternalFile>>(null).optional();
254+
private final BuilderArgument<List<Runnable>> postExecutionsArgument = new BuilderArgument<List<Runnable>>(null).optional();
255+
private final BuilderArgument<IForgeVersion> forgeVersionArgument = new BuilderArgument<IForgeVersion>(null).optional();
259256

260257
public FlowUpdaterBuilder withVersion(IVanillaVersion version)
261258
{
@@ -281,30 +278,40 @@ public FlowUpdaterBuilder withProgressCallback(IProgressCallback callback)
281278
return this;
282279
}
283280

284-
public FlowUpdaterBuilder withExternaFiles(ArrayList<ExternalFile> externalFiles)
281+
public FlowUpdaterBuilder withExternaFiles(List<ExternalFile> externalFiles)
285282
{
286283
this.externalFilesArgument.set(externalFiles);
287284
return this;
288285
}
289286

290-
public FlowUpdaterBuilder witPostExecutions(ArrayList<Runnable> postExecutions)
287+
public FlowUpdaterBuilder withPostExecutions(List<Runnable> postExecutions)
291288
{
292289
this.postExecutionsArgument.set(postExecutions);
293290
return this;
294291
}
295292

293+
/**
294+
* Necessary if you want install a Forge version.
295+
* @param forgeVersion Forge version to install.
296+
*/
297+
public FlowUpdaterBuilder withForgeVersion(IForgeVersion forgeVersion)
298+
{
299+
this.forgeVersionArgument.set(forgeVersion);
300+
return this;
301+
}
302+
296303
public FlowUpdater build() throws BuilderArgumentException
297304
{
298305
assert this.versionArgument.get() != null;
299306
final ILogger logger = this.loggerArgument.get() != null ?
300-
this.loggerArgument.get() :
301-
new Logger("[FlowUpdater]", new File(".", "updater/latest.log"));
307+
this.loggerArgument.get() : DEFAULT_LOGGER;
302308
return new FlowUpdater(this.versionArgument.get(),
303309
logger,
304310
this.silentUpdateArgument.get(),
305311
this.progressCallbackArgument.get() != null ? this.progressCallbackArgument.get() : NULL_CALLBACK,
306312
this.externalFilesArgument.get() != null ? this.externalFilesArgument.get() : new ArrayList<>(),
307-
this.postExecutionsArgument.get() != null ? this.postExecutionsArgument.get() : new ArrayList<>());
313+
this.postExecutionsArgument.get() != null ? this.postExecutionsArgument.get() : new ArrayList<>(),
314+
this.forgeVersionArgument.get());
308315
}
309316
}
310317
}

src/main/java/fr/flowarg/flowupdater/versions/IForgeVersion.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
*/
2020
public interface IForgeVersion
2121
{
22+
boolean isForgeAlreadyInstalled(File installDir);
23+
24+
2225
/**
2326
* This function installs a Forge version at the specified directory.
2427
* @param dirToInstall Specified directory.

src/main/java/fr/flowarg/flowupdater/versions/MCP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public MCP(String clientDownloadURL, String clientSha1, String serverDownloadURL
5050
* "serverURL": "https://url.com/launcher/server.jar",
5151
* "serverSha1": "777039aab46578247b8954e2f7d482826315fca8",
5252
* "clientSize": 1234,
53-
* "serverSize": 1234,
53+
* "serverSize": 1234
5454
* }
5555
* @param url the JSON file URL.
5656
* @return the MCP instance.

src/main/java/fr/flowarg/flowupdater/versions/NewForgeVersion.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,10 @@ public IForgeVersion disableModFileDeleter()
255255
this.useFileDeleter = false;
256256
return this;
257257
}
258+
259+
@Override
260+
public boolean isForgeAlreadyInstalled(File installDir)
261+
{
262+
return new File(installDir, "libraries/net/minecraftforge/forge/" + this.forgeVersion + "/" + "forge-" + this.forgeVersion + ".jar").exists();
263+
}
258264
}

src/main/java/fr/flowarg/flowupdater/versions/OldForgeVersion.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,10 @@ public IForgeVersion disableModFileDeleter()
253253
this.useFileDeleter = false;
254254
return this;
255255
}
256+
257+
@Override
258+
public boolean isForgeAlreadyInstalled(File installDir)
259+
{
260+
return new File(installDir, "libraries/net/minecraftforge/forge/" + this.forgeVersion + "/" + "forge-" + this.forgeVersion + ".jar").exists();
261+
}
256262
}

0 commit comments

Comments
 (0)