diff --git a/pom.xml b/pom.xml
index 1f319cf..066aab9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.imaginarycode.minecraft
RedisBungee
- 0.4
+ 0.5
diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
index 4060754..9232994 100644
--- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
+++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
@@ -368,6 +368,7 @@ public void run() {
}
}, 0, 1, TimeUnit.MINUTES);
}
+ getProxy().registerChannel("legacy:RedisBungee");
getProxy().registerChannel("RedisBungee");
}
@@ -501,13 +502,18 @@ public Void call() throws Exception {
class PubSubListener implements Runnable {
private JedisPubSubHandler jpsh;
+ private Set addedChannels = new HashSet();
+
@Override
public void run() {
boolean broken = false;
try (Jedis rsc = pool.getResource()) {
try {
jpsh = new JedisPubSubHandler();
- rsc.subscribe(jpsh, "redisbungee-" + configuration.getServerId(), "redisbungee-allservers", "redisbungee-data");
+ addedChannels.add("redisbungee-" + configuration.getServerId());
+ addedChannels.add("redisbungee-allservers");
+ addedChannels.add("redisbungee-data");
+ rsc.subscribe(jpsh, addedChannels.toArray(new String[0]));
} catch (Exception e) {
// FIXME: Extremely ugly hack
// Attempt to unsubscribe this instance and try again.
@@ -522,6 +528,9 @@ public void run() {
}
broken = true;
}
+ } catch (JedisConnectionException e) {
+ getLogger().log(Level.INFO, "PubSub error, attempting to recover in 5 secs.");
+ getProxy().getScheduler().schedule(RedisBungee.this, PubSubListener.this, 5, TimeUnit.SECONDS);
}
if (broken) {
@@ -530,14 +539,17 @@ public void run() {
}
public void addChannel(String... channel) {
+ addedChannels.addAll(Arrays.asList(channel));
jpsh.subscribe(channel);
}
public void removeChannel(String... channel) {
+ addedChannels.removeAll(Arrays.asList(channel));
jpsh.unsubscribe(channel);
}
public void poison() {
+ addedChannels.clear();
jpsh.unsubscribe();
}
}
diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java
index c99eab5..40298b9 100644
--- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java
+++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java
@@ -148,7 +148,8 @@ public void onPing(final ProxyPingEvent event) {
@EventHandler
public void onPluginMessage(final PluginMessageEvent event) {
- if (event.getTag().equals("RedisBungee") && event.getSender() instanceof Server) {
+ if ((event.getTag().equals("legacy:RedisBungee") || event.getTag().equals("RedisBungee")) && event.getSender() instanceof Server) {
+ final String currentChannel = event.getTag();
final byte[] data = Arrays.copyOf(event.getData(), event.getData().length);
plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
@Override
@@ -244,7 +245,7 @@ public void run() {
return;
}
- ((Server) event.getSender()).sendData("RedisBungee", out.toByteArray());
+ ((Server) event.getSender()).sendData(currentChannel, out.toByteArray());
}
});
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index a5630e1..076e980 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: RedisBungee
main: com.imaginarycode.minecraft.redisbungee.RedisBungee
-version: 0.3.10
-author: tuxed
-# This is used so that we can automagically override default BungeeCord behavior.
+version: 0.5
+author: chunkr
+# This is used so that we can automatically override default BungeeCord behavior.
softDepends: ["cmd_find", "cmd_list"]
\ No newline at end of file