feat(multiplayer): support cato --allow.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user