From ccd2e55fff8aed9655d8640943e6bdf0dad6fc6b Mon Sep 17 00:00:00 2001 From: Internal-Exception Date: Wed, 15 Jun 2022 20:49:37 -0400 Subject: [PATCH] 1.1.1 --- bungee.yml | 2 +- plugin.yml | 2 +- pom.xml | 2 +- src/dev/heliosares/auxprotect/APConfig.java | 18 +++-- src/dev/heliosares/auxprotect/AuxProtect.java | 7 +- .../heliosares/auxprotect/IAuxProtect.java | 2 + .../auxprotect/bungee/AuxProtectBungee.java | 29 +++++--- .../auxprotect/command/APCommand.java | 1 - .../auxprotect/command/LookupCommand.java | 1 + .../auxprotect/command/LookupCommandTab.java | 1 + .../auxprotect/database/Results.java | 18 +++-- .../auxprotect/database/SQLManager.java | 69 ++++++++++++++++++- .../heliosares/auxprotect/utils/TimeUtil.java | 8 +-- 13 files changed, 125 insertions(+), 35 deletions(-) diff --git a/bungee.yml b/bungee.yml index e970de2..aa5b32f 100644 --- a/bungee.yml +++ b/bungee.yml @@ -1,4 +1,4 @@ name: AuxProtectBungee main: dev.heliosares.auxprotect.bungee.AuxProtectBungee -version: 1.1-pre1 +version: 1.1.1 author: Heliosares \ No newline at end of file diff --git a/plugin.yml b/plugin.yml index fa4d5ae..4e81ba1 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,5 +1,5 @@ name: AuxProtect -version: 1.1 +version: 1.1.1 main: dev.heliosares.auxprotect.AuxProtect description: A plugin designed to supplement CoreProtect in a few ways. api-version: 1.13 diff --git a/pom.xml b/pom.xml index 9ed7f23..d5b5bb3 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 AuxProtect AuxProtect - 1.1 + 1.1.1 AuxProtect ${project.artifactId}-${project.version} diff --git a/src/dev/heliosares/auxprotect/APConfig.java b/src/dev/heliosares/auxprotect/APConfig.java index 4bdf683..70611be 100644 --- a/src/dev/heliosares/auxprotect/APConfig.java +++ b/src/dev/heliosares/auxprotect/APConfig.java @@ -3,10 +3,10 @@ package dev.heliosares.auxprotect; import org.bukkit.configuration.file.FileConfiguration; import dev.heliosares.auxprotect.database.EntryAction; +import net.md_5.bungee.config.Configuration; public class APConfig { - private final FileConfiguration config; private boolean privateRelease = false; public boolean inventoryOnWorldChange; public boolean checkforupdates; @@ -19,10 +19,6 @@ public class APConfig { } public APConfig(FileConfiguration config) { - this.config = config; - } - - public void load() { privateRelease = config.getBoolean("private"); checkforupdates = config.getBoolean("checkforupdates", true); inventoryOnWorldChange = config.getBoolean("Actions.inventory.WorldChange", false); @@ -34,4 +30,16 @@ public class APConfig { action.setEnabled(enabled); } } + + public APConfig(Configuration config) { + privateRelease = config.getBoolean("private"); + checkforupdates = config.getBoolean("checkforupdates", true); + for (EntryAction action : EntryAction.values()) { + if (!action.isBungee()) { + continue; + } + boolean enabled = config.getBoolean("Actions." + action.toString().toLowerCase() + ".Enabled", true); + action.setEnabled(enabled); + } + } } diff --git a/src/dev/heliosares/auxprotect/AuxProtect.java b/src/dev/heliosares/auxprotect/AuxProtect.java index ed3b69f..078885e 100644 --- a/src/dev/heliosares/auxprotect/AuxProtect.java +++ b/src/dev/heliosares/auxprotect/AuxProtect.java @@ -74,7 +74,6 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect { debug = getConfig().getInt("debug", 0); config = new APConfig(this.getConfig()); - config.load(); YMLManager langManager = new YMLManager("en-us", this); langManager.load(true); @@ -549,4 +548,10 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect { public int queueSize() { return dbRunnable.queueSize(); } + + @Override + public void reloadConfig() { + super.reloadConfig(); + config = new APConfig(this.getConfig()); + } } diff --git a/src/dev/heliosares/auxprotect/IAuxProtect.java b/src/dev/heliosares/auxprotect/IAuxProtect.java index 590ee6c..d85068b 100644 --- a/src/dev/heliosares/auxprotect/IAuxProtect.java +++ b/src/dev/heliosares/auxprotect/IAuxProtect.java @@ -37,4 +37,6 @@ public interface IAuxProtect { public void runAsync(Runnable run); public void runSync(Runnable runnable); + + public void reloadConfig(); } diff --git a/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java b/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java index 309e837..114a246 100644 --- a/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java +++ b/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java @@ -42,7 +42,8 @@ import net.md_5.bungee.config.YamlConfiguration; @SuppressWarnings("unused") public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { - protected Configuration config; + protected Configuration configurationFile; + public APConfig config; public Language lang; public int debug; SQLManager sqlManager; @@ -64,14 +65,14 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { lang = new Language(langManager.getData()); File sqliteFile = null; - boolean mysql = config.getBoolean("MySQL.use", false); - String user = config.getString("MySQL.username", ""); - String pass = config.getString("MySQL.password", ""); + boolean mysql = configurationFile.getBoolean("MySQL.use", false); + String user = configurationFile.getString("MySQL.username", ""); + String pass = configurationFile.getString("MySQL.password", ""); String uri = ""; if (mysql) { - String host = config.getString("MySQL.host", "localhost"); - String port = config.getString("MySQL.port", "3306"); - String database = config.getString("MySQL.database", "database"); + String host = configurationFile.getString("MySQL.host", "localhost"); + String port = configurationFile.getString("MySQL.port", "3306"); + String database = configurationFile.getString("MySQL.database", "database"); uri = String.format("jdbc:mysql://%s:%s/%s", host, port, database); } else { sqliteFile = new File(getDataFolder(), "database/auxprotect.db"); @@ -95,7 +96,7 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { } uri = "jdbc:sqlite:" + sqliteFile.getAbsolutePath(); } - sqlManager = new SQLManager(this, uri, config.getString("MySQL.table-prefix"), sqliteFile); + sqlManager = new SQLManager(this, uri, configurationFile.getString("MySQL.table-prefix"), sqliteFile); runAsync(new Runnable() { @@ -164,11 +165,13 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { } } try { - config = ConfigurationProvider.getProvider(YamlConfiguration.class) + configurationFile = ConfigurationProvider.getProvider(YamlConfiguration.class) .load(new File(getDataFolder(), "config.yml")); } catch (IOException e) { print(e); } + + config = new APConfig(configurationFile); } @Override @@ -230,8 +233,7 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { @Override public APConfig getAPConfig() { - // TODO Implement APConfig - return null; + return config; } @Override @@ -261,4 +263,9 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { } return "#null"; } + + @Override + public void reloadConfig() { + config = new APConfig(configurationFile); + } } diff --git a/src/dev/heliosares/auxprotect/command/APCommand.java b/src/dev/heliosares/auxprotect/command/APCommand.java index 80427da..11be660 100644 --- a/src/dev/heliosares/auxprotect/command/APCommand.java +++ b/src/dev/heliosares/auxprotect/command/APCommand.java @@ -174,7 +174,6 @@ public class APCommand implements CommandExecutor { // plugin.config.save(); // plugin.saveConfig(); plugin.reloadConfig(); - plugin.config.load(); sender.sendMessage("§aConfig reloaded"); return true; } else if (args[0].equalsIgnoreCase("stats")) { diff --git a/src/dev/heliosares/auxprotect/command/LookupCommand.java b/src/dev/heliosares/auxprotect/command/LookupCommand.java index 704ec4f..028b8e6 100644 --- a/src/dev/heliosares/auxprotect/command/LookupCommand.java +++ b/src/dev/heliosares/auxprotect/command/LookupCommand.java @@ -34,6 +34,7 @@ public class LookupCommand { validParams.add("after"); validParams.add("before"); validParams.add("target"); + validParams.add("data"); validParams.add("time"); validParams.add("world"); validParams.add("user"); diff --git a/src/dev/heliosares/auxprotect/command/LookupCommandTab.java b/src/dev/heliosares/auxprotect/command/LookupCommandTab.java index 62bc97d..cbbc353 100644 --- a/src/dev/heliosares/auxprotect/command/LookupCommandTab.java +++ b/src/dev/heliosares/auxprotect/command/LookupCommandTab.java @@ -42,6 +42,7 @@ public class LookupCommandTab implements TabCompleter { possible.add("action:"); possible.add("world:"); possible.add("user:"); + possible.add("data:"); if (currentArg.startsWith("action:") || currentArg.startsWith("a:")) { String action = currentArg.split(":")[0] + ":"; for (EntryAction eaction : EntryAction.values()) { diff --git a/src/dev/heliosares/auxprotect/database/Results.java b/src/dev/heliosares/auxprotect/database/Results.java index 06ad2f8..67f0184 100644 --- a/src/dev/heliosares/auxprotect/database/Results.java +++ b/src/dev/heliosares/auxprotect/database/Results.java @@ -78,13 +78,17 @@ public class Results { en.getUser())) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(Instant.ofEpochMilli(en.getTime()).atZone(ZoneId.systemDefault()).format(formatter) - + "\n§7Click to copy epoch time."))) + + "\n§7Click to copy epoch time. (" + en.getTime() + "ms)"))) .event(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, en.getTime() + "e")); // message.append(String.format(" §f- §9%s §f%s §9%s§f", en.getUser(), // en.getAction().getText(plugin, en.getState()), // en.getTarget())).event((HoverEvent) null); - message.append(" §f- ").event((HoverEvent) null); + String actionColor = "§7-"; + if (en.getAction().hasDual) { + actionColor = en.getState() ? "§a+" : "§c-"; + } + message.append(" " + actionColor + " ").event((HoverEvent) null); HoverEvent clickToCopy = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Click to copy to clipboard")); message.append("§9" + en.getUser()).event(clickToCopy) @@ -111,6 +115,7 @@ public class Results { String.format(commandPrefix + " inv %d", i))) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!"))); } + data = null;// So data doesn't print } else if (en.getAction().equals(EntryAction.KILL)) { if (MyPermission.INV.hasPermission(player) && !en.getTarget().startsWith("#")) { message.append(" §a[View Inv]").event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, @@ -118,10 +123,9 @@ public class Results { en.getTarget(), en.getTime() + 50L, en.getTime() - 50L))) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!"))); } - message.append(" §7(" + data + ")").event(clickToCopy) - .event(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, en.getData())); - } else if (data != null && data.length() > 0) { - message.append(" §7(" + data + ")").event(clickToCopy) + } + if (data != null && data.length() > 0) { + message.append(" §8[§7" + data + "§8]").event(clickToCopy) .event(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, en.getData())); } if (en.world != null && !en.world.equals("$null")) { @@ -129,7 +133,7 @@ public class Results { if (en.getAction().getTable().hasLook()) { tpCommand += String.format(" %d %d", en.pitch, en.yaw); } - message.append("\n §7§l^ ").event((HoverEvent) null).event((ClickEvent) null); + message.append("\n ").event((HoverEvent) null).event((ClickEvent) null); message.append(String.format("§7(x%d/y%d/z%d/%s)", en.x, en.y, en.z, en.world)) .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, tpCommand)) .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§7" + tpCommand))); diff --git a/src/dev/heliosares/auxprotect/database/SQLManager.java b/src/dev/heliosares/auxprotect/database/SQLManager.java index b60eaba..af3c494 100644 --- a/src/dev/heliosares/auxprotect/database/SQLManager.java +++ b/src/dev/heliosares/auxprotect/database/SQLManager.java @@ -855,6 +855,8 @@ public class SQLManager { ArrayList writeParams = new ArrayList<>(); ArrayList targets = new ArrayList<>(); boolean targetNot = false; + ArrayList datas = new ArrayList<>(); + boolean dataNot = false; if (exact && !params.containsKey("radius")) { if (location == null) { return null; @@ -898,13 +900,46 @@ public class SQLManager { plugin.translate("lookup-action-negate")); } } - for (String param : value.split(",")) { + String build = ""; + boolean escape = false; + ArrayList values = new ArrayList<>(); + for (char current : value.toCharArray()) { + if (current == '\\') { + escape = true; + continue; + } + if (!escape && current == ',') { + values.add(build); + build = ""; + continue; + } + if (escape && current != ',') { + build += '\\'; + } + build += current; + + if (escape) { + escape = false; + } + } + if (escape) { + build += '\\'; + } + if (build.length() > 0) { + values.add(build); + } + for (String param : values) { String theStmt = ""; if (key.equalsIgnoreCase("target")) { if (not) { targetNot = true; } targets.add(param); + } else if (key.equalsIgnoreCase("data")) { + if (not) { + dataNot = true; + } + datas.add(param); } else if (key.equalsIgnoreCase("user")) { int uid = this.getUIDFromUsername(param); int altuid = this.getUIDFromUUID(param); @@ -1037,6 +1072,34 @@ public class SQLManager { dos.put("target", targetArray); } } + ArrayList dataArray = new ArrayList<>(); + for (String data : datas) { + String theStmt = ""; + if (data.contains("*")) { + theStmt = "data LIKE ? OR data LIKE ?"; + writeParams.add(data.replaceAll("-", " ").replaceAll("\\*", "%")); + writeParams.add(data.replaceAll("\\*", "%")); + } else { + if (theStmt.length() > 0) { + theStmt += " OR "; + } + theStmt += "lower(data) = ? OR lower(data) = ?"; + writeParams.add(data.toLowerCase()); + writeParams.add(data.toLowerCase().replaceAll("-", " ")); + + } + + if (theStmt.length() > 0) { + dataArray.add(theStmt); + } + } + if (dataArray.size() > 0) { + if (dataNot) { + donts.put("data", dataArray); + } else { + dos.put("data", dataArray); + } + } String stmt = "\nWHERE ("; int conditions = 0; int i = 0; @@ -1063,7 +1126,7 @@ public class SQLManager { } i = 0; if (donts.size() > 0) { - if (donts.size() > 0) { + if (dos.size() > 0) { stmt += " AND "; } stmt += "NOT ("; @@ -1410,7 +1473,7 @@ public class SQLManager { plugin.print(e); } } - + return out; } diff --git a/src/dev/heliosares/auxprotect/utils/TimeUtil.java b/src/dev/heliosares/auxprotect/utils/TimeUtil.java index 6f1e5c2..8f0e34e 100644 --- a/src/dev/heliosares/auxprotect/utils/TimeUtil.java +++ b/src/dev/heliosares/auxprotect/utils/TimeUtil.java @@ -4,18 +4,18 @@ public class TimeUtil { public static String millisToString(double millis) { millis /= 1000.0; if (millis < 60) { - return padDouble(roundToPlaces(millis, 2)) + "/s"; + return padDouble(roundToPlaces(millis, 2)) + "s"; } millis /= 60.0; if (millis < 60) { - return padDouble(roundToPlaces(millis, 2)) + "/m"; + return padDouble(roundToPlaces(millis, 2)) + "m"; } millis /= 60.0; if (millis < 24) { - return padDouble(roundToPlaces(millis, 2)) + "/h"; + return padDouble(roundToPlaces(millis, 2)) + "h"; } millis /= 24.0; - return padDouble(roundToPlaces(millis, 2)) + "/d"; + return padDouble(roundToPlaces(millis, 2)) + "d"; } private static String padDouble(double d) {