Make Parameters cloneable
This commit is contained in:
@@ -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<Long> exactTime = new ArrayList<>();
|
||||
private final List<String> uids = new ArrayList<>();
|
||||
private final List<String> users = new ArrayList<>();
|
||||
private final Set<Long> exactTime = new HashSet<>();
|
||||
private final Set<String> uids = new HashSet<>();
|
||||
private final Set<String> targets = new HashSet<>();
|
||||
private final Set<String> users = new HashSet<>();
|
||||
// action
|
||||
private final List<Integer> actions = new ArrayList<>();
|
||||
private final List<String> datas = new ArrayList<>();
|
||||
private final Set<Integer> actions = new HashSet<>();
|
||||
private final Set<String> datas = new HashSet<>();
|
||||
// radius
|
||||
private final HashMap<Integer, Boolean> radius = new HashMap<>();
|
||||
private final List<String> worlds = new ArrayList<>();
|
||||
private final Set<String> worlds = new HashSet<>();
|
||||
// flags
|
||||
private final List<Flag> flags = new ArrayList<>();
|
||||
private final Set<Flag> flags = new HashSet<>();
|
||||
// ratings
|
||||
private final List<Short> ratings = new ArrayList<>();
|
||||
private final Set<Short> 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<String> 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<Long> getExactTime() {
|
||||
public Set<Long> getExactTime() {
|
||||
return exactTime;
|
||||
}
|
||||
|
||||
@@ -700,15 +697,15 @@ public class Parameters {
|
||||
*
|
||||
* @return the list of users
|
||||
*/
|
||||
public List<String> getUsers() {
|
||||
public Set<String> getUsers() {
|
||||
return users;
|
||||
}
|
||||
|
||||
public List<String> getUIDs() {
|
||||
public Set<String> getUIDs() {
|
||||
return uids;
|
||||
}
|
||||
|
||||
public List<Integer> getActions() {
|
||||
public Set<Integer> getActions() {
|
||||
return actions;
|
||||
}
|
||||
|
||||
@@ -716,7 +713,7 @@ public class Parameters {
|
||||
return negateTarget;
|
||||
}
|
||||
|
||||
public List<String> getTargets() {
|
||||
public Set<String> getTargets() {
|
||||
return targets;
|
||||
}
|
||||
|
||||
@@ -724,7 +721,7 @@ public class Parameters {
|
||||
return negateData;
|
||||
}
|
||||
|
||||
public List<String> getDatas() {
|
||||
public Set<String> getDatas() {
|
||||
return datas;
|
||||
}
|
||||
|
||||
@@ -754,15 +751,15 @@ public class Parameters {
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getWorld() {
|
||||
public Set<String> getWorld() {
|
||||
return worlds;
|
||||
}
|
||||
|
||||
public List<Flag> getFlags() {
|
||||
public Set<Flag> getFlags() {
|
||||
return flags;
|
||||
}
|
||||
|
||||
public List<Short> getRatings() {
|
||||
public Set<Short> 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),
|
||||
|
||||
@@ -351,7 +351,7 @@ public class LookupCommand extends Command {
|
||||
}
|
||||
return;
|
||||
} else if (params.getFlags().contains(Flag.PT)) {
|
||||
List<String> users = params.getUsers();
|
||||
Set<String> 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<String> users = params.getUsers();
|
||||
Set<String> 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)) {
|
||||
|
||||
Reference in New Issue
Block a user