From aab4f55b7d091a393944177e8e9656d591d9cf0d Mon Sep 17 00:00:00 2001 From: Seth <13510767+ZeroEpoch1969@users.noreply.github.com> Date: Sun, 9 Aug 2020 22:25:04 -0700 Subject: [PATCH] UUID definite bans --- .../totalfreedommod/banning/Ban.java | 24 +++++++++--- .../totalfreedommod/banning/BanManager.java | 38 +++++++++++++++++-- .../totalfreedommod/command/Command_ban.java | 12 +++++- .../command/Command_tempban.java | 13 ++++++- .../totalfreedommod/sql/SQLite.java | 20 ++++++---- 5 files changed, 90 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java index 01ef8cea..0dc1e56e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java @@ -10,6 +10,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.UUID; import lombok.Getter; import lombok.Setter; import me.totalfreedom.totalfreedommod.config.ConfigEntry; @@ -27,6 +28,9 @@ public class Ban @Setter private String username = null; @Getter + @Setter + private UUID uuid = null; + @Getter private final List ips = Lists.newArrayList(); @Getter @Setter @@ -45,9 +49,10 @@ public class Ban { } - public Ban(String username, String ip, String by, Date at, Date expire, String reason) + public Ban(String username, UUID uuid, String ip, String by, Date at, Date expire, String reason) { this(username, + uuid, Arrays.asList(ip), by, at, @@ -55,9 +60,10 @@ public class Ban reason); } - public Ban(String username, List ips, String by, Date at, Date expire, String reason) + public Ban(String username, UUID uuid, List ips, String by, Date at, Date expire, String reason) { this.username = username; + this.uuid = uuid; if (ips != null) { this.ips.addAll(ips); @@ -78,12 +84,12 @@ public class Ban public static Ban forPlayerIp(Player player, CommandSender by, Date expiry, String reason) { - return new Ban(null, Arrays.asList(FUtil.getIp(player)), by.getName(), Date.from(Instant.now()), expiry, reason); + return new Ban(null, null, Arrays.asList(FUtil.getIp(player)), by.getName(), Date.from(Instant.now()), expiry, reason); } public static Ban forPlayerIp(String ip, CommandSender by, Date expiry, String reason) { - return new Ban(null, ip, by.getName(), Date.from(Instant.now()), expiry, reason); + return new Ban(null, null, ip, by.getName(), Date.from(Instant.now()), expiry, reason); } // @@ -96,7 +102,8 @@ public class Ban public static Ban forPlayerName(String player, CommandSender by, Date expiry, String reason) { return new Ban(player, - new ArrayList(), + null, + new ArrayList<>(), by.getName(), Date.from(Instant.now()), expiry, @@ -113,6 +120,7 @@ public class Ban public static Ban forPlayer(Player player, CommandSender by, Date expiry, String reason) { return new Ban(player.getName(), + player.getUniqueId(), FUtil.getIp(player), by.getName(), Date.from(Instant.now()), @@ -123,6 +131,7 @@ public class Ban public static Ban forPlayerFuzzy(Player player, CommandSender by, Date expiry, String reason) { return new Ban(player.getName(), + player.getUniqueId(), FUtil.getFuzzyIp(FUtil.getIp(player)), by.getName(), Date.from(Instant.now()), @@ -135,6 +144,11 @@ public class Ban return username != null && !username.isEmpty(); } + public boolean hasUUID() + { + return uuid != null; + } + public boolean addIp(String ip) { return ips.add(ip); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java index 76ee3c27..31292a97 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java @@ -12,6 +12,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.PlayerData; @@ -27,8 +28,9 @@ public class BanManager extends FreedomService { private final Set bans = Sets.newHashSet(); - private final Map ipBans = Maps.newHashMap(); private final Map nameBans = Maps.newHashMap(); + private final Map uuidBans = Maps.newHashMap(); + private final Map ipBans = Maps.newHashMap(); private final List unbannableUsernames = Lists.newArrayList(); // @@ -44,12 +46,18 @@ public class BanManager extends FreedomService while (banSet.next()) { String name = banSet.getString("name"); + UUID uuid = null; + String strUUID = banSet.getString("uuid"); + if (strUUID != null) + { + uuid = UUID.fromString(strUUID); + } List ips = FUtil.stringToList(banSet.getString("ips")); String by = banSet.getString("by"); Date at = new Date(banSet.getLong("at")); Date expires = new Date(banSet.getLong("expires")); String reason = banSet.getString("reason"); - Ban ban = new Ban(name, ips, by, at, expires, reason); + Ban ban = new Ban(name, uuid, ips, by, at, expires, reason); bans.add(ban); } } @@ -136,6 +144,18 @@ public class BanManager extends FreedomService return null; } + public Ban getByUUID(UUID uuid) + { + final Ban directBan = uuidBans.get(uuid); + + if (directBan != null && !directBan.isExpired()) + { + return directBan; + } + + return null; + } + public Ban unbanIp(String ip) { final Ban ban = getByIp(ip); @@ -224,13 +244,19 @@ public class BanManager extends FreedomService public void onPlayerLogin(PlayerLoginEvent event) { final String username = event.getPlayer().getName(); + final UUID uuid = event.getPlayer().getUniqueId(); final String ip = FUtil.getIp(event); // Regular ban Ban ban = getByUsername(username); if (ban == null) { - ban = getByIp(ip); + ban = getByUUID(uuid); + + if (ban == null) + { + ban = getByIp(ip); + } } if (ban != null && !ban.isExpired()) @@ -279,6 +305,7 @@ public class BanManager extends FreedomService } nameBans.clear(); + uuidBans.clear(); ipBans.clear(); for (Ban ban : bans) { @@ -287,6 +314,11 @@ public class BanManager extends FreedomService nameBans.put(ban.getUsername().toLowerCase(), ban); } + if (ban.hasUUID()) + { + uuidBans.put(ban.getUuid(), ban); + } + if (ban.hasIps()) { for (String ip : ban.getIps()) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java index ae0a661a..06cb6c0f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java @@ -121,7 +121,17 @@ public class Command_ban extends FreedomCommand } // Ban player - Ban ban = Ban.forPlayerName(username, sender, null, reason); + Ban ban; + + if (player != null) + { + ban = Ban.forPlayer(player, sender, null, reason); + } + else + { + ban = Ban.forPlayerName(username, sender, null, reason); + } + for (String ip : ips) { ban.addIp(ip); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java index c1d85427..c4d8dc47 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java @@ -104,7 +104,18 @@ public class Command_tempban extends FreedomCommand msg("Quietly temporarily banned " + player.getName() + "."); } - Ban ban = Ban.forPlayerName(username, sender, expires, reason); + + Ban ban; + + if (player != null) + { + ban = Ban.forPlayer(player, sender, null, reason); + } + else + { + ban = Ban.forPlayerName(username, sender, null, reason); + } + for (String ip : ips) { ban.addIp(ip); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java index 68df1534..16caddd3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -70,7 +70,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `bans` (`name` VARCHAR, `ips` VARCHAR, `by` VARCHAR NOT NULL, `at` LONG NOT NULL, `expires` LONG, `reason` VARCHAR);"); + connection.createStatement().execute("CREATE TABLE `bans` (`name` VARCHAR, `uuid` VARCHAR, `ips` VARCHAR, `by` VARCHAR NOT NULL, `at` LONG NOT NULL, `expires` LONG, `reason` VARCHAR);"); } catch (SQLException e) { @@ -378,13 +378,19 @@ public class SQLite extends FreedomService { try { - PreparedStatement statement = connection.prepareStatement("INSERT INTO bans VALUES (?, ?, ?, ?, ?, ?)"); + PreparedStatement statement = connection.prepareStatement("INSERT INTO bans VALUES (?, ?, ?, ?, ?, ?, ?)"); statement.setString(1, ban.getUsername()); - statement.setString(2, FUtil.listToString(ban.getIps())); - statement.setString(3, ban.getBy()); - statement.setLong(4, ban.getAt().getTime()); - statement.setLong(5, ban.getExpiryUnix()); - statement.setString(6, ban.getReason()); + String uuid = null; + if (ban.hasUUID()) + { + uuid = ban.getUuid().toString(); + } + statement.setString(2, uuid); + statement.setString(3, FUtil.listToString(ban.getIps())); + statement.setString(4, ban.getBy()); + statement.setLong(5, ban.getAt().getTime()); + statement.setLong(6, ban.getExpiryUnix()); + statement.setString(7, ban.getReason()); statement.executeUpdate(); } catch (SQLException e)