From a90455a7a4832821885580d3cd6ab20bdd824f9e Mon Sep 17 00:00:00 2001
From: Melledy <52122272+Melledy@users.noreply.github.com>
Date: Sun, 18 Sep 2022 20:52:30 -0700
Subject: [PATCH] Add `-game` and `-dispatch` startup arguments that override
 the run mode in the config

---
 src/main/java/emu/grasscutter/Grasscutter.java            | 7 ++++++-
 src/main/java/emu/grasscutter/utils/StartupArguments.java | 5 +++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/main/java/emu/grasscutter/Grasscutter.java b/src/main/java/emu/grasscutter/Grasscutter.java
index d5a47258..a8bd09c2 100644
--- a/src/main/java/emu/grasscutter/Grasscutter.java
+++ b/src/main/java/emu/grasscutter/Grasscutter.java
@@ -56,6 +56,7 @@ public final class Grasscutter {
     private static Language language;
 
     public static final File configFile = new File("./config.json");
+    @Setter private static ServerRunMode runModeOverride = null; // Config override for run mode
 
     private static int day; // Current day of week.
     @Getter @Setter private static String preferredLanguage;
@@ -141,7 +142,7 @@ public final class Grasscutter {
         httpServer.addRouter(DocumentationServerHandler.class);
 
         // Start servers.
-        var runMode = SERVER.runMode;
+        var runMode = Grasscutter.getRunMode();
         if (runMode == ServerRunMode.HYBRID) {
             httpServer.start();
             gameServer.start();
@@ -245,6 +246,10 @@ public final class Grasscutter {
     public static Language getLanguage(String langCode) {
         return Language.getLanguage(langCode);
     }
+    
+    public static ServerRunMode getRunMode() {
+        return Grasscutter.runModeOverride != null ? Grasscutter.runModeOverride : SERVER.runMode;
+    }
 
     public static Logger getLogger() {
         return log;
diff --git a/src/main/java/emu/grasscutter/utils/StartupArguments.java b/src/main/java/emu/grasscutter/utils/StartupArguments.java
index 5f403081..7d93079c 100644
--- a/src/main/java/emu/grasscutter/utils/StartupArguments.java
+++ b/src/main/java/emu/grasscutter/utils/StartupArguments.java
@@ -4,6 +4,7 @@ import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.Logger;
 import emu.grasscutter.BuildConfig;
 import emu.grasscutter.Grasscutter;
+import emu.grasscutter.Grasscutter.ServerRunMode;
 import emu.grasscutter.net.packet.PacketOpcodesUtils;
 import io.javalin.core.util.JavalinLogger;
 import org.slf4j.LoggerFactory;
@@ -28,6 +29,10 @@ public final class StartupArguments {
         "-debug", StartupArguments::enableDebug,
         "-lang", parameter -> {
             Grasscutter.setPreferredLanguage(parameter); return false;
+        },"-game", parameter -> {
+            Grasscutter.setRunModeOverride(ServerRunMode.GAME_ONLY); return false;
+        },"-dispatch", parameter -> {
+            Grasscutter.setRunModeOverride(ServerRunMode.DISPATCH_ONLY); return false;
         },
 
         // Aliases.
-- 
GitLab