diff --git a/api/build.gradle.kts b/api/build.gradle.kts index dca2211..17e2506 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -46,7 +46,7 @@ tasks { val jedisVersion = libs.jedis.get().version val configurateVersion = libs.configurateV3.get().version val guavaVersion = libs.guava.get().version - val adventureVersion = libs.adventure.plain.get().version + val adventureVersion = libs.adventure.api.get().version options.links( "https://configurate.aoeu.xyz/$configurateVersion/apidocs/", // configurate "https://javadoc.io/doc/redis.clients/jedis/$jedisVersion/", // jedis diff --git a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/AbstractRedisBungeeAPI.java b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/AbstractRedisBungeeAPI.java index 2c9c125..f0335e1 100644 --- a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/AbstractRedisBungeeAPI.java +++ b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/AbstractRedisBungeeAPI.java @@ -299,6 +299,28 @@ public abstract class AbstractRedisBungeeAPI { return this.plugin.getSummoner(); } + /** + * Kicks a player from the network using miniMessage + * calls {@link #getUuidFromName(String)} to get uuid + * ... + * @param playerName player name + * @param miniMessage kick message that player will see on kick using minimessage as format + * @since 0.13.0 + */ + public void kickPlayer(String playerName, String miniMessage) { + kickPlayer(getUuidFromName(playerName), miniMessage); + } + + /** + * Kicks a player from the network + * ... + * @param player player uuid + * @param miniMessage kick message that player will see on kick using minimessage as format + * @since 0.13.0 + */ + public void kickPlayer(UUID player, String miniMessage) { + plugin.playerDataManager().serializedPlayerKick(player, miniMessage); + } /** * shows what mode is RedisBungee is on diff --git a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/PlayerDataManager.java b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/PlayerDataManager.java index efb35ae..f2a0e10 100644 --- a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/PlayerDataManager.java +++ b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/PlayerDataManager.java @@ -139,14 +139,19 @@ public abstract class PlayerDataManager

{ } // must check if player is on the local proxy - protected abstract boolean handleSerializedKick(UUID player, String serializedMessage); + // https://docs.advntr.dev/minimessage/index.html + // implemented downstream in Velocity and Bungeecord + protected abstract boolean handleSerializedKick(UUID player, String serializedMiniMessage); - public void serializedPlayerKick(UUID player, String serializedMessage) { + // https://docs.advntr.dev/minimessage/index.html + // implemented downstream in Velocity and Bungeecord + // called by kickPlayer in each impl of this class `NOT OVERRIDE` + public void serializedPlayerKick(UUID player, String serializedMiniMessage) { JSONObject data = new JSONObject(); data.put("proxy", this.proxyId); data.put("uuid", player); - data.put("serialized-message", serializedMessage); - if (!handleSerializedKick(player, serializedMessage)) + data.put("serialized-message", serializedMiniMessage); + if (!handleSerializedKick(player, serializedMiniMessage)) plugin.proxyDataManager().sendChannelMessage("redisbungee-player-kick", data.toString()); } diff --git a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/ProxyDataManager.java b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/ProxyDataManager.java index 5a2f9e9..b88d7f6 100644 --- a/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/ProxyDataManager.java +++ b/api/src/main/java/com/imaginarycode/minecraft/redisbungee/api/ProxyDataManager.java @@ -199,7 +199,7 @@ public abstract class ProxyDataManager implements Runnable { Set storedRedisUuids = getProxyMembers(this.proxyId); if (!localOnlineUUIDs.equals(storedRedisUuids)) { - plugin.logWarn("De-synced playerS set detected correcting...."); + plugin.logWarn("De-synced players set detected correcting...."); Set add = new HashSet<>(localOnlineUUIDs); Set remove = new HashSet<>(storedRedisUuids); add.removeAll(storedRedisUuids); diff --git a/commands/build.gradle.kts b/commands/build.gradle.kts index aedf8a6..918d94f 100644 --- a/commands/build.gradle.kts +++ b/commands/build.gradle.kts @@ -7,7 +7,6 @@ dependencies { implementation(libs.acf.core) compileOnly(libs.adventure.api) compileOnly(libs.adventure.miniMessage) - compileOnly(libs.adventure.gson) } description = "RedisBungee common commands" diff --git a/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/CommandRedisBungeeDebug.java b/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/CommandRedisBungeeDebug.java index d1f6d09..f12ae82 100644 --- a/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/CommandRedisBungeeDebug.java +++ b/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/CommandRedisBungeeDebug.java @@ -14,7 +14,6 @@ import co.aikar.commands.CommandIssuer; import co.aikar.commands.annotation.*; import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; import com.imaginarycode.minecraft.redisbungee.commands.utils.AdventureBaseCommand; -import net.kyori.adventure.text.Component; import java.util.UUID; @@ -33,16 +32,14 @@ public class CommandRedisBungeeDebug extends AdventureBaseCommand { @Description("kicks a player from the network by name") @Private public void kick(CommandIssuer issuer, String playerName) { - String message = serializeMessage(Component.text("kicked using redisbungee api using name")); - plugin.playerDataManager().serializedPlayerKick(plugin.getUuidTranslator().getTranslatedUuid(playerName, false), message); + plugin.playerDataManager().serializedPlayerKick(plugin.getUuidTranslator().getTranslatedUuid(playerName, false), "kicked using redisbungee api using name"); } @Subcommand("kickByUUID") @Description("kicks a player from the network by UUID") @Private public void kick(CommandIssuer issuer, UUID uuid) { - String message = serializeMessage(Component.text("kicked using redisbungee api using uuid")); - plugin.playerDataManager().serializedPlayerKick(uuid, message); + plugin.playerDataManager().serializedPlayerKick(uuid, "kicked using redisbungee api using uuid"); } diff --git a/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/utils/AdventureBaseCommand.java b/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/utils/AdventureBaseCommand.java index 53b8b64..08a43c4 100644 --- a/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/utils/AdventureBaseCommand.java +++ b/commands/src/main/java/com/imaginarycode/minecraft/redisbungee/commands/utils/AdventureBaseCommand.java @@ -13,7 +13,6 @@ package com.imaginarycode.minecraft.redisbungee.commands.utils; import co.aikar.commands.BaseCommand; import co.aikar.commands.CommandIssuer; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; /** * this just dumb class that wraps the adventure stuff into base command @@ -24,10 +23,4 @@ public abstract class AdventureBaseCommand extends BaseCommand { CommandPlatformHelper.getPlatformHelper().sendMessage(issuer, component); } - private static final GsonComponentSerializer COMPONENT_SERIALIZER = GsonComponentSerializer.gson(); - - protected String serializeMessage(Component message) { - return COMPONENT_SERIALIZER.serialize(message); - } - } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b312687..fe547de 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,9 +23,6 @@ configurateV3 = { module = "org.spongepowered:configurate-yaml", version.ref = " caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" } adventure-api = { module = "net.kyori:adventure-api", version.ref = "adventure" } -adventure-gson = { module = "net.kyori:adventure-text-serializer-gson", version.ref = "adventure" } -adventure-legacy = { module = "net.kyori:adventure-text-serializer-legacy", version.ref = "adventure" } -adventure-plain = { module = "net.kyori:adventure-text-serializer-plain", version.ref = "adventure" } adventure-miniMessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure" } acf-core = { module = "com.github.ProxioDev.commands:acf-core", version.ref = "acf" } diff --git a/lang/build.gradle.kts b/lang/build.gradle.kts index 1ef8634..a0593d3 100644 --- a/lang/build.gradle.kts +++ b/lang/build.gradle.kts @@ -22,7 +22,7 @@ tasks { val options = options as StandardJavadocDocletOptions options.use() options.isDocFilesSubDirs = true - val adventureVersion = libs.adventure.plain.get().version + val adventureVersion = libs.adventure.api.get().version options.links( "https://jd.advntr.dev/api/$adventureVersion" ) diff --git a/proxies/bungeecord/build.gradle.kts b/proxies/bungeecord/build.gradle.kts index 005643b..7ad42d9 100644 --- a/proxies/bungeecord/build.gradle.kts +++ b/proxies/bungeecord/build.gradle.kts @@ -5,15 +5,12 @@ plugins { dependencies { implementation(project(":RedisBungee-Bungee")) - compileOnly(libs.platform.bungeecord) { - exclude("com.google.guava", "guava") - exclude("com.google.code.gson", "gson") - exclude("net.kyori","adventure-api") - } + compileOnly(libs.platform.bungeecord) implementation(libs.adventure.platforms.bungeecord) - implementation(libs.adventure.gson) + implementation(libs.adventure.miniMessage) implementation(libs.acf.bungeecord) implementation(project(":RedisBungee-Commands")) + implementation(project(":RedisBungee-Lang")) } description = "RedisBungee Bungeecord implementation" @@ -24,11 +21,6 @@ java { tasks { - //runWaterfall { - //waterfallVersion("1.20") - //environment["REDISBUNGEE_PROXY_ID"] = "bungeecord-1" - //["REDISBUNGEE_NETWORK_ID"] = "dev" - //} compileJava { options.encoding = Charsets.UTF_8.name() options.release.set(17) diff --git a/proxies/bungeecord/bungeecord-api/build.gradle.kts b/proxies/bungeecord/bungeecord-api/build.gradle.kts index 8fd4840..77b57b0 100644 --- a/proxies/bungeecord/bungeecord-api/build.gradle.kts +++ b/proxies/bungeecord/bungeecord-api/build.gradle.kts @@ -5,11 +5,8 @@ plugins { dependencies { api(project(":RedisBungee-API")) - compileOnly(libs.platform.bungeecord) { - exclude("com.google.guava", "guava") - exclude("com.google.code.gson", "gson") - exclude("net.kyori","adventure-api") - } + compileOnly(libs.adventure.platforms.bungeecord) + compileOnly(libs.platform.bungeecord) } description = "RedisBungee Bungeecord API" diff --git a/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java b/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java new file mode 100644 index 0000000..9bfe64b --- /dev/null +++ b/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2013-present RedisBungee contributors + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * + * http://www.eclipse.org/legal/epl-v10.html + */ + +package com.imaginarycode.minecraft.redisbungee; + +import net.kyori.adventure.text.Component; + +import java.util.UUID; + +// this class used to redirect calls to keep the implementation and api separate +public interface ApiPlatformSupport { + + void kickPlayer(UUID player, Component message); + +} diff --git a/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeAPI.java b/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeAPI.java index 5140fdb..77c8817 100644 --- a/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeAPI.java +++ b/proxies/bungeecord/bungeecord-api/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeAPI.java @@ -11,6 +11,9 @@ package com.imaginarycode.minecraft.redisbungee; import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.plugin.Plugin; import org.checkerframework.checker.nullness.qual.NonNull; @@ -29,6 +32,8 @@ public class RedisBungeeAPI extends AbstractRedisBungeeAPI { private static RedisBungeeAPI redisBungeeApi; + private static final BungeeComponentSerializer BUNGEE_COMPONENT_SERIALIZER = BungeeComponentSerializer.get(); + public RedisBungeeAPI(RedisBungeePlugin plugin) { super(plugin); if (redisBungeeApi == null) { @@ -51,6 +56,52 @@ public class RedisBungeeAPI extends AbstractRedisBungeeAPI { return ((Plugin) this.plugin).getProxy().getServerInfo(serverName); } + /** + * Kicks a player from the network + * calls {@link #getUuidFromName(String)} to get uuid + * + * @param playerName player name + * @param message kick message that player will see on kick + * @since 0.13.0 + */ + public void kickPlayer(String playerName, BaseComponent[] message) { + kickPlayer(getUuidFromName(playerName), message); + } + + /** + * Kicks a player from the network + * + * @param player player uuid + * @param message kick message that player will see on kick + * @since 0.13.0 + */ + public void kickPlayer(UUID player, BaseComponent[] message) { + kickPlayer(player, BUNGEE_COMPONENT_SERIALIZER.deserialize(message)); + } + + /** + * Kicks a player from the network + * calls {@link #getUuidFromName(String)} to get uuid + * + * @param playerName player name + * @param message kick message that player will see on kick + * @since 0.12.0 + */ + public void kickPlayer(String playerName, Component message) { + kickPlayer(getUuidFromName(playerName), message); + } + + /** + * Kicks a player from the network + * + * @param player player uuid + * @param message kick message that player will see on kick + * @since 0.12.0 + */ + public void kickPlayer(UUID player, Component message) { + ((ApiPlatformSupport) this.plugin).kickPlayer(player, message); + } + /** * Api instance * diff --git a/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerDataManager.java b/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerDataManager.java index a803aea..e4f2fcb 100644 --- a/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerDataManager.java +++ b/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerDataManager.java @@ -16,7 +16,10 @@ import com.imaginarycode.minecraft.redisbungee.events.PlayerChangedServerNetwork import com.imaginarycode.minecraft.redisbungee.events.PlayerJoinedNetworkEvent; import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent; import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.LoginEvent; import net.md_5.bungee.api.event.PlayerDisconnectEvent; @@ -26,13 +29,16 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; +import java.util.UUID; import java.util.concurrent.TimeUnit; public class BungeePlayerDataManager extends PlayerDataManager implements Listener { - public BungeePlayerDataManager(RedisBungeePlugin plugin) { + private final RedisBungee bPlugin; + public BungeePlayerDataManager(RedisBungee plugin) { super(plugin); + bPlugin = plugin; } @EventHandler @@ -62,6 +68,29 @@ public class BungeePlayerDataManager extends PlayerDataManager im super.playerChangedServer(event.getPlayer().getUniqueId(), oldServer, currentServer); } + private final BungeeComponentSerializer BUNGEE_COMPONENT_SERIALIZER = BungeeComponentSerializer.get(); + + private final static MiniMessage MINI_MESSAGE_SERIALIZER = MiniMessage.miniMessage(); + @Override + public boolean handleSerializedKick(UUID uuid, String serializedMiniMessage) { + ProxiedPlayer player = plugin.getPlayer(uuid); + if (player == null) return false; + // decode the adventure component + if (serializedMiniMessage == null) { + // kick the player too even if the message is invalid + player.disconnect(BUNGEE_COMPONENT_SERIALIZER.serialize(Component.empty())); + plugin.logWarn("unable to decode serialized adventure component because its empty or null"); + } else { + Component message = MINI_MESSAGE_SERIALIZER.deserialize(serializedMiniMessage); + player.disconnect(BUNGEE_COMPONENT_SERIALIZER.serialize(message)); + } + return true; + } + + public void kickPlayer(UUID player, Component message) { + serializedPlayerKick(player, MINI_MESSAGE_SERIALIZER.serialize(message)); + } + @EventHandler public void onLoginEvent(LoginEvent event) { event.registerIntent((Plugin) plugin); @@ -74,12 +103,12 @@ public class BungeePlayerDataManager extends PlayerDataManager im event.completeIntent((Plugin) plugin); } else { if (plugin.configuration().kickWhenOnline()) { - serializedPlayerKick(event.getConnection().getUniqueId(), plugin.langConfiguration().messages().loggedInFromOtherLocation()); + kickPlayer(event.getConnection().getUniqueId(), bPlugin.langConfiguration().messages().loggedInFromOtherLocation()); // wait 3 seconds before releasing the event plugin.executeAsyncAfter(() -> event.completeIntent((Plugin) plugin), TimeUnit.SECONDS, 3); } else { event.setCancelled(true); - event.setCancelReason(BungeeComponentSerializer.get().serialize(plugin.langConfiguration().messages().alreadyLoggedIn())); + event.setCancelReason(BungeeComponentSerializer.get().serialize(bPlugin.langConfiguration().messages().alreadyLoggedIn())); event.completeIntent((Plugin) plugin); } } @@ -89,11 +118,13 @@ public class BungeePlayerDataManager extends PlayerDataManager im } + @EventHandler public void onLoginEvent(PostLoginEvent event) { super.addPlayer(event.getPlayer().getUniqueId(), event.getPlayer().getName(), event.getPlayer().getAddress().getAddress()); } + @EventHandler public void onDisconnectEvent(PlayerDisconnectEvent event) { super.removePlayer(event.getPlayer().getUniqueId()); diff --git a/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java b/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java index a9fdecc..ccedfcb 100644 --- a/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java +++ b/proxies/bungeecord/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java @@ -15,10 +15,8 @@ import com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager; import com.imaginarycode.minecraft.redisbungee.api.ProxyDataManager; import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode; import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; -import com.imaginarycode.minecraft.redisbungee.api.config.LangConfiguration; import com.imaginarycode.minecraft.redisbungee.api.config.loaders.ConfigLoader; import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration; -import com.imaginarycode.minecraft.redisbungee.api.config.loaders.LangConfigLoader; import com.imaginarycode.minecraft.redisbungee.api.events.IPlayerChangedServerNetworkEvent; import com.imaginarycode.minecraft.redisbungee.api.events.IPlayerJoinedNetworkEvent; import com.imaginarycode.minecraft.redisbungee.api.events.IPlayerLeftNetworkEvent; @@ -33,7 +31,8 @@ import com.imaginarycode.minecraft.redisbungee.events.PlayerJoinedNetworkEvent; import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent; import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.limework.valiobungee.config.lang.LangConfigLoader; +import net.limework.valiobungee.config.lang.LangConfiguration; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Event; @@ -41,7 +40,6 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.scheduler.ScheduledTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import redis.clients.jedis.JedisPool; import java.io.IOException; import java.lang.reflect.Field; @@ -53,9 +51,8 @@ import java.util.concurrent.*; import java.util.logging.Level; -public class RedisBungee extends Plugin implements RedisBungeePlugin, ConfigLoader, LangConfigLoader { +public class RedisBungee extends Plugin implements RedisBungeePlugin, ConfigLoader, LangConfigLoader, ApiPlatformSupport { - private static RedisBungeeAPI apiStatic; private AbstractRedisBungeeAPI api; private RedisBungeeMode redisBungeeMode; private ProxyDataManager proxyDataManager; @@ -76,7 +73,6 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin plugin; + private final RedisBungee plugin; - public RedisBungeeListener(RedisBungeePlugin plugin) { + public RedisBungeeListener(RedisBungee plugin) { this.plugin = plugin; } diff --git a/proxies/velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerDataManager.java b/proxies/velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerDataManager.java index 00c5cfc..2efd115 100644 --- a/proxies/velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerDataManager.java +++ b/proxies/velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerDataManager.java @@ -24,6 +24,7 @@ import com.velocitypowered.api.event.connection.PostLoginEvent; import com.velocitypowered.api.event.player.ServerConnectedEvent; import com.velocitypowered.api.proxy.Player; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import java.util.UUID; @@ -70,34 +71,25 @@ public class VelocityPlayerDataManager extends PlayerDataManager { super.playerChangedServer(event.getPlayer().getUniqueId(), oldServer, currentServer); } - private final GsonComponentSerializer COMPONENT_SERIALIZER = GsonComponentSerializer.gson(); - + private final static MiniMessage MINI_MESSAGE_SERIALIZER = MiniMessage.miniMessage(); @Override - public boolean handleSerializedKick(UUID uuid, String serializedMessage) { + public boolean handleSerializedKick(UUID uuid, String serializedMiniMessage) { Player player = plugin.getPlayer(uuid); if (player == null) return false; // decode the adventure component - if (serializedMessage == null || serializedMessage.isEmpty()) { + if (serializedMiniMessage == null) { // kick the player too even if the message is invalid player.disconnect(Component.empty()); plugin.logWarn("unable to decode serialized adventure component because its empty or null"); } else { - try { - Component message = COMPONENT_SERIALIZER.deserialize(serializedMessage); + Component message = MINI_MESSAGE_SERIALIZER.deserialize(serializedMiniMessage); player.disconnect(message); - } catch (Exception e) { - plugin.logFatal("Kick message is invalid", e); - plugin.logFatal("The serialized kick message:"); - plugin.logFatal(serializedMessage); - // kick the player too even if the message is invalid - player.disconnect(Component.empty()); - } } return true; } public void kickPlayer(UUID player, Component message) { - serializedPlayerKick(player, COMPONENT_SERIALIZER.serialize(message)); + serializedPlayerKick(player, MINI_MESSAGE_SERIALIZER.serialize(message)); } @Subscribe diff --git a/proxies/velocity/velocity-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java b/proxies/velocity/velocity-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java index e5f7e1a..7edb1bf 100644 --- a/proxies/velocity/velocity-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java +++ b/proxies/velocity/velocity-api/src/main/java/com/imaginarycode/minecraft/redisbungee/ApiPlatformSupport.java @@ -20,6 +20,6 @@ public interface ApiPlatformSupport { ProxyServer getProxy(); - void kickPlayer(UUID Player, Component message); + void kickPlayer(UUID player, Component message); }