mirror of
				https://github.com/proxiodev/RedisBungee.git
				synced 2025-11-04 09:38:03 +00:00 
			
		
		
		
	phase 1
This commit is contained in:
		
							parent
							
								
									aeeb38f3c8
								
							
						
					
					
						commit
						4757a49bdc
					
				@ -33,6 +33,7 @@ import java.util.logging.Level;
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @since 0.3.3
 | 
					 * @since 0.3.3
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					@SuppressWarnings({"u", "deprecation"})
 | 
				
			||||||
public class DataManager implements Listener {
 | 
					public class DataManager implements Listener {
 | 
				
			||||||
    private final RedisBungee plugin;
 | 
					    private final RedisBungee plugin;
 | 
				
			||||||
    private final Cache<UUID, String> serverCache = createCache();
 | 
					    private final Cache<UUID, String> serverCache = createCache();
 | 
				
			||||||
@ -61,13 +62,10 @@ public class DataManager implements Listener {
 | 
				
			|||||||
            return player.getServer() != null ? player.getServer().getInfo().getName() : null;
 | 
					            return player.getServer() != null ? player.getServer().getInfo().getName() : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return serverCache.get(uuid, new Callable<String>() {
 | 
					            return serverCache.get(uuid, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public String call() throws Exception {
 | 
					 | 
				
			||||||
                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
					                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
				
			||||||
                    return Objects.requireNonNull(tmpRsc.hget("player:" + uuid, "server"), "user not found");
 | 
					                    return Objects.requireNonNull(tmpRsc.hget("player:" + uuid, "server"), "user not found");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
					        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
				
			||||||
            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
					            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
				
			||||||
@ -81,16 +79,13 @@ public class DataManager implements Listener {
 | 
				
			|||||||
        ProxiedPlayer player = plugin.getProxy().getPlayer(uuid);
 | 
					        ProxiedPlayer player = plugin.getProxy().getPlayer(uuid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (player != null)
 | 
					        if (player != null)
 | 
				
			||||||
            return RedisBungee.getConfiguration().getServerId();
 | 
					            return plugin.getConfiguration().getServerId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return proxyCache.get(uuid, new Callable<String>() {
 | 
					            return proxyCache.get(uuid, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public String call() throws Exception {
 | 
					 | 
				
			||||||
                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
					                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
				
			||||||
                    return Objects.requireNonNull(tmpRsc.hget("player:" + uuid, "proxy"), "user not found");
 | 
					                    return Objects.requireNonNull(tmpRsc.hget("player:" + uuid, "proxy"), "user not found");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
					        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
				
			||||||
            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
					            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
				
			||||||
@ -107,16 +102,13 @@ public class DataManager implements Listener {
 | 
				
			|||||||
            return player.getAddress().getAddress();
 | 
					            return player.getAddress().getAddress();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return ipCache.get(uuid, new Callable<InetAddress>() {
 | 
					            return ipCache.get(uuid, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public InetAddress call() throws Exception {
 | 
					 | 
				
			||||||
                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
					                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
				
			||||||
                    String result = tmpRsc.hget("player:" + uuid, "ip");
 | 
					                    String result = tmpRsc.hget("player:" + uuid, "ip");
 | 
				
			||||||
                    if (result == null)
 | 
					                    if (result == null)
 | 
				
			||||||
                        throw new NullPointerException("user not found");
 | 
					                        throw new NullPointerException("user not found");
 | 
				
			||||||
                    return InetAddresses.forString(result);
 | 
					                    return InetAddresses.forString(result);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
					        } catch (ExecutionException | UncheckedExecutionException e) {
 | 
				
			||||||
            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
					            if (e.getCause() instanceof NullPointerException && e.getCause().getMessage().equals("user not found"))
 | 
				
			||||||
@ -133,13 +125,10 @@ public class DataManager implements Listener {
 | 
				
			|||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return lastOnlineCache.get(uuid, new Callable<Long>() {
 | 
					            return lastOnlineCache.get(uuid, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public Long call() throws Exception {
 | 
					 | 
				
			||||||
                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
					                try (Jedis tmpRsc = plugin.getPool().getResource()) {
 | 
				
			||||||
                    String result = tmpRsc.hget("player:" + uuid, "online");
 | 
					                    String result = tmpRsc.hget("player:" + uuid, "online");
 | 
				
			||||||
                        return result == null ? -1 : Long.valueOf(result);
 | 
					                    return result == null ? -1 : Long.parseLong(result);
 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        } catch (ExecutionException e) {
 | 
					        } catch (ExecutionException e) {
 | 
				
			||||||
@ -177,7 +166,7 @@ public class DataManager implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        String source = jsonObject.get("source").getAsString();
 | 
					        String source = jsonObject.get("source").getAsString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (source.equals(RedisBungee.getConfiguration().getServerId()))
 | 
					        if (source.equals(plugin.getRedisBungeeAPI().getServerId()))
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DataManagerMessage.Action action = DataManagerMessage.Action.valueOf(jsonObject.get("action").getAsString());
 | 
					        DataManagerMessage.Action action = DataManagerMessage.Action.valueOf(jsonObject.get("action").getAsString());
 | 
				
			||||||
@ -189,35 +178,20 @@ public class DataManager implements Listener {
 | 
				
			|||||||
                proxyCache.put(message1.getTarget(), message1.getSource());
 | 
					                proxyCache.put(message1.getTarget(), message1.getSource());
 | 
				
			||||||
                lastOnlineCache.put(message1.getTarget(), (long) 0);
 | 
					                lastOnlineCache.put(message1.getTarget(), (long) 0);
 | 
				
			||||||
                ipCache.put(message1.getTarget(), message1.getPayload().getAddress());
 | 
					                ipCache.put(message1.getTarget(), message1.getPayload().getAddress());
 | 
				
			||||||
                plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					                plugin.getProxy().getScheduler().runAsync(plugin, () -> plugin.getProxy().getPluginManager().callEvent(new PlayerJoinedNetworkEvent(message1.getTarget())));
 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void run() {
 | 
					 | 
				
			||||||
                        plugin.getProxy().getPluginManager().callEvent(new PlayerJoinedNetworkEvent(message1.getTarget()));
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case LEAVE:
 | 
					            case LEAVE:
 | 
				
			||||||
                final DataManagerMessage<LogoutPayload> message2 = RedisBungee.getGson().fromJson(jsonObject, new TypeToken<DataManagerMessage<LogoutPayload>>() {
 | 
					                final DataManagerMessage<LogoutPayload> message2 = RedisBungee.getGson().fromJson(jsonObject, new TypeToken<DataManagerMessage<LogoutPayload>>() {
 | 
				
			||||||
                }.getType());
 | 
					                }.getType());
 | 
				
			||||||
                invalidate(message2.getTarget());
 | 
					                invalidate(message2.getTarget());
 | 
				
			||||||
                lastOnlineCache.put(message2.getTarget(), message2.getPayload().getTimestamp());
 | 
					                lastOnlineCache.put(message2.getTarget(), message2.getPayload().getTimestamp());
 | 
				
			||||||
                plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					                plugin.getProxy().getScheduler().runAsync(plugin, () -> plugin.getProxy().getPluginManager().callEvent(new PlayerLeftNetworkEvent(message2.getTarget())));
 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void run() {
 | 
					 | 
				
			||||||
                        plugin.getProxy().getPluginManager().callEvent(new PlayerLeftNetworkEvent(message2.getTarget()));
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case SERVER_CHANGE:
 | 
					            case SERVER_CHANGE:
 | 
				
			||||||
                final DataManagerMessage<ServerChangePayload> message3 = RedisBungee.getGson().fromJson(jsonObject, new TypeToken<DataManagerMessage<ServerChangePayload>>() {
 | 
					                final DataManagerMessage<ServerChangePayload> message3 = plugin.getGson().fromJson(jsonObject, new TypeToken<DataManagerMessage<ServerChangePayload>>() {
 | 
				
			||||||
                }.getType());
 | 
					                }.getType());
 | 
				
			||||||
                serverCache.put(message3.getTarget(), message3.getPayload().getServer());
 | 
					                serverCache.put(message3.getTarget(), message3.getPayload().getServer());
 | 
				
			||||||
                plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					                plugin.getProxy().getScheduler().runAsync(plugin, () -> plugin.getProxy().getPluginManager().callEvent(new PlayerChangedServerNetworkEvent(message3.getTarget(), message3.getPayload().getOldServer(), message3.getPayload().getServer())));
 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void run() {
 | 
					 | 
				
			||||||
                        plugin.getProxy().getPluginManager().callEvent(new PlayerChangedServerNetworkEvent(message3.getTarget(), message3.getPayload().getOldServer(), message3.getPayload().getServer()));
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -40,27 +40,35 @@ import static com.google.common.base.Preconditions.checkArgument;
 | 
				
			|||||||
 * The only function of interest is {@link #getApi()}, which exposes some functions in this class.
 | 
					 * The only function of interest is {@link #getApi()}, which exposes some functions in this class.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public final class RedisBungee extends Plugin {
 | 
					public final class RedisBungee extends Plugin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private static Gson gson = new Gson();
 | 
					    private static final Gson gson = new Gson();
 | 
				
			||||||
    private static RedisBungeeAPI api;
 | 
					
 | 
				
			||||||
 | 
					    @Getter
 | 
				
			||||||
 | 
					    private RedisBungeeAPI redisBungeeAPI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter(AccessLevel.PACKAGE)
 | 
					    @Getter(AccessLevel.PACKAGE)
 | 
				
			||||||
    private static PubSubListener psl = null;
 | 
					    private PubSubListener psl = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private JedisPool pool;
 | 
					    private JedisPool pool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private UUIDTranslator uuidTranslator;
 | 
					    private UUIDTranslator uuidTranslator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter(AccessLevel.PACKAGE)
 | 
					    @Getter(AccessLevel.PACKAGE)
 | 
				
			||||||
    private static RedisBungeeConfiguration configuration;
 | 
					    private RedisBungeeConfiguration configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private DataManager dataManager;
 | 
					    private DataManager dataManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private static OkHttpClient httpClient;
 | 
					    private OkHttpClient httpClient;
 | 
				
			||||||
    private volatile List<String> serverIds;
 | 
					    private volatile List<String> serverIds;
 | 
				
			||||||
    private final AtomicInteger nagAboutServers = new AtomicInteger();
 | 
					    private final AtomicInteger nagAboutServers = new AtomicInteger();
 | 
				
			||||||
    private final AtomicInteger globalPlayerCount = new AtomicInteger();
 | 
					    private final AtomicInteger globalPlayerCount = new AtomicInteger();
 | 
				
			||||||
    private Future<?> integrityCheck;
 | 
					    private Future<?> integrityCheck;
 | 
				
			||||||
    private Future<?> heartbeatTask;
 | 
					    private Future<?> heartbeatTask;
 | 
				
			||||||
    private boolean usingLua;
 | 
					 | 
				
			||||||
    private LuaManager.Script serverToPlayersScript;
 | 
					    private LuaManager.Script serverToPlayersScript;
 | 
				
			||||||
    private LuaManager.Script getPlayerCountScript;
 | 
					    private LuaManager.Script getPlayerCountScript;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -75,10 +83,15 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
     * @return the {@link RedisBungeeAPI} object
 | 
					     * @return the {@link RedisBungeeAPI} object
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static RedisBungeeAPI getApi() {
 | 
					    public static RedisBungeeAPI getApi() {
 | 
				
			||||||
        return api;
 | 
					        return getPluginInstance().getRedisBungeeAPI();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static PubSubListener getPubSubListener() {
 | 
					    static RedisBungee getPluginInstance() {
 | 
				
			||||||
 | 
					        return ((RedisBungee) ProxyServer.getInstance().getPluginManager().getPlugin("RedisBungee"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PubSubListener getPubSubListener() {
 | 
				
			||||||
        return psl;
 | 
					        return psl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -129,12 +142,11 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("unchecked")
 | 
				
			||||||
    final Multimap<String, UUID> serversToPlayers() {
 | 
					    final Multimap<String, UUID> serversToPlayers() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            return serverToPlayersCache.get(SERVER_TO_PLAYERS_KEY, new Callable<Multimap<String, UUID>>() {
 | 
					            return serverToPlayersCache.get(SERVER_TO_PLAYERS_KEY, () -> {
 | 
				
			||||||
                @Override
 | 
					                Collection<String> data = (Collection<String>) serverToPlayersScript.eval(ImmutableList.of(), getServerIds());
 | 
				
			||||||
                public Multimap<String, UUID> call() throws Exception {
 | 
					 | 
				
			||||||
                    Collection<String> data = (Collection<String>) serverToPlayersScript.eval(ImmutableList.<String>of(), getServerIds());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ImmutableMultimap.Builder<String, UUID> builder = ImmutableMultimap.builder();
 | 
					                ImmutableMultimap.Builder<String, UUID> builder = ImmutableMultimap.builder();
 | 
				
			||||||
                String key = null;
 | 
					                String key = null;
 | 
				
			||||||
@ -149,7 +161,6 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return builder.build();
 | 
					                return builder.build();
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        } catch (ExecutionException e) {
 | 
					        } catch (ExecutionException e) {
 | 
				
			||||||
            throw new RuntimeException(e);
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
@ -161,7 +172,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final int getCurrentCount() {
 | 
					    final int getCurrentCount() {
 | 
				
			||||||
        Long count = (Long) getPlayerCountScript.eval(ImmutableList.<String>of(), ImmutableList.<String>of());
 | 
					        Long count = (Long) getPlayerCountScript.eval(ImmutableList.of(), ImmutableList.of());
 | 
				
			||||||
        return count.intValue();
 | 
					        return count.intValue();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -182,7 +193,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                    keys.add("proxy:" + i + ":usersOnline");
 | 
					                    keys.add("proxy:" + i + ":usersOnline");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (!keys.isEmpty()) {
 | 
					                if (!keys.isEmpty()) {
 | 
				
			||||||
                    Set<String> users = rsc.sunion(keys.toArray(new String[keys.size()]));
 | 
					                    Set<String> users = rsc.sunion(keys.toArray(new String[0]));
 | 
				
			||||||
                    if (users != null && !users.isEmpty()) {
 | 
					                    if (users != null && !users.isEmpty()) {
 | 
				
			||||||
                        for (String user : users) {
 | 
					                        for (String user : users) {
 | 
				
			||||||
                            try {
 | 
					                            try {
 | 
				
			||||||
@ -220,6 +231,11 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        return Long.parseLong(timeRes.get(0));
 | 
					        return Long.parseLong(timeRes.get(0));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("deprecation")
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					        Due replacing executor service is needed here and method from bungeecord api is deprecated :/
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
        ThreadFactory factory = ((ThreadPoolExecutor) getExecutorService()).getThreadFactory();
 | 
					        ThreadFactory factory = ((ThreadPoolExecutor) getExecutorService()).getThreadFactory();
 | 
				
			||||||
@ -246,15 +262,15 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                for (String s : info.split("\r\n")) {
 | 
					                for (String s : info.split("\r\n")) {
 | 
				
			||||||
                    if (s.startsWith("redis_version:")) {
 | 
					                    if (s.startsWith("redis_version:")) {
 | 
				
			||||||
                        String version = s.split(":")[1];
 | 
					                        String version = s.split(":")[1];
 | 
				
			||||||
                        getLogger().info(version + " <- redis version");
 | 
					                        if (!RedisUtil.isRedisVersionSupported((version))) {
 | 
				
			||||||
                        if (!(usingLua = RedisUtil.canUseLua(version))) {
 | 
					 | 
				
			||||||
                            getLogger().warning("Your version of Redis (" + version + ") is not at least version 6.2 RedisBungee requires a newer version of Redis.");
 | 
					                            getLogger().warning("Your version of Redis (" + version + ") is not at least version 6.2 RedisBungee requires a newer version of Redis.");
 | 
				
			||||||
                            throw new RuntimeException("Unsupported Redis version detected");
 | 
					                            throw new RuntimeException("Unsupported Redis version detected");
 | 
				
			||||||
                        } else {
 | 
					                        }
 | 
				
			||||||
 | 
					                        getLogger().info("found a supported redis version: " + version);
 | 
				
			||||||
                        LuaManager manager = new LuaManager(this);
 | 
					                        LuaManager manager = new LuaManager(this);
 | 
				
			||||||
                        serverToPlayersScript = manager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/server_to_players.lua")));
 | 
					                        serverToPlayersScript = manager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/server_to_players.lua")));
 | 
				
			||||||
                        getPlayerCountScript = manager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/get_player_count.lua")));
 | 
					                        getPlayerCountScript = manager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/get_player_count.lua")));
 | 
				
			||||||
                        }
 | 
					
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -268,9 +284,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            serverIds = getCurrentServerIds(true, false);
 | 
					            serverIds = getCurrentServerIds(true, false);
 | 
				
			||||||
            uuidTranslator = new UUIDTranslator(this);
 | 
					            uuidTranslator = new UUIDTranslator(this);
 | 
				
			||||||
            heartbeatTask = service.scheduleAtFixedRate(new Runnable() {
 | 
					            heartbeatTask = service.scheduleAtFixedRate(() -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                try (Jedis rsc = pool.getResource()) {
 | 
					                try (Jedis rsc = pool.getResource()) {
 | 
				
			||||||
                    long redisTime = getRedisTime(rsc.time());
 | 
					                    long redisTime = getRedisTime(rsc.time());
 | 
				
			||||||
                    rsc.hset("heartbeats", configuration.getServerId(), String.valueOf(redisTime));
 | 
					                    rsc.hset("heartbeats", configuration.getServerId(), String.valueOf(redisTime));
 | 
				
			||||||
@ -285,7 +299,6 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                } catch (Throwable e) {
 | 
					                } catch (Throwable e) {
 | 
				
			||||||
                    getLogger().log(Level.SEVERE, "Unable to update data - did your Redis server go away?", e);
 | 
					                    getLogger().log(Level.SEVERE, "Unable to update data - did your Redis server go away?", e);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }, 0, 3, TimeUnit.SECONDS);
 | 
					            }, 0, 3, TimeUnit.SECONDS);
 | 
				
			||||||
            dataManager = new DataManager(this);
 | 
					            dataManager = new DataManager(this);
 | 
				
			||||||
            if (configuration.isRegisterBungeeCommands()) {
 | 
					            if (configuration.isRegisterBungeeCommands()) {
 | 
				
			||||||
@ -296,18 +309,16 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.SendToAll(this));
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.SendToAll(this));
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerId(this));
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerId(this));
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerIds());
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerIds(this));
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlayerProxyCommand(this));
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlayerProxyCommand(this));
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlistCommand(this));
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlistCommand(this));
 | 
				
			||||||
            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.DebugCommand(this));
 | 
					            getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.DebugCommand(this));
 | 
				
			||||||
            api = new RedisBungeeAPI(this);
 | 
					            redisBungeeAPI = new RedisBungeeAPI(this);
 | 
				
			||||||
            getProxy().getPluginManager().registerListener(this, new RedisBungeeListener(this, configuration.getExemptAddresses()));
 | 
					            getProxy().getPluginManager().registerListener(this, new RedisBungeeListener(this, configuration.getExemptAddresses()));
 | 
				
			||||||
            getProxy().getPluginManager().registerListener(this, dataManager);
 | 
					            getProxy().getPluginManager().registerListener(this, dataManager);
 | 
				
			||||||
            psl = new PubSubListener();
 | 
					            psl = new PubSubListener();
 | 
				
			||||||
            getProxy().getScheduler().runAsync(this, psl);
 | 
					            getProxy().getScheduler().runAsync(this, psl);
 | 
				
			||||||
            integrityCheck = service.scheduleAtFixedRate(new Runnable() {
 | 
					            integrityCheck = service.scheduleAtFixedRate(() -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                try (Jedis tmpRsc = pool.getResource()) {
 | 
					                try (Jedis tmpRsc = pool.getResource()) {
 | 
				
			||||||
                    Set<String> players = getLocalPlayersAsUuidStrings();
 | 
					                    Set<String> players = getLocalPlayersAsUuidStrings();
 | 
				
			||||||
                    Set<String> playersInRedis = tmpRsc.smembers("proxy:" + configuration.getServerId() + ":usersOnline");
 | 
					                    Set<String> playersInRedis = tmpRsc.smembers("proxy:" + configuration.getServerId() + ":usersOnline");
 | 
				
			||||||
@ -366,7 +377,6 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                } catch (Throwable e) {
 | 
					                } catch (Throwable e) {
 | 
				
			||||||
                    getLogger().log(Level.SEVERE, "Unable to fix up stored player data", e);
 | 
					                    getLogger().log(Level.SEVERE, "Unable to fix up stored player data", e);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }, 0, 1, TimeUnit.MINUTES);
 | 
					            }, 0, 1, TimeUnit.MINUTES);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        getProxy().registerChannel("legacy:redisbungee");
 | 
					        getProxy().registerChannel("legacy:redisbungee");
 | 
				
			||||||
@ -395,6 +405,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings("all")
 | 
				
			||||||
    private void loadConfig() throws IOException, JedisConnectionException {
 | 
					    private void loadConfig() throws IOException, JedisConnectionException {
 | 
				
			||||||
        if (!getDataFolder().exists()) {
 | 
					        if (!getDataFolder().exists()) {
 | 
				
			||||||
            getDataFolder().mkdir();
 | 
					            getDataFolder().mkdir();
 | 
				
			||||||
@ -482,17 +493,14 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                FutureTask<Void> task2 = new FutureTask<>(new Callable<Void>() {
 | 
					                FutureTask<Void> task2 = new FutureTask<>(() -> {
 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public Void call() throws Exception {
 | 
					 | 
				
			||||||
                    httpClient = new OkHttpClient();
 | 
					                    httpClient = new OkHttpClient();
 | 
				
			||||||
                    Dispatcher dispatcher = new Dispatcher(getExecutorService());
 | 
					                    Dispatcher dispatcher = new Dispatcher(getExecutorService());
 | 
				
			||||||
                    httpClient.setDispatcher(dispatcher);
 | 
					                    httpClient.setDispatcher(dispatcher);
 | 
				
			||||||
                    NameFetcher.setHttpClient(httpClient);
 | 
					                    NameFetcher.setHttpClient(httpClient);
 | 
				
			||||||
                    UUIDFetcher.setHttpClient(httpClient);
 | 
					                    UUIDFetcher.setHttpClient(httpClient);
 | 
				
			||||||
                        RedisBungee.configuration = new RedisBungeeConfiguration(RedisBungee.this.getPool(), configuration, randomUUID);
 | 
					                    RedisBungee.getPluginInstance().configuration = new RedisBungeeConfiguration(RedisBungee.this.getPool(), configuration, randomUUID);
 | 
				
			||||||
                    return null;
 | 
					                    return null;
 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                getProxy().getScheduler().runAsync(this, task2);
 | 
					                getProxy().getScheduler().runAsync(this, task2);
 | 
				
			||||||
@ -518,7 +526,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
    class PubSubListener implements Runnable {
 | 
					    class PubSubListener implements Runnable {
 | 
				
			||||||
        private JedisPubSubHandler jpsh;
 | 
					        private JedisPubSubHandler jpsh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private Set<String> addedChannels = new HashSet<String>();
 | 
					        private final Set<String> addedChannels = new HashSet<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void run() {
 | 
					        public void run() {
 | 
				
			||||||
@ -537,10 +545,12 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        jpsh.unsubscribe();
 | 
					                        jpsh.unsubscribe();
 | 
				
			||||||
                    } catch (Exception e1) {
 | 
					                    } catch (Exception e1) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        /* This may fail with
 | 
					                        /* This may fail with
 | 
				
			||||||
                        - java.net.SocketException: Broken pipe
 | 
					                        - java.net.SocketException: Broken pipe
 | 
				
			||||||
                        - redis.clients.jedis.exceptions.JedisConnectionException: JedisPubSub was not subscribed to a Jedis instance
 | 
					                        - redis.clients.jedis.exceptions.JedisConnectionException: JedisPubSub was not subscribed to a Jedis instance
 | 
				
			||||||
                        */
 | 
					                        */
 | 
				
			||||||
 | 
					                        getLogger().warning("redis connection broken!");
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    broken = true;
 | 
					                    broken = true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -560,7 +570,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void removeChannel(String... channel) {
 | 
					        public void removeChannel(String... channel) {
 | 
				
			||||||
            addedChannels.removeAll(Arrays.asList(channel));
 | 
					            Arrays.asList(channel).forEach(addedChannels::remove);
 | 
				
			||||||
            jpsh.unsubscribe(channel);
 | 
					            jpsh.unsubscribe(channel);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -574,12 +584,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void onMessage(final String s, final String s2) {
 | 
					        public void onMessage(final String s, final String s2) {
 | 
				
			||||||
            if (s2.trim().length() == 0) return;
 | 
					            if (s2.trim().length() == 0) return;
 | 
				
			||||||
            getProxy().getScheduler().runAsync(RedisBungee.this, new Runnable() {
 | 
					            getProxy().getScheduler().runAsync(RedisBungee.this, () -> getProxy().getPluginManager().callEvent(new PubSubMessageEvent(s, s2)));
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                    getProxy().getPluginManager().callEvent(new PubSubMessageEvent(s, s2));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@ public class RedisBungeeAPI {
 | 
				
			|||||||
        this.plugin = plugin;
 | 
					        this.plugin = plugin;
 | 
				
			||||||
        this.reservedChannels = ImmutableList.of(
 | 
					        this.reservedChannels = ImmutableList.of(
 | 
				
			||||||
                "redisbungee-allservers",
 | 
					                "redisbungee-allservers",
 | 
				
			||||||
                "redisbungee-" + RedisBungee.getConfiguration().getServerId(),
 | 
					                "redisbungee-" + getServerId(),
 | 
				
			||||||
                "redisbungee-data"
 | 
					                "redisbungee-data"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -192,7 +192,7 @@ public class RedisBungeeAPI {
 | 
				
			|||||||
     * @since 0.2.5
 | 
					     * @since 0.2.5
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public final String getServerId() {
 | 
					    public final String getServerId() {
 | 
				
			||||||
        return RedisBungee.getConfiguration().getServerId();
 | 
					        return plugin.getConfiguration().getServerId();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -213,7 +213,7 @@ public class RedisBungeeAPI {
 | 
				
			|||||||
     * @since 0.3
 | 
					     * @since 0.3
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public final void registerPubSubChannels(String... channels) {
 | 
					    public final void registerPubSubChannels(String... channels) {
 | 
				
			||||||
        RedisBungee.getPubSubListener().addChannel(channels);
 | 
					       plugin.getPubSubListener().addChannel(channels);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -227,7 +227,7 @@ public class RedisBungeeAPI {
 | 
				
			|||||||
            Preconditions.checkArgument(!reservedChannels.contains(channel), "attempting to unregister internal channel");
 | 
					            Preconditions.checkArgument(!reservedChannels.contains(channel), "attempting to unregister internal channel");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        RedisBungee.getPubSubListener().removeChannel(channels);
 | 
					        plugin.getPubSubListener().removeChannel(channels);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -48,14 +48,12 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					                int count = plugin.getRedisBungeeAPI().getPlayerCount();
 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                    int count = RedisBungee.getApi().getPlayerCount();
 | 
					 | 
				
			||||||
                BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
 | 
					                BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
 | 
				
			||||||
                        .append(playerPlural(count) + " currently online.").create();
 | 
					                        .append(playerPlural(count) + " currently online.").create();
 | 
				
			||||||
                if (args.length > 0 && args[0].equals("showall")) {
 | 
					                if (args.length > 0 && args[0].equals("showall")) {
 | 
				
			||||||
                        Multimap<String, UUID> serverToPlayers = RedisBungee.getApi().getServerToPlayers();
 | 
					                    Multimap<String, UUID> serverToPlayers = plugin.getRedisBungeeAPI().getServerToPlayers();
 | 
				
			||||||
                    Multimap<String, String> human = HashMultimap.create();
 | 
					                    Multimap<String, String> human = HashMultimap.create();
 | 
				
			||||||
                    for (Map.Entry<String, UUID> entry : serverToPlayers.entries()) {
 | 
					                    for (Map.Entry<String, UUID> entry : serverToPlayers.entries()) {
 | 
				
			||||||
                        human.put(entry.getKey(), plugin.getUuidTranslator().getNameFromUuid(entry.getValue(), false));
 | 
					                        human.put(entry.getKey(), plugin.getUuidTranslator().getNameFromUuid(entry.getValue(), false));
 | 
				
			||||||
@ -77,7 +75,6 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                    sender.sendMessage(playersOnline);
 | 
					                    sender.sendMessage(playersOnline);
 | 
				
			||||||
                    sender.sendMessage(new ComponentBuilder("To see all players online, use /glist showall.").color(ChatColor.YELLOW).create());
 | 
					                    sender.sendMessage(new ComponentBuilder("To see all players online, use /glist showall.").color(ChatColor.YELLOW).create());
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -92,16 +89,14 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                if (args.length > 0) {
 | 
					                if (args.length > 0) {
 | 
				
			||||||
                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
					                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
				
			||||||
                    if (uuid == null) {
 | 
					                    if (uuid == null) {
 | 
				
			||||||
                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
					                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                        ServerInfo si = RedisBungee.getApi().getServerFor(uuid);
 | 
					                    ServerInfo si = plugin.getRedisBungeeAPI().getServerFor(uuid);
 | 
				
			||||||
                    if (si != null) {
 | 
					                    if (si != null) {
 | 
				
			||||||
                        TextComponent message = new TextComponent();
 | 
					                        TextComponent message = new TextComponent();
 | 
				
			||||||
                        message.setColor(ChatColor.BLUE);
 | 
					                        message.setColor(ChatColor.BLUE);
 | 
				
			||||||
@ -113,7 +108,6 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
					                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -128,16 +122,14 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                if (args.length > 0) {
 | 
					                if (args.length > 0) {
 | 
				
			||||||
                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
					                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
				
			||||||
                    if (uuid == null) {
 | 
					                    if (uuid == null) {
 | 
				
			||||||
                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
					                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                        long secs = RedisBungee.getApi().getLastOnline(uuid);
 | 
					                    long secs = plugin.getRedisBungeeAPI().getLastOnline(uuid);
 | 
				
			||||||
                    TextComponent message = new TextComponent();
 | 
					                    TextComponent message = new TextComponent();
 | 
				
			||||||
                    if (secs == 0) {
 | 
					                    if (secs == 0) {
 | 
				
			||||||
                        message.setColor(ChatColor.GREEN);
 | 
					                        message.setColor(ChatColor.GREEN);
 | 
				
			||||||
@ -153,7 +145,6 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
					                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -168,20 +159,18 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                if (args.length > 0) {
 | 
					                if (args.length > 0) {
 | 
				
			||||||
                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
					                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
				
			||||||
                    if (uuid == null) {
 | 
					                    if (uuid == null) {
 | 
				
			||||||
                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
					                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                        InetAddress ia = RedisBungee.getApi().getPlayerIp(uuid);
 | 
					                    InetAddress ia = plugin.getRedisBungeeAPI().getPlayerIp(uuid);
 | 
				
			||||||
                    if (ia != null) {
 | 
					                    if (ia != null) {
 | 
				
			||||||
                        TextComponent message = new TextComponent();
 | 
					                        TextComponent message = new TextComponent();
 | 
				
			||||||
                        message.setColor(ChatColor.GREEN);
 | 
					                        message.setColor(ChatColor.GREEN);
 | 
				
			||||||
                            message.setText(args[0] + " is connected from " + ia.toString() + ".");
 | 
					                        message.setText(args[0] + " is connected from " + ia + ".");
 | 
				
			||||||
                        sender.sendMessage(message);
 | 
					                        sender.sendMessage(message);
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
					                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
				
			||||||
@ -189,7 +178,6 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
					                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -204,16 +192,14 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                if (args.length > 0) {
 | 
					                if (args.length > 0) {
 | 
				
			||||||
                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
					                    UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
 | 
				
			||||||
                    if (uuid == null) {
 | 
					                    if (uuid == null) {
 | 
				
			||||||
                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
					                        sender.sendMessage(PLAYER_NOT_FOUND);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                        String proxy = RedisBungee.getApi().getProxy(uuid);
 | 
					                    String proxy = plugin.getRedisBungeeAPI().getProxy(uuid);
 | 
				
			||||||
                    if (proxy != null) {
 | 
					                    if (proxy != null) {
 | 
				
			||||||
                        TextComponent message = new TextComponent();
 | 
					                        TextComponent message = new TextComponent();
 | 
				
			||||||
                        message.setColor(ChatColor.GREEN);
 | 
					                        message.setColor(ChatColor.GREEN);
 | 
				
			||||||
@ -225,12 +211,12 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
					                    sender.sendMessage(NO_PLAYER_SPECIFIED);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static class SendToAll extends Command {
 | 
					    public static class SendToAll extends Command {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private final RedisBungee plugin;
 | 
					        private final RedisBungee plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         SendToAll(RedisBungee plugin) {
 | 
					         SendToAll(RedisBungee plugin) {
 | 
				
			||||||
@ -242,7 +228,7 @@ class RedisBungeeCommands {
 | 
				
			|||||||
        public void execute(CommandSender sender, String[] args) {
 | 
					        public void execute(CommandSender sender, String[] args) {
 | 
				
			||||||
            if (args.length > 0) {
 | 
					            if (args.length > 0) {
 | 
				
			||||||
                String command = Joiner.on(" ").skipNulls().join(args);
 | 
					                String command = Joiner.on(" ").skipNulls().join(args);
 | 
				
			||||||
                RedisBungee.getApi().sendProxyCommand(command);
 | 
					                plugin.getRedisBungeeAPI().sendProxyCommand(command);
 | 
				
			||||||
                TextComponent message = new TextComponent();
 | 
					                TextComponent message = new TextComponent();
 | 
				
			||||||
                message.setColor(ChatColor.GREEN);
 | 
					                message.setColor(ChatColor.GREEN);
 | 
				
			||||||
                message.setText("Sent the command /" + command + " to all proxies.");
 | 
					                message.setText("Sent the command /" + command + " to all proxies.");
 | 
				
			||||||
@ -264,21 +250,23 @@ class RedisBungeeCommands {
 | 
				
			|||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(CommandSender sender, String[] args) {
 | 
					        public void execute(CommandSender sender, String[] args) {
 | 
				
			||||||
            TextComponent textComponent = new TextComponent();
 | 
					            TextComponent textComponent = new TextComponent();
 | 
				
			||||||
            textComponent.setText("You are on " + RedisBungee.getApi().getServerId() + ".");
 | 
					            textComponent.setText("You are on " + plugin.getRedisBungeeAPI().getServerId() + ".");
 | 
				
			||||||
            textComponent.setColor(ChatColor.YELLOW);
 | 
					            textComponent.setColor(ChatColor.YELLOW);
 | 
				
			||||||
            sender.sendMessage(textComponent);
 | 
					            sender.sendMessage(textComponent);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static class ServerIds extends Command {
 | 
					    public static class ServerIds extends Command {
 | 
				
			||||||
        public ServerIds() {
 | 
					        private final RedisBungee plugin;
 | 
				
			||||||
 | 
					        ServerIds(RedisBungee plugin) {
 | 
				
			||||||
            super("serverids", "redisbungee.command.serverids");
 | 
					            super("serverids", "redisbungee.command.serverids");
 | 
				
			||||||
 | 
					            this.plugin = plugin;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(CommandSender sender, String[] strings) {
 | 
					        public void execute(CommandSender sender, String[] strings) {
 | 
				
			||||||
            TextComponent textComponent = new TextComponent();
 | 
					            TextComponent textComponent = new TextComponent();
 | 
				
			||||||
            textComponent.setText("All server IDs: " + Joiner.on(", ").join(RedisBungee.getApi().getAllServers()));
 | 
					            textComponent.setText("All server IDs: " + Joiner.on(", ").join(plugin.getRedisBungeeAPI().getAllServers()));
 | 
				
			||||||
            textComponent.setColor(ChatColor.YELLOW);
 | 
					            textComponent.setColor(ChatColor.YELLOW);
 | 
				
			||||||
            sender.sendMessage(textComponent);
 | 
					            sender.sendMessage(textComponent);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -294,19 +282,17 @@ class RedisBungeeCommands {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void execute(final CommandSender sender, final String[] args) {
 | 
					        public void execute(final CommandSender sender, final String[] args) {
 | 
				
			||||||
            plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
 | 
					            plugin.getProxy().getScheduler().runAsync(plugin, () -> {
 | 
				
			||||||
                @Override
 | 
					                String proxy = args.length >= 1 ? args[0] : plugin.getConfiguration().getServerId();
 | 
				
			||||||
                public void run() {
 | 
					 | 
				
			||||||
                    String proxy = args.length >= 1 ? args[0] : RedisBungee.getConfiguration().getServerId();
 | 
					 | 
				
			||||||
                if (!plugin.getServerIds().contains(proxy)) {
 | 
					                if (!plugin.getServerIds().contains(proxy)) {
 | 
				
			||||||
                    sender.sendMessage(new ComponentBuilder(proxy + " is not a valid proxy. See /serverids for valid proxies.").color(ChatColor.RED).create());
 | 
					                    sender.sendMessage(new ComponentBuilder(proxy + " is not a valid proxy. See /serverids for valid proxies.").color(ChatColor.RED).create());
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                    Set<UUID> players = RedisBungee.getApi().getPlayersOnProxy(proxy);
 | 
					                Set<UUID> players = plugin.getRedisBungeeAPI().getPlayersOnProxy(proxy);
 | 
				
			||||||
                BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
 | 
					                BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
 | 
				
			||||||
                        .append(playerPlural(players.size()) + " currently on proxy " + proxy + ".").create();
 | 
					                        .append(playerPlural(players.size()) + " currently on proxy " + proxy + ".").create();
 | 
				
			||||||
                if (args.length >= 2 && args[1].equals("showall")) {
 | 
					                if (args.length >= 2 && args[1].equals("showall")) {
 | 
				
			||||||
                        Multimap<String, UUID> serverToPlayers = RedisBungee.getApi().getServerToPlayers();
 | 
					                    Multimap<String, UUID> serverToPlayers = plugin.getRedisBungeeAPI().getServerToPlayers();
 | 
				
			||||||
                    Multimap<String, String> human = HashMultimap.create();
 | 
					                    Multimap<String, String> human = HashMultimap.create();
 | 
				
			||||||
                    for (Map.Entry<String, UUID> entry : serverToPlayers.entries()) {
 | 
					                    for (Map.Entry<String, UUID> entry : serverToPlayers.entries()) {
 | 
				
			||||||
                        if (players.contains(entry.getValue())) {
 | 
					                        if (players.contains(entry.getValue())) {
 | 
				
			||||||
@ -330,7 +316,6 @@ class RedisBungeeCommands {
 | 
				
			|||||||
                    sender.sendMessage(playersOnline);
 | 
					                    sender.sendMessage(playersOnline);
 | 
				
			||||||
                    sender.sendMessage(new ComponentBuilder("To see all players online, use /plist " + proxy + " showall.").color(ChatColor.YELLOW).create());
 | 
					                    sender.sendMessage(new ComponentBuilder("To see all players online, use /plist " + proxy + " showall.").color(ChatColor.YELLOW).create());
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -145,7 +145,7 @@ public class RedisBungeeListener implements Listener {
 | 
				
			|||||||
        event.getResponse().getPlayers().setOnline(plugin.getCount());
 | 
					        event.getResponse().getPlayers().setOnline(plugin.getCount());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @SuppressWarnings("UnstableApiUsage")
 | 
					    @SuppressWarnings({"UnstableApiUsage", "null"})
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onPluginMessage(final PluginMessageEvent event) {
 | 
					    public void onPluginMessage(final PluginMessageEvent event) {
 | 
				
			||||||
        if ((event.getTag().equals("legacy:redisbungee") || event.getTag().equals("RedisBungee")) && event.getSender() instanceof Server) {
 | 
					        if ((event.getTag().equals("legacy:redisbungee") || event.getTag().equals("RedisBungee")) && event.getSender() instanceof Server) {
 | 
				
			||||||
@ -158,6 +158,7 @@ public class RedisBungeeListener implements Listener {
 | 
				
			|||||||
                ByteArrayDataOutput out = ByteStreams.newDataOutput();
 | 
					                ByteArrayDataOutput out = ByteStreams.newDataOutput();
 | 
				
			||||||
                String type;
 | 
					                String type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                UUID uuid;
 | 
				
			||||||
                switch (subchannel) {
 | 
					                switch (subchannel) {
 | 
				
			||||||
                    case "PlayerList":
 | 
					                    case "PlayerList":
 | 
				
			||||||
                        out.writeUTF("PlayerList");
 | 
					                        out.writeUTF("PlayerList");
 | 
				
			||||||
@ -168,13 +169,12 @@ public class RedisBungeeListener implements Listener {
 | 
				
			|||||||
                            original = plugin.getPlayers();
 | 
					                            original = plugin.getPlayers();
 | 
				
			||||||
                        } else {
 | 
					                        } else {
 | 
				
			||||||
                            try {
 | 
					                            try {
 | 
				
			||||||
                                original = RedisBungee.getApi().getPlayersOnServer(type);
 | 
					                                original = plugin.getRedisBungeeAPI().getPlayersOnServer(type);
 | 
				
			||||||
                            } catch (IllegalArgumentException ignored) {
 | 
					                            } catch (IllegalArgumentException ignored) {
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        Set<String> players = new HashSet<>();
 | 
					                        Set<String> players = new HashSet<>();
 | 
				
			||||||
                        for (UUID uuid : original)
 | 
					                        original.forEach((u -> players.add(plugin.getUuidTranslator().getNameFromUuid(u, false))));
 | 
				
			||||||
                            players.add(plugin.getUuidTranslator().getNameFromUuid(uuid, false));
 | 
					 | 
				
			||||||
                        out.writeUTF(Joiner.on(',').join(players));
 | 
					                        out.writeUTF(Joiner.on(',').join(players));
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "PlayerCount":
 | 
					                    case "PlayerCount":
 | 
				
			||||||
@ -196,7 +196,9 @@ public class RedisBungeeListener implements Listener {
 | 
				
			|||||||
                        String user = in.readUTF();
 | 
					                        String user = in.readUTF();
 | 
				
			||||||
                        out.writeUTF("LastOnline");
 | 
					                        out.writeUTF("LastOnline");
 | 
				
			||||||
                        out.writeUTF(user);
 | 
					                        out.writeUTF(user);
 | 
				
			||||||
                        out.writeLong(RedisBungee.getApi().getLastOnline(plugin.getUuidTranslator().getTranslatedUuid(user, true)));
 | 
					                        uuid = plugin.getUuidTranslator().getTranslatedUuid(user, true);
 | 
				
			||||||
 | 
					                        assert uuid != null;
 | 
				
			||||||
 | 
					                        out.writeLong(RedisBungee.getApi().getLastOnline(uuid));
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "ServerPlayers":
 | 
					                    case "ServerPlayers":
 | 
				
			||||||
                        String type1 = in.readUTF();
 | 
					                        String type1 = in.readUTF();
 | 
				
			||||||
@ -231,13 +233,15 @@ public class RedisBungeeListener implements Listener {
 | 
				
			|||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "Proxy":
 | 
					                    case "Proxy":
 | 
				
			||||||
                        out.writeUTF("Proxy");
 | 
					                        out.writeUTF("Proxy");
 | 
				
			||||||
                        out.writeUTF(RedisBungee.getConfiguration().getServerId());
 | 
					                        out.writeUTF(plugin.getConfiguration().getServerId());
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    case "PlayerProxy":
 | 
					                    case "PlayerProxy":
 | 
				
			||||||
                        String username = in.readUTF();
 | 
					                        String username = in.readUTF();
 | 
				
			||||||
                        out.writeUTF("PlayerProxy");
 | 
					                        out.writeUTF("PlayerProxy");
 | 
				
			||||||
                        out.writeUTF(username);
 | 
					                        out.writeUTF(username);
 | 
				
			||||||
                        out.writeUTF(RedisBungee.getApi().getProxy(plugin.getUuidTranslator().getTranslatedUuid(username, true)));
 | 
					                        uuid = plugin.getUuidTranslator().getTranslatedUuid(username, true);
 | 
				
			||||||
 | 
					                        assert uuid != null;
 | 
				
			||||||
 | 
					                        out.writeUTF(RedisBungee.getApi().getProxy(uuid));
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    default:
 | 
					                    default:
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
 | 
				
			|||||||
@ -25,13 +25,13 @@ public class RedisUtil {
 | 
				
			|||||||
        Map<String, String> playerData = new HashMap<>(4);
 | 
					        Map<String, String> playerData = new HashMap<>(4);
 | 
				
			||||||
        playerData.put("online", "0");
 | 
					        playerData.put("online", "0");
 | 
				
			||||||
        playerData.put("ip", connection.getAddress().getAddress().getHostAddress());
 | 
					        playerData.put("ip", connection.getAddress().getAddress().getHostAddress());
 | 
				
			||||||
        playerData.put("proxy", RedisBungee.getConfiguration().getServerId());
 | 
					        playerData.put("proxy", RedisBungee.getPluginInstance().getConfiguration().getServerId());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pipeline.sadd("proxy:" + RedisBungee.getApi().getServerId() + ":usersOnline", connection.getUniqueId().toString());
 | 
					        pipeline.sadd("proxy:" + RedisBungee.getApi().getServerId() + ":usersOnline", connection.getUniqueId().toString());
 | 
				
			||||||
        pipeline.hmset("player:" + connection.getUniqueId().toString(), playerData);
 | 
					        pipeline.hmset("player:" + connection.getUniqueId().toString(), playerData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (fireEvent) {
 | 
					        if (fireEvent) {
 | 
				
			||||||
            pipeline.publish("redisbungee-data", RedisBungee.getGson().toJson(new DataManager.DataManagerMessage<>(
 | 
					            pipeline.publish("redisbungee-data", RedisBungee.getPluginInstance().getGson().toJson(new DataManager.DataManagerMessage<>(
 | 
				
			||||||
                    connection.getUniqueId(), DataManager.DataManagerMessage.Action.JOIN,
 | 
					                    connection.getUniqueId(), DataManager.DataManagerMessage.Action.JOIN,
 | 
				
			||||||
                    new DataManager.LoginPayload(connection.getAddress().getAddress()))));
 | 
					                    new DataManager.LoginPayload(connection.getAddress().getAddress()))));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -57,7 +57,12 @@ public class RedisUtil {
 | 
				
			|||||||
                new DataManager.LogoutPayload(timestamp))));
 | 
					                new DataManager.LogoutPayload(timestamp))));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Deprecated
 | 
				
			||||||
    public static boolean canUseLua(String redisVersion) {
 | 
					    public static boolean canUseLua(String redisVersion) {
 | 
				
			||||||
 | 
					        return isRedisVersionSupported(redisVersion);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static boolean isRedisVersionSupported(String redisVersion) {
 | 
				
			||||||
        // Need to use >=6.2 to use Lua optimizations.
 | 
					        // Need to use >=6.2 to use Lua optimizations.
 | 
				
			||||||
        String[] args = redisVersion.split("\\.");
 | 
					        String[] args = redisVersion.split("\\.");
 | 
				
			||||||
        if (args.length < 2) {
 | 
					        if (args.length < 2) {
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,7 @@ public class NameFetcher {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Type listType = new TypeToken<List<Name>>() {
 | 
					        Type listType = new TypeToken<List<Name>>() {
 | 
				
			||||||
        }.getType();
 | 
					        }.getType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<Name> names = RedisBungee.getGson().fromJson(response, listType);
 | 
					        List<Name> names = RedisBungee.getGson().fromJson(response, listType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<String> humanNames = new ArrayList<>();
 | 
					        List<String> humanNames = new ArrayList<>();
 | 
				
			||||||
 | 
				
			|||||||
@ -74,7 +74,7 @@ public final class UUIDTranslator {
 | 
				
			|||||||
            String stored = jedis.hget("uuid-cache", player.toLowerCase());
 | 
					            String stored = jedis.hget("uuid-cache", player.toLowerCase());
 | 
				
			||||||
            if (stored != null) {
 | 
					            if (stored != null) {
 | 
				
			||||||
                // Found an entry value. Deserialize it.
 | 
					                // Found an entry value. Deserialize it.
 | 
				
			||||||
                CachedUUIDEntry entry = RedisBungee.getGson().fromJson(stored, CachedUUIDEntry.class);
 | 
					                CachedUUIDEntry entry = plugin.getGson().fromJson(stored, CachedUUIDEntry.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Check for expiry:
 | 
					                // Check for expiry:
 | 
				
			||||||
                if (entry.expired()) {
 | 
					                if (entry.expired()) {
 | 
				
			||||||
@ -132,7 +132,7 @@ public final class UUIDTranslator {
 | 
				
			|||||||
            String stored = jedis.hget("uuid-cache", player.toString());
 | 
					            String stored = jedis.hget("uuid-cache", player.toString());
 | 
				
			||||||
            if (stored != null) {
 | 
					            if (stored != null) {
 | 
				
			||||||
                // Found an entry value. Deserialize it.
 | 
					                // Found an entry value. Deserialize it.
 | 
				
			||||||
                CachedUUIDEntry entry = RedisBungee.getGson().fromJson(stored, CachedUUIDEntry.class);
 | 
					                CachedUUIDEntry entry = plugin.getGson().fromJson(stored, CachedUUIDEntry.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Check for expiry:
 | 
					                // Check for expiry:
 | 
				
			||||||
                if (entry.expired()) {
 | 
					                if (entry.expired()) {
 | 
				
			||||||
@ -186,7 +186,7 @@ public final class UUIDTranslator {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @RequiredArgsConstructor
 | 
					    @RequiredArgsConstructor
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private class CachedUUIDEntry {
 | 
					    private static class CachedUUIDEntry {
 | 
				
			||||||
        private final String name;
 | 
					        private final String name;
 | 
				
			||||||
        private final UUID uuid;
 | 
					        private final UUID uuid;
 | 
				
			||||||
        private final Calendar expiry;
 | 
					        private final Calendar expiry;
 | 
				
			||||||
 | 
				
			|||||||
@ -6,15 +6,15 @@ import org.junit.Test;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class RedisUtilTest {
 | 
					public class RedisUtilTest {
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testRedisLuaCheck() {
 | 
					    public void testRedisVersion() {
 | 
				
			||||||
        Assert.assertTrue(RedisUtil.canUseLua("6.2.0"));
 | 
					        Assert.assertTrue(RedisUtil.isRedisVersionSupported("6.2.0"));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("6.1.0"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("6.1.0")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("6.0.0"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("6.0.0")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("2.6.0"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("2.6.0")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("2.2.12"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("2.2.12")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("1.2.4"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("1.2.4")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("2.8.4"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("2.8.4")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("3.0.0"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("3.0.0")));
 | 
				
			||||||
        Assert.assertFalse(RedisUtil.canUseLua("3.2.1"));
 | 
					        Assert.assertFalse(RedisUtil.isRedisVersionSupported(("3.2.1")));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,8 @@ import java.util.Map;
 | 
				
			|||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class UUIDNameTest {
 | 
					public class UUIDNameTest {
 | 
				
			||||||
    private String[] uuidsToTest = {"68ec43f7234b41b48764dfb38b9ffe8c", "652a2bc4e8cd405db7b698156ee2dc09"};
 | 
					    private final String[] uuidsToTest = {"68ec43f7234b41b48764dfb38b9ffe8c", "652a2bc4e8cd405db7b698156ee2dc09"};
 | 
				
			||||||
    private String[] namesToTest = {"vemacs"};
 | 
					    private final String[] namesToTest = {"vemacs"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testUuidToName() throws IOException {
 | 
					    public void testUuidToName() throws IOException {
 | 
				
			||||||
@ -27,7 +27,7 @@ public class UUIDNameTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testNameToUuid() throws IOException {
 | 
					    public void testNameToUuid() {
 | 
				
			||||||
        OkHttpClient httpClient = new OkHttpClient();
 | 
					        OkHttpClient httpClient = new OkHttpClient();
 | 
				
			||||||
        UUIDFetcher.setHttpClient(httpClient);
 | 
					        UUIDFetcher.setHttpClient(httpClient);
 | 
				
			||||||
        for (String name : namesToTest) {
 | 
					        for (String name : namesToTest) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user