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:
@@ -1,7 +1,6 @@
|
||||
package com.imaginarycode.minecraft.redisbungee;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.AbstractDataManager;
|
||||
import net.md_5.bungee.api.connection.PendingConnection;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import redis.clients.jedis.JedisCluster;
|
||||
@@ -10,17 +9,17 @@ import redis.clients.jedis.Pipeline;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PlayerUtils {
|
||||
import static com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils.playerJoinPayload;
|
||||
|
||||
private static final Gson gson = new Gson();
|
||||
public class BungeePlayerUtils {
|
||||
|
||||
protected static void createPlayer(ProxiedPlayer player, Pipeline pipeline, boolean fireEvent) {
|
||||
public static void createPlayer(ProxiedPlayer player, Pipeline pipeline, boolean fireEvent) {
|
||||
createPlayer(player.getPendingConnection(), pipeline, fireEvent);
|
||||
if (player.getServer() != null)
|
||||
pipeline.hset("player:" + player.getUniqueId().toString(), "server", player.getServer().getInfo().getName());
|
||||
}
|
||||
|
||||
protected static void createPlayer(PendingConnection connection, Pipeline pipeline, boolean fireEvent) {
|
||||
public static void createPlayer(PendingConnection connection, Pipeline pipeline, boolean fireEvent) {
|
||||
Map<String, String> playerData = new HashMap<>(4);
|
||||
playerData.put("online", "0");
|
||||
playerData.put("ip", connection.getAddress().getAddress().getHostAddress());
|
||||
@@ -30,19 +29,17 @@ public class PlayerUtils {
|
||||
pipeline.hmset("player:" + connection.getUniqueId().toString(), playerData);
|
||||
|
||||
if (fireEvent) {
|
||||
pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
|
||||
connection.getUniqueId(), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
|
||||
new AbstractDataManager.LoginPayload(connection.getAddress().getAddress()))));
|
||||
playerJoinPayload(connection.getUniqueId(), pipeline, connection.getAddress().getAddress());
|
||||
}
|
||||
}
|
||||
|
||||
protected static void createPlayer(ProxiedPlayer player, JedisCluster jedisCluster, boolean fireEvent) {
|
||||
public static void createPlayer(ProxiedPlayer player, JedisCluster jedisCluster, boolean fireEvent) {
|
||||
createPlayer(player.getPendingConnection(), jedisCluster, fireEvent);
|
||||
if (player.getServer() != null)
|
||||
jedisCluster.hset("player:" + player.getUniqueId().toString(), "server", player.getServer().getInfo().getName());
|
||||
}
|
||||
|
||||
protected static void createPlayer(PendingConnection connection, JedisCluster jedisCluster, boolean fireEvent) {
|
||||
public static void createPlayer(PendingConnection connection, JedisCluster jedisCluster, boolean fireEvent) {
|
||||
Map<String, String> playerData = new HashMap<>(4);
|
||||
playerData.put("online", "0");
|
||||
playerData.put("ip", connection.getAddress().getAddress().getHostAddress());
|
||||
@@ -52,9 +49,7 @@ public class PlayerUtils {
|
||||
jedisCluster.hmset("player:" + connection.getUniqueId().toString(), playerData);
|
||||
|
||||
if (fireEvent) {
|
||||
jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
|
||||
connection.getUniqueId(), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
|
||||
new AbstractDataManager.LoginPayload(connection.getAddress().getAddress()))));
|
||||
playerJoinPayload(connection.getUniqueId(), jedisCluster, connection.getAddress().getAddress());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -120,30 +121,18 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
// which will register the player into the redis database.
|
||||
Pipeline pipeline = jedis.pipelined();
|
||||
plugin.getUuidTranslator().persistInfo(event.getPlayer().getName(), event.getPlayer().getUniqueId(), pipeline);
|
||||
PlayerUtils.createPlayer(event.getPlayer(), pipeline, false);
|
||||
BungeePlayerUtils.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().getAddress().getAddress()))));
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void clusterJedisTask(JedisCluster jedisCluster) {
|
||||
// this code was moved out from login event due being async..
|
||||
// and it can be cancelled but it will show as false in redis-bungee
|
||||
// which will register the player into the redis database.
|
||||
|
||||
// due no support to pipeline in jedis cluster just use the instance instead.
|
||||
plugin.getUuidTranslator().persistInfo(event.getPlayer().getName(), 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().getAddress().getAddress()))));
|
||||
BungeePlayerUtils.createPlayer(event.getPlayer(), jedisCluster, true);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
@@ -158,7 +147,7 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
@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;
|
||||
}
|
||||
@@ -166,7 +155,7 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
@Override
|
||||
public Void clusterJedisTask(JedisCluster jedisCluster) {
|
||||
// Due some reason JedisCluster does not support pipeline, use instance instead
|
||||
PayloadUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
|
||||
GenericPlayerUtils.cleanUpPlayer(event.getPlayer().getUniqueId().toString(), jedisCluster);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
@@ -177,22 +166,19 @@ public class RedisBungeeBungeeListener extends AbstractRedisBungeeListener<Login
|
||||
@EventHandler
|
||||
public void onServerChange(ServerConnectedEvent event) {
|
||||
final String currentServer = event.getPlayer().getServer() == null ? null : event.getPlayer().getServer().getInfo().getName();
|
||||
final String oldServer = event.getPlayer().getServer() == null ? null : event.getPlayer().getServer().getInfo().getName();
|
||||
plugin.executeAsync(new RedisTask<Void>(plugin) {
|
||||
@Override
|
||||
public Void jedisTask(Jedis jedis) {
|
||||
jedis.hset("player:" + event.getPlayer().getUniqueId().toString(), "server", event.getServer().getInfo().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().getInfo().getName(), 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().getInfo().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().getInfo().getName(), currentServer))));
|
||||
PayloadUtils.playerServerChangePayload(event.getPlayer().getUniqueId(), jedisCluster, currentServer, oldServer);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils;
|
||||
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.imaginarycode.minecraft.redisbungee.api.*;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner;
|
||||
@@ -665,7 +666,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (!laggedPlayers.isEmpty()) {
|
||||
getLogger().info("Cleaning up lagged proxy " + s + " (" + laggedPlayers.size() + " players)...");
|
||||
for (String laggedPlayer : laggedPlayers) {
|
||||
PayloadUtils.cleanUpPlayer(laggedPlayer, jedis);
|
||||
GenericPlayerUtils.cleanUpPlayer(laggedPlayer, jedis);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -686,7 +687,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
PayloadUtils.cleanUpPlayer(member, jedis);
|
||||
GenericPlayerUtils.cleanUpPlayer(member, jedis);
|
||||
getLogger().warning("Player found in set that was not found locally and globally: " + member);
|
||||
} else {
|
||||
jedis.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
|
||||
@@ -704,7 +705,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (proxiedPlayer == null)
|
||||
continue; // We'll deal with it later.
|
||||
|
||||
PlayerUtils.createPlayer(proxiedPlayer, pipeline, true);
|
||||
BungeePlayerUtils.createPlayer(proxiedPlayer, pipeline, true);
|
||||
}
|
||||
|
||||
pipeline.sync();
|
||||
@@ -728,7 +729,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (!laggedPlayers.isEmpty()) {
|
||||
getLogger().info("Cleaning up lagged proxy " + s + " (" + laggedPlayers.size() + " players)...");
|
||||
for (String laggedPlayer : laggedPlayers) {
|
||||
PayloadUtils.cleanUpPlayer(laggedPlayer, jedisCluster);
|
||||
GenericPlayerUtils.cleanUpPlayer(laggedPlayer, jedisCluster);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -749,7 +750,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
PayloadUtils.cleanUpPlayer(member, jedisCluster);
|
||||
GenericPlayerUtils.cleanUpPlayer(member, jedisCluster);
|
||||
getLogger().warning("Player found in set that was not found locally and globally: " + member);
|
||||
} else {
|
||||
jedisCluster.srem("proxy:" + configuration.getProxyId() + ":usersOnline", member);
|
||||
@@ -767,7 +768,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
if (proxiedPlayer == null)
|
||||
continue; // We'll deal with it later.
|
||||
|
||||
PlayerUtils.createPlayer(proxiedPlayer, jedisCluster, true);
|
||||
BungeePlayerUtils.createPlayer(proxiedPlayer, jedisCluster, true);
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
@@ -818,7 +819,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
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;
|
||||
}
|
||||
@@ -829,7 +830,7 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
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;
|
||||
}
|
||||
@@ -923,13 +924,13 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
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();
|
||||
@@ -964,24 +965,22 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user