mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2025-03-09 22:25:31 +00:00
finishup bungeecord, move to mini message as serialzier
This commit is contained in:
parent
338297192c
commit
1fb429ea77
@ -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
|
||||
|
@ -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
|
||||
* <a href="https://docs.advntr.dev/minimessage/format.html">...</a>
|
||||
* @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
|
||||
* <a href="https://docs.advntr.dev/minimessage/format.html">...</a>
|
||||
* @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
|
||||
|
@ -139,14 +139,19 @@ public abstract class PlayerDataManager<P> {
|
||||
}
|
||||
|
||||
// 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());
|
||||
}
|
||||
|
||||
|
@ -199,7 +199,7 @@ public abstract class ProxyDataManager implements Runnable {
|
||||
Set<UUID> 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<UUID> add = new HashSet<>(localOnlineUUIDs);
|
||||
Set<UUID> remove = new HashSet<>(storedRedisUuids);
|
||||
add.removeAll(storedRedisUuids);
|
||||
|
@ -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"
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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" }
|
||||
|
@ -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"
|
||||
)
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
||||
}
|
@ -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
|
||||
*
|
||||
|
@ -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<ProxiedPlayer> implements Listener {
|
||||
|
||||
public BungeePlayerDataManager(RedisBungeePlugin<ProxiedPlayer> plugin) {
|
||||
private final RedisBungee bPlugin;
|
||||
public BungeePlayerDataManager(RedisBungee plugin) {
|
||||
super(plugin);
|
||||
bPlugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -62,6 +68,29 @@ public class BungeePlayerDataManager extends PlayerDataManager<ProxiedPlayer> 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<ProxiedPlayer> 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<ProxiedPlayer> 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());
|
||||
|
@ -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<ProxiedPlayer>, ConfigLoader, LangConfigLoader {
|
||||
public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlayer>, 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<ProxiedPlay
|
||||
return this.configuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LangConfiguration langConfiguration() {
|
||||
return this.langConfiguration;
|
||||
}
|
||||
@ -161,15 +157,6 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
||||
return this.getProxy().getPlayer(player).getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handlePlatformKick(UUID uuid, Component message) {
|
||||
ProxiedPlayer player = getPlayer(uuid);
|
||||
if (player == null) return false;
|
||||
if (!player.isConnected()) return false;
|
||||
player.disconnect(BungeeComponentSerializer.get().serialize(message));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPlayerServerName(ProxiedPlayer player) {
|
||||
return player.getServer().getInfo().getName();
|
||||
@ -243,7 +230,6 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
||||
|
||||
// init the api
|
||||
this.api = new RedisBungeeAPI(this);
|
||||
apiStatic = (RedisBungeeAPI) this.api;
|
||||
|
||||
// commands
|
||||
CommandPlatformHelper.init(new BungeeCommandPlatformHelper());
|
||||
@ -337,22 +323,6 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
||||
this.summoner = summoner;
|
||||
}
|
||||
|
||||
/**
|
||||
* This returns an instance of {@link RedisBungeeAPI}
|
||||
*
|
||||
* @return the {@link AbstractRedisBungeeAPI} object instance.
|
||||
* @deprecated Please use {@link RedisBungeeAPI#getRedisBungeeApi()} this class intended to for old plugins that no longer updated.
|
||||
*/
|
||||
@Deprecated
|
||||
public static RedisBungeeAPI getApi() {
|
||||
return apiStatic;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public JedisPool getPool() {
|
||||
return api.getJedisPool();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLangConfigLoad(LangConfiguration langConfiguration) {
|
||||
this.langConfiguration = langConfiguration;
|
||||
@ -362,4 +332,9 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
||||
public String platformId() {
|
||||
return "bungeecord";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kickPlayer(UUID player, Component message) {
|
||||
this.playerDataManager.kickPlayer(player, message);
|
||||
}
|
||||
}
|
||||
|
@ -37,9 +37,9 @@ import static com.imaginarycode.minecraft.redisbungee.api.util.serialize.MultiMa
|
||||
|
||||
public class RedisBungeeListener implements Listener {
|
||||
|
||||
private final RedisBungeePlugin<ProxiedPlayer> plugin;
|
||||
private final RedisBungee plugin;
|
||||
|
||||
public RedisBungeeListener(RedisBungeePlugin<ProxiedPlayer> plugin) {
|
||||
public RedisBungeeListener(RedisBungee plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
|
@ -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<Player> {
|
||||
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
|
||||
|
@ -20,6 +20,6 @@ public interface ApiPlatformSupport {
|
||||
|
||||
ProxyServer getProxy();
|
||||
|
||||
void kickPlayer(UUID Player, Component message);
|
||||
void kickPlayer(UUID player, Component message);
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user