diff --git a/src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java b/src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java index 527f2648..484d454b 100644 --- a/src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java +++ b/src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java @@ -86,7 +86,7 @@ public void unMutePlayer(CommandAudience audience, @Argument("target") TargetPla name -> { if (isMuted.isPresent()) { moderation - .unmute(id.get(), audience.getId()) + .unmute(id.get(), audience.getId().orElse(null)) .thenAcceptAsync( pardon -> { if (!pardon) { diff --git a/src/main/java/dev/pgm/community/moderation/commands/PunishmentCommand.java b/src/main/java/dev/pgm/community/moderation/commands/PunishmentCommand.java index 773a2fad..2a49e629 100644 --- a/src/main/java/dev/pgm/community/moderation/commands/PunishmentCommand.java +++ b/src/main/java/dev/pgm/community/moderation/commands/PunishmentCommand.java @@ -127,7 +127,7 @@ public void unbanPlayer(CommandAudience audience, @Argument("target") TargetPlay isBanned -> { if (isBanned) { moderation - .pardon(target.getIdentifier(), audience.getId()) + .pardon(target.getIdentifier(), audience.getId().orElse(null)) .thenAcceptAsync( pardon -> { if (!pardon) { diff --git a/src/main/java/dev/pgm/community/moderation/feature/ModerationFeature.java b/src/main/java/dev/pgm/community/moderation/feature/ModerationFeature.java index 9148f60d..18a044a8 100644 --- a/src/main/java/dev/pgm/community/moderation/feature/ModerationFeature.java +++ b/src/main/java/dev/pgm/community/moderation/feature/ModerationFeature.java @@ -55,10 +55,10 @@ Punishment punish( * Pardon target for past punishments (Ban/Tempban) * * @param target A username or UUID string - * @param issuer An optional UUID of the command sender (console is empty) + * @param issuer A UUID of the command sender (null for console) * @return True if any ban infractions were lifted, false if none */ - CompletableFuture pardon(String target, Optional issuer); + CompletableFuture pardon(String target, @Nullable UUID issuer); /** * Deactivate an active punishment @@ -97,10 +97,10 @@ Punishment punish( * Unmutes any active mutes for the provided target * * @param target A player UUID - * @param issuer The person lifting the infraction + * @param issuer The UUID of the player lifting the mute (null for console) * @return true if unmute was removed, false if no mute existed */ - CompletableFuture unmute(UUID target, Optional issuer); + CompletableFuture unmute(UUID target, @Nullable UUID issuer); /** * Gets a set of online players who are muted diff --git a/src/main/java/dev/pgm/community/moderation/feature/ModerationFeatureBase.java b/src/main/java/dev/pgm/community/moderation/feature/ModerationFeatureBase.java index 89105eaf..d26c537b 100644 --- a/src/main/java/dev/pgm/community/moderation/feature/ModerationFeatureBase.java +++ b/src/main/java/dev/pgm/community/moderation/feature/ModerationFeatureBase.java @@ -138,11 +138,11 @@ public Punishment punish( target, getSenderId(issuer.getSender()), reason, - time, + time.toEpochMilli(), duration, type, active, - time, + time.toEpochMilli(), getSenderId(issuer.getSender()), getModerationConfig().getService()); Bukkit.getPluginManager().callEvent(new PlayerPunishmentEvent(issuer, punishment, silent)); @@ -157,7 +157,7 @@ public ModerationTools getTools() { @Override public Optional getLastPunishment(UUID issuer) { return recents.stream() - .filter(p -> p.getIssuerId().isPresent() && p.getIssuerId().get().equals(issuer)) + .filter(p -> !p.isConsole() && p.getIssuerId().equals(issuer)) .sorted() .findFirst(); } @@ -343,8 +343,12 @@ public Optional getCachedMute(UUID playerId) { } // ETC. - private Optional getSenderId(CommandSender sender) { - return Optional.ofNullable(sender instanceof Player ? ((Player) sender).getUniqueId() : null); + @Nullable + private UUID getSenderId(CommandSender sender) { + if (!(sender instanceof Player)) return null; + + Player player = (Player) sender; + return player.getUniqueId(); } private Optional isBanEvasion(String address) { diff --git a/src/main/java/dev/pgm/community/moderation/feature/types/SQLModerationFeature.java b/src/main/java/dev/pgm/community/moderation/feature/types/SQLModerationFeature.java index c42d9ba2..b25645e1 100644 --- a/src/main/java/dev/pgm/community/moderation/feature/types/SQLModerationFeature.java +++ b/src/main/java/dev/pgm/community/moderation/feature/types/SQLModerationFeature.java @@ -22,6 +22,7 @@ import java.util.concurrent.TimeoutException; import java.util.logging.Logger; import java.util.stream.Collectors; +import javax.annotation.Nullable; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.Configuration; @@ -96,7 +97,7 @@ public CompletableFuture> query(String target) { } @Override - public CompletableFuture pardon(String target, Optional issuer) { + public CompletableFuture pardon(String target, @Nullable UUID issuer) { CompletableFuture> playerId = NameUtils.isMinecraftName(target) ? getUsers().getStoredId(target) @@ -179,7 +180,7 @@ public void onPreLogin(AsyncPlayerPreLoginEvent event) { if (punishment.getType() == PunishmentType.NAME_BAN) { String bannedName = punishment.getReason(); if (!event.getName().equalsIgnoreCase(bannedName)) { - pardon(punishment.getTargetId().toString(), Optional.empty()); + pardon(punishment.getTargetId().toString(), null); event.setLoginResult(Result.ALLOWED); logger.info( String.format( @@ -305,7 +306,7 @@ public CompletableFuture> isMuted(UUID target) { } @Override - public CompletableFuture unmute(UUID id, Optional issuer) { + public CompletableFuture unmute(UUID id, @Nullable UUID issuer) { return service .unmute(id, issuer) .thenApplyAsync( diff --git a/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java b/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java index b3cee6d9..629c769a 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java @@ -49,14 +49,14 @@ public class Punishment implements Comparable { private UUID punishmentId; private UUID targetId; - private Optional issuerId; + private @Nullable UUID issuerId; private String reason; - private Instant timeIssued; + private long timeIssued; private boolean active; private @Nullable Duration duration; - private Instant lastUpdated; - private Optional lastUpdatedBy; + private long lastUpdated; + private @Nullable UUID lastUpdatedBy; private String service; @@ -66,13 +66,13 @@ public Punishment( PunishmentType type, UUID punishmentId, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, Duration duration, - Instant timeIssued, + long timeIssued, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { this.type = type; this.punishmentId = punishmentId; @@ -103,16 +103,21 @@ public UUID getTargetId() { return targetId; } - public Optional getIssuerId() { + @Nullable + public UUID getIssuerId() { return issuerId; } + public boolean isConsole() { + return getIssuerId() == null; + } + public String getReason() { return reason; } public Instant getTimeIssued() { - return timeIssued; + return Instant.ofEpochMilli(timeIssued); } public boolean isActive() { @@ -124,10 +129,10 @@ public void setActive(boolean active) { } public Instant getLastUpdated() { - return lastUpdated; + return Instant.ofEpochMilli(lastUpdated); } - public Optional getLastUpdatedBy() { + public @Nullable UUID getLastUpdatedBy() { return lastUpdatedBy; } @@ -169,9 +174,9 @@ public boolean kick(boolean silent) { .kickPlayer( formatPunishmentScreen( getConfig(), - getIssuerId().isPresent() - ? PlayerComponent.player(getIssuerId().get(), NameStyle.FANCY) - : UsernameFormatUtils.CONSOLE_NAME, + isConsole() + ? UsernameFormatUtils.CONSOLE_NAME + : PlayerComponent.player(getIssuerId(), NameStyle.FANCY), silent)); return true; } @@ -187,11 +192,11 @@ public void sendWarning(Audience target, String reason) { Component titleWord = translatable("misc.warning", NamedTextColor.DARK_RED); Component title = text().append(WARN_SYMBOL).append(titleWord).append(WARN_SYMBOL).build(); Component subtitle; - if (Duration.between(timeIssued, Instant.now()).getSeconds() >= 60) { + if (Duration.between(getTimeIssued(), Instant.now()).getSeconds() >= 60) { subtitle = text() .append( - TemporalComponent.relativePastApproximate(timeIssued) + TemporalComponent.relativePastApproximate(getTimeIssued()) .color(NamedTextColor.YELLOW) .append(text(": ", NamedTextColor.YELLOW))) .append(text(reason, NamedTextColor.GOLD)) @@ -265,10 +270,10 @@ public String formatPunishmentScreen( lines.add( getType() .getScreenComponent( - Duration.between(timeIssued, Instant.now()).getSeconds() >= 60 + Duration.between(getTimeIssued(), Instant.now()).getSeconds() >= 60 ? text() .append( - TemporalComponent.relativePastApproximate(timeIssued) + TemporalComponent.relativePastApproximate(getTimeIssued()) .color(NamedTextColor.YELLOW) .append(text(": ", NamedTextColor.YELLOW))) .append(text(reason, NamedTextColor.RED)) @@ -331,11 +336,11 @@ public static Punishment of(Punishment punishment) { punishment.getTargetId(), punishment.getIssuerId(), punishment.getReason(), - punishment.getTimeIssued(), + punishment.getTimeIssued().toEpochMilli(), punishment.getDuration(), punishment.getType(), punishment.isActive(), - punishment.getLastUpdated(), + punishment.getLastUpdated().toEpochMilli(), punishment.getLastUpdatedBy(), punishment.getService()); } @@ -343,14 +348,14 @@ public static Punishment of(Punishment punishment) { public static Punishment of( UUID id, UUID target, - Optional issuer, + @Nullable UUID issuer, String reason, - Instant time, + long time, @Nullable Duration length, PunishmentType type, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { switch (type) { case WARN: diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/BanPunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/BanPunishment.java index ca352ba0..f7459a8f 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/BanPunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/BanPunishment.java @@ -2,21 +2,20 @@ import dev.pgm.community.moderation.punishments.Punishment; import dev.pgm.community.moderation.punishments.PunishmentType; -import java.time.Instant; -import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; public class BanPunishment extends Punishment { public BanPunishment( UUID punishmentId, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.BAN, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java index 93b23dec..70064a40 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java @@ -4,7 +4,6 @@ import dev.pgm.community.moderation.punishments.PunishmentType; import java.time.Duration; import java.time.Instant; -import java.util.Optional; import java.util.UUID; import javax.annotation.Nullable; @@ -15,13 +14,13 @@ public ExpirablePunishment( PunishmentType type, UUID id, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, Duration length, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( type, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/KickPunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/KickPunishment.java index 5519c010..809ab1d4 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/KickPunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/KickPunishment.java @@ -2,21 +2,20 @@ import dev.pgm.community.moderation.punishments.Punishment; import dev.pgm.community.moderation.punishments.PunishmentType; -import java.time.Instant; -import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; public class KickPunishment extends Punishment { public KickPunishment( UUID id, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.KICK, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/MutePunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/MutePunishment.java index badb931a..e5fa31f7 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/MutePunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/MutePunishment.java @@ -7,8 +7,8 @@ import dev.pgm.community.moderation.punishments.PunishmentType; import java.time.Duration; import java.time.Instant; -import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import tc.oc.pgm.util.Audience; @@ -18,13 +18,13 @@ public class MutePunishment extends ExpirablePunishment { public MutePunishment( UUID id, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, Duration length, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.MUTE, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/TempBanPunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/TempBanPunishment.java index c3667a93..70bfd19a 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/TempBanPunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/TempBanPunishment.java @@ -2,22 +2,21 @@ import dev.pgm.community.moderation.punishments.PunishmentType; import java.time.Duration; -import java.time.Instant; -import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; public class TempBanPunishment extends ExpirablePunishment { public TempBanPunishment( UUID id, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, Duration length, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.TEMP_BAN, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/UsernameBanPunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/UsernameBanPunishment.java index dd7e6e30..8bbbddb2 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/UsernameBanPunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/UsernameBanPunishment.java @@ -2,21 +2,20 @@ import dev.pgm.community.moderation.punishments.Punishment; import dev.pgm.community.moderation.punishments.PunishmentType; -import java.time.Instant; -import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; public class UsernameBanPunishment extends Punishment { public UsernameBanPunishment( UUID punishmentId, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.NAME_BAN, diff --git a/src/main/java/dev/pgm/community/moderation/punishments/types/WarnPunishment.java b/src/main/java/dev/pgm/community/moderation/punishments/types/WarnPunishment.java index c81cafe9..c7808199 100644 --- a/src/main/java/dev/pgm/community/moderation/punishments/types/WarnPunishment.java +++ b/src/main/java/dev/pgm/community/moderation/punishments/types/WarnPunishment.java @@ -2,9 +2,9 @@ import dev.pgm.community.moderation.punishments.Punishment; import dev.pgm.community.moderation.punishments.PunishmentType; -import java.time.Instant; import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; import org.bukkit.entity.Player; import tc.oc.pgm.util.Audience; @@ -13,12 +13,12 @@ public class WarnPunishment extends Punishment { public WarnPunishment( UUID id, UUID targetId, - Optional issuerId, + @Nullable UUID issuerId, String reason, - Instant timeIssued, + long timeIssued, boolean active, - Instant lastUpdated, - Optional lastUpdatedBy, + long lastUpdated, + @Nullable UUID lastUpdatedBy, String service) { super( PunishmentType.WARN, diff --git a/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java b/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java index 25234266..655a1d29 100644 --- a/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java +++ b/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java @@ -17,6 +17,7 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import javax.annotation.Nullable; public class SQLModerationService extends SQLFeatureBase implements ModerationQuery { @@ -85,12 +86,10 @@ public CompletableFuture> queryList(String target) { String type = row.getString("type"); long time = Long.parseLong(row.getString("time")); long expires = Long.parseLong(row.getString("expires")); - Instant timeIssued = Instant.ofEpochMilli(time); Duration length = Duration.between(Instant.ofEpochMilli(time), Instant.ofEpochMilli(expires)); boolean active = row.get("active"); long lastUpdateTime = Long.parseLong(row.getString("last_updated")); - Instant lastUpdate = Instant.ofEpochMilli(lastUpdateTime); String lastUpdateBy = row.getString("updated_by"); String service = row.getString("service"); @@ -102,11 +101,11 @@ public CompletableFuture> queryList(String target) { playerId, parseIssuer(issuer), reason, - timeIssued, + time, length, PunishmentType.valueOf(type.toUpperCase()), active, - lastUpdate, + lastUpdateTime, parseIssuer(lastUpdateBy), service)); } @@ -143,16 +142,16 @@ private boolean isConsole(String data) { return data.equalsIgnoreCase(CONSOLE_DB_NAME); } - private Optional parseIssuer(String issuer) { - if (isConsole(issuer)) return Optional.empty(); - return Optional.of(UUID.fromString(issuer)); + private UUID parseIssuer(String issuer) { + if (isConsole(issuer)) return null; + return UUID.fromString(issuer); } - private String convertIssuer(Optional issuer) { - return issuer.isPresent() ? issuer.get().toString() : CONSOLE_DB_NAME; + private String convertIssuer(@Nullable UUID issuer) { + return issuer != null ? issuer.toString() : CONSOLE_DB_NAME; } - public CompletableFuture pardon(UUID id, Optional issuer) { + public CompletableFuture pardon(UUID id, @Nullable UUID issuer) { punishmentCache.invalidate(id); return DB.executeUpdateAsync( PARDON_QUERY + MULTI_PARDON_TYPE, @@ -178,7 +177,7 @@ public CompletableFuture deactivate(UUID id, PunishmentType punishmentT .thenApplyAsync(result -> result != 0); } - public CompletableFuture unmute(UUID id, Optional issuer) { + public CompletableFuture unmute(UUID id, @Nullable UUID issuer) { punishmentCache.invalidate(id); return DB.executeUpdateAsync( @@ -247,12 +246,10 @@ public CompletableFuture> getRecentPunishments(Duration period) String type = row.getString("type"); long time = Long.parseLong(row.getString("time")); long expires = Long.parseLong(row.getString("expires")); - Instant timeIssued = Instant.ofEpochMilli(time); Duration length = Duration.between(Instant.ofEpochMilli(time), Instant.ofEpochMilli(expires)); boolean active = row.get("active"); long lastUpdateTime = Long.parseLong(row.getString("last_updated")); - Instant lastUpdate = Instant.ofEpochMilli(lastUpdateTime); String lastUpdateBy = row.getString("updated_by"); String service = row.getString("service"); punishments.add( @@ -261,11 +258,11 @@ public CompletableFuture> getRecentPunishments(Duration period) UUID.fromString(target), parseIssuer(issuer), reason, - timeIssued, + time, length, PunishmentType.valueOf(type.toUpperCase()), active, - lastUpdate, + lastUpdateTime, parseIssuer(lastUpdateBy), service)); } diff --git a/src/main/java/dev/pgm/community/utils/ImportUtils.java b/src/main/java/dev/pgm/community/utils/ImportUtils.java index ef00d5ba..c51d6a1b 100644 --- a/src/main/java/dev/pgm/community/utils/ImportUtils.java +++ b/src/main/java/dev/pgm/community/utils/ImportUtils.java @@ -18,7 +18,6 @@ import java.util.Arrays; import java.util.Date; import java.util.List; -import java.util.Optional; import java.util.UUID; import javax.annotation.Nullable; import tc.oc.pgm.util.text.TextException; @@ -105,14 +104,14 @@ public Punishment toPunishment(ModerationConfig config, UsersFeature users) { return Punishment.of( UUID.randomUUID(), getUUID(), - Optional.empty(), + null, getReason(), - getCreated(), + getCreated().toEpochMilli(), getDuration(), getDuration() != null ? PunishmentType.TEMP_BAN : PunishmentType.BAN, true, - getCreated(), - Optional.empty(), + getCreated().toEpochMilli(), + null, config.getService()); } }