-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathLaunchOptions.java
87 lines (76 loc) · 3.09 KB
/
LaunchOptions.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package me.earth.headlessmc.launcher.launch;
import lombok.Builder;
import lombok.CustomLog;
import lombok.Data;
import me.earth.headlessmc.api.config.HasConfig;
import me.earth.headlessmc.api.config.Property;
import me.earth.headlessmc.command.CommandUtil;
import me.earth.headlessmc.launcher.Launcher;
import me.earth.headlessmc.launcher.auth.LaunchAccount;
import me.earth.headlessmc.launcher.files.FileManager;
import me.earth.headlessmc.launcher.version.Version;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static me.earth.headlessmc.launcher.LauncherProperties.*;
@Data
@Builder
@CustomLog
public class LaunchOptions {
private final Version version;
private final Launcher launcher;
private final FileManager files;
private final List<String> additionalJvmArgs;
private final LaunchAccount account;
private final boolean runtime;
private final boolean lwjgl;
private final boolean jndi;
private final boolean lookup;
private final boolean paulscode;
private final boolean noOut;
private final boolean noIn;
private final boolean inMemory;
private final boolean forceSimple;
private final boolean forceBoot;
@SuppressWarnings("unused")
public static class LaunchOptionsBuilder {
private LaunchOptionsBuilder() {
this.additionalJvmArgs = Collections.emptyList();
}
public LaunchOptionsBuilder parseFlags(
Launcher ctx, boolean quit, String... args) {
boolean lwjgl = flag(ctx, "-lwjgl", INVERT_LWJGL_FLAG, args);
// if offline only allow launching with the lwjgl flag!
if (!lwjgl && launcher.getAccountManager().getOfflineChecker().isOffline()) {
log.warning("You are offline, game will start in headless mode!");
lwjgl = true;
}
return this
.runtime(CommandUtil.hasFlag("-commands", args))
.lwjgl(lwjgl)
.inMemory(CommandUtil.hasFlag("-inmemory", args))
.jndi(flag(ctx, "-jndi", INVERT_JNDI_FLAG, args))
.lookup(flag(ctx, "-lookup", INVERT_LOOKUP_FLAG, args))
.paulscode(flag(ctx, "-paulscode", INVERT_PAULS_FLAG, args))
.noOut(quit || CommandUtil.hasFlag("-noout", args))
.forceSimple(CommandUtil.hasFlag("-forceSimple", args))
.forceBoot(CommandUtil.hasFlag("-forceBoot", args))
.parseJvmArgs(args)
.noIn(quit);
}
public LaunchOptionsBuilder parseJvmArgs(String... args) {
String jvmArgs = CommandUtil.getOption("--jvm", args);
if (jvmArgs != null) {
this.additionalJvmArgs = new ArrayList<>(
Arrays.asList(CommandUtil.split(jvmArgs)));
}
return this;
}
private boolean flag(
HasConfig ctx, String flg, Property<Boolean> inv, String... args) {
return CommandUtil.hasFlag(flg, args)
^ ctx.getConfig().get(inv, false);
}
}
}