Skip to content

Commit c400499

Browse files
committed
feat:修改快速启动的彻底方法
1 parent dfcf889 commit c400499

File tree

5 files changed

+71
-14
lines changed

5 files changed

+71
-14
lines changed

HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@
2525
import org.jackhuang.hmcl.download.LibraryAnalyzer;
2626
import org.jackhuang.hmcl.event.Event;
2727
import org.jackhuang.hmcl.event.EventManager;
28+
import org.jackhuang.hmcl.java.JavaRuntime;
2829
import org.jackhuang.hmcl.mod.ModAdviser;
2930
import org.jackhuang.hmcl.mod.Modpack;
3031
import org.jackhuang.hmcl.mod.ModpackConfiguration;
3132
import org.jackhuang.hmcl.mod.ModpackProvider;
3233
import org.jackhuang.hmcl.setting.Profile;
33-
import org.jackhuang.hmcl.util.FileSaver;
3434
import org.jackhuang.hmcl.setting.VersionIconType;
3535
import org.jackhuang.hmcl.setting.VersionSetting;
3636
import org.jackhuang.hmcl.ui.FXUtils;
37+
import org.jackhuang.hmcl.util.FileSaver;
3738
import org.jackhuang.hmcl.util.Lang;
3839
import org.jackhuang.hmcl.util.StringUtils;
3940
import org.jackhuang.hmcl.util.gson.JsonUtils;
4041
import org.jackhuang.hmcl.util.io.FileUtils;
41-
import org.jackhuang.hmcl.java.JavaRuntime;
4242
import org.jackhuang.hmcl.util.platform.OperatingSystem;
4343
import org.jackhuang.hmcl.util.platform.SystemInfo;
4444
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
@@ -55,11 +55,12 @@
5555
import java.util.stream.Stream;
5656

5757
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
58-
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
5958
import static org.jackhuang.hmcl.util.Pair.pair;
59+
import static org.jackhuang.hmcl.util.logging.Logger.LOG;
6060

6161
public final class HMCLGameRepository extends DefaultGameRepository {
6262
private final Profile profile;
63+
private QuickPlayOption quickPlayOption;
6364

6465
// local version settings
6566
private final Map<String, VersionSetting> localVersionSettings = new HashMap<>();
@@ -110,6 +111,14 @@ public Stream<Version> getDisplayVersions() {
110111
.thenComparing(v -> VersionNumber.asVersion(v.getId())));
111112
}
112113

114+
public QuickPlayOption getQuickPlayOption() {
115+
return quickPlayOption;
116+
}
117+
118+
public void setQuickPlayOption(QuickPlayOption quickPlayOption) {
119+
this.quickPlayOption = quickPlayOption;
120+
}
121+
113122
@Override
114123
protected void refreshVersionsImpl() {
115124
localVersionSettings.clear();
@@ -434,6 +443,15 @@ public LaunchOptions getLaunchOptions(String version, JavaRuntime javaVersion, P
434443
.setJavaAgents(javaAgents)
435444
.setJavaArguments(javaArguments);
436445

446+
if (quickPlayOption != null) {
447+
switch (quickPlayOption.type) {
448+
case SINGLEPLAYER -> builder.setWorldFolderName(quickPlayOption.target);
449+
case MULTIPLAYER -> builder.setServerIp(quickPlayOption.target);
450+
case REALM -> builder.setRealmID(quickPlayOption.target);
451+
}
452+
quickPlayOption = null;
453+
}
454+
437455
if (config().hasProxy()) {
438456
builder.setProxyType(config().getProxyType());
439457
builder.setProxyHost(config().getProxyHost());

HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ public void setKeep() {
113113
}
114114

115115
public void setQuickEnterWorld(String worldFolderName) {
116-
this.worldFolderName = worldFolderName;
116+
//this.worldFolderName = worldFolderName;
117+
profile.getRepository().setQuickPlayOption(new QuickPlayOption(QuickPlayOption.Type.SINGLEPLAYER, worldFolderName));
117118
}
118119

119120
public void launch() {
@@ -208,9 +209,6 @@ private void launch0() {
208209
: new HMCLProcessListener(repository, version.get(), authInfo, launchOptions, launchingLatch, gameVersion.isPresent())
209210
);
210211
}).thenComposeAsync(launcher -> { // launcher is prev task's result
211-
if (worldFolderName != null) {
212-
launcher.setQuickEnterWorld(worldFolderName);
213-
}
214212
if (scriptFile == null) {
215213
return Task.supplyAsync(launcher::launch);
216214
} else {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.jackhuang.hmcl.game;
2+
3+
public class QuickPlayOption {
4+
Type type;
5+
String target;
6+
7+
public QuickPlayOption(Type type, String target) {
8+
this.type = type;
9+
this.target = target;
10+
}
11+
12+
enum Type {
13+
SINGLEPLAYER, MULTIPLAYER, REALM
14+
}
15+
16+
}

HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public class LaunchOptions implements Serializable {
4848
private Integer height;
4949
private boolean fullscreen;
5050
private String serverIp;
51+
private String worldFolderName;
52+
private String realmID;
5153
private String wrapper;
5254
private Proxy.Type proxyType;
5355
private String proxyHost;
@@ -187,6 +189,18 @@ public String getServerIp() {
187189
return serverIp;
188190
}
189191

192+
/**
193+
* The folder name of a local world
194+
*/
195+
196+
public String getWorldFolderName() {
197+
return worldFolderName;
198+
}
199+
200+
public String getRealmID() {
201+
return realmID;
202+
}
203+
190204
/**
191205
* i.e. optirun
192206
*/
@@ -412,6 +426,16 @@ public Builder setServerIp(String serverIp) {
412426
return this;
413427
}
414428

429+
public Builder setWorldFolderName(String worldFolderName) {
430+
options.worldFolderName = worldFolderName;
431+
return this;
432+
}
433+
434+
public Builder setRealmID(String realmID) {
435+
options.realmID = realmID;
436+
return this;
437+
}
438+
415439
public Builder setWrapper(String wrapper) {
416440
options.wrapper = wrapper;
417441
return this;

HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
public class DefaultLauncher extends Launcher {
5151

5252
private final LibraryAnalyzer analyzer;
53-
private String worldFolderName;
5453

5554
public DefaultLauncher(GameRepository repository, Version version, AuthInfo authInfo, LaunchOptions options) {
5655
this(repository, version, authInfo, options, null);
@@ -66,9 +65,6 @@ public DefaultLauncher(GameRepository repository, Version version, AuthInfo auth
6665
this.analyzer = LibraryAnalyzer.analyze(version, repository.getGameVersion(version).orElse(null));
6766
}
6867

69-
public void setQuickEnterWorld(String worldFolderName) {
70-
this.worldFolderName = worldFolderName;
71-
}
7268

7369
private Command generateCommandLine(Path nativeFolder) throws IOException {
7470
CommandBuilder res = new CommandBuilder();
@@ -314,7 +310,7 @@ private Command generateCommandLine(Path nativeFolder) throws IOException {
314310

315311
try {
316312
ServerAddress parsed = ServerAddress.parse(address);
317-
if (!GameVersionNumber.asGameVersion(gameVersion).isAtLeast("1.13", "23w14a")) {
313+
if (!GameVersionNumber.asGameVersion(gameVersion).isAtLeast("1.20", "23w14a")) {
318314
res.add("--server");
319315
res.add(parsed.getHost());
320316
res.add("--port");
@@ -328,9 +324,14 @@ private Command generateCommandLine(Path nativeFolder) throws IOException {
328324
}
329325
}
330326

331-
if (worldFolderName != null && GameVersionNumber.asGameVersion(gameVersion).isAtLeast("1.20", "23w14a")) {
327+
if (StringUtils.isNotBlank(options.getWorldFolderName()) && GameVersionNumber.asGameVersion(gameVersion).isAtLeast("1.20", "23w14a")) {
332328
res.add("--quickPlaySingleplayer");
333-
res.add(worldFolderName);
329+
res.add(options.getWorldFolderName());
330+
}
331+
332+
if (StringUtils.isNotBlank(options.getRealmID()) && GameVersionNumber.asGameVersion(gameVersion).isAtLeast("1.20", "23w14a")) {
333+
res.add("--quickPlayRealms");
334+
res.add(options.getRealmID());
334335
}
335336

336337
if (options.isFullscreen())

0 commit comments

Comments
 (0)