From 3c797252d8bccb49df025df8569103de9d44fc1f Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sun, 19 Sep 2021 12:15:45 +0800 Subject: [PATCH] feat(multiplayer): support cato --allow. --- .../jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java | 6 +++--- .../org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java index c7df025a0..e7b3a7a58 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java @@ -51,7 +51,7 @@ import static org.jackhuang.hmcl.util.Logging.LOG; */ public final class MultiplayerManager { private static final String CATO_DOWNLOAD_URL = "https://files.huangyuhui.net/maven/"; - private static final String CATO_VERSION = "2021-09-01"; + private static final String CATO_VERSION = "2021-09-18"; private static final Artifact CATO_ARTIFACT = new Artifact("cato", "cato", CATO_VERSION, OperatingSystem.CURRENT_OS.getCheckedName() + "-" + Architecture.CURRENT.name().toLowerCase(Locale.ROOT), OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS ? "exe" : null); @@ -91,12 +91,12 @@ public final class MultiplayerManager { return session; } - public static CatoSession createSession(String sessionName) throws IOException { + public static CatoSession createSession(String sessionName, int port) throws IOException { Path exe = getCatoExecutable(); if (!Files.isRegularFile(exe)) { throw new IllegalStateException("Cato file not found"); } - String[] commands = new String[]{exe.toString(), "--token", "new"}; + String[] commands = new String[]{exe.toString(), "--token", "new", "--allow", String.format("127.0.0.1:%d", port)}; Process process = new ProcessBuilder() .command(commands) .start(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java index b1c59605d..ce3f3debd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerPage.java @@ -148,15 +148,16 @@ public class MultiplayerPage extends Control implements DecoratorPage { } Controllers.prompt(new PromptDialogPane.Builder(i18n("multiplayer.session.create"), (result, resolve, reject) -> { + int port = Integer.parseInt(((PromptDialogPane.Builder.StringQuestion) result.get(2)).getValue()); try { - initCatoSession(MultiplayerManager.createSession(((PromptDialogPane.Builder.StringQuestion) result.get(1)).getValue())); + initCatoSession(MultiplayerManager.createSession(((PromptDialogPane.Builder.StringQuestion) result.get(1)).getValue(), port)); } catch (Exception e) { LOG.log(Level.WARNING, "Failed to create session", e); reject.accept(i18n("multiplayer.session.create.error")); return; } - port.set(Integer.parseInt(((PromptDialogPane.Builder.StringQuestion) result.get(2)).getValue())); + this.port.set(port); setMultiplayerState(MultiplayerManager.State.MASTER); resolve.run(); })