From b5fbc69ee66f3aee22fb8204705847ba79f9825f Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Fri, 3 Nov 2017 13:38:20 +0800 Subject: [PATCH] Default game arguments --- .../core/launch/AbstractMinecraftLoader.java | 7 ----- .../hmcl/core/launch/MinecraftLoader.java | 31 +++++++++++++------ .../hmcl/core/version/Arguments.java | 5 +++ .../jackhuang/hmcl/core/version/Rules.java | 5 +++ .../hmcl/core/version/StringArgument.java | 2 +- 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/AbstractMinecraftLoader.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/AbstractMinecraftLoader.java index a2d975fd5..54e15ba54 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/AbstractMinecraftLoader.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/AbstractMinecraftLoader.java @@ -147,13 +147,6 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { HMCLog.log("On making launcher args."); - if (StrUtils.isNotBlank(options.getHeight()) && StrUtils.isNotBlank(options.getWidth())) { - res.add("--height"); - res.add(options.getHeight()); - res.add("--width"); - res.add(options.getWidth()); - } - String serverIp = options.getServerIp(); if (StrUtils.isNotBlank(serverIp)) { String[] args = serverIp.split(":"); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/MinecraftLoader.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/MinecraftLoader.java index a8e70a162..eefbd65aa 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/MinecraftLoader.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/launch/MinecraftLoader.java @@ -33,6 +33,7 @@ import org.jackhuang.hmcl.core.GameException; import org.jackhuang.hmcl.api.auth.UserProfileProvider; import org.jackhuang.hmcl.core.version.MinecraftLibrary; import org.jackhuang.hmcl.core.service.IMinecraftService; +import org.jackhuang.hmcl.core.version.Argument; import org.jackhuang.hmcl.core.version.Arguments; /** @@ -46,8 +47,18 @@ public class MinecraftLoader extends AbstractMinecraftLoader { if (version.arguments == null) version.arguments = new Arguments(); + if (version.arguments.game == null) + version.arguments.game = getDefaultGameArguments(); if (version.arguments.jvm == null) - version.arguments.jvm = Arguments.DEFAULT_JVM_ARGUMENTS; + version.arguments.jvm = getDefaultJVMArguments(); + } + + protected List getDefaultJVMArguments() { + return Arguments.DEFAULT_JVM_ARGUMENTS; + } + + protected List getDefaultGameArguments() { + return Arguments.DEFAULT_GAME_ARGUMENTS; } @Override @@ -86,16 +97,16 @@ public class MinecraftLoader extends AbstractMinecraftLoader { res.addAll(Arguments.parseArguments(version.arguments.jvm, configuration)); res.add(version.mainClass); - Map features = new HashMap<>(); + Map features = getFeatures(); - if (version.arguments.game != null) - res.addAll(Arguments.parseArguments(version.arguments.game, configuration, features)); + res.addAll(Arguments.parseArguments(version.arguments.game, configuration, features)); res.addAll(Arguments.parseStringArguments(Arrays.asList(StrUtils.tokenize(version.minecraftArguments)), configuration)); - - if (res.indexOf("--gameDir") != -1 && res.indexOf("--workDir") != -1) { - res.add("--workDir"); - res.add(gameDir.getAbsolutePath()); - } + } + + protected Map getFeatures() { + Map features = new HashMap<>(); + features.put("has_custom_resolution", StrUtils.isNotBlank(options.getHeight()) && StrUtils.isNotBlank(options.getWidth())); + return features; } protected Map getConfigurations() { @@ -112,6 +123,8 @@ public class MinecraftLoader extends AbstractMinecraftLoader { map.put("${user_type}", lr.getUserType()); map.put("${assets_index_name}", version.getAssetsIndex().getId()); map.put("${user_properties}", lr.getUserProperties()); + map.put("${resolution_width}", options.getWidth()); + map.put("${resolution_height}", options.getHeight()); map.put("${natives_directory}", service.version().getDecompressNativesToLocation(version).getAbsolutePath()); return map; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Arguments.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Arguments.java index 9abdc3c09..c9de41dc1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Arguments.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Arguments.java @@ -48,6 +48,7 @@ public class Arguments { } public static final List DEFAULT_JVM_ARGUMENTS; + public static final List DEFAULT_GAME_ARGUMENTS; static { List jvm = new LinkedList<>(); @@ -60,5 +61,9 @@ public class Arguments { jvm.add(new StringArgument("-cp")); jvm.add(new StringArgument("${classpath}")); DEFAULT_JVM_ARGUMENTS = Collections.unmodifiableList(jvm); + + List game = new LinkedList<>(); + game.add(new RuledArgument(Collections.singletonList(new Rules("allow", Collections.singletonMap("has_custom_resolution", true))), Arrays.asList("--width", "${resolution_width}", "--height", "${resolution_height}"))); + DEFAULT_GAME_ARGUMENTS = Collections.unmodifiableList(game); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Rules.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Rules.java index 7136b8532..89811df3e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Rules.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/Rules.java @@ -42,6 +42,11 @@ public class Rules { this.action = action; this.os = os; } + + public Rules(String action, Map features) { + this.action = action; + this.features = features; + } public String action(Map features) { if (os != null && !os.isCurrentOS()) return null; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/StringArgument.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/StringArgument.java index af5527c3d..af89a88a0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/StringArgument.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/version/StringArgument.java @@ -29,7 +29,7 @@ import java.util.regex.Pattern; */ public class StringArgument implements Argument { - String argument; + public String argument; public StringArgument(String argument) { this.argument = argument;