From 345ceac4b78bfc4227f80558b2c44f166ce7fffd Mon Sep 17 00:00:00 2001 From: Tux Date: Fri, 8 Nov 2013 18:19:01 -0500 Subject: [PATCH] Rewrite the initial join server logic as a while loop, do actual bump to 0.2.3 and add /find support. --- pom.xml | 7 ++- .../minecraft/redisbungee/RedisBungee.java | 53 +++++++++++++++---- src/main/resources/plugin.yml | 2 +- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index b907a78..9aa0fd6 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,7 @@ shade + true redis.clients:jedis @@ -55,9 +56,13 @@ - redis.clients + redis.clients.jedis com.imaginarycode.minecraft.redisbungee.internal.jedis + + redis.clients.util + com.imaginarycode.minecraft.redisbungee.internal.jedisutil + org.apache.commons.pool com.imaginarycode.minecraft.redisbungee.internal.commonspool diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java index 3ab60e7..5319384 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java @@ -27,6 +27,7 @@ import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.*; +import java.lang.ref.WeakReference; import java.util.*; import java.util.concurrent.TimeUnit; @@ -176,10 +177,11 @@ public class RedisBungee extends Plugin implements Listener { getProxy().getPluginManager().registerCommand(this, new Command("glist", "bungeecord.command.glist", "redisbungee") { @Override public void execute(CommandSender sender, String[] args) { - sender.sendMessage(ChatColor.YELLOW + String.valueOf(getCount()) + " player(s) are currently online."); + int count = getCount(); if (args.length > 0 && args[0].equals("showall")) { if (canonicalGlist) { - Multimap serverToPlayers = HashMultimap.create(getProxy().getServers().size(), getCount()); + int avgPlayers = count / getProxy().getServers().size(); + Multimap serverToPlayers = HashMultimap.create(getProxy().getServers().size(), avgPlayers); for (String p : getPlayers()) { ServerInfo si = getServerFor(p); if (si != null) @@ -195,11 +197,28 @@ public class RedisBungee extends Plugin implements Listener { } else { sender.sendMessage(ChatColor.YELLOW + "Players: " + Joiner.on(", ").join(getPlayers())); } + sender.sendMessage(ChatColor.YELLOW + String.valueOf(count) + " player(s) are currently online."); } else { + sender.sendMessage(ChatColor.YELLOW + String.valueOf(count) + " player(s) are currently online."); sender.sendMessage(ChatColor.YELLOW + "To see all players online, use /glist showall."); } } }); + getProxy().getPluginManager().registerCommand(this, new Command("find", "bungeecord.command.find") { + @Override + public void execute(CommandSender sender, String[] args) { + if (args.length > 0) { + ServerInfo si = getServerFor(args[0]); + if (si != null) { + sender.sendMessage(ChatColor.BLUE + args[0] + " is on " + si.getName() + "."); + } else { + sender.sendMessage(ChatColor.RED + "That user is not online."); + } + } else { + sender.sendMessage(ChatColor.RED + "You must specify a player name."); + } + } + }); getProxy().getPluginManager().registerListener(this, this); } } @@ -240,7 +259,7 @@ public class RedisBungee extends Plugin implements Listener { } Yaml yaml = new Yaml(); - Map rawYaml; + Map rawYaml; try (InputStream in = new FileInputStream(file)) { rawYaml = (Map) yaml.load(in); @@ -286,17 +305,31 @@ public class RedisBungee extends Plugin implements Listener { } finally { pool.returnResource(rsc); } - getProxy().getScheduler().schedule(this, new Runnable() { + final WeakReference player = new WeakReference<>(event.getPlayer()); + getProxy().getScheduler().runAsync(this, new Runnable() { @Override public void run() { - Jedis rsc = pool.getResource(); - try { - rsc.hset("player:" + event.getPlayer().getName(), "server", event.getPlayer().getServer().getInfo().getName()); - } finally { - pool.returnResource(rsc); + while (true) { + ProxiedPlayer pp = player.get(); + if (pp == null) + break; + + if (pp.getServer() != null) { + Jedis rsc = pool.getResource(); + try { + rsc.hset("player:" + event.getPlayer().getName(), "server", event.getPlayer().getServer().getInfo().getName()); + } finally { + pool.returnResource(rsc); + } + break; + } + try { + Thread.sleep(150); + } catch (InterruptedException ignored) { + } } } - }, 1750, TimeUnit.MILLISECONDS); + }); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e75871f..d9a52fb 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,4 +1,4 @@ name: RedisBungee main: com.imaginarycode.minecraft.redisbungee.RedisBungee -version: 0.2.1 +version: 0.2.3 author: tuxed \ No newline at end of file