2
0
mirror of https://github.com/proxiodev/RedisBungee.git synced 2026-04-08 16:10:26 +00:00

General improvements, remove player cleanup from RedisUtils class and bug fixes

fixed bug where PlayerNetoworkJoin is not fireing, and also fixed wrong arguments being passed on server change network event, Moved Payload creation to it own Util class, Remove player creation from RedisUtils class and move it to GenericPlayerUtils, and also renamed Bungeecord/Velocity Player Util classes to <PLATFORM>PlayerUtils.java, removed the use of reflection to create event instances
This commit is contained in:
2022-07-20 12:32:04 +04:00
parent 17e6e12c24
commit 4d3f1a551e
11 changed files with 180 additions and 168 deletions

View File

@@ -8,6 +8,7 @@ import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.imaginarycode.minecraft.redisbungee.api.AbstractRedisBungeeListener;
import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager;
import com.imaginarycode.minecraft.redisbungee.api.GenericPlayerUtils;
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask;
import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils;
@@ -117,25 +118,15 @@ public class RedisBungeeVelocityListener extends AbstractRedisBungeeListener<Log
public Void jedisTask(Jedis jedis) {
Pipeline pipeline = jedis.pipelined();
plugin.getUuidTranslator().persistInfo(event.getPlayer().getUsername(), event.getPlayer().getUniqueId(), pipeline);
PlayerUtils.createPlayer(event.getPlayer(), pipeline, false);
VelocityPlayerUtils.createPlayer(event.getPlayer(), pipeline, true);
pipeline.sync();
// the end of moved code.
jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
event.getPlayer().getUniqueId(), plugin.getApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
new AbstractDataManager.LoginPayload(event.getPlayer().getRemoteAddress().getAddress()))));
return null;
}
@Override
public Void clusterJedisTask(JedisCluster jedisCluster) {
plugin.getUuidTranslator().persistInfo(event.getPlayer().getUsername(), event.getPlayer().getUniqueId(), jedisCluster);
PlayerUtils.createPlayer(event.getPlayer(), jedisCluster, false);
// the end of moved code.
jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
event.getPlayer().getUniqueId(), plugin.getApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
new AbstractDataManager.LoginPayload(event.getPlayer().getRemoteAddress().getAddress()))));
VelocityPlayerUtils.createPlayer(event.getPlayer(), jedisCluster, true);
return null;
}
});
@@ -148,14 +139,14 @@ public class RedisBungeeVelocityListener extends AbstractRedisBungeeListener<Log
@Override
public Void jedisTask(Jedis jedis) {
Pipeline pipeline = jedis.pipelined();
PayloadUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), pipeline);
GenericPlayerUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), pipeline);
pipeline.sync();
return null;
}
@Override
public Void clusterJedisTask(JedisCluster jedisCluster) {
PayloadUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
GenericPlayerUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
return null;
}
@@ -168,23 +159,20 @@ public class RedisBungeeVelocityListener extends AbstractRedisBungeeListener<Log
public void onServerChange(ServerConnectedEvent event) {
Optional<ServerConnection> optionalServerConnection = event.getPlayer().getCurrentServer();
final String currentServer = optionalServerConnection.map(serverConnection -> serverConnection.getServerInfo().getName()).orElse(null);
final String oldServer = event.getPreviousServer().map(serverConnection -> serverConnection.getServerInfo().getName()).orElse(null);
plugin.executeAsync(new RedisTask<Void>(plugin) {
@Override
public Void jedisTask(Jedis jedis) {
jedis.hset("player:" + event.getPlayer().getUniqueId().toString(), "server", event.getServer().getServerInfo().getName());
jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
event.getPlayer().getUniqueId(), plugin.getApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.SERVER_CHANGE,
new AbstractDataManager.ServerChangePayload(event.getServer().getServerInfo().getName(), currentServer))));
jedis.hset("player:" + event.getPlayer().getUniqueId().toString(), "server", currentServer);
PayloadUtils.playerServerChangePayload(event.getPlayer().getUniqueId(), jedis, currentServer, oldServer);
return null;
}
@Override
public Void clusterJedisTask(JedisCluster jedisCluster) {
jedisCluster.hset("player:" + event.getPlayer().getUniqueId().toString(), "server", event.getServer().getServerInfo().getName());
jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
event.getPlayer().getUniqueId(), plugin.getApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.SERVER_CHANGE,
new AbstractDataManager.ServerChangePayload(event.getServer().getServerInfo().getName(), currentServer))));
jedisCluster.hset("player:" + event.getPlayer().getUniqueId().toString(), "server", currentServer);
PayloadUtils.playerServerChangePayload(event.getPlayer().getUniqueId(), jedisCluster, currentServer, oldServer);
return null;
}
});

View File

@@ -23,6 +23,7 @@ import com.imaginarycode.minecraft.redisbungee.api.util.uuid.UUIDTranslator;
import com.imaginarycode.minecraft.redisbungee.commands.RedisBungeeCommands;
import com.imaginarycode.minecraft.redisbungee.events.PlayerChangedServerNetworkEvent;
import com.imaginarycode.minecraft.redisbungee.events.PlayerJoinedNetworkEvent;
import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent;
import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent;
import com.squareup.okhttp.Dispatcher;
import com.squareup.okhttp.OkHttpClient;
@@ -694,7 +695,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (!laggedPlayers.isEmpty()) {
getLogger().info("Cleaning up lagged proxy {} ({} players)...", s, laggedPlayers.size());
for (String laggedPlayer : laggedPlayers) {
PayloadUtils.cleanUpPlayer(laggedPlayer, jedis);
GenericPlayerUtils.cleanUpPlayer(laggedPlayer, jedis);
}
}
}
@@ -715,7 +716,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
}
}
if (!found) {
PayloadUtils.cleanUpPlayer(member, jedis);
GenericPlayerUtils.cleanUpPlayer(member, jedis);
getLogger().warn("Player found in set that was not found locally and globally: {}", member);
} else {
jedis.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
@@ -733,7 +734,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (playerProxied == null)
continue; // We'll deal with it later.
PlayerUtils.createPlayer(playerProxied, pipeline, true);
VelocityPlayerUtils.createPlayer(playerProxied, pipeline, true);
}
pipeline.sync();
@@ -757,7 +758,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (!laggedPlayers.isEmpty()) {
getLogger().info("Cleaning up lagged proxy {} ({} players)...", s, laggedPlayers.size());
for (String laggedPlayer : laggedPlayers) {
PayloadUtils.cleanUpPlayer(laggedPlayer, jedisCluster);
GenericPlayerUtils.cleanUpPlayer(laggedPlayer, jedisCluster);
}
}
}
@@ -778,7 +779,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
}
}
if (!found) {
PayloadUtils.cleanUpPlayer(member, jedisCluster);
GenericPlayerUtils.cleanUpPlayer(member, jedisCluster);
getLogger().warn("Player found in set that was not found locally and globally: {}", member);
} else {
jedisCluster.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
@@ -794,7 +795,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (playerProxied == null)
continue; // We'll deal with it later.
PlayerUtils.createPlayer(playerProxied, jedisCluster, true);
VelocityPlayerUtils.createPlayer(playerProxied, jedisCluster, true);
}
} catch (Throwable e) {
getLogger().error("Unable to fix up stored player data", e);
@@ -841,7 +842,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (jedis.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
Set<String> players = jedis.smembers("proxy:" + configuration.getProxyId() + ":usersOnline");
for (String member : players)
PayloadUtils.cleanUpPlayer(member, jedis);
GenericPlayerUtils.cleanUpPlayer(member, jedis);
}
return null;
}
@@ -852,7 +853,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
if (jedisCluster.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
Set<String> players = jedisCluster.smembers("proxy:" + configuration.getProxyId() + ":usersOnline");
for (String member : players)
PayloadUtils.cleanUpPlayer(member, jedisCluster);
GenericPlayerUtils.cleanUpPlayer(member, jedisCluster);
}
return null;
}
@@ -961,13 +962,13 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
new RedisTask<Void>(api) {
@Override
public Void jedisTask(Jedis jedis) {
PayloadUtils.kickPlayer(playerUniqueId, message, jedis);
PayloadUtils.kickPlayerPayload(playerUniqueId, message, jedis);
return null;
}
@Override
public Void clusterJedisTask(JedisCluster jedisCluster) {
PayloadUtils.kickPlayer(playerUniqueId, message, jedisCluster);
PayloadUtils.kickPlayerPayload(playerUniqueId, message, jedisCluster);
return null;
}
}.execute();
@@ -1003,26 +1004,25 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player> {
@Override
public Class<?> getPubSubEventClass() {
return PubSubMessageEvent.class;
public Object createPlayerChangedNetworkEvent(UUID uuid, String previousServer, String server) {
return new PlayerChangedServerNetworkEvent(uuid, previousServer, server);
}
@Override
public Class<?> getNetworkJoinEventClass() {
return PlayerJoinedNetworkEvent.class;
public Object createPlayerJoinedNetworkEvent(UUID uuid) {
return new PlayerJoinedNetworkEvent(uuid);
}
@Override
public Class<?> getServerChangeEventClass() {
return PlayerChangedServerNetworkEvent.class;
public Object createPlayerLeftNetworkEvent(UUID uuid) {
return new PlayerLeftNetworkEvent(uuid);
}
@Override
public Class<?> getNetworkQuitEventClass() {
return PlayerJoinedNetworkEvent.class;
public Object createPubSubEvent(String channel, String message) {
return new PubSubMessageEvent(channel, message);
}
public ProxyServer getProxy() {
return server;
}

View File

@@ -1,7 +1,5 @@
package com.imaginarycode.minecraft.redisbungee;
import com.google.gson.Gson;
import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ServerConnection;
import redis.clients.jedis.JedisCluster;
@@ -11,8 +9,9 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class PlayerUtils {
private static final Gson gson = new Gson();
import static com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils.playerJoinPayload;
public class VelocityPlayerUtils {
protected static void createPlayer(Player player, Pipeline pipeline, boolean fireEvent) {
Optional<ServerConnection> server = player.getCurrentServer();
@@ -27,9 +26,7 @@ public class PlayerUtils {
pipeline.hmset("player:" + player.getUniqueId().toString(), playerData);
if (fireEvent) {
pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
player.getUniqueId(), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
new AbstractDataManager.LoginPayload(player.getRemoteAddress().getAddress()))));
playerJoinPayload(player.getUniqueId(), pipeline, player.getRemoteAddress().getAddress());
}
}
@@ -46,9 +43,7 @@ public class PlayerUtils {
jedisCluster.hmset("player:" + player.getUniqueId().toString(), playerData);
if (fireEvent) {
jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
player.getUniqueId(), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
new AbstractDataManager.LoginPayload(player.getRemoteAddress().getAddress()))));
playerJoinPayload(player.getUniqueId(), jedisCluster, player.getRemoteAddress().getAddress());
}
}
}