diff --git a/src/dev/heliosares/auxprotect/core/Parameters.java b/src/dev/heliosares/auxprotect/core/Parameters.java index 0d776dc..8f84673 100644 --- a/src/dev/heliosares/auxprotect/core/Parameters.java +++ b/src/dev/heliosares/auxprotect/core/Parameters.java @@ -1,7 +1,7 @@ package dev.heliosares.auxprotect.core; -import dev.heliosares.auxprotect.api.AuxProtectAPI; import dev.heliosares.auxprotect.adapters.sender.SenderAdapter; +import dev.heliosares.auxprotect.api.AuxProtectAPI; import dev.heliosares.auxprotect.core.Language.L; import dev.heliosares.auxprotect.database.*; import dev.heliosares.auxprotect.exceptions.BusyException; @@ -14,33 +14,31 @@ import org.bukkit.World; import javax.annotation.Nullable; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.regex.Pattern; @SuppressWarnings({"UnusedReturnValue", "unused"}) -public class Parameters { +public class Parameters implements Cloneable { // ---------------------------------------------- // ------------------- FIELDS ------------------- // ---------------------------------------------- public final long time_created = System.currentTimeMillis(); private final IAuxProtect plugin; - private final List exactTime = new ArrayList<>(); - private final List uids = new ArrayList<>(); - private final List users = new ArrayList<>(); + private final Set exactTime = new HashSet<>(); + private final Set uids = new HashSet<>(); + private final Set targets = new HashSet<>(); + private final Set users = new HashSet<>(); // action - private final List actions = new ArrayList<>(); - private final List datas = new ArrayList<>(); + private final Set actions = new HashSet<>(); + private final Set datas = new HashSet<>(); // radius private final HashMap radius = new HashMap<>(); - private final List worlds = new ArrayList<>(); + private final Set worlds = new HashSet<>(); // flags - private final List flags = new ArrayList<>(); + private final Set flags = new HashSet<>(); // ratings - private final List ratings = new ArrayList<>(); + private final Set ratings = new HashSet<>(); // user boolean negateUser; // target @@ -52,7 +50,6 @@ public class Parameters { // time private long after; private long before = Long.MAX_VALUE; - private List targets = new ArrayList<>(); // table private Table table; private Location location; @@ -202,7 +199,7 @@ public class Parameters { } if (parameters.flags.contains(Flag.BW)) { parameters.uids.addAll(parameters.targets); - parameters.targets = parameters.uids; + parameters.targets.addAll(parameters.uids); } if (parameters.flags.contains(Flag.ACTIVITY) || parameters.flags.contains(Flag.PT)) { if (parameters.users.size() > 1) { @@ -687,7 +684,7 @@ public class Parameters { return before; } - public List getExactTime() { + public Set getExactTime() { return exactTime; } @@ -700,15 +697,15 @@ public class Parameters { * * @return the list of users */ - public List getUsers() { + public Set getUsers() { return users; } - public List getUIDs() { + public Set getUIDs() { return uids; } - public List getActions() { + public Set getActions() { return actions; } @@ -716,7 +713,7 @@ public class Parameters { return negateTarget; } - public List getTargets() { + public Set getTargets() { return targets; } @@ -724,7 +721,7 @@ public class Parameters { return negateData; } - public List getDatas() { + public Set getDatas() { return datas; } @@ -754,15 +751,15 @@ public class Parameters { return this; } - public List getWorld() { + public Set getWorld() { return worlds; } - public List getFlags() { + public Set getFlags() { return flags; } - public List getRatings() { + public Set getRatings() { return ratings; } @@ -996,10 +993,10 @@ public class Parameters { Math.abs(entry.getZ() - location.getBlockZ())); } - private String toGroup(List list) { + private String toGroup(Set set) { StringBuilder stmt = new StringBuilder("("); boolean first = true; - for (Object id : list) { + for (Object id : set) { if (first) { first = false; } else { @@ -1010,6 +1007,51 @@ public class Parameters { return stmt + ")"; } + @Override + public Parameters clone() { + try { + Parameters clone = (Parameters) super.clone(); + clone.exactTime.clear(); + clone.exactTime.addAll(exactTime); + + clone.uids.clear(); + clone.uids.addAll(uids); + + clone.targets.clear(); + clone.targets.addAll(targets); + + clone.users.clear(); + clone.users.addAll(users); + + clone.actions.clear(); + clone.actions.addAll(actions); + + clone.datas.clear(); + clone.datas.addAll(datas); + + clone.worlds.clear(); + clone.worlds.addAll(worlds); + + clone.ratings.clear(); + clone.ratings.addAll(ratings); + + clone.negateUser = negateUser; + clone.negateTarget = negateTarget; + clone.negateData = negateData; + clone.negateWorld = negateWorld; + + clone.after = after; + clone.before = Long.MAX_VALUE; + clone.table = table; + + if (location != null) clone.location = location.clone(); + + return clone; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + public enum Flag { COUNT(null), COUNT_ONLY(null), PT(APPermission.LOOKUP_PLAYTIME), XRAY(APPermission.LOOKUP_XRAY), BW(null), MONEY(APPermission.LOOKUP_MONEY), ACTIVITY(APPermission.LOOKUP_ACTIVITY), PLAYBACK(APPermission.LOOKUP_PLAYBACK), INCREMENTAL_POS(APPermission.LOOKUP_PLAYBACK), diff --git a/src/dev/heliosares/auxprotect/core/commands/LookupCommand.java b/src/dev/heliosares/auxprotect/core/commands/LookupCommand.java index 1f433a9..b4a34ac 100644 --- a/src/dev/heliosares/auxprotect/core/commands/LookupCommand.java +++ b/src/dev/heliosares/auxprotect/core/commands/LookupCommand.java @@ -351,7 +351,7 @@ public class LookupCommand extends Command { } return; } else if (params.getFlags().contains(Flag.PT)) { - List users = params.getUsers(); + Set users = params.getUsers(); if (users.size() == 0) { sender.sendLang(Language.L.COMMAND__LOOKUP__PLAYTIME__NOUSER); return; @@ -360,7 +360,7 @@ public class LookupCommand extends Command { sender.sendLang(Language.L.COMMAND__LOOKUP__PLAYTIME__TOOMANYUSERS); return; } - String name = users.get(0); + String name = users.stream().findAny().orElse(null); sender.sendMessage(PlayTimeSolver.solvePlaytime(rs, params.getAfter(), params.getBefore() == Long.MAX_VALUE ? System.currentTimeMillis() : params.getBefore(), @@ -390,7 +390,7 @@ public class LookupCommand extends Command { } } } else if (params.getFlags().contains(Flag.MONEY) && sender.getPlatform() == PlatformType.SPIGOT) { - List users = params.getUsers(); + Set users = params.getUsers(); if (users.size() == 0) { sender.sendLang(Language.L.COMMAND__LOOKUP__PLAYTIME__NOUSER); return; @@ -401,7 +401,7 @@ public class LookupCommand extends Command { } if (sender.getSender() instanceof org.bukkit.entity.Player player) { MoneySolver.showMoney(plugin, player, rs, (int) Math.round((double) params.getAfter() / (1000 * 3600)), - users.get(0)); + users.stream().findAny().orElse(null)); } return; } else if (params.getFlags().contains(Flag.RETENTION)) {