From 11bd70bdc93699a5d520a63ded59c75bec802ed6 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sun, 17 Jan 2021 14:53:57 +0000 Subject: [PATCH] Add welcome message --- .../geysermc/connect/GeyserConnectConfig.java | 3 +++ .../org/geysermc/connect/MasterServer.java | 5 +++++ .../org/geysermc/connect/PacketHandler.java | 19 +++++++++++++++++-- .../java/org/geysermc/connect/ui/FormID.java | 1 + .../org/geysermc/connect/ui/UIHandler.java | 7 +++++++ src/main/resources/config.yml | 4 ++++ src/main/resources/welcome.txt | 0 7 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/welcome.txt diff --git a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java index a0b290e..d75f08c 100644 --- a/src/main/java/org/geysermc/connect/GeyserConnectConfig.java +++ b/src/main/java/org/geysermc/connect/GeyserConnectConfig.java @@ -52,6 +52,9 @@ public class GeyserConnectConfig { private String motd; + @JsonProperty("welcome-file") + private String welcomeFile = "welcome.txt"; + @JsonProperty("debug-mode") private boolean debugMode; diff --git a/src/main/java/org/geysermc/connect/MasterServer.java b/src/main/java/org/geysermc/connect/MasterServer.java index 9b071cc..0e2f407 100644 --- a/src/main/java/org/geysermc/connect/MasterServer.java +++ b/src/main/java/org/geysermc/connect/MasterServer.java @@ -119,6 +119,11 @@ public class MasterServer { storageManager.setupStorage(); + // Create the base welcome.txt file + try { + FileUtils.fileOrCopiedFromResource(new File(MasterServer.getInstance().getGeyserConnectConfig().getWelcomeFile()), "welcome.txt", (x) -> x); + } catch (IOException ignored) { } + start(geyserConnectConfig.getPort()); logger.start(); diff --git a/src/main/java/org/geysermc/connect/PacketHandler.java b/src/main/java/org/geysermc/connect/PacketHandler.java index 3547ef2..39e527b 100644 --- a/src/main/java/org/geysermc/connect/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/PacketHandler.java @@ -48,8 +48,9 @@ import org.geysermc.connector.entity.attribute.AttributeType; import org.geysermc.connector.network.BedrockProtocol; import org.geysermc.connector.network.session.auth.BedrockClientData; import org.geysermc.connector.utils.AttributeUtils; -import org.geysermc.connector.utils.LanguageUtils; +import org.geysermc.connector.utils.FileUtils; +import java.io.File; import java.io.IOException; import java.security.interfaces.ECPublicKey; import java.util.ArrayList; @@ -203,7 +204,17 @@ public class PacketHandler implements BedrockPacketHandler { public boolean handle(SetLocalPlayerAsInitializedPacket packet) { masterServer.getLogger().debug("Player initialized: " + player.getDisplayName()); - player.sendWindow(FormID.MAIN, UIHandler.getServerList(player.getServers()));; + String message = ""; + try { + File messageFile = FileUtils.fileOrCopiedFromResource(new File(MasterServer.getInstance().getGeyserConnectConfig().getWelcomeFile()), "welcome.txt", (x) -> x); + message = new String(FileUtils.readAllBytes(messageFile)); + } catch (IOException ignored) { } + + if (!message.trim().isEmpty()) { + player.sendWindow(FormID.WELCOME, UIHandler.getMessageWindow(message)); + } else { + player.sendWindow(FormID.MAIN, UIHandler.getServerList(player.getServers())); + } return false; } @@ -225,6 +236,10 @@ public class PacketHandler implements BedrockPacketHandler { } else { // Send the response to the correct response function switch (id) { + case WELCOME: + player.sendWindow(FormID.MAIN, UIHandler.getServerList(player.getServers())); + break; + case MAIN: UIHandler.handleServerListResponse(player, (SimpleFormResponse) window.getResponse()); break; diff --git a/src/main/java/org/geysermc/connect/ui/FormID.java b/src/main/java/org/geysermc/connect/ui/FormID.java index 5eff39f..daf9fd2 100644 --- a/src/main/java/org/geysermc/connect/ui/FormID.java +++ b/src/main/java/org/geysermc/connect/ui/FormID.java @@ -30,6 +30,7 @@ import lombok.Getter; @Getter public enum FormID { + WELCOME, MAIN, DIRECT_CONNECT(true), EDIT_SERVERS(true), diff --git a/src/main/java/org/geysermc/connect/ui/UIHandler.java b/src/main/java/org/geysermc/connect/ui/UIHandler.java index 9c0dc9e..a142055 100644 --- a/src/main/java/org/geysermc/connect/ui/UIHandler.java +++ b/src/main/java/org/geysermc/connect/ui/UIHandler.java @@ -182,6 +182,13 @@ public class UIHandler { .build(); } + public static FormWindow getMessageWindow(String message) { + CustomFormWindow window = new CustomFormBuilder("Notice") + .addComponent(new LabelComponent(message)) + .build(); + return window; + } + /** * Handle the server list response * diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 91ce45d..0bc2be7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -20,6 +20,10 @@ max-players: 100 # MOTD to display motd: "GeyserConnect Proxy" +# Welcome message file, if file exists and is not empty this will show on join +# This is loaded live so will update without a server restart +welcome-file: welcome.txt + # Config for the Geyser listener geyser: # The port that will listen for connections diff --git a/src/main/resources/welcome.txt b/src/main/resources/welcome.txt new file mode 100644 index 0000000..e69de29