diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/AbstractDataManager.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/AbstractDataManager.java
index 61fe40e..8b80ccc 100644
--- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/AbstractDataManager.java
+++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/AbstractDataManager.java
@@ -190,20 +190,14 @@ public abstract class AbstractDataManager
{
switch (action) {
case JOIN:
- final DataManagerMessage message1 = gson.fromJson(jsonObject, new TypeToken>() {}.getType());
+ final DataManagerMessage message1 = gson.fromJson(jsonObject, new TypeToken>() {
+ }.getType());
proxyCache.put(message1.getTarget(), message1.getSource());
lastOnlineCache.put(message1.getTarget(), (long) 0);
ipCache.put(message1.getTarget(), message1.getPayload().getAddress());
plugin.executeAsync(() -> {
- Object event;
- try {
- event = plugin.getNetworkJoinEventClass().getDeclaredConstructor(UUID.class).newInstance(message1.getTarget());
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- NoSuchMethodException e) {
- throw new RuntimeException("unable to dispatch an network join event", e);
- }
+ Object event = plugin.createPlayerJoinedNetworkEvent(message1.getTarget());
plugin.callEvent(event);
-
});
break;
case LEAVE:
@@ -212,32 +206,22 @@ public abstract class AbstractDataManager {
invalidate(message2.getTarget());
lastOnlineCache.put(message2.getTarget(), message2.getPayload().getTimestamp());
plugin.executeAsync(() -> {
- Object event;
- try {
- event = plugin.getNetworkQuitEventClass().getDeclaredConstructor(UUID.class).newInstance(message2.getTarget());
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- NoSuchMethodException e) {
- throw new RuntimeException("unable to dispatch an network quit event", e);
- }
+ Object event = plugin.createPlayerLeftNetworkEvent(message2.getTarget());
plugin.callEvent(event);
});
break;
case SERVER_CHANGE:
- final DataManagerMessage message3 = gson.fromJson(jsonObject, new TypeToken>() {}.getType());
+ final DataManagerMessage message3 = gson.fromJson(jsonObject, new TypeToken>() {
+ }.getType());
serverCache.put(message3.getTarget(), message3.getPayload().getServer());
plugin.executeAsync(() -> {
- Object event;
- try {
- event = plugin.getServerChangeEventClass().getDeclaredConstructor(UUID.class, String.class, String.class).newInstance(message3.getTarget(), ((ServerChangePayload) message3.getPayload()).getOldServer(), ((ServerChangePayload) message3.getPayload()).getServer());
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
- NoSuchMethodException e) {
- throw new RuntimeException("unable to dispatch an server change event", e);
- }
+ Object event = plugin.createPlayerChangedNetworkEvent(message3.getTarget(), message3.getPayload().getOldServer(), message3.getPayload().getServer());
plugin.callEvent(event);
});
break;
case KICK:
- final DataManagerMessage kickPayload = gson.fromJson(jsonObject, new TypeToken>() {}.getType());
+ final DataManagerMessage kickPayload = gson.fromJson(jsonObject, new TypeToken>() {
+ }.getType());
plugin.executeAsync(() -> handleKick(kickPayload.target, kickPayload.payload.message));
break;
@@ -281,7 +265,8 @@ public abstract class AbstractDataManager {
}
}
- public static abstract class Payload {}
+ public static abstract class Payload {
+ }
public static class KickPayload extends Payload {
@@ -296,7 +281,7 @@ public abstract class AbstractDataManager
{
}
}
- public static class LoginPayload extends Payload{
+ public static class LoginPayload extends Payload {
private final InetAddress address;
public LoginPayload(InetAddress address) {
@@ -308,7 +293,7 @@ public abstract class AbstractDataManager
{
}
}
- public static class ServerChangePayload extends Payload{
+ public static class ServerChangePayload extends Payload {
private final String server;
private final String oldServer;
@@ -327,7 +312,7 @@ public abstract class AbstractDataManager
{
}
- public static class LogoutPayload extends Payload{
+ public static class LogoutPayload extends Payload {
private final long timestamp;
public LogoutPayload(long timestamp) {
diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/EventsPlatform.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/EventsPlatform.java
index 5d99686..8f89847 100644
--- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/EventsPlatform.java
+++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/EventsPlatform.java
@@ -1,5 +1,7 @@
package com.imaginarycode.minecraft.redisbungee.api;
+import java.util.UUID;
+
/**
* Since each platform have their own events' implementation for example Bungeecord events extends Event while velocity don't
*
@@ -9,12 +11,13 @@ package com.imaginarycode.minecraft.redisbungee.api;
*/
public interface EventsPlatform {
- Class> getPubSubEventClass();
+ Object createPlayerChangedNetworkEvent(UUID uuid, String previousServer, String server);
- Class> getNetworkJoinEventClass();
+ Object createPlayerJoinedNetworkEvent(UUID uuid);
- Class> getServerChangeEventClass();
+ Object createPlayerLeftNetworkEvent(UUID uuid);
+
+ Object createPubSubEvent(String channel, String message);
- Class> getNetworkQuitEventClass();
}
diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/GenericPlayerUtils.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/GenericPlayerUtils.java
new file mode 100644
index 0000000..c44a2e9
--- /dev/null
+++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/GenericPlayerUtils.java
@@ -0,0 +1,40 @@
+package com.imaginarycode.minecraft.redisbungee.api;
+
+import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisCluster;
+import redis.clients.jedis.Pipeline;
+
+import static com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils.playerQuitPayload;
+
+public class GenericPlayerUtils {
+
+
+ public static void cleanUpPlayer(String uuid, Jedis rsc) {
+ rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
+ rsc.hdel("player:" + uuid, "server", "ip", "proxy");
+ long timestamp = System.currentTimeMillis();
+ rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
+ playerQuitPayload(uuid, rsc, timestamp);
+ }
+
+ public static void cleanUpPlayer(String uuid, Pipeline rsc) {
+ rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
+ rsc.hdel("player:" + uuid, "server", "ip", "proxy");
+ long timestamp = System.currentTimeMillis();
+ rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
+ playerQuitPayload(uuid, rsc, timestamp);
+
+ }
+
+ public static void cleanUpPlayer(String uuid, JedisCluster rsc) {
+ rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
+ rsc.hdel("player:" + uuid, "server", "ip", "proxy");
+ long timestamp = System.currentTimeMillis();
+ rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
+ playerQuitPayload(uuid, rsc, timestamp);
+
+ }
+
+
+}
diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/JedisPubSubHandler.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/JedisPubSubHandler.java
index 0442b90..77e048c 100644
--- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/JedisPubSubHandler.java
+++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/JedisPubSubHandler.java
@@ -9,10 +9,9 @@ import java.lang.reflect.InvocationTargetException;
public class JedisPubSubHandler extends JedisPubSub {
private final RedisBungeePlugin> plugin;
- private final Class> eventClass;
+
public JedisPubSubHandler(RedisBungeePlugin> plugin) {
this.plugin = plugin;
- this.eventClass = plugin.getPubSubEventClass();
}
@Override
@@ -21,12 +20,7 @@ public class JedisPubSubHandler extends JedisPubSub {
plugin.executeAsync(new Runnable() {
@Override
public void run() {
- Object event;
- try {
- event = eventClass.getDeclaredConstructor(String.class, String.class).newInstance(s, s2);
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- throw new RuntimeException("unable to dispatch an pubsub event", e);
- }
+ Object event = plugin.createPubSubEvent(s, s2);
plugin.callEvent(event);
}
});
diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/payload/PayloadUtils.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/payload/PayloadUtils.java
index 4f66c44..9842c34 100644
--- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/payload/PayloadUtils.java
+++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/payload/PayloadUtils.java
@@ -7,54 +7,81 @@ import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.Pipeline;
+import java.net.InetAddress;
import java.util.UUID;
public class PayloadUtils {
private static final Gson gson = new Gson();
- public static void cleanUpPlayer(String uuid, Jedis rsc) {
- rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
- rsc.hdel("player:" + uuid, "server", "ip", "proxy");
- long timestamp = System.currentTimeMillis();
- rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
- rsc.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ public static void playerJoinPayload(UUID uuid, Pipeline pipeline, InetAddress inetAddress) {
+ pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
+ new AbstractDataManager.LoginPayload(inetAddress))));
+ }
+ public static void playerJoinPayload(UUID uuid, JedisCluster jedisCluster, InetAddress inetAddress) {
+ jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
+ new AbstractDataManager.LoginPayload(inetAddress))));
+ }
+ public static void playerJoinPayload(UUID uuid, Jedis jedis, InetAddress inetAddress) {
+ jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.JOIN,
+ new AbstractDataManager.LoginPayload(inetAddress))));
+ }
+
+
+
+ public static void playerQuitPayload(String uuid, Jedis jedis, long timestamp) {
+ jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
UUID.fromString(uuid), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.LEAVE,
new AbstractDataManager.LogoutPayload(timestamp))));
}
- public static void cleanUpPlayer(String uuid, Pipeline rsc) {
- rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
- rsc.hdel("player:" + uuid, "server", "ip", "proxy");
- long timestamp = System.currentTimeMillis();
- rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
- rsc.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+
+ public static void playerQuitPayload(String uuid, JedisCluster jedisCluster, long timestamp) {
+ jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
UUID.fromString(uuid), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.LEAVE,
new AbstractDataManager.LogoutPayload(timestamp))));
}
- public static void cleanUpPlayer(String uuid, JedisCluster rsc) {
- rsc.srem("proxy:" + RedisBungeeAPI.getRedisBungeeApi().getProxyId() + ":usersOnline", uuid);
- rsc.hdel("player:" + uuid, "server", "ip", "proxy");
- long timestamp = System.currentTimeMillis();
- rsc.hset("player:" + uuid, "online", String.valueOf(timestamp));
- rsc.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ public static void playerQuitPayload(String uuid, Pipeline pipeline, long timestamp) {
+ pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
UUID.fromString(uuid), RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.LEAVE,
new AbstractDataManager.LogoutPayload(timestamp))));
}
- public static void kickPlayer(UUID uuid, String message, Pipeline pipeline) {
+
+ public static void playerServerChangePayload(UUID uuid, Jedis jedis, String newServer, String oldServer) {
+ jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.SERVER_CHANGE,
+ new AbstractDataManager.ServerChangePayload(newServer, oldServer))));
+ }
+
+ public static void playerServerChangePayload(UUID uuid, Pipeline pipeline, String newServer, String oldServer) {
+ pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.SERVER_CHANGE,
+ new AbstractDataManager.ServerChangePayload(newServer, oldServer))));
+ }
+ public static void playerServerChangePayload(UUID uuid, JedisCluster jedisCluster, String newServer, String oldServer) {
+ jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
+ uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.SERVER_CHANGE,
+ new AbstractDataManager.ServerChangePayload(newServer, oldServer))));
+ }
+
+
+ public static void kickPlayerPayload(UUID uuid, String message, Pipeline pipeline) {
pipeline.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.KICK,
new AbstractDataManager.KickPayload(message))));
}
- public static void kickPlayer(UUID uuid, String message, Jedis jedis) {
+ public static void kickPlayerPayload(UUID uuid, String message, Jedis jedis) {
jedis.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.KICK,
new AbstractDataManager.KickPayload(message))));
}
- public static void kickPlayer(UUID uuid, String message, JedisCluster jedisCluster) {
+ public static void kickPlayerPayload(UUID uuid, String message, JedisCluster jedisCluster) {
jedisCluster.publish("redisbungee-data", gson.toJson(new AbstractDataManager.DataManagerMessage<>(
uuid, RedisBungeeAPI.getRedisBungeeApi().getProxyId(), AbstractDataManager.DataManagerMessage.Action.KICK,
new AbstractDataManager.KickPayload(message))));
diff --git a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerUtils.java
similarity index 59%
rename from RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java
rename to RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerUtils.java
index 63d038a..6ee3038 100644
--- a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java
+++ b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/BungeePlayerUtils.java
@@ -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 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 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());
}
}
diff --git a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeeListener.java b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeeListener.java
index c5a4554..68e4625 100644
--- a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeeListener.java
+++ b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeeListener.java
@@ -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(
- 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(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;
}
});
diff --git a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java
index fd838e7..25f3fc9 100644
--- a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java
+++ b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java
@@ -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 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 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(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);
}
-
-
}
diff --git a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityListener.java b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityListener.java
index 0fd7c5f..c28f9c6 100644
--- a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityListener.java
+++ b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityListener.java
@@ -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(
- 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 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(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;
}
});
diff --git a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java
index bde8447..36fbbde 100644
--- a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java
+++ b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java
@@ -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 {
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 {
}
}
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 {
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 {
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 {
}
}
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 {
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 {
if (jedis.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
Set 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 {
if (jedisCluster.scard("proxy:" + configuration.getProxyId() + ":usersOnline") > 0) {
Set 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 {
new RedisTask(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 {
@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;
}
diff --git a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerUtils.java
similarity index 69%
rename from RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java
rename to RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerUtils.java
index 0a86e27..d297034 100644
--- a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/PlayerUtils.java
+++ b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/VelocityPlayerUtils.java
@@ -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 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());
}
}
}