diff --git a/RediSkript-bukkit/pom.xml b/RediSkript-bukkit/pom.xml index 545b26c..493d115 100644 --- a/RediSkript-bukkit/pom.xml +++ b/RediSkript-bukkit/pom.xml @@ -5,7 +5,7 @@ RediSkript net.limework - 1.3.5 + 1.3.6-SNAPSHOT 4.0.0 @@ -73,11 +73,6 @@ 1.16.5-R0.1-SNAPSHOT provided - - redis.clients - jedis - 3.8.0 - net.limework RediSkript-core diff --git a/RediSkript-bukkit/src/main/java/net/limework/rediskript/managers/RedisController.java b/RediSkript-bukkit/src/main/java/net/limework/rediskript/managers/RedisController.java index e0e768d..f5e1294 100644 --- a/RediSkript-bukkit/src/main/java/net/limework/rediskript/managers/RedisController.java +++ b/RediSkript-bukkit/src/main/java/net/limework/rediskript/managers/RedisController.java @@ -47,18 +47,30 @@ public class RedisController extends BinaryJedisPubSub implements Runnable { int maxConnections = config.getInt("Redis.MaxConnections"); //do not allow less than 2 max connections as that causes issues - if (maxConnections < 2) { maxConnections = 2; } + if (maxConnections < 2) { + maxConnections = 2; + } JConfig.setMaxTotal(maxConnections); JConfig.setMaxIdle(maxConnections); JConfig.setMinIdle(1); JConfig.setBlockWhenExhausted(true); - this.jedisPool = new JedisPool(JConfig, - config.getString("Redis.Host"), - config.getInt("Redis.Port"), - config.getInt("Redis.TimeOut"), - config.getString("Redis.Password"), - config.getBoolean("Redis.useTLS")); + final String password = config.getString("Redis.Password", ""); + if (password.isEmpty()) { + this.jedisPool = new JedisPool(JConfig, + config.getString("Redis.Host", "127.0.0.1"), + config.getInt("Redis.Port", 6379), + config.getInt("Redis.TimeOut", 9000), + config.getBoolean("Redis.useTLS", false)); + } else { + this.jedisPool = new JedisPool(JConfig, + config.getString("Redis.Host", "127.0.0.1"), + config.getInt("Redis.Port", 6379), + config.getInt("Redis.TimeOut", 9000), + password, + config.getBoolean("Redis.useTLS", false)); + } + encryption = new Encryption(config.getBoolean("Redis.EncryptMessages"), config.getString("Redis.EncryptionKey"), config.getString("Redis.MacKey")); @@ -102,162 +114,162 @@ public class RedisController extends BinaryJedisPubSub implements Runnable { } @Override - public void onMessage(byte[] channel, byte[] message){ - String channelString = new String(channel, StandardCharsets.UTF_8); - String receivedMessage = null; - try { - //if encryption is enabled, decrypt the message, else just convert binary to string - if (this.encryption.isEncryptionEnabled()) { - try { - receivedMessage = encryption.decrypt(message); - } catch (UnauthenticCiphertextException | IllegalBlockSizeException e) { - e.printStackTrace(); - } - - } else { - //encryption is disabled, so let's just get the string - receivedMessage = new String(message, StandardCharsets.UTF_8); + public void onMessage(byte[] channel, byte[] message) { + String channelString = new String(channel, StandardCharsets.UTF_8); + String receivedMessage = null; + try { + //if encryption is enabled, decrypt the message, else just convert binary to string + if (this.encryption.isEncryptionEnabled()) { + try { + receivedMessage = encryption.decrypt(message); + } catch (UnauthenticCiphertextException | IllegalBlockSizeException e) { + e.printStackTrace(); } - if (receivedMessage != null) { - JSONObject j = new JSONObject(receivedMessage); - if (j.get("Type").equals("Skript")) { - JSONArray messages = j.getJSONArray("Messages"); - RedisMessageEvent event; - for (int i = 0; i < messages.length(); i++) { - event = new RedisMessageEvent(channelString, messages.get(i).toString(), j.getLong("Date")); - //if plugin is disabling, don't call events anymore - if (plugin.isEnabled()) { - RedisMessageEvent finalEvent = event; - Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(finalEvent)); - } - } - } else if (j.get("Type").equals("SkriptVariables")) { - //Transfer variables between servers - - JSONArray varNames = j.getJSONArray("Names"); - Object inputValue; - String changeValue = null; - JSONArray varValues = null; - if (!j.isNull("Values")) { - varValues = j.getJSONArray("Values"); - } - for (int i = 0; i < varNames.length(); i++) { - String varName = varNames.get(i).toString(); - if (j.isNull("Values")) { - - // only check for SET here, because null has to be ignored in all other cases - if (j.getString("Operation").equals("SET")) { - Variables.setVariable(varName, null, null, false); - } - - } else { - if (!varValues.isNull(i)) { - changeValue = varValues.get(i).toString(); - } - String[] inputs = changeValue.split("\\^", 2); - inputValue = Classes.deserialize(inputs[0], Base64.getDecoder().decode(inputs[1])); - switch (j.getString("Operation")) { - case "ADD": - if (varName.charAt(varName.length() - 1) == '*') { - plugin.getLogger().log(Level.WARNING, "Adding to {::*} variables in RediSkript is not supported. Variable name: " + varName); - continue; - } - Object variable = Variables.getVariable(varName, null, false); - if (variable == null) { - Variables.setVariable(varName, inputValue, null, false); - } else if (variable instanceof Long) { - if (inputValue instanceof Long) { - Variables.setVariable(varName, (Long) variable + (Long) inputValue, null, false); - } else if (inputValue instanceof Double) { - - // convert Long variable to Double - variable = Double.valueOf((Long) variable); - Variables.setVariable(varName, (Double) variable + (Double) inputValue, null, false); - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported add action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); - continue; - } - } else if (variable instanceof Double) { - if (inputValue instanceof Double) { - Variables.setVariable(varName, (Double) variable + (Double) inputValue, null, false); - } else if (inputValue instanceof Long) { - Variables.setVariable(varName, (Double) variable + ((Long) inputValue).doubleValue(), null, false); - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported add action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); - continue; - } - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported variable type in add action (" + variable.getClass().getName() + ") on variable: " + varName); - continue; - } - break; - case "REMOVE": - if (varName.charAt(varName.length() - 1) == '*') { - plugin.getLogger().log(Level.WARNING, "Removing from {::*} variables in RediSkript is not supported. Variable name: " + varName); - continue; - } - variable = Variables.getVariable(varName, null, false); - if (variable == null) { - if (inputValue instanceof Long) { - Variables.setVariable(varName, -(Long) inputValue, null, false); - } else if (inputValue instanceof Double) { - Variables.setVariable(varName, -(Double) inputValue, null, false); - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported remove action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); - continue; - } - } else if (variable instanceof Long) { - if (inputValue instanceof Long) { - Variables.setVariable(varName, (Long) variable - (Long) inputValue, null, false); - } else if (inputValue instanceof Double) { - - // convert Long variable to Double - variable = Double.valueOf((Long) variable); - Variables.setVariable(varName, (Double) variable - (Double) inputValue, null, false); - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported remove action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); - continue; - } - } else if (variable instanceof Double) { - if (inputValue instanceof Double) { - Variables.setVariable(varName, (Double) variable - (Double) inputValue, null, false); - } else if (inputValue instanceof Long) { - Variables.setVariable(varName, (Double) variable - ((Long) inputValue).doubleValue(), null, false); - } - } else { - // Not supported input type - plugin.getLogger().log(Level.WARNING, "Unsupported variable type in remove action (" + variable.getClass().getName() + ") on variable: " + varName); - continue; - } - break; - case "SET": - - //this is needed, because setting a {variable::*} causes weird behavior, like - //1st set operation is no data, 2nd has data, etc. - //if you set it to null before action, it works correctly - if (varName.charAt(varName.length() - 1) == '*') { - Variables.setVariable(varName, null, null, false); - } - Variables.setVariable(varNames.get(i).toString(), inputValue, null, false); - break; - - } - } - } - } - } - } catch (Exception e) { - plugin.sendErrorLogs("&cI got a message that was empty from channel " + channelString + " please check your code that you used to send the message. Message content:"); - plugin.sendErrorLogs(receivedMessage); - e.printStackTrace(); + } else { + //encryption is disabled, so let's just get the string + receivedMessage = new String(message, StandardCharsets.UTF_8); } + if (receivedMessage != null) { + JSONObject j = new JSONObject(receivedMessage); + if (j.get("Type").equals("Skript")) { + JSONArray messages = j.getJSONArray("Messages"); + RedisMessageEvent event; + for (int i = 0; i < messages.length(); i++) { + event = new RedisMessageEvent(channelString, messages.get(i).toString(), j.getLong("Date")); + //if plugin is disabling, don't call events anymore + if (plugin.isEnabled()) { + RedisMessageEvent finalEvent = event; + Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(finalEvent)); + } + } + } else if (j.get("Type").equals("SkriptVariables")) { + + //Transfer variables between servers + + JSONArray varNames = j.getJSONArray("Names"); + Object inputValue; + String changeValue = null; + JSONArray varValues = null; + if (!j.isNull("Values")) { + varValues = j.getJSONArray("Values"); + } + for (int i = 0; i < varNames.length(); i++) { + String varName = varNames.get(i).toString(); + if (j.isNull("Values")) { + + // only check for SET here, because null has to be ignored in all other cases + if (j.getString("Operation").equals("SET")) { + Variables.setVariable(varName, null, null, false); + } + + } else { + if (!varValues.isNull(i)) { + changeValue = varValues.get(i).toString(); + } + String[] inputs = changeValue.split("\\^", 2); + inputValue = Classes.deserialize(inputs[0], Base64.getDecoder().decode(inputs[1])); + switch (j.getString("Operation")) { + case "ADD": + if (varName.charAt(varName.length() - 1) == '*') { + plugin.getLogger().log(Level.WARNING, "Adding to {::*} variables in RediSkript is not supported. Variable name: " + varName); + continue; + } + Object variable = Variables.getVariable(varName, null, false); + if (variable == null) { + Variables.setVariable(varName, inputValue, null, false); + } else if (variable instanceof Long) { + if (inputValue instanceof Long) { + Variables.setVariable(varName, (Long) variable + (Long) inputValue, null, false); + } else if (inputValue instanceof Double) { + + // convert Long variable to Double + variable = Double.valueOf((Long) variable); + Variables.setVariable(varName, (Double) variable + (Double) inputValue, null, false); + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported add action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); + continue; + } + } else if (variable instanceof Double) { + if (inputValue instanceof Double) { + Variables.setVariable(varName, (Double) variable + (Double) inputValue, null, false); + } else if (inputValue instanceof Long) { + Variables.setVariable(varName, (Double) variable + ((Long) inputValue).doubleValue(), null, false); + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported add action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); + continue; + } + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported variable type in add action (" + variable.getClass().getName() + ") on variable: " + varName); + continue; + } + break; + case "REMOVE": + if (varName.charAt(varName.length() - 1) == '*') { + plugin.getLogger().log(Level.WARNING, "Removing from {::*} variables in RediSkript is not supported. Variable name: " + varName); + continue; + } + variable = Variables.getVariable(varName, null, false); + if (variable == null) { + if (inputValue instanceof Long) { + Variables.setVariable(varName, -(Long) inputValue, null, false); + } else if (inputValue instanceof Double) { + Variables.setVariable(varName, -(Double) inputValue, null, false); + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported remove action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); + continue; + } + } else if (variable instanceof Long) { + if (inputValue instanceof Long) { + Variables.setVariable(varName, (Long) variable - (Long) inputValue, null, false); + } else if (inputValue instanceof Double) { + + // convert Long variable to Double + variable = Double.valueOf((Long) variable); + Variables.setVariable(varName, (Double) variable - (Double) inputValue, null, false); + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported remove action of data type (" + inputValue.getClass().getName() + ") on variable: " + varName); + continue; + } + } else if (variable instanceof Double) { + if (inputValue instanceof Double) { + Variables.setVariable(varName, (Double) variable - (Double) inputValue, null, false); + } else if (inputValue instanceof Long) { + Variables.setVariable(varName, (Double) variable - ((Long) inputValue).doubleValue(), null, false); + } + } else { + // Not supported input type + plugin.getLogger().log(Level.WARNING, "Unsupported variable type in remove action (" + variable.getClass().getName() + ") on variable: " + varName); + continue; + } + break; + case "SET": + + //this is needed, because setting a {variable::*} causes weird behavior, like + //1st set operation is no data, 2nd has data, etc. + //if you set it to null before action, it works correctly + if (varName.charAt(varName.length() - 1) == '*') { + Variables.setVariable(varName, null, null, false); + } + Variables.setVariable(varNames.get(i).toString(), inputValue, null, false); + break; + + } + } + } + } + } + } catch (Exception e) { + plugin.sendErrorLogs("&cI got a message that was empty from channel " + channelString + " please check your code that you used to send the message. Message content:"); + plugin.sendErrorLogs(receivedMessage); + e.printStackTrace(); } + } public void sendMessage(String[] message, String channel) { JSONObject json = new JSONObject(); @@ -293,17 +305,17 @@ public class RedisController extends BinaryJedisPubSub implements Runnable { //so to avoid issues, it's best to do it always on separate thread if (plugin.isEnabled()) { plugin.getServer().getScheduler().runTaskAsynchronously(plugin, () -> { - try (BinaryJedis j = jedisPool.getResource()) { + try (Jedis j = jedisPool.getResource()) { j.publish(channel.getBytes(StandardCharsets.UTF_8), message); } catch (Exception e) { plugin.sendErrorLogs("Error sending redis message!"); e.printStackTrace(); - } + } }); } else { //execute sending of redis message on the main thread if plugin is disabling //so it can still process the sending - try (BinaryJedis j = jedisPool.getResource()) { + try (Jedis j = jedisPool.getResource()) { j.publish(channel.getBytes(StandardCharsets.UTF_8), message); } catch (Exception e) { e.printStackTrace(); diff --git a/RediSkript-core/pom.xml b/RediSkript-core/pom.xml index 8ff388c..e2e151b 100644 --- a/RediSkript-core/pom.xml +++ b/RediSkript-core/pom.xml @@ -5,21 +5,10 @@ RediSkript net.limework - 1.3.5 + 1.3.6-SNAPSHOT 4.0.0 RediSkript-core - - - - redis.clients - jedis - 3.8.0 - provided - - - - diff --git a/pom.xml b/pom.xml index fa0d3fb..e838ff6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.limework RediSkript - 1.3.5 + 1.3.6-SNAPSHOT RediSkript-core RediSkript-bukkit @@ -43,7 +43,7 @@ org.json json - 20210307 + 20220320 org.cryptomator @@ -54,7 +54,12 @@ org.apache.commons commons-pool2 - 2.6.2 + 2.11.1 + + + redis.clients + jedis + 4.2.2