From 529d7e763665eebe86aa32b664f1adc34f73d02a Mon Sep 17 00:00:00 2001 From: Adrian Bergqvist Date: Fri, 17 Feb 2023 17:20:39 +0100 Subject: [PATCH] JSON and color codes for disconnect message --- .../adde0109/ambassador/AmbassadorConfig.java | 16 ++++++++++++++-- .../VelocityForgeClientConnectionPhase.java | 3 +-- src/main/resources/default-ambassador.toml | 5 +++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java index a00c678..5c48dcd 100644 --- a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java +++ b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java @@ -3,6 +3,9 @@ package org.adde0109.ambassador; import com.electronwill.nightconfig.core.conversion.InvalidValueException; import com.electronwill.nightconfig.core.file.CommentedFileConfig; import com.google.gson.annotations.Expose; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import java.net.URL; import java.nio.file.Path; @@ -18,6 +21,8 @@ public class AmbassadorConfig { @Expose private int serverSwitchCancellationTime = 120; + private net.kyori.adventure.text.@MonotonicNonNull Component messageAsAsComponent; + private AmbassadorConfig(int resetTimeout, String kickResetMessage, int serverSwitchCancellationTime) { this.resetTimeout = resetTimeout; this.disconnectResetMessage = kickResetMessage; @@ -63,8 +68,15 @@ public class AmbassadorConfig { return resetTimeout; } - public String getDisconnectResetMessage() { - return disconnectResetMessage; + public net.kyori.adventure.text.Component getDisconnectResetMessage() { + if (messageAsAsComponent == null) { + if (disconnectResetMessage.startsWith("{")) { + messageAsAsComponent = GsonComponentSerializer.gson().deserialize(disconnectResetMessage); + } else { + messageAsAsComponent = LegacyComponentSerializer.legacyAmpersand().deserialize(disconnectResetMessage); + } + } + return messageAsAsComponent; } public int getServerSwitchCancellationTime() { diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java index c686b8d..ad3965c 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -11,7 +11,6 @@ import com.velocitypowered.proxy.protocol.StateRegistry; import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse; import com.velocitypowered.proxy.protocol.packet.PluginMessage; import io.netty.buffer.Unpooled; -import net.kyori.adventure.text.Component; import org.adde0109.ambassador.Ambassador; import org.adde0109.ambassador.velocity.client.FML2CRPMResetCompleteDecoder; import org.adde0109.ambassador.velocity.client.OutboundForgeHandshakeHolder; @@ -74,7 +73,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase Ambassador.getTemporaryForced().put(player.getUsername(), player.getConnectionInFlight().getServer(), Ambassador.getInstance().config.getServerSwitchCancellationTime(), TimeUnit.SECONDS); //Disconnect - Reset Timeout - player.disconnect(Component.text(Ambassador.getInstance().config.getDisconnectResetMessage())); + player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage()); }, Ambassador.getInstance().config.getResetTimeout(), TimeUnit.MILLISECONDS); } @Override diff --git a/src/main/resources/default-ambassador.toml b/src/main/resources/default-ambassador.toml index d5b2f43..6fea70d 100644 --- a/src/main/resources/default-ambassador.toml +++ b/src/main/resources/default-ambassador.toml @@ -4,6 +4,7 @@ config-version = "1.0" # How long to wait for the client to reset before disconnecting (In milliseconds) reset-timeout = 1000 # Message displayed to the player when disconnected from proxy during server switch. -disconnect-reset-message = "Please reconnect" -# How long the player has to reconnect before canceling the server switch. (In seconds) +# Legacy color codes and JSON are accepted. +disconnect-reset-message = "&6Please reconnect" +# How much time the player has to reconnect before canceling the server switch. (In seconds) server-switch-cancellation-time = 120