From 5c6cf405fada9495d8f444c42e18d8fd4c1c7f92 Mon Sep 17 00:00:00 2001 From: mohammed jasem alaajel Date: Fri, 22 Jul 2022 15:12:32 +0400 Subject: [PATCH] config changes --- .../redisbungee/api/config/ConfigLoader.java | 33 +++- RedisBungee-Bungee/pom.xml | 33 ++-- .../redisbungee/RedisBungeeBungeePlugin.java | 161 ++++++++++-------- RedisBungee-Velocity/pom.xml | 21 +-- .../RedisBungeeVelocityPlugin.java | 126 +++++++------- 5 files changed, 205 insertions(+), 169 deletions(-) diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java index faf2639..4f099ef 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java @@ -1,14 +1,41 @@ package com.imaginarycode.minecraft.redisbungee.api.config; -import java.io.File; + import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.UUID; public interface ConfigLoader { void loadConfig() throws IOException; - Path createConfigFile() throws IOException; + default Path createConfigFile(Path dataFolder) throws IOException { + if (Files.notExists(dataFolder)) { + Files.createDirectory(dataFolder); + } + Path file = dataFolder.resolve("config.yml"); + if (Files.notExists(file)) { + try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.yml")) { + Files.createFile(file); + assert in != null; + Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING); + } + } + return file; + } + + default void handleOldConfig(Path dataFolder) throws IOException { + Path oldConfigFolder = dataFolder.resolve("old_config"); + if (Files.notExists(oldConfigFolder)) { + Files.createDirectory(oldConfigFolder); + } + Path oldConfigPath = dataFolder.resolve("config.yml"); + Files.move(oldConfigPath, oldConfigFolder.resolve(UUID.randomUUID() + "_config.yml")); + createConfigFile(dataFolder); + + } - void handleOldConfig(Path path) throws IOException; } diff --git a/RedisBungee-Bungee/pom.xml b/RedisBungee-Bungee/pom.xml index a4b0250..8e013ab 100644 --- a/RedisBungee-Bungee/pom.xml +++ b/RedisBungee-Bungee/pom.xml @@ -61,43 +61,39 @@ redis.clients.jedis - com.imaginarycode.minecraft.redisbungee.internal.jedis - + com.imaginarycode.minecraft.redisbungee.internal.jedis redis.clients.util - com.imaginarycode.minecraft.redisbungee.internal.jedisutil - + com.imaginarycode.minecraft.redisbungee.internal.jedisutil org.apache.commons.pool - com.imaginarycode.minecraft.redisbungee.internal.commonspool - + com.imaginarycode.minecraft.redisbungee.internal.commonspool com.squareup.okhttp - com.imaginarycode.minecraft.redisbungee.internal.okhttp - + com.imaginarycode.minecraft.redisbungee.internal.okhttp okio - com.imaginarycode.minecraft.redisbungee.internal.okio - + com.imaginarycode.minecraft.redisbungee.internal.okio com.google - com.imaginarycode.minecraft.redisbungee.internal.google - + com.imaginarycode.minecraft.redisbungee.internal.google org.json - com.imaginarycode.minecraft.redisbungee.internal.json - + com.imaginarycode.minecraft.redisbungee.internal.json org.checkerframework - com.imaginarycode.minecraft.redisbungee.internal.checkframework - + com.imaginarycode.minecraft.redisbungee.internal.checkframework + + + ninja.leaping.configurate + com.imaginarycode.minecraft.redisbungee.internal.configurate @@ -120,6 +116,11 @@ jar provided + + org.spongepowered + configurate-yaml + 3.7.2 + \ No newline at end of file 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 d966ec3..41a9036 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 @@ -6,7 +6,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; -import com.google.common.io.ByteStreams; +import com.google.common.reflect.TypeToken; +import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration; import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.tasks.HeartbeatTask; @@ -32,9 +33,9 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Event; import net.md_5.bungee.api.plugin.Plugin; -import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.config.ConfigurationProvider; -import net.md_5.bungee.config.YamlConfiguration; +import ninja.leaping.configurate.ConfigurationNode; +import ninja.leaping.configurate.objectmapping.ObjectMappingException; +import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisConnectionException; @@ -43,7 +44,7 @@ import redis.clients.jedis.exceptions.JedisException; import java.io.*; import java.lang.reflect.Field; import java.net.InetAddress; -import java.nio.file.Files; +import java.nio.file.Path; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; @@ -806,74 +807,6 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin return this.jedisSummoner; } - @Override - public void loadConfig() throws IOException { - if (!getDataFolder().exists() && getDataFolder().mkdir()) { - getLogger().info("data folder was created"); - } - File file = new File(getDataFolder(), "config.yml"); - if (!file.exists() && file.createNewFile()) { - try (InputStream in = getResourceAsStream("example_config.yml"); - OutputStream out = Files.newOutputStream(file.toPath())) { - ByteStreams.copy(in, out); - } - } - final Configuration yamlConfiguration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file); - final String redisServer = yamlConfiguration.getString("redis-server", "localhost"); - final int redisPort = yamlConfiguration.getInt("redis-port", 6379); - final boolean useSSL = yamlConfiguration.getBoolean("useSSL", false); - String redisPassword = yamlConfiguration.getString("redis-password", ""); - String serverId = yamlConfiguration.getString("server-id"); - // check redis password - if (redisPassword != null && (redisPassword.isEmpty() || redisPassword.equals("none"))) { - redisPassword = null; - getLogger().warning("INSECURE setup was detected Please set password for your redis instance."); - } - if (!useSSL) { - getLogger().warning("INSECURE setup was detected Please setup ssl for your redis instance."); - } - // Configuration sanity checks. - if (serverId == null || serverId.isEmpty()) { - /* - * this check causes the config comments to disappear somehow - * I think due snake yaml limitations so as todo: write our own yaml parser? - */ - String genId = UUID.randomUUID().toString(); - getLogger().info("Generated server id " + genId + " and saving it to config."); - yamlConfiguration.set("server-id", genId); - ConfigurationProvider.getProvider(YamlConfiguration.class).save(yamlConfiguration, new File(getDataFolder(), "config.yml")); - getLogger().info("Server id was generated: " + serverId); - } else { - getLogger().info("server id: " + serverId + '.'); - } - this.configuration = new RedisBungeeConfiguration(serverId, yamlConfiguration.getStringList("exempt-ip-addresses"), yamlConfiguration.getBoolean("register-bungee-commands", true)); - - if (redisServer != null && !redisServer.isEmpty()) { - if (yamlConfiguration.getBoolean("cluster-mode-enabled", false)) { - GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); - poolConfig.setMaxTotal(yamlConfiguration.getInt("max-redis-connections", 8)); - if (redisPassword != null) { - this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(new HostAndPort(redisServer, redisPort), 5000, 5000, 60, serverId, redisPassword, poolConfig, useSSL)); - } else { - this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(new HostAndPort(redisServer, redisPort), 5000, 5000, 60, poolConfig)); - getLogger().warning("SSL option is ignored in Cluster mode if no PASSWORD is set"); - } - this.redisBungeeMode = RedisBungeeMode.CLUSTER; - getLogger().log(Level.INFO, "RedisBungee MODE: CLUSTER"); - } else { - JedisPoolConfig config = new JedisPoolConfig(); - config.setMaxTotal(yamlConfiguration.getInt("max-redis-connections", 8)); - this.jedisSummoner = new JedisSummoner(new JedisPool(config, redisServer, redisPort, 0, redisPassword, useSSL)); - this.redisBungeeMode = RedisBungeeMode.SINGLE; - getLogger().log(Level.INFO, "RedisBungee MODE: SINGLE"); - } - - getLogger().log(Level.INFO, "Successfully connected to Redis."); - - } else { - throw new RuntimeException("No redis server specified!"); - } - } @Override public void kickPlayer(UUID playerUniqueId, String message) { @@ -946,4 +879,86 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin public Object createPubSubEvent(String channel, String message) { return new PubSubMessageEvent(channel, message); } + + @Override + public void loadConfig() throws IOException { + Path configFile = createConfigFile(getDataFolder().toPath()); + final YAMLConfigurationLoader yamlConfigurationFileLoader = YAMLConfigurationLoader.builder().setPath(configFile).build(); + ConfigurationNode node = yamlConfigurationFileLoader.load(); + if (node.getNode("config-version").getInt(0) != RedisBungeeConfiguration.CONFIG_VERSION) { + handleOldConfig(getDataFolder().toPath()); + node = yamlConfigurationFileLoader.load(); + } + final boolean useSSL = node.getNode("useSSL").getBoolean(false); + final boolean overrideBungeeCommands = node.getNode("override-bungee-commands").getBoolean(false); + final boolean registerLegacyCommands = node.getNode("register-legacy-commands").getBoolean(false); + String redisPassword = node.getNode("redis-password").getString(null); + String proxyId = node.getNode("proxy-id").getString("test-1"); + final int maxConnections = node.getNode("max-redis-connections").getInt(8); + List exemptAddresses; + try { + exemptAddresses = node.getNode("exempt-ip-addresses").getList(TypeToken.of(String.class)); + } catch (ObjectMappingException e) { + exemptAddresses = Collections.emptyList(); + } + + // check redis password + if (redisPassword != null && (redisPassword.isEmpty() || redisPassword.equals("none"))) { + redisPassword = null; + getLogger().warning("INSECURE setup was detected Please set password for your redis instance."); + } else if (redisPassword == null) { + getLogger().warning("INSECURE setup was detected Please set password for your redis instance."); + } + if (!useSSL) { + getLogger().warning("INSECURE setup was detected Please setup ssl for your redis instance."); + } + // Configuration sanity checks. + if (proxyId == null || proxyId.isEmpty()) { + String genId = UUID.randomUUID().toString(); + getLogger().info("Generated proxy id " + genId + " and saving it to config."); + node.getNode("proxy-id").setValue(genId); + yamlConfigurationFileLoader.save(node); + proxyId = genId; + getLogger().info("proxy id was generated: " + proxyId); + } else { + getLogger().info("Loaded proxy id " + proxyId); + } + this.configuration = new RedisBungeeConfiguration(proxyId, exemptAddresses, registerLegacyCommands, overrideBungeeCommands); + + if (node.getNode("cluster-mode-enabled").getBoolean(false)) { + getLogger().info("RedisBungee MODE: CLUSTER"); + Set hostAndPortSet = new HashSet<>(); + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); + poolConfig.setMaxTotal(maxConnections); + node.getNode("redis-cluster-servers").getChildrenList().forEach((childNode) -> { + Map hostAndPort = childNode.getChildrenMap(); + String host = hostAndPort.get("host").getString(); + int port = hostAndPort.get("port").getInt(); + hostAndPortSet.add(new HostAndPort(host, port)); + }); + getLogger().info(hostAndPortSet.size() + " cluster nodes were specified"); + if (hostAndPortSet.isEmpty()) { + throw new RuntimeException("No redis cluster servers specified"); + } + if (redisPassword != null) { + this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, proxyId, redisPassword, poolConfig, useSSL)); + } else { + getLogger().warning("SSL option is ignored in Cluster mode if no PASSWORD is set"); + this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, poolConfig)); + } + this.redisBungeeMode = RedisBungeeMode.CLUSTER; + } else { + getLogger().info("RedisBungee MODE: SINGLE"); + final String redisServer = node.getNode("redis-server").getString("127.0.0.1"); + final int redisPort = node.getNode("redis-port").getInt(6379); + if (redisServer != null && redisServer.isEmpty()) { + throw new RuntimeException("No redis server specified"); + } + JedisPoolConfig config = new JedisPoolConfig(); + config.setMaxTotal(maxConnections); + this.jedisSummoner = new JedisSummoner(new JedisPool(config, redisServer, redisPort, 0, redisPassword, useSSL)); + this.redisBungeeMode = RedisBungeeMode.SINGLE; + } + getLogger().info("Successfully connected to Redis."); + } } diff --git a/RedisBungee-Velocity/pom.xml b/RedisBungee-Velocity/pom.xml index 58bbd93..d0522d4 100644 --- a/RedisBungee-Velocity/pom.xml +++ b/RedisBungee-Velocity/pom.xml @@ -74,38 +74,31 @@ redis.clients.jedis - com.imaginarycode.minecraft.redisbungee.internal.jedis - + com.imaginarycode.minecraft.redisbungee.internal.jedis redis.clients.util - com.imaginarycode.minecraft.redisbungee.internal.jedisutil - + com.imaginarycode.minecraft.redisbungee.internal.jedisutil org.apache.commons.pool - com.imaginarycode.minecraft.redisbungee.internal.commonspool - + com.imaginarycode.minecraft.redisbungee.internal.commonspool com.squareup.okhttp - com.imaginarycode.minecraft.redisbungee.internal.okhttp - + com.imaginarycode.minecraft.redisbungee.internal.okhttp okio - com.imaginarycode.minecraft.redisbungee.internal.okio - + com.imaginarycode.minecraft.redisbungee.internal.okio org.json - com.imaginarycode.minecraft.redisbungee.internal.json - + com.imaginarycode.minecraft.redisbungee.internal.json org.checkerframework - com.imaginarycode.minecraft.redisbungee.internal.checkframework - + com.imaginarycode.minecraft.redisbungee.internal.checkframework 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 9bc68c3..49c65a9 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 @@ -9,6 +9,7 @@ import com.google.common.collect.Multimap; import com.google.common.reflect.TypeToken; import com.google.inject.Inject; import com.imaginarycode.minecraft.redisbungee.api.*; +import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration; import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner; @@ -54,7 +55,6 @@ import java.io.*; import java.net.InetAddress; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; @@ -831,87 +831,87 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { @Override public void loadConfig() throws IOException { - if (Files.notExists(getDataFolder())) { - try { - Files.createDirectory(getDataFolder()); - getLogger().info("data folder was created"); - } catch (IOException e) { - getLogger().error("Cannot create data folder", e); - } - + Path configFile = createConfigFile(getDataFolder()); + final YAMLConfigurationLoader yamlConfigurationFileLoader = YAMLConfigurationLoader.builder().setPath(configFile).build(); + ConfigurationNode node = yamlConfigurationFileLoader.load(); + if (node.getNode("config-version").getInt(0) != RedisBungeeConfiguration.CONFIG_VERSION) { + handleOldConfig(getDataFolder()); + node = yamlConfigurationFileLoader.load(); } - Path file = getDataFolder().resolve("config.yml"); - if (Files.notExists(file)) { - try (InputStream in = getResourceAsStream("example_config.yml")) { - Files.createFile(file); - Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING); - getLogger().info("config file was created"); - } catch (IOException e) { - getLogger().error("Cannot create configuration", e); - } - } - final YAMLConfigurationLoader yamlConfiguration = YAMLConfigurationLoader.builder().setPath(file).build(); - ConfigurationNode node = yamlConfiguration.load(); - final String redisServer = node.getNode("redis-server").getString("127.0.0.1"); - final int redisPort = node.getNode("redis-port").getInt(6379); final boolean useSSL = node.getNode("useSSL").getBoolean(false); + final boolean overrideBungeeCommands = node.getNode("override-bungee-commands").getBoolean(false); + final boolean registerLegacyCommands = node.getNode("register-legacy-commands").getBoolean(false); String redisPassword = node.getNode("redis-password").getString(null); - String serverId = node.getNode("server-id").getString("test-1"); + String proxyId = node.getNode("proxy-id").getString("test-1"); + final int maxConnections = node.getNode("max-redis-connections").getInt(8); + List exemptAddresses; + try { + exemptAddresses = node.getNode("exempt-ip-addresses").getList(TypeToken.of(String.class)); + } catch (ObjectMappingException e) { + exemptAddresses = Collections.emptyList(); + } // check redis password if (redisPassword != null && (redisPassword.isEmpty() || redisPassword.equals("none"))) { redisPassword = null; getLogger().warn("INSECURE setup was detected Please set password for your redis instance."); + } else if (redisPassword == null) { + getLogger().warn("INSECURE setup was detected Please set password for your redis instance."); } if (!useSSL) { getLogger().warn("INSECURE setup was detected Please setup ssl for your redis instance."); } // Configuration sanity checks. - if (serverId == null || serverId.isEmpty()) { - /* - * this check causes the config comments to disappear somehow - * I think due snake yaml limitations so as todo: write our own yaml parser? - */ + if (proxyId == null || proxyId.isEmpty()) { String genId = UUID.randomUUID().toString(); - getLogger().info("Generated server id {} and saving it to config.", genId); - node.getNode("server-id").setValue(genId); - yamlConfiguration.save(node); - getLogger().info("Server id was generated: {}", serverId); + getLogger().info("Generated proxy id {} and saving it to config.", genId); + node.getNode("proxy-id").setValue(genId); + yamlConfigurationFileLoader.save(node); + proxyId = genId; + getLogger().info("proxy id was generated: {}", proxyId); } else { - getLogger().info("Loaded server id {}.", serverId); - } - try { - this.configuration = new RedisBungeeConfiguration(serverId, node.getNode("exempt-ip-addresses").getList(TypeToken.of(String.class)), node.getNode("register-bungee-commands").getBoolean(true)); - } catch (ObjectMappingException e) { - throw new RuntimeException(e); + getLogger().info("Loaded proxy id {}.", proxyId); } + this.configuration = new RedisBungeeConfiguration(proxyId, exemptAddresses, registerLegacyCommands, overrideBungeeCommands); - if (redisServer != null && !redisServer.isEmpty()) { - if (node.getNode("cluster-mode-enabled").getBoolean(false)) { - GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); - poolConfig.setMaxTotal(node.getNode("max-redis-connections").getInt(8)); - if (redisPassword != null) { - this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(new HostAndPort(redisServer, redisPort), 5000, 5000, 60, serverId, redisPassword, poolConfig, useSSL)); - } else { - getLogger().warn("SSL option is ignored in Cluster mode if no PASSWORD is set"); - this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(new HostAndPort(redisServer, redisPort), 5000, 5000, 60, poolConfig)); - } - this.redisBungeeMode = RedisBungeeMode.CLUSTER; - getLogger().info("RedisBungee MODE: CLUSTER"); - } else { - JedisPoolConfig config = new JedisPoolConfig(); - config.setMaxTotal(node.getNode("max-redis-connections").getInt(8)); - this.jedisSummoner = new JedisSummoner(new JedisPool(config, redisServer, redisPort, 0, redisPassword, useSSL)); - this.redisBungeeMode = RedisBungeeMode.SINGLE; - getLogger().info("RedisBungee MODE: SINGLE"); + if (node.getNode("cluster-mode-enabled").getBoolean(false)) { + getLogger().info("RedisBungee MODE: CLUSTER"); + Set hostAndPortSet = new HashSet<>(); + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); + poolConfig.setMaxTotal(maxConnections); + node.getNode("redis-cluster-servers").getChildrenList().forEach((childNode) -> { + Map hostAndPort = childNode.getChildrenMap(); + String host = hostAndPort.get("host").getString(); + int port = hostAndPort.get("port").getInt(); + hostAndPortSet.add(new HostAndPort(host, port)); + }); + getLogger().info(hostAndPortSet.size() + " cluster nodes were specified"); + if (hostAndPortSet.isEmpty()) { + throw new RuntimeException("No redis cluster servers specified"); } - getLogger().info("Successfully connected to Redis."); - + if (redisPassword != null) { + this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, proxyId, redisPassword, poolConfig, useSSL)); + } else { + getLogger().warn("SSL option is ignored in Cluster mode if no PASSWORD is set"); + this.jedisSummoner = new ClusterJedisSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, poolConfig)); + } + this.redisBungeeMode = RedisBungeeMode.CLUSTER; } else { - throw new RuntimeException("No redis server specified!"); + getLogger().info("RedisBungee MODE: SINGLE"); + final String redisServer = node.getNode("redis-server").getString("127.0.0.1"); + final int redisPort = node.getNode("redis-port").getInt(6379); + if (redisServer != null && redisServer.isEmpty()) { + throw new RuntimeException("No redis server specified"); + } + JedisPoolConfig config = new JedisPoolConfig(); + config.setMaxTotal(maxConnections); + this.jedisSummoner = new JedisSummoner(new JedisPool(config, redisServer, redisPort, 0, redisPassword, useSSL)); + this.redisBungeeMode = RedisBungeeMode.SINGLE; } + getLogger().info("Successfully connected to Redis."); } + @Override public void kickPlayer(UUID playerUniqueId, String message) { // first handle on origin proxy if player not found publish the payload @@ -935,7 +935,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { @Override public void kickPlayer(String playerName, String message) { // fetch the uuid - UUID playerUUID = this.uuidTranslator.getTranslatedUuid(playerName,true); + UUID playerUUID = this.uuidTranslator.getTranslatedUuid(playerName, true); kickPlayer(playerUUID, message); } @@ -997,7 +997,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { return this.dataFolder; } - public final InputStream getResourceAsStream(String name) { - return getClass().getClassLoader().getResourceAsStream(name); + public InputStream getResourceAsStream(String name) { + return this.getClass().getClassLoader().getResourceAsStream(name); } }