From 28ec8e1d2d674003b0265ef583c1f408ee1f3008 Mon Sep 17 00:00:00 2001 From: Taah Date: Thu, 24 Aug 2023 15:35:59 -0700 Subject: [PATCH] Add support for reasons --- .../dev/plex/listener/impl/BanListener.java | 17 +++++++++----- .../java/dev/plex/punishment/Punishment.java | 5 ++++ .../plex/punishment/PunishmentManager.java | 23 +++++++++++-------- server/src/main/resources/messages.yml | 4 ++++ 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/server/src/main/java/dev/plex/listener/impl/BanListener.java b/server/src/main/java/dev/plex/listener/impl/BanListener.java index a1fc143..dea09bc 100644 --- a/server/src/main/java/dev/plex/listener/impl/BanListener.java +++ b/server/src/main/java/dev/plex/listener/impl/BanListener.java @@ -5,6 +5,7 @@ import dev.plex.cache.DataUtils; import dev.plex.listener.PlexListener; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; +import dev.plex.punishment.PunishmentManager; import dev.plex.punishment.PunishmentType; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; @@ -15,24 +16,28 @@ public class BanListener extends PlexListener @EventHandler public void onPreLogin(AsyncPlayerPreLoginEvent event) { - if (plugin.getPunishmentManager().isIndefUUIDBanned(event.getUniqueId())) + final PunishmentManager.IndefiniteBan uuidBan = plugin.getPunishmentManager().getIndefiniteBanByUUID(event.getUniqueId()); + if (uuidBan != null) { event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, - Punishment.generateIndefBanMessage("UUID")); + uuidBan.getReason() != null ? Punishment.generateIndefBanMessageWithReason("UUID", uuidBan.getReason()) : Punishment.generateIndefBanMessage("UUID")); return; } - if (plugin.getPunishmentManager().isIndefIPBanned(event.getAddress().getHostAddress())) + final PunishmentManager.IndefiniteBan ipBan = plugin.getPunishmentManager().getIndefiniteBanByIP(event.getAddress().getHostAddress()); + if (ipBan != null) { event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, - Punishment.generateIndefBanMessage("IP")); + ipBan.getReason() != null ? Punishment.generateIndefBanMessageWithReason("IP", ipBan.getReason()) : Punishment.generateIndefBanMessage("IP")); return; } - if (plugin.getPunishmentManager().isIndefUserBanned(event.getName())) + final PunishmentManager.IndefiniteBan userBan = plugin.getPunishmentManager().getIndefiniteBanByUsername(event.getName()); + + if (userBan != null) { event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, - Punishment.generateIndefBanMessage("username")); + userBan.getReason() != null ? Punishment.generateIndefBanMessageWithReason("username", userBan.getReason()) : Punishment.generateIndefBanMessage("username")); return; } diff --git a/server/src/main/java/dev/plex/punishment/Punishment.java b/server/src/main/java/dev/plex/punishment/Punishment.java index a74bbe0..c58ff82 100644 --- a/server/src/main/java/dev/plex/punishment/Punishment.java +++ b/server/src/main/java/dev/plex/punishment/Punishment.java @@ -49,6 +49,11 @@ public class Punishment return PlexUtils.messageComponent("banMessage", banUrl, punishment.getReason(), TimeUtils.useTimezone(punishment.getEndDate()), punishment.getPunisher() == null ? "CONSOLE" : MojangUtils.getInfo(punishment.getPunisher().toString()).getUsername()); } + public static Component generateIndefBanMessageWithReason(String type, String reason) + { + return PlexUtils.messageComponent("indefBanMessageReason", type, banUrl, reason); + } + public static Component generateIndefBanMessage(String type) { return PlexUtils.messageComponent("indefBanMessage", type, banUrl); diff --git a/server/src/main/java/dev/plex/punishment/PunishmentManager.java b/server/src/main/java/dev/plex/punishment/PunishmentManager.java index 8af6fc5..1a5a865 100644 --- a/server/src/main/java/dev/plex/punishment/PunishmentManager.java +++ b/server/src/main/java/dev/plex/punishment/PunishmentManager.java @@ -16,6 +16,7 @@ import lombok.Getter; import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitRunnable; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; @@ -39,7 +40,7 @@ public class PunishmentManager implements PlexBase this.indefiniteBans.clear(); Plex.get().indefBans.getKeys(false).forEach(key -> { - IndefiniteBan ban = new IndefiniteBan(); + IndefiniteBan ban = new IndefiniteBan(Plex.get().getIndefBans().getString("reason", "")); ban.ips.addAll(Plex.get().getIndefBans().getStringList(key + ".ips")); ban.usernames.addAll(Plex.get().getIndefBans().getStringList(key + ".users")); ban.uuids.addAll(Plex.get().getIndefBans().getStringList(key + ".uuids").stream().map(UUID::fromString).toList()); @@ -58,7 +59,8 @@ public class PunishmentManager implements PlexBase } } - public boolean isIndefUUIDBanned(UUID uuid) + @Nullable + public IndefiniteBan getIndefiniteBanByUUID(UUID uuid) { if (Plex.get().getRedisConnection().isEnabled()) { @@ -66,12 +68,12 @@ public class PunishmentManager implements PlexBase List bans = new Gson().fromJson(Plex.get().getRedisConnection().getJedis().get("indefbans"), new TypeToken>() { }.getType()); - return bans.stream().anyMatch(indefiniteBan -> indefiniteBan.getUuids().contains(uuid)); + return bans.stream().filter(indefiniteBan -> indefiniteBan.getUuids().contains(uuid)).findFirst().orElse(null); } - return this.indefiniteBans.stream().anyMatch(indefiniteBan -> indefiniteBan.getUuids().contains(uuid)); + return this.indefiniteBans.stream().filter(indefiniteBan -> indefiniteBan.getUuids().contains(uuid)).findFirst().orElse(null); } - public boolean isIndefIPBanned(String ip) + public IndefiniteBan getIndefiniteBanByIP(String ip) { if (Plex.get().getRedisConnection().isEnabled()) { @@ -79,12 +81,12 @@ public class PunishmentManager implements PlexBase List bans = new Gson().fromJson(Plex.get().getRedisConnection().getJedis().get("indefbans"), new TypeToken>() { }.getType()); - return bans.stream().anyMatch(indefiniteBan -> indefiniteBan.getIps().contains(ip)); + return bans.stream().filter(indefiniteBan -> indefiniteBan.getIps().contains(ip)).findFirst().orElse(null); } - return this.indefiniteBans.stream().anyMatch(indefiniteBan -> indefiniteBan.getIps().contains(ip)); + return this.indefiniteBans.stream().filter(indefiniteBan -> indefiniteBan.getIps().contains(ip)).findFirst().orElse(null); } - public boolean isIndefUserBanned(String username) + public IndefiniteBan getIndefiniteBanByUsername(String username) { if (Plex.get().getRedisConnection().isEnabled()) { @@ -92,9 +94,9 @@ public class PunishmentManager implements PlexBase List bans = new Gson().fromJson(Plex.get().getRedisConnection().getJedis().get("indefbans"), new TypeToken>() { }.getType()); - return bans.stream().anyMatch(indefiniteBan -> indefiniteBan.getUsernames().contains(username)); + return bans.stream().filter(indefiniteBan -> indefiniteBan.getUsernames().contains(username)).findFirst().orElse(null); } - return this.indefiniteBans.stream().anyMatch(indefiniteBan -> indefiniteBan.getUsernames().contains(username)); + return this.indefiniteBans.stream().filter(indefiniteBan -> indefiniteBan.getUsernames().contains(username)).findFirst().orElse(null); } public void issuePunishment(PlexPlayer plexPlayer, Punishment punishment) @@ -262,5 +264,6 @@ public class PunishmentManager implements PlexBase private final List usernames = Lists.newArrayList(); private final List uuids = Lists.newArrayList(); private final List ips = Lists.newArrayList(); + private final String reason; } } diff --git a/server/src/main/resources/messages.yml b/server/src/main/resources/messages.yml index 9027302..311e67e 100644 --- a/server/src/main/resources/messages.yml +++ b/server/src/main/resources/messages.yml @@ -17,6 +17,10 @@ banMessage: "You have been banned! You may appeal at {0}.\nReaso # 0 - The type of indefinite ban # 1 - Appeal URL indefBanMessage: "Your {0} is indefinitely banned! You may appeal at {1}." +# 0 - The type of indefinite ban +# 1 - Appeal URL +# 2 - The reason +indefBanMessageReason: "Your {0} is indefinitely banned! You may appeal at {1}.\nReason: {2}" playerNotFound: "Player not found!" specifyPlayer: "You must specify a player!" worldNotFound: "World not found!"