diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index dbcc0909..e7470114 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -9,7 +9,7 @@ repositories { } dependencies { - implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.3.0") - implementation("com.diffplug.gradle.spotless:com.diffplug.gradle.spotless.gradle.plugin:8.1.0") + implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.3.1") + implementation("com.diffplug.gradle.spotless:com.diffplug.gradle.spotless.gradle.plugin:8.2.0") implementation("de.skuzzle.restrictimports:de.skuzzle.restrictimports.gradle.plugin:3.0.0") } diff --git a/buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts index 0d2b340e..e3600a5f 100644 --- a/buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts @@ -19,21 +19,24 @@ repositories { } dependencies { - implementation("com.zaxxer:HikariCP:2.4.1") { isTransitive = false } - implementation("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false } + api("com.zaxxer:HikariCP:2.4.1") { isTransitive = false } + api("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false } + api("redis.clients:jedis:3.5.1") + api("net.kyori:adventure-api:4.26.1") + api("net.kyori:adventure-text-serializer-plain:4.26.1") + api("net.kyori:adventure-platform-bukkit:4.4.1") + api("org.reflections:reflections:0.10.2") - implementation("redis.clients:jedis:3.5.1") - implementation("net.kyori:adventure-api:4.25.0") - implementation("net.kyori:adventure-text-serializer-plain:4.25.0") - implementation("net.kyori:adventure-platform-bukkit:4.4.1") - implementation("org.reflections:reflections:0.10.2") + // Annotations + api("org.jspecify:jspecify:1.0.0") + compileOnly("org.jetbrains:annotations:26.0.2-1") + // Runtime dependencies compileOnly("tc.oc.pgm:core:0.16-SNAPSHOT") compileOnly("tc.oc.pgm:util:0.16-SNAPSHOT") compileOnly("tc.oc.occ:AFK:1.0.0-SNAPSHOT") compileOnly("tc.oc.occ:Environment:1.0.0-SNAPSHOT") compileOnly("org.incendo:cloud-annotations:2.0.0") - compileOnly("org.jetbrains:annotations:26.0.2") compileOnly("net.dmulloy2:ProtocolLib:5.4.0") // Minecraft includes these (or equivalents) @@ -60,13 +63,15 @@ spotless { ratchetFrom = "origin/dev" java { removeUnusedImports() - palantirJavaFormat("2.83.0").style("GOOGLE").formatJavadoc(true) + trimTrailingWhitespace() + formatAnnotations() + palantirJavaFormat("2.85.0").style("GOOGLE").formatJavadoc(true) } } restrictImports { group { - reason = "Use org.jetbrains.annotations to add annotations" + reason = "Use org.jspecify.annotations to add annotations, or org.jetbrains.annotations if needed" bannedImports = listOf("javax.annotation.**") } group { diff --git a/core/build.gradle.kts b/core/build.gradle.kts index ba4df199..3052b7d8 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -32,7 +32,6 @@ tasks.named("shadowJar") { } dependencies { - exclude(dependency("org.jspecify:jspecify")) exclude(dependency("org.jetbrains:annotations")) } diff --git a/core/src/main/java/dev/pgm/community/CommunityCommand.java b/core/src/main/java/dev/pgm/community/CommunityCommand.java index 8acc194a..c9360168 100644 --- a/core/src/main/java/dev/pgm/community/CommunityCommand.java +++ b/core/src/main/java/dev/pgm/community/CommunityCommand.java @@ -10,6 +10,7 @@ import dev.pgm.community.utils.NameUtils; import dev.pgm.community.utils.PGMUtils; import dev.pgm.community.utils.VisibilityUtils; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -24,7 +25,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.teams.Team; @@ -46,7 +47,7 @@ protected CompletableFuture> getTarget(String target, UsersFeatur boolean username = NameUtils.isMinecraftName(target); if (!username) { try { - return CompletableFuture.completedFuture(Optional.ofNullable(UUID.fromString(target))); + return CompletableFuture.completedFuture(Optional.of(UUID.fromString(target))); } catch (IllegalArgumentException e) { throw TextException.exception(target + " is not a valid UUID."); } @@ -54,19 +55,7 @@ protected CompletableFuture> getTarget(String target, UsersFeatur return service.getStoredId(target); } - public class PlayerSelection { - - private final Set players; - private final Component selectionText; - - public PlayerSelection(Set players, Component selectionText) { - this.players = players; - this.selectionText = selectionText; - } - - public Set getPlayers() { - return players; - } + public record PlayerSelection(Set players, Component selectionText) { public Component getText() { List names = players.stream() @@ -75,9 +64,9 @@ public Component getText() { .collect(Collectors.toList()); Component hover = TextFormatter.list(names, NamedTextColor.GRAY); - if (getPlayers().size() > names.size()) { - int leftOver = getPlayers().size() - names.size(); - hover + if (players().size() > names.size()) { + int leftOver = players().size() - names.size(); + hover = hover .append(text(" plus ")) .append(text(leftOver, NamedTextColor.YELLOW)) .append(text(" other player" + (leftOver != 1 ? "s" : ""))) @@ -106,7 +95,7 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) { String[] parts = input.split("="); - List allOnline = Bukkit.getOnlinePlayers().stream().collect(Collectors.toList()); + List allOnline = new ArrayList<>(Bukkit.getOnlinePlayers()); Set targets = Sets.newHashSet(); Component text; @@ -141,16 +130,14 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) { // Allow Observers to be selected if (teamName.toLowerCase().startsWith("obs")) { text = text("Observers", NamedTextColor.AQUA); - targets.addAll(match.getObservers().stream() - .map(MatchPlayer::getBukkit) - .collect(Collectors.toList())); + targets.addAll( + match.getObservers().stream().map(MatchPlayer::getBukkit).toList()); } else { Team team = teams.bestFuzzyMatch(teamName); if (team == null) { throw TextException.exception(teamName + " is not a valid team name"); } - targets.addAll( - team.getPlayers().stream().map(MatchPlayer::getBukkit).collect(Collectors.toList())); + targets.addAll(team.getPlayers().stream().map(MatchPlayer::getBukkit).toList()); text = text() .append(text(team.getNameLegacy(), TextFormatter.convert(team.getColor()))) .build(); @@ -176,9 +163,7 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) { // If no permission for multiple, get a random single entry Player random = targets.stream().findAny().get(); targets.clear(); - if (random != null) { - targets.add(random); - } + targets.add(random); } } @@ -189,8 +174,7 @@ private int parseInputInt(String input, int def) { int value = def; try { value = Integer.parseInt(input); - } catch (NumberFormatException e) { - value = def; + } catch (NumberFormatException ignored) { } return value; } @@ -210,8 +194,8 @@ protected Player getSinglePlayer(CommandAudience viewer, String target, boolean } if (player == null - || (player != null && !canViewVanished(viewer, player)) - || (player != null && nicked == null && isNicked(viewer, player))) { + || !canViewVanished(viewer, player) + || nicked == null && isNicked(viewer, player)) { viewer.sendWarning(formatNotFoundComponent(target)); return null; } @@ -234,7 +218,7 @@ protected UUID getOnlineTarget(String target, UsersFeature service) { // priority now Optional cachedId = service.getId( target); // If user is online or was online recently, we will have their UUID. - if (!cachedId.isPresent()) { + if (cachedId.isEmpty()) { throw TextException.exception(formatNotFoundMsg(target)); } else { id = cachedId.get(); @@ -257,13 +241,9 @@ private boolean isVanished(@Nullable Player player) { } public boolean canViewVanished(CommandAudience viewer, Player player) { - boolean vanished = isVanished(player); - if (vanished - && viewer.isPlayer() - && !viewer.getPlayer().hasPermission(CommunityPermissions.VIEW_VANISHED)) { - return false; - } - return true; + return !isVanished(player) + || !viewer.isPlayer() + || viewer.getPlayer().hasPermission(CommunityPermissions.VIEW_VANISHED); } protected String formatNotFoundMsg(String target) { diff --git a/core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java b/core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java index 158f8fa3..a6bad06a 100644 --- a/core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java +++ b/core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java @@ -49,9 +49,9 @@ public RequestType getType() { return type; } - public static enum RequestType { + public enum RequestType { PLAYER_HELP, - REPORT; + REPORT } @Override diff --git a/core/src/main/java/dev/pgm/community/assistance/Report.java b/core/src/main/java/dev/pgm/community/assistance/Report.java index 45cbbbb6..0715965c 100644 --- a/core/src/main/java/dev/pgm/community/assistance/Report.java +++ b/core/src/main/java/dev/pgm/community/assistance/Report.java @@ -14,7 +14,7 @@ public class Report extends AssistanceRequest implements Comparable { * @param reporterId UUID of reporting player * @param reason reason for report * @param time time reported - * @param name of current server + * @param server name of current server */ public Report(UUID reportedId, UUID reporterId, String reason, long time, String server) { this(UUID.randomUUID(), reportedId, reporterId, reason, time, server); @@ -51,8 +51,7 @@ public int compareTo(Report o) { @Override public boolean equals(Object other) { - if (!(other instanceof Report)) return false; - Report otherReport = (Report) other; + if (!(other instanceof Report otherReport)) return false; return getId().equals(otherReport.getId()); } } diff --git a/core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java b/core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java index 0e3ee51b..2fa1a6c3 100644 --- a/core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java +++ b/core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java @@ -15,8 +15,8 @@ public class PlayerHelpCommand extends CommunityCommand { - private AssistanceFeature assistance; - private ModerationFeature moderation; + private final AssistanceFeature assistance; + private final ModerationFeature moderation; public PlayerHelpCommand() { this.assistance = Community.get().getFeatures().getReports(); diff --git a/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java b/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java index 97f0d33b..c3c09733 100644 --- a/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java +++ b/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java @@ -89,17 +89,14 @@ public void recentReports( checkEnabled(); if (player != null) { - reports - .query(player) - .thenAcceptAsync( - reports -> { - if (reports.isEmpty()) { - audience.sendWarning( - text("No reports found for ").append(text(player, NamedTextColor.AQUA))); - return; - } - sendReportHistory(audience, reports, page); - }); + reports.query(player).thenAcceptAsync(reports -> { + if (reports.isEmpty()) { + audience.sendWarning( + text("No reports found for ").append(text(player, NamedTextColor.AQUA))); + return; + } + sendReportHistory(audience, reports, page); + }); return; } @@ -113,16 +110,15 @@ public void sendReportHistory(CommandAudience audience, Collection repor int pages = (reportData.size() + perPage - 1) / perPage; page = Math.max(1, Math.min(page, pages)); - Component pageNum = - translatable( - "command.simplePageHeader", - NamedTextColor.GRAY, - text(Integer.toString(page), NamedTextColor.RED), - text(Integer.toString(pages), NamedTextColor.RED)); + Component pageNum = translatable( + "command.simplePageHeader", + NamedTextColor.GRAY, + text(Integer.toString(page), NamedTextColor.RED), + text(Integer.toString(pages), NamedTextColor.RED)); - Component header = - translatable("moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum) - .append(text(" (").append(headerResultCount).append(text(") » ")).append(pageNum)); + Component header = translatable( + "moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum) + .append(text(" (").append(headerResultCount).append(text(") » ")).append(pageNum)); Component formattedHeader = TextFormatter.horizontalLineHeading(audience.getSender(), header, NamedTextColor.DARK_GRAY); @@ -132,23 +128,19 @@ public Component format(Report data, int index) { Component reporterName = getReportFormatName(data.getSenderId()).join(); Component reportedName = getReportFormatName(data.getTargetId()).join(); - Component serverName = - text("Server ", NamedTextColor.GRAY) - .append(text(": ", NamedTextColor.DARK_GRAY)) - .append(text(data.getServer(), NamedTextColor.AQUA)); + Component serverName = text("Server ", NamedTextColor.GRAY) + .append(text(": ", NamedTextColor.DARK_GRAY)) + .append(text(data.getServer(), NamedTextColor.AQUA)); - TextComponent.Builder reporter = - text() - .append( - translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName)); + TextComponent.Builder reporter = text() + .append(translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName)); if (!data.getServer().equalsIgnoreCase(Community.get().getServerConfig().getServerId())) { reporter.append(newline()).append(serverName); } - Component timeAgo = - TemporalComponent.relativePastApproximate(data.getTime()) - .color(NamedTextColor.DARK_GREEN); + Component timeAgo = TemporalComponent.relativePastApproximate(data.getTime()) + .color(NamedTextColor.DARK_GREEN); return text() .append(timeAgo.hoverEvent(HoverEvent.showText(reporter.build()))) @@ -171,9 +163,7 @@ private CompletableFuture getReportFormatName(UUID id) { return usernames .getStoredUsername(id) .thenApplyAsync( - name -> { - return PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY); - }); + name -> PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY)); } private void checkEnabled() { diff --git a/core/src/main/java/dev/pgm/community/assistance/feature/types/AssistanceFeatureCore.java b/core/src/main/java/dev/pgm/community/assistance/feature/types/AssistanceFeatureCore.java index aeca843b..0da4b66e 100644 --- a/core/src/main/java/dev/pgm/community/assistance/feature/types/AssistanceFeatureCore.java +++ b/core/src/main/java/dev/pgm/community/assistance/feature/types/AssistanceFeatureCore.java @@ -47,7 +47,7 @@ import org.bukkit.configuration.Configuration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.bukkit.BukkitUtils; import tc.oc.pgm.util.named.NameStyle; @@ -110,7 +110,7 @@ private boolean isPersistent() { @Override public boolean canRequest(UUID uuid) { - return isCooldownEnabled() ? cooldown.getIfPresent(uuid) == null : true; + return !isCooldownEnabled() || cooldown.getIfPresent(uuid) == null; } @Override @@ -346,9 +346,9 @@ public void onPunishment(PlayerPunishmentEvent event) { .getReporyNotifyTime() .minus(Duration.between(r.getTime(), Instant.now())) .isNegative()) - .collect(Collectors.toList()); + .toList(); Set reporters = - relatedReports.stream().map(r -> r.getSenderId()).collect(Collectors.toSet()); + relatedReports.stream().map(AssistanceRequest::getSenderId).collect(Collectors.toSet()); for (UUID reporterId : reporters) { Player onlineReporter = Bukkit.getPlayer(reporterId); if (onlineReporter != null) { diff --git a/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java index 51ae13de..3b331731 100644 --- a/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java +++ b/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java @@ -19,9 +19,9 @@ public class ReportCategoryMenu extends CommunityInventoryProvider { - private InventoryManager manager; - private AssistanceFeature assistance; - private Player target; + private final InventoryManager manager; + private final AssistanceFeature assistance; + private final Player target; public ReportCategoryMenu( InventoryManager manager, @@ -47,9 +47,7 @@ private void openReasonMenu(Player player, Player target, ReportCategory categor @Override public Consumer getClickAction( ReportCategory category, Player viewer, InventoryContents contents) { - return e -> { - openReasonMenu(viewer, target, category); - }; + return e -> openReasonMenu(viewer, target, category); } @Override diff --git a/core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java index 922b168b..6570aeed 100644 --- a/core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java +++ b/core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java @@ -15,9 +15,9 @@ public class ReportReasonsMenu extends CommunityInventoryProvider { - private AssistanceFeature feature; - private ReportCategory category; - private Player target; + private final AssistanceFeature feature; + private final ReportCategory category; + private final Player target; public ReportReasonsMenu(AssistanceFeature feature, Player target, ReportCategory category) { super(category.getReasons()); diff --git a/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java b/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java index ec671820..4cd1eaff 100644 --- a/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java +++ b/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java @@ -2,18 +2,16 @@ public interface AssistanceQuery { - static final String TABLE_NAME = "reports"; - static final String TABLE_FIELDS = - "(id VARCHAR(36) PRIMARY KEY, " - + "sender VARCHAR(36), " - + "reported VARCHAR(36), " - + "reason VARCHAR(255), " - + "time LONG, " - + "server VARCHAR(255))"; - static final String INSERT_REPORT_QUERY = - "INSERT INTO " - + TABLE_NAME - + "(id, sender, reported, reason, time, server) VALUES (?, ?, ?, ?, ?, ?)"; - static final String SELECT_REPORT_QUERY = + String TABLE_NAME = "reports"; + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, " + + "sender VARCHAR(36), " + + "reported VARCHAR(36), " + + "reason VARCHAR(255), " + + "time LONG, " + + "server VARCHAR(255))"; + String INSERT_REPORT_QUERY = "INSERT INTO " + + TABLE_NAME + + "(id, sender, reported, reason, time, server) VALUES (?, ?, ?, ?, ?, ?)"; + String SELECT_REPORT_QUERY = "SELECT id, sender, reason, time FROM " + TABLE_NAME + " WHERE reported = ?"; } diff --git a/core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java b/core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java index 8d1eb1eb..5f918516 100644 --- a/core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java +++ b/core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java @@ -15,18 +15,12 @@ public class SQLAssistanceService extends SQLFeatureBase implements AssistanceQuery { - private LoadingCache cachedReports; + private final LoadingCache cachedReports; public SQLAssistanceService() { super(TABLE_NAME, TABLE_FIELDS); - this.cachedReports = CacheBuilder.newBuilder() - .maximumSize(1000) - .build(new CacheLoader() { - @Override - public PlayerReports load(UUID key) throws Exception { - return new PlayerReports(key); - } - }); + this.cachedReports = + CacheBuilder.newBuilder().maximumSize(1000).build(CacheLoader.from(PlayerReports::new)); } @Override @@ -83,7 +77,7 @@ public CompletableFuture query(String target) { return CompletableFuture.completedFuture(null); // Noop atm } - private class PlayerReports { + private static class PlayerReports { private final UUID playerId; private final List reports; private boolean loaded; diff --git a/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java index 9cd7f1f4..5efabd23 100644 --- a/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java +++ b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java @@ -34,16 +34,14 @@ public class ChatManagementFeature extends FeatureBase { private boolean lockdown; private boolean slowmode; - private Cache lastMessageCache; + private final Cache lastMessageCache; public ChatManagementFeature(Configuration config, Logger logger) { super(new ChatManagementConfig(config), logger, "Chat Management"); - this.lastMessageCache = - CacheBuilder.newBuilder() - .expireAfterWrite( - getChatConfig().getRepeatedMessagesExpireDuration().toMillis(), - TimeUnit.MILLISECONDS) - .build(); + this.lastMessageCache = CacheBuilder.newBuilder() + .expireAfterWrite( + getChatConfig().getRepeatedMessagesExpireDuration().toMillis(), TimeUnit.MILLISECONDS) + .build(); if (getConfig().isEnabled()) { enable(); } @@ -70,17 +68,14 @@ public void toggleSlowmode(CommandSender sender) { } private void broadcastModeChange(Component modeName, Component hover, boolean enabled) { - Component message = - text() - .append(modeName) - .append(text(" has been ")) - .append( - enabled - ? text("enabled", NamedTextColor.GREEN) - : text("disabled", NamedTextColor.RED)) - .color(NamedTextColor.GRAY) - .hoverEvent(HoverEvent.showText(hover)) - .build(); + Component message = text() + .append(modeName) + .append(text(" has been ")) + .append( + enabled ? text("enabled", NamedTextColor.GREEN) : text("disabled", NamedTextColor.RED)) + .color(NamedTextColor.GRAY) + .hoverEvent(HoverEvent.showText(hover)) + .build(); BroadcastUtils.sendGlobalWarning(message); } @@ -104,7 +99,7 @@ private Component getSlowmodeHover() { Component builder = text("Slowmode has been "); if (isSlowmode()) { - builder + builder = builder .append(text("enabled", NamedTextColor.GREEN)) .append(text(" in order to reduce spam.")) .append(newline()) @@ -113,7 +108,7 @@ private Component getSlowmodeHover() { .append(text(getChatConfig().getSlowmodeSpeed(), NamedTextColor.YELLOW)) .append(formatSeconds(getChatConfig().getSlowmodeSpeed())); } else { - builder + builder = builder .append(text("disabled", NamedTextColor.RED)) .append(text(". There is no longer a chat speed restriction in place")); } @@ -166,12 +161,11 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { if (timeSince.getSeconds() < getChatConfig().getSlowmodeSpeed()) { long seconds = (getChatConfig().getSlowmodeSpeed() - timeSince.getSeconds()); - Component cooldownMsg = - text("Please wait ") - .append(text(seconds, NamedTextColor.RED, TextDecoration.BOLD)) - .append(formatSeconds(seconds)) - .append(text(" before sending another message")) - .color(NamedTextColor.GRAY); + Component cooldownMsg = text("Please wait ") + .append(text(seconds, NamedTextColor.RED, TextDecoration.BOLD)) + .append(formatSeconds(seconds)) + .append(text(" before sending another message")) + .color(NamedTextColor.GRAY); viewer.sendWarning(cooldownMsg); event.setCancelled(true); @@ -208,15 +202,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { private void sendDelayedMessage(final Audience viewer, final Component message) { Bukkit.getScheduler() - .scheduleSyncDelayedTask( - Community.get(), - new Runnable() { - @Override - public void run() { - viewer.sendWarning(message); - } - }, - 30L); + .scheduleSyncDelayedTask(Community.get(), () -> viewer.sendWarning(message), 30L); } private Component formatSeconds(long seconds) { diff --git a/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java index 8e5d765e..4f67bb8d 100644 --- a/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java +++ b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java @@ -23,7 +23,7 @@ public class NetworkChatFeature extends FeatureBase { public static final String ADMIN_CHANNEL = "admin"; - private NetworkFeature network; + private final NetworkFeature network; public NetworkChatFeature(Configuration config, Logger logger, NetworkFeature network) { super(new NetworkChatConfig(config), logger, "Network Chat (PGM)"); diff --git a/core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java index dab098ab..ac97ed5b 100644 --- a/core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java +++ b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java @@ -12,10 +12,10 @@ public class NetworkChatMessage { - private String message; - private String sender; - private String server; - private String channel; + private final String message; + private final String sender; + private final String server; + private final String channel; public NetworkChatMessage(ChannelMessageEvent event, String server) { this.message = toMinecraftGson(text(event.getMessage())); diff --git a/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java b/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java index c2d7be6e..a1cf125f 100644 --- a/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java +++ b/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java @@ -30,8 +30,8 @@ public class ContainerCommand extends CommunityCommand implements Listener { - private Set clickingPlayers = Sets.newHashSet(); - private Set editingPlayers = Sets.newHashSet(); + private final Set clickingPlayers = Sets.newHashSet(); + private final Set editingPlayers = Sets.newHashSet(); private static final Component EXIT_MESSAGE = text("Exited container editing mode", NamedTextColor.GRAY); @@ -63,16 +63,10 @@ private boolean canOpen(Block block) { } private boolean isTypeAllowed(Material type) { - switch (type) { - case CHEST: - case ENDER_CHEST: - case FURNACE: - case DISPENSER: - case BEACON: - return true; - default: - return false; - } + return switch (type) { + case CHEST, ENDER_CHEST, FURNACE, DISPENSER, BEACON -> true; + default -> false; + }; } private Component formatCoords(Block block, NamedTextColor coordColor) { @@ -100,10 +94,9 @@ public void onContainerClick(PlayerInteractEvent event) { if (isChoosing(player) && canOpen(block) && event.getAction() == Action.LEFT_CLICK_BLOCK) { event.setCancelled(true); - viewer.sendMessage( - text() - .append(text("Now opening container at ", NamedTextColor.GRAY)) - .append(formatCoords(block, NamedTextColor.GREEN))); + viewer.sendMessage(text() + .append(text("Now opening container at ", NamedTextColor.GRAY)) + .append(formatCoords(block, NamedTextColor.GREEN))); InventoryHolder container = (InventoryHolder) block.getState(); editingPlayers.add(player.getUniqueId()); @@ -112,20 +105,18 @@ public void onContainerClick(PlayerInteractEvent event) { } } - @EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onInventoryClickEvent(InventoryClickEvent event) { - if (event.getWhoClicked() != null && event.getWhoClicked() instanceof Player) { - Player player = (Player) event.getWhoClicked(); + if (event.getWhoClicked() != null && event.getWhoClicked() instanceof Player player) { if (editingPlayers.contains(player.getUniqueId())) { event.setCancelled(false); } } } - @EventHandler(ignoreCancelled = false, priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onInventoryClose(InventoryCloseEvent event) { - if (event.getPlayer() != null && event.getPlayer() instanceof Player) { - Player player = (Player) event.getPlayer(); + if (event.getPlayer() != null && event.getPlayer() instanceof Player player) { if (editingPlayers.contains(player.getUniqueId())) { editingPlayers.remove(player.getUniqueId()); Audience.get(player).sendWarning(EXIT_MESSAGE); diff --git a/core/src/main/java/dev/pgm/community/commands/FlightCommand.java b/core/src/main/java/dev/pgm/community/commands/FlightCommand.java index e08f8e7d..0fcd2bf9 100644 --- a/core/src/main/java/dev/pgm/community/commands/FlightCommand.java +++ b/core/src/main/java/dev/pgm/community/commands/FlightCommand.java @@ -24,14 +24,13 @@ public void fly(CommandAudience sender, @Argument("target") TargetPlayer target) toggleFlight(sender.getPlayer()); } else { PlayerSelection selection = getPlayers(sender, target.getIdentifier()); - if (!selection.getPlayers().isEmpty()) { - selection.getPlayers().forEach(this::toggleFlight); - sender.sendMessage( - text() - .append(text("Flight has been toggled for ")) - .append(selection.getText()) - .color(NamedTextColor.GRAY) - .build()); + if (!selection.players().isEmpty()) { + selection.players().forEach(this::toggleFlight); + sender.sendMessage(text() + .append(text("Flight has been toggled for ")) + .append(selection.getText()) + .color(NamedTextColor.GRAY) + .build()); } else { selection.sendNoPlayerComponent(sender); } @@ -43,15 +42,13 @@ public void fly(CommandAudience sender, @Argument("target") TargetPlayer target) @Permission(CommunityPermissions.FLIGHT_SPEED) public void flySpeed(CommandAudience audience, Player player, @Argument("speed") Float speed) { if (speed == null) { - audience.sendMessage( - text("Your flight speed is ", NamedTextColor.GRAY) - .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN))); + audience.sendMessage(text("Your flight speed is ", NamedTextColor.GRAY) + .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN))); return; } player.setFlySpeed(Math.abs(Math.min(speed, 10) / 10)); - audience.sendMessage( - text("Flight speed set to ", NamedTextColor.GRAY) - .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN))); + audience.sendMessage(text("Flight speed set to ", NamedTextColor.GRAY) + .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN))); } private void toggleFlight(Player player) { @@ -59,11 +56,9 @@ private void toggleFlight(Player player) { player.setAllowFlight(!fly); player.setFlying(!fly); Audience.get(player) - .sendMessage( - text("Toggled flying mode ", NamedTextColor.GRAY) - .append( - text( - player.isFlying() ? "On" : "Off", - player.isFlying() ? NamedTextColor.GREEN : NamedTextColor.RED))); + .sendMessage(text("Toggled flying mode ", NamedTextColor.GRAY) + .append(text( + player.isFlying() ? "On" : "Off", + player.isFlying() ? NamedTextColor.GREEN : NamedTextColor.RED))); } } diff --git a/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java b/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java index bfb2d7ce..e4911c1f 100644 --- a/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java +++ b/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java @@ -30,33 +30,30 @@ public void gamemode( // /gm if (gamemode == null && target == null) { // Send current gamemode - viewer.sendMessage( - text() - .append(text("Your current gamemode is ", NamedTextColor.GRAY)) - .append(getGamemodeName(player.getGameMode())) - .build()); + viewer.sendMessage(text() + .append(text("Your current gamemode is ", NamedTextColor.GRAY)) + .append(getGamemodeName(player.getGameMode())) + .build()); } else if (gamemode != null && target == null && !everyone) { // /gm player.setGameMode(gamemode); - viewer.sendMessage( - text() - .append(text("Set your gamemode to ", NamedTextColor.GRAY)) - .append(getGamemodeName(player.getGameMode())) - .build()); + viewer.sendMessage(text() + .append(text("Set your gamemode to ", NamedTextColor.GRAY)) + .append(getGamemodeName(player.getGameMode())) + .build()); } else { // /gm PlayerSelection selection = getPlayers(viewer, everyone ? "*" : target.getName()); - if (!selection.getPlayers().isEmpty()) { - selection.getPlayers().forEach(pl -> pl.setGameMode(gamemode)); - viewer.sendMessage( - text() - .append(text("Gamemode has been set to ")) - .append(getGamemodeName(gamemode)) - .append(text(" for ")) - .append(selection.getText()) - .color(NamedTextColor.GRAY) - .build()); + if (!selection.players().isEmpty()) { + selection.players().forEach(pl -> pl.setGameMode(gamemode)); + viewer.sendMessage(text() + .append(text("Gamemode has been set to ")) + .append(getGamemodeName(gamemode)) + .append(text(" for ")) + .append(selection.getText()) + .color(NamedTextColor.GRAY) + .build()); } else { selection.sendNoPlayerComponent(viewer); } diff --git a/core/src/main/java/dev/pgm/community/commands/SudoCommand.java b/core/src/main/java/dev/pgm/community/commands/SudoCommand.java index 3d08bda2..dc8c5c72 100644 --- a/core/src/main/java/dev/pgm/community/commands/SudoCommand.java +++ b/core/src/main/java/dev/pgm/community/commands/SudoCommand.java @@ -27,18 +27,17 @@ public void sudo( } PlayerSelection selection = getPlayers(sender, targets); - if (!selection.getPlayers().isEmpty()) { + if (!selection.players().isEmpty()) { final String targetCommand = command.startsWith("/") ? command.substring(1) : command; - selection.getPlayers().forEach(player -> player.performCommand(targetCommand)); - sender.sendMessage( - text() - .append(text("Forcing ")) - .append(selection.getText()) - .append(text(" to run ")) - .append(text("/", NamedTextColor.AQUA)) - .append(text(targetCommand, NamedTextColor.AQUA)) - .color(NamedTextColor.GRAY) - .build()); + selection.players().forEach(player -> player.performCommand(targetCommand)); + sender.sendMessage(text() + .append(text("Forcing ")) + .append(selection.getText()) + .append(text(" to run ")) + .append(text("/", NamedTextColor.AQUA)) + .append(text(targetCommand, NamedTextColor.AQUA)) + .color(NamedTextColor.GRAY) + .build()); } else { selection.sendNoPlayerComponent(sender); } diff --git a/core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java b/core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java index 7006662c..f12352f3 100644 --- a/core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java +++ b/core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java @@ -5,6 +5,7 @@ import org.apache.commons.lang.StringUtils; import org.bukkit.GameMode; import org.bukkit.command.CommandSender; +import org.jspecify.annotations.NonNull; import tc.oc.pgm.command.parsers.EnumParser; import tc.oc.pgm.lib.org.incendo.cloud.context.CommandContext; import tc.oc.pgm.lib.org.incendo.cloud.context.CommandInput; @@ -32,7 +33,8 @@ protected GameMode bestMatch(CommandContext context, String input } @Override - public List stringSuggestions(CommandContext context, CommandInput input) { + public @NonNull List stringSuggestions( + @NonNull CommandContext context, @NonNull CommandInput input) { int totalGamemodes = GameMode.values().length; List suggestions = super.stringSuggestions(context, input); List indexedSuggestions = new ArrayList<>(totalGamemodes * 2); diff --git a/core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java b/core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java index 0cbe5eb1..247d4e60 100644 --- a/core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java +++ b/core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java @@ -10,7 +10,7 @@ import java.util.List; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; import tc.oc.pgm.lib.org.incendo.cloud.context.CommandContext; import tc.oc.pgm.lib.org.incendo.cloud.context.CommandInput; import tc.oc.pgm.lib.org.incendo.cloud.parser.ArgumentParseResult; @@ -24,8 +24,8 @@ public final class TargetPlayerParser BlockingSuggestionProvider.Strings { @Override - public @NotNull ArgumentParseResult<@NotNull TargetPlayer> parse( - @NotNull CommandContext<@NotNull CommandSender> context, @NotNull CommandInput inputQueue) { + public @NonNull ArgumentParseResult<@NonNull TargetPlayer> parse( + @NonNull CommandContext<@NonNull CommandSender> context, @NonNull CommandInput inputQueue) { final String input = inputQueue.peekString(); CommandSender sender = context.sender(); @@ -33,7 +33,7 @@ public final class TargetPlayerParser if (input.equals(CURRENT)) { if (!(context.sender() instanceof Player)) return failure(playerOnly()); - player = (TargetPlayer) new TargetPlayer(sender, context.sender().getName()); + player = new TargetPlayer(sender, context.sender().getName()); } else { try { player = new TargetPlayer(sender, input); @@ -52,8 +52,8 @@ public final class TargetPlayerParser } @Override - public @NotNull List<@NotNull String> stringSuggestions( - @NotNull CommandContext context, @NotNull CommandInput input) { + public @NonNull List<@NonNull String> stringSuggestions( + @NonNull CommandContext context, @NonNull CommandInput input) { CommandSender sender = context.sender(); return Players.getPlayerNames(sender, input.readString()); diff --git a/core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java b/core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java index 47dc2df9..cfddb898 100644 --- a/core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java +++ b/core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java @@ -4,7 +4,7 @@ public class UserProfileLoadEvent extends CommunityEvent { - private UserProfile profile; + private final UserProfile profile; public UserProfileLoadEvent(UserProfile profile) { this.profile = profile; diff --git a/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java b/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java index 01e4f8f5..93b77464 100644 --- a/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java +++ b/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java @@ -3,6 +3,7 @@ import static net.kyori.adventure.text.Component.join; import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; +import static net.kyori.adventure.text.JoinConfiguration.separator; import dev.pgm.community.Community; import dev.pgm.community.CommunityCommand; @@ -21,7 +22,7 @@ public class FreezeCommand extends CommunityCommand { - private FreezeFeature freeze; + private final FreezeFeature freeze; public FreezeCommand() { this.freeze = Community.get().getFeatures().getFreeze(); @@ -46,12 +47,11 @@ public void sendFrozenList(CommandAudience sender) { // Online Players if (freeze.getOnlineCount() > 0) { - Component names = - join( - text(", ", NamedTextColor.GRAY), - freeze.getFrozenPlayers().stream() - .map(p -> PlayerComponent.player(p, NameStyle.FANCY)) - .collect(Collectors.toList())); + Component names = join( + separator(text(", ", NamedTextColor.GRAY)), + freeze.getFrozenPlayers().stream() + .map(p -> PlayerComponent.player(p, NameStyle.FANCY)) + .collect(Collectors.toList())); sender.sendMessage( formatFrozenList("moderation.freeze.frozenList.online", freeze.getOnlineCount(), names)); @@ -60,9 +60,8 @@ public void sendFrozenList(CommandAudience sender) { // Offline Players if (freeze.getOfflineCount() > 0) { Component names = text(freeze.getOfflineFrozenNames()); - sender.sendMessage( - formatFrozenList( - "moderation.freeze.frozenList.offline", freeze.getOfflineCount(), names)); + sender.sendMessage(formatFrozenList( + "moderation.freeze.frozenList.offline", freeze.getOfflineCount(), names)); } } diff --git a/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java b/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java index 724bad43..3479fe7c 100644 --- a/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java +++ b/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java @@ -101,15 +101,12 @@ public void setFrozen(CommandAudience sender, Player freezee, boolean frozen, bo public static ItemStack getFreezeTool(CommandSender viewer) { ItemStack stack = new ItemStack(TOOL_MATERIAL); ItemMeta meta = stack.getItemMeta(); - meta.setDisplayName( - ChatColor.WHITE - + ChatColor.BOLD.toString() - + TextTranslations.translate("moderation.freeze.itemName", viewer)); + meta.setDisplayName(ChatColor.WHITE + + ChatColor.BOLD.toString() + + TextTranslations.translate("moderation.freeze.itemName", viewer)); meta.addItemFlags(ItemFlag.values()); - meta.setLore( - Collections.singletonList( - ChatColor.GRAY - + TextTranslations.translate("moderation.freeze.itemDescription", viewer))); + meta.setLore(Collections.singletonList( + ChatColor.GRAY + TextTranslations.translate("moderation.freeze.itemDescription", viewer))); stack.setItemMeta(meta); return stack; } @@ -153,11 +150,7 @@ public void onObserverToolFreeze(final ObserverInteractEvent event) { public void onPlayerCommand(final PlayerCommandPreprocessEvent event) { if (freeze.isFrozen(event.getPlayer()) && !event.getPlayer().hasPermission(CommunityPermissions.FREEZE)) { - boolean allow = - ALLOWED_CMDS.stream() - .filter(cmd -> event.getMessage().startsWith(cmd)) - .findAny() - .isPresent(); + boolean allow = ALLOWED_CMDS.stream().anyMatch(cmd -> event.getMessage().startsWith(cmd)); if (!allow) { // Don't allow commands except for those related to chat. diff --git a/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java b/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java index 5c78c2a8..fedd64ed 100644 --- a/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java +++ b/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java @@ -6,6 +6,7 @@ import static net.kyori.adventure.text.Component.space; import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; +import static net.kyori.adventure.title.Title.Times.times; import static net.kyori.adventure.title.Title.title; import com.google.common.cache.Cache; @@ -14,6 +15,7 @@ import dev.pgm.community.CommunityPermissions; import dev.pgm.community.utils.BroadcastUtils; import dev.pgm.community.utils.CommandAudience; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -24,7 +26,6 @@ import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.title.Title.Times; import net.kyori.adventure.util.Ticks; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -52,7 +53,7 @@ public class FreezeManager { CacheBuilder.newBuilder().expireAfterWrite(3, TimeUnit.MINUTES).build(); public FreezeManager() { - this.frozenPlayers = new OnlinePlayerMapAdapter(Community.get()); + this.frozenPlayers = new OnlinePlayerMapAdapter<>(Community.get()); } public void cachePlayer(Player player) { @@ -82,7 +83,7 @@ public int getOnlineCount() { } public List getFrozenPlayers() { - return frozenPlayers.values().stream().collect(Collectors.toList()); + return new ArrayList<>(frozenPlayers.values()); } public boolean isFrozen(Entity player) { @@ -140,7 +141,7 @@ private void freeze(Player freezee, Component senderName, boolean silent) { .showTitle(title( empty(), freezeTitle.build(), - Times.of(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5)))); + times(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5)))); } Audience.get(freezee).playSound(FREEZE_SOUND); @@ -154,14 +155,13 @@ private void thaw(Player freezee, Component senderName, boolean silent) { Component thawed = translatable("moderation.freeze.unfrozen"); Component by = translatable("misc.by", senderName); - Component thawedTitle = thawed; if (!silent) { - thawedTitle.append(space()).append(by); + thawed = thawed.append(space()).append(by); } freezee.resetTitle(); Audience.get(freezee).playSound(THAW_SOUND); - Audience.get(freezee).sendMessage(thawedTitle.color(NamedTextColor.GREEN)); + Audience.get(freezee).sendMessage(thawed.color(NamedTextColor.GREEN)); BroadcastUtils.sendAdminChatMessage( createInteractiveBroadcast(senderName, freezee, false), CommunityPermissions.FREEZE); diff --git a/core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java b/core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java index 4011f9da..dff14bb3 100644 --- a/core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java +++ b/core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java @@ -4,5 +4,5 @@ public enum FriendRequestStatus { ACCEPTED_EXISTING, // The target had already sent a friend request, so request was auto accepted PENDING, // Target and sender have no prior requests - EXISTING; // The sender has already sent a friend request + EXISTING // The sender has already sent a friend request } diff --git a/core/src/main/java/dev/pgm/community/friends/Friendship.java b/core/src/main/java/dev/pgm/community/friends/Friendship.java index f63ce2a6..43b782ba 100644 --- a/core/src/main/java/dev/pgm/community/friends/Friendship.java +++ b/core/src/main/java/dev/pgm/community/friends/Friendship.java @@ -5,12 +5,12 @@ public class Friendship implements Comparable { - private UUID friendshipId; // ID of friendship + private final UUID friendshipId; // ID of friendship - private UUID requesterId; // UUID of player who requested friendship - private UUID requestedId; // UUID of target + private final UUID requesterId; // UUID of player who requested friendship + private final UUID requestedId; // UUID of target - private Instant requestDate; // Date the original request was sent + private final Instant requestDate; // Date the original request was sent private Instant requestUpdated; // Date request status was last updated @@ -117,7 +117,7 @@ public void setStatus(FriendshipStatus status) { /** * Sets the date in which the friendship status was last updated * - * @param time + * @param now */ public void setLastUpdated(Instant now) { this.requestUpdated = now; @@ -156,16 +156,15 @@ public UUID getOtherPlayer(UUID playerId) { return getRequesterId().equals(playerId) ? getRequestedId() : getRequesterId(); } - public static enum FriendshipStatus { + public enum FriendshipStatus { PENDING, // No decision has been more ACCEPTED, // Requested has accepted - REJECTED; // Requested has denied + REJECTED // Requested has denied } @Override public boolean equals(Object other) { - if (!(other instanceof Friendship)) return false; - Friendship otherFriendship = (Friendship) other; + if (!(other instanceof Friendship otherFriendship)) return false; return otherFriendship.getFriendshipId().equals(getFriendshipId()); } diff --git a/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java b/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java index c722844c..aa2c86bd 100644 --- a/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java +++ b/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java @@ -26,7 +26,13 @@ import dev.pgm.community.utils.VisibilityUtils; import java.time.Duration; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import net.kyori.adventure.text.Component; @@ -63,9 +69,9 @@ public FriendshipCommand() { @Permission(CommunityPermissions.FRIENDSHIP) public void list( CommandAudience sender, Player player, @Argument("page") @Default("1") int page) { - friends.getFriends(sender.getPlayer().getUniqueId()).thenAcceptAsync(frs -> { - sendFriendList(sender, frs, page); - }); + friends + .getFriends(sender.getPlayer().getUniqueId()) + .thenAcceptAsync(frs -> sendFriendList(sender, frs, page)); } @Command("requests [page]") @@ -73,9 +79,9 @@ public void list( @Permission(CommunityPermissions.FRIENDSHIP) public void requests( CommandAudience sender, Player player, @Argument("page") @Default("1") int page) { - friends.getIncomingRequests(sender.getPlayer().getUniqueId()).thenAcceptAsync(requests -> { - sendRequestsList(sender, requests, page); - }); + friends + .getIncomingRequests(sender.getPlayer().getUniqueId()) + .thenAcceptAsync(requests -> sendRequestsList(sender, requests, page)); } @Command("add ") @@ -93,13 +99,12 @@ public void add(CommandAudience sender, Player player, @Argument("player") Targe sender.sendWarning(text("You have already sent a friend request to ") .append(fancyName) .color(NamedTextColor.GRAY)); - return; } else { fake.addRequest(fullName); sender.sendMessage( text("Friend request sent to ").append(fancyName).color(NamedTextColor.GRAY)); - return; } + return; } getTarget(target.getIdentifier(), users).thenAcceptAsync(storedId -> { @@ -111,42 +116,37 @@ public void add(CommandAudience sender, Player player, @Argument("player") Targe friends .addFriend(sender.getPlayer().getUniqueId(), storedId.get()) - .thenAcceptAsync(status -> { - users - .renderUsername(Optional.of(storedId.get()), NameStyle.FANCY) - .thenAcceptAsync(name -> { - switch (status) { - case ACCEPTED_EXISTING: - sender.sendMessage(text("You accepted ") - .append(name) - .append(text("'s friend request!")) - .color(NamedTextColor.GREEN)); - break; - case EXISTING: - if (friends - .areFriends(sender.getPlayer().getUniqueId(), storedId.get()) - .join()) { - sender.sendWarning( - text("You are already friends with ").append(name)); - } else { - sender.sendWarning(text("You have already sent a friend request to ") - .append(name) - .color(NamedTextColor.GRAY)); - } - break; - case PENDING: - sender.sendMessage(text("Friend request sent to ") + .thenAcceptAsync( + status -> users.renderUsername(storedId, NameStyle.FANCY).thenAcceptAsync(name -> { + switch (status) { + case ACCEPTED_EXISTING: + sender.sendMessage(text("You accepted ") + .append(name) + .append(text("'s friend request!")) + .color(NamedTextColor.GREEN)); + break; + case EXISTING: + if (friends + .areFriends(sender.getPlayer().getUniqueId(), storedId.get()) + .join()) { + sender.sendWarning(text("You are already friends with ").append(name)); + } else { + sender.sendWarning(text("You have already sent a friend request to ") .append(name) .color(NamedTextColor.GRAY)); - break; - default: - sender.sendWarning(text("Could not send a friend request to ") - .append(name) - .color(NamedTextColor.GRAY)); - break; - } - }); - }); + } + break; + case PENDING: + sender.sendMessage( + text("Friend request sent to ").append(name).color(NamedTextColor.GRAY)); + break; + default: + sender.sendWarning(text("Could not send a friend request to ") + .append(name) + .color(NamedTextColor.GRAY)); + break; + } + })); } else { sender.sendWarning(formatNotFoundComponent(target.getIdentifier())); } @@ -258,7 +258,6 @@ public void rejectRequest( .append(name) .append(text("'s friend request")) .color(NamedTextColor.GRAY)); - return; } else { sender.sendWarning(text("You don't have a pending friend request from ") .append(name) @@ -421,7 +420,7 @@ public Component formatEmpty() { private CompletableFuture renderOnlineStatus(UUID playerId, CommandAudience viewer) { boolean staff = viewer.getSender().hasPermission(CommunityPermissions.STAFF); - CompletableFuture future = new CompletableFuture(); + CompletableFuture future = new CompletableFuture<>(); users.findUserWithSession(playerId, !staff, (profile, session) -> { boolean online = !session.hasEnded(); boolean vanished = session.isDisguised(); @@ -455,18 +454,13 @@ private boolean canSee(Player player, CommandAudience viewer) { return true; } - private LoadingCache fakeRequests = CacheBuilder.newBuilder() + private final LoadingCache fakeRequests = CacheBuilder.newBuilder() .expireAfterAccess(3, TimeUnit.HOURS) - .build(new CacheLoader() { - @Override - public FakeRequests load(UUID key) throws Exception { - return new FakeRequests(); - } - }); + .build(CacheLoader.from(FakeRequests::new)); - private class FakeRequests { + private static class FakeRequests { - private Set nicknames = Sets.newHashSet(); + private final Set nicknames = Sets.newHashSet(); public boolean hasRequest(String nickname) { return nicknames.contains(nickname); diff --git a/core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java b/core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java index db2acb9a..239e2286 100644 --- a/core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java +++ b/core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java @@ -14,7 +14,7 @@ public class PGMFriendIntegration implements FriendIntegration { - private Map> friends; + private final Map> friends; public PGMFriendIntegration() { this.friends = Maps.newHashMap(); diff --git a/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java b/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java index 5f2f8b0c..36a348a8 100644 --- a/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java +++ b/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java @@ -2,23 +2,21 @@ public interface FriendshipQuery { - static final String TABLE_NAME = "friendships"; - static final String TABLE_FIELDS = - "(id VARCHAR(36) PRIMARY KEY, " - + "requester VARCHAR(36), " - + "requested VARCHAR(36), " - + "status VARCHAR(8), " - + "requestDate LONG, " - + "updateDate LONG)"; + String TABLE_NAME = "friendships"; + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, " + + "requester VARCHAR(36), " + + "requested VARCHAR(36), " + + "status VARCHAR(8), " + + "requestDate LONG, " + + "updateDate LONG)"; - static final String INSERT_FRIENDSHIP_QUERY = - "INSERT INTO " - + TABLE_NAME - + "(id, requester, requested, status, requestDate, updateDate) VALUES (?, ?, ?, ?, ?, ?)"; + String INSERT_FRIENDSHIP_QUERY = "INSERT INTO " + + TABLE_NAME + + "(id, requester, requested, status, requestDate, updateDate) VALUES (?, ?, ?, ?, ?, ?)"; - static final String SELECT_FRIENDSHIPS_QUERY = + String SELECT_FRIENDSHIPS_QUERY = "SELECT * from " + TABLE_NAME + " where (requester = ? OR requested = ?)"; - static final String UPDATE_FRIENDSHIP_QUERY = + String UPDATE_FRIENDSHIP_QUERY = "UPDATE " + TABLE_NAME + " SET status = ?, updateDate = ? WHERE id = ? "; } diff --git a/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java b/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java index 3f156f45..e4197080 100644 --- a/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java +++ b/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java @@ -18,17 +18,12 @@ public class SQLFriendshipService extends SQLFeatureBase implements FriendshipQuery { - private LoadingCache friendshipCache; + private final LoadingCache friendshipCache; public SQLFriendshipService() { super(TABLE_NAME, TABLE_FIELDS); - this.friendshipCache = CacheBuilder.newBuilder() - .build(new CacheLoader() { - @Override - public PlayerFriendships load(UUID key) throws Exception { - return new PlayerFriendships(key); - } - }); + this.friendshipCache = + CacheBuilder.newBuilder().build(CacheLoader.from(PlayerFriendships::new)); } @Override @@ -131,9 +126,9 @@ public CompletableFuture query(String target) { return null; // Use queryList } - private class PlayerFriendships { - private UUID playerId; - private Set friendships; + private static class PlayerFriendships { + private final UUID playerId; + private final Set friendships; private boolean loaded; public PlayerFriendships(UUID playerId) { diff --git a/core/src/main/java/dev/pgm/community/history/MatchHistoryEntry.java b/core/src/main/java/dev/pgm/community/history/MatchHistoryEntry.java index 0df72329..96a76d44 100644 --- a/core/src/main/java/dev/pgm/community/history/MatchHistoryEntry.java +++ b/core/src/main/java/dev/pgm/community/history/MatchHistoryEntry.java @@ -26,7 +26,7 @@ public class MatchHistoryEntry implements Comparable { private final Duration finalDuration; private final Instant endTime; - private List staff; + private final List staff; public MatchHistoryEntry(Match match) { this.matchID = match.getId(); diff --git a/core/src/main/java/dev/pgm/community/info/InfoCommandData.java b/core/src/main/java/dev/pgm/community/info/InfoCommandData.java index 60a77166..962e75f9 100644 --- a/core/src/main/java/dev/pgm/community/info/InfoCommandData.java +++ b/core/src/main/java/dev/pgm/community/info/InfoCommandData.java @@ -10,21 +10,11 @@ import org.bukkit.configuration.ConfigurationSection; import tc.oc.pgm.util.Audience; -public class InfoCommandData { +public record InfoCommandData(String name, List lines, String permission) { private static final String LINES_KEY = "lines"; private static final String PERMISSION_KEY = "permission"; - private String name; - private List lines; - private String permission; - - public InfoCommandData(String name, List lines, String permission) { - this.name = name; - this.lines = lines; - this.permission = permission; - } - public static InfoCommandData of(ConfigurationSection section) { return new InfoCommandData( section.getName(), @@ -34,28 +24,16 @@ public static InfoCommandData of(ConfigurationSection section) { section.getString(PERMISSION_KEY)); } - public String getName() { - return name; - } - - public List getLines() { - return lines; - } - - public String getPermission() { - return permission; - } - public void sendCommand(CommandSender sender) { Audience viewer = Audience.get(sender); - if (getPermission() != null && !getPermission().isEmpty()) { - if (!sender.hasPermission(getPermission())) { + if (permission() != null && !permission().isEmpty()) { + if (!sender.hasPermission(permission())) { viewer.sendWarning(text("You do not have permission for this command")); return; // TODO: Translate } } - getLines().forEach(viewer::sendMessage); + lines().forEach(viewer::sendMessage); } } diff --git a/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java b/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java index 6d2f2e7c..a293970b 100644 --- a/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java +++ b/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java @@ -25,8 +25,7 @@ public InfoCommandConfig getInfoConfig() { public void onPlayerCommandProcess(PlayerCommandPreprocessEvent event) { // We dynamically check for defined commands, and send the related feedback getInfoConfig().getInfoCommands().stream() - .filter( - c -> event.getMessage().toLowerCase().startsWith("/" + c.getName().toLowerCase())) + .filter(c -> event.getMessage().toLowerCase().startsWith("/" + c.name().toLowerCase())) .findAny() .ifPresent(command -> { command.sendCommand(event.getPlayer()); diff --git a/core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java b/core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java index 575fc1e9..4dcc109a 100644 --- a/core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java +++ b/core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java @@ -11,7 +11,7 @@ public abstract class CommunityInventoryProvider implements InventoryProvider { - private List items; + private final List items; public CommunityInventoryProvider(List items) { this.items = items; @@ -38,13 +38,10 @@ public abstract Consumer getClickAction( protected abstract ItemStack getNoResultsItem(); protected int getStartingSlot(int categorySize) { - switch (categorySize) { - case 3: - return 2; - case 4: - return 1; - default: - return 0; - } + return switch (categorySize) { + case 3 -> 2; + case 4 -> 1; + default -> 0; + }; } } diff --git a/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java b/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java index 302d3d9d..fa83165a 100644 --- a/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java +++ b/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java @@ -36,10 +36,10 @@ public abstract class MapSelectionMenu implements InventoryProvider, PageableInv private static final int ROWS = 6; - private String title; - private Player viewer; - private List maps; - private List tags; + private final String title; + private final Player viewer; + private final List maps; + private final List tags; private int filterIndex = 0; @@ -85,7 +85,6 @@ public void update(Player player, InventoryContents contents) { contents.setProperty("update", delay + 1); if (delay >= 5) { render(player, contents); - delay = 0; } } @@ -105,7 +104,7 @@ private void render(Player player, InventoryContents contents) { List mapItems = getFilteredMapItems(); Pagination page = contents.pagination(); - page.setItems(mapItems.toArray(new ClickableItem[mapItems.size()])); + page.setItems(mapItems.toArray(new ClickableItem[0])); page.setItemsPerPage(36); page.addToIterator(contents.newIterator(SlotIterator.Type.HORIZONTAL, 1, 0)); @@ -134,11 +133,10 @@ public Player getViewer() { } public Material getMapMaterial(MapInfo map) { - return map.getTags().isEmpty() - || !map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().isPresent() + return map.getTags().isEmpty() || map.getTags().stream().noneMatch(MapTag::isGamemode) ? Material.MAP : mapTagMaterial( - map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get()); + map.getTags().stream().filter(MapTag::isGamemode).findAny().get()); } private List getMapItems(List maps) { diff --git a/core/src/main/java/dev/pgm/community/menu/MenuItem.java b/core/src/main/java/dev/pgm/community/menu/MenuItem.java index f82245d9..7d3a8cbf 100644 --- a/core/src/main/java/dev/pgm/community/menu/MenuItem.java +++ b/core/src/main/java/dev/pgm/community/menu/MenuItem.java @@ -18,7 +18,7 @@ public abstract class MenuItem { private final String[] description; public MenuItem(Material icon, String name, List description) { - this(icon, name, description.toArray(new String[description.size()])); + this(icon, name, description.toArray(new String[0])); } public MenuItem(Material icon, String name, String... description) { diff --git a/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java b/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java index 0b42bfe9..0903d402 100644 --- a/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java +++ b/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java @@ -61,7 +61,7 @@ public void init(Player player, InventoryContents contents) { @Override public void update(Player player, InventoryContents contents) {} - private final ItemStack getPageIcon(String text, int page) { + private ItemStack getPageIcon(String text, int page) { return getNamedItem(text, PAGE_MATERIAL, page); } diff --git a/core/src/main/java/dev/pgm/community/mobs/MobFeature.java b/core/src/main/java/dev/pgm/community/mobs/MobFeature.java index ae12f014..c4c60fbb 100644 --- a/core/src/main/java/dev/pgm/community/mobs/MobFeature.java +++ b/core/src/main/java/dev/pgm/community/mobs/MobFeature.java @@ -30,8 +30,8 @@ public class MobFeature extends FeatureBase { public static final float DEFAULT_SPEED = 1.2f; - private Map followTargets; - private Set attackers; + private final Map followTargets; + private final Set attackers; private BukkitTask task; private float speed; @@ -67,10 +67,8 @@ public void disable() { @EventHandler public void onDamage(EntityDamageByEntityEvent event) { if (event.getDamager() != null - && event.getDamager() instanceof Player - && event.getEntity() instanceof Player) { - Player damager = (Player) event.getDamager(); - Player target = (Player) event.getEntity(); + && event.getDamager() instanceof Player damager + && event.getEntity() instanceof Player target) { if (isAttacker(damager.getUniqueId())) { setTarget(damager, target); @@ -79,14 +77,13 @@ public void onDamage(EntityDamageByEntityEvent event) { } public void updateFollows() { - this.followTargets.entrySet().forEach(entry -> { - Player owner = Bukkit.getPlayer(entry.getKey()); - Player target = Bukkit.getPlayer(entry.getValue()); + this.followTargets.forEach((key, value) -> { + Player owner = Bukkit.getPlayer(key); + Player target = Bukkit.getPlayer(value); if (owner != null && target != null) { this.getOwnedMobs(owner).forEach(mob -> { ENTITY_UTILS.follow(mob, target.getLocation(), speed); - if (mob instanceof Creature && attackers.contains(owner.getUniqueId())) { - Creature creature = (Creature) mob; + if (mob instanceof Creature creature && attackers.contains(owner.getUniqueId())) { creature.setTarget(target); } }); @@ -127,8 +124,7 @@ public void spawn(Player sender, EntityType type, int amount, boolean canDie) { public void spawn(Player sender, EntityType type, boolean canDie) { Entity entity = sender.getLocation().getWorld().spawnEntity(sender.getLocation(), type); - if (entity instanceof LivingEntity) { - LivingEntity mob = (LivingEntity) entity; + if (entity instanceof LivingEntity mob) { if (!canDie) { mob.setMaxHealth(Integer.MAX_VALUE); mob.setHealth(mob.getMaxHealth()); @@ -164,7 +160,7 @@ public int heal(Player sender) { public int remove(Player sender) { List mobs = getOwnedMobs(sender); - mobs.forEach(mob -> mob.remove()); + mobs.forEach(Entity::remove); return mobs.size(); } @@ -172,9 +168,7 @@ public boolean toggleFollow(Player sender) { UUID playerId = sender.getUniqueId(); // Unset attackers when switching to follow - if (this.attackers.contains(playerId)) { - this.attackers.remove(playerId); - } + this.attackers.remove(playerId); if (this.followTargets.containsKey(playerId)) { this.followTargets.remove(playerId); diff --git a/core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java b/core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java index d544edb6..6232c709 100644 --- a/core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java +++ b/core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java @@ -175,19 +175,13 @@ public String getRulesLink() { * @return True if punishment should be visible publicly */ public boolean isPunishmentPublic(Punishment punishment) { - switch (punishment.getType()) { - case TEMP_BAN: - case BAN: - return banPublic; - case KICK: - return kickPublic; - case MUTE: - return mutePublic; - case WARN: - return warnPublic; - default: - return broadcast; - } + return switch (punishment.getType()) { + case TEMP_BAN, BAN -> banPublic; + case KICK -> kickPublic; + case MUTE -> mutePublic; + case WARN -> warnPublic; + default -> broadcast; + }; } /** diff --git a/core/src/main/java/dev/pgm/community/moderation/feature/PGMPunishmentIntegration.java b/core/src/main/java/dev/pgm/community/moderation/feature/PGMPunishmentIntegration.java index 27f229f2..5928e53d 100644 --- a/core/src/main/java/dev/pgm/community/moderation/feature/PGMPunishmentIntegration.java +++ b/core/src/main/java/dev/pgm/community/moderation/feature/PGMPunishmentIntegration.java @@ -26,9 +26,9 @@ public class PGMPunishmentIntegration implements PunishmentIntegration, Listener { - private ModerationFeature moderation; + private final ModerationFeature moderation; - private ModerationTools tools; + private final ModerationTools tools; public PGMPunishmentIntegration(ModerationFeature moderation) { this.moderation = moderation; diff --git a/core/src/main/java/dev/pgm/community/moderation/feature/types/ModerationFeatureCore.java b/core/src/main/java/dev/pgm/community/moderation/feature/types/ModerationFeatureCore.java index bd523bd4..b84fccaa 100644 --- a/core/src/main/java/dev/pgm/community/moderation/feature/types/ModerationFeatureCore.java +++ b/core/src/main/java/dev/pgm/community/moderation/feature/types/ModerationFeatureCore.java @@ -64,7 +64,7 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; import org.bukkit.event.player.PlayerJoinEvent; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.named.NameStyle; @@ -485,10 +485,10 @@ public void sendUpdate(NetworkPunishment punishment) { @Override public void recieveUpdate(NetworkPunishment punishment) { - recieveRefresh(punishment.getPunishment().getTargetId()); - broadcastPunishment(punishment.getPunishment(), true, punishment.getServer()); + recieveRefresh(punishment.punishment().getTargetId()); + broadcastPunishment(punishment.punishment(), true, punishment.serverId()); // Extra step due to gson limitation (maybe look into type tokens) - Punishment typedPunishment = Punishment.of(punishment.getPunishment()); + Punishment typedPunishment = Punishment.of(punishment.punishment()); Community.get() .getServer() .getScheduler() diff --git a/core/src/main/java/dev/pgm/community/moderation/punishments/NetworkPunishment.java b/core/src/main/java/dev/pgm/community/moderation/punishments/NetworkPunishment.java index 4f39bcf7..a14bf431 100644 --- a/core/src/main/java/dev/pgm/community/moderation/punishments/NetworkPunishment.java +++ b/core/src/main/java/dev/pgm/community/moderation/punishments/NetworkPunishment.java @@ -1,20 +1,3 @@ package dev.pgm.community.moderation.punishments; -public class NetworkPunishment { - - private String serverId; - private Punishment punishment; - - public NetworkPunishment(Punishment punishment, String serverId) { - this.punishment = punishment; - this.serverId = serverId; - } - - public String getServer() { - return serverId; - } - - public Punishment getPunishment() { - return punishment; - } -} +public record NetworkPunishment(Punishment punishment, String serverId) {} diff --git a/core/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java b/core/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java index 91772b18..1e2930aa 100644 --- a/core/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java +++ b/core/src/main/java/dev/pgm/community/moderation/punishments/Punishment.java @@ -3,6 +3,7 @@ import static net.kyori.adventure.text.Component.empty; import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; +import static net.kyori.adventure.title.Title.Times.times; import static net.kyori.adventure.title.Title.title; import static tc.oc.pgm.util.text.TemporalComponent.briefNaturalApproximate; import static tc.oc.pgm.util.text.TemporalComponent.duration; @@ -31,11 +32,10 @@ import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.title.Title.Times; import net.kyori.adventure.util.Ticks; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.named.NameStyle; import tc.oc.pgm.util.player.PlayerComponent; @@ -67,7 +67,7 @@ public Punishment( UUID targetId, @Nullable UUID issuerId, String reason, - Duration duration, + @Nullable Duration duration, long timeIssued, boolean active, long lastUpdated, @@ -139,7 +139,7 @@ public String getService() { return service; } - public Duration getDuration() { + public @Nullable Duration getDuration() { return duration; } @@ -202,8 +202,8 @@ public void sendWarning(Audience target, String reason) { subtitle = text(reason, NamedTextColor.GOLD); } - target.showTitle(title( - title, subtitle, Times.of(Ticks.duration(5), Ticks.duration(200), Ticks.duration(10)))); + target.showTitle( + title(title, subtitle, times(Ticks.duration(5), Ticks.duration(200), Ticks.duration(10)))); target.playSound(Sounds.WARN_SOUND); } @@ -250,7 +250,7 @@ public Component formatTimeComponent() { } public Component getExpireDateMessage() { - Duration banLength = ((ExpirablePunishment) this).getDuration(); + Duration banLength = this.getDuration(); Duration timeSince = Duration.between(getTimeIssued(), Instant.now()); Duration remaining = banLength.minus(timeSince); Component timeLeft = briefNaturalApproximate(remaining); @@ -350,26 +350,25 @@ public static Punishment of( long lastUpdated, @Nullable UUID lastUpdatedBy, String service) { - switch (type) { - case WARN: - return new WarnPunishment( + return switch (type) { + case WARN -> + new WarnPunishment( id, target, issuer, reason, time, active, lastUpdated, lastUpdatedBy, service); - case MUTE: - return new MutePunishment( + case MUTE -> + new MutePunishment( id, target, issuer, reason, time, length, active, lastUpdated, lastUpdatedBy, service); - case KICK: - return new KickPunishment( + case KICK -> + new KickPunishment( id, target, issuer, reason, time, active, lastUpdated, lastUpdatedBy, service); - case TEMP_BAN: - return new TempBanPunishment( + case TEMP_BAN -> + new TempBanPunishment( id, target, issuer, reason, time, length, active, lastUpdated, lastUpdatedBy, service); - case BAN: - return new BanPunishment( + case BAN -> + new BanPunishment( id, target, issuer, reason, time, active, lastUpdated, lastUpdatedBy, service); - case NAME_BAN: - return new UsernameBanPunishment( + case NAME_BAN -> + new UsernameBanPunishment( id, target, issuer, reason, time, active, lastUpdated, lastUpdatedBy, service); - } - return null; + }; } } diff --git a/core/src/main/java/dev/pgm/community/moderation/punishments/PunishmentType.java b/core/src/main/java/dev/pgm/community/moderation/punishments/PunishmentType.java index f7912389..406eb7b4 100644 --- a/core/src/main/java/dev/pgm/community/moderation/punishments/PunishmentType.java +++ b/core/src/main/java/dev/pgm/community/moderation/punishments/PunishmentType.java @@ -16,8 +16,8 @@ public enum PunishmentType { TEMP_BAN(true, true, true, true, "Temporary Ban"), NAME_BAN(true, true, true, false, "Username Ban"); - private String PREFIX_TRANSLATE_KEY = "moderation.type."; - private String SCREEN_TRANSLATE_KEY = "moderation.screen."; + private final String PREFIX_TRANSLATE_KEY = "moderation.type."; + private final String SCREEN_TRANSLATE_KEY = "moderation.screen."; private final boolean screen; private final boolean canRescind; diff --git a/core/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java b/core/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java index 8ca4218c..f33d59ea 100644 --- a/core/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java +++ b/core/src/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java @@ -5,7 +5,7 @@ import java.time.Duration; import java.time.Instant; import java.util.UUID; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** A punishment that can expire * */ public abstract class ExpirablePunishment extends Punishment { @@ -40,8 +40,8 @@ public ExpirablePunishment( public boolean isActive() { Instant expires = this.getTimeIssued().plus(this.getDuration()); return super.isActive() - ? Instant.now().isBefore(expires) - : false; // If expired return false, otherwise return true until expires + && Instant.now() + .isBefore(expires); // If expired return false, otherwise return true until expires } public Instant getExpireTime() { @@ -49,8 +49,6 @@ public Instant getExpireTime() { } public static @Nullable Duration getDuration(Punishment punishment) { - return punishment instanceof ExpirablePunishment - ? ExpirablePunishment.class.cast(punishment).getDuration() - : null; + return punishment instanceof ExpirablePunishment ? punishment.getDuration() : null; } } diff --git a/core/src/main/java/dev/pgm/community/moderation/services/ModerationQuery.java b/core/src/main/java/dev/pgm/community/moderation/services/ModerationQuery.java index a7ba2ec1..e86a99f5 100644 --- a/core/src/main/java/dev/pgm/community/moderation/services/ModerationQuery.java +++ b/core/src/main/java/dev/pgm/community/moderation/services/ModerationQuery.java @@ -2,29 +2,27 @@ public interface ModerationQuery { - static final String TABLE_NAME = "punishments"; - static final String TABLE_FIELDS = + String TABLE_NAME = "punishments"; + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, punished VARCHAR(36), issuer VARCHAR(36), reason VARCHAR(255), type VARCHAR(8), time LONG, expires LONG, active BOOL, last_updated LONG, updated_by VARCHAR(36), service VARCHAR(255))"; - static final String INSERT_PUNISHMENT_QUERY = "INSERT INTO " + String INSERT_PUNISHMENT_QUERY = "INSERT INTO " + TABLE_NAME + "(id, punished, issuer, reason, type, time, expires, active, last_updated, updated_by, service) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - static final String SELECT_PUNISHMENTS_QUERY = - "SELECT * from " + TABLE_NAME + " where punished = ?"; + String SELECT_PUNISHMENTS_QUERY = "SELECT * from " + TABLE_NAME + " where punished = ?"; - static final String SELECT_ACTIVE_PUNISHMENTS_QUERY = + String SELECT_ACTIVE_PUNISHMENTS_QUERY = "SELECT id, type, active, expires, time, service, reason, issuer from " + TABLE_NAME + " where punished = ? AND active = ?"; - static final String SINGLE_PARDON_TYPE = "AND type = ?"; - static final String MULTI_PARDON_TYPE = "AND (type = ? OR type = ? OR type = ?)"; - static final String PARDON_QUERY = "UPDATE " + String SINGLE_PARDON_TYPE = "AND type = ?"; + String MULTI_PARDON_TYPE = "AND (type = ? OR type = ? OR type = ?)"; + String PARDON_QUERY = "UPDATE " + TABLE_NAME + " SET active = ?, last_updated = ?, updated_by = ? WHERE active = ? AND punished = ? "; - static final String DEACTIVATE_QUERY = + String DEACTIVATE_QUERY = "UPDATE " + TABLE_NAME + " SET active = ? WHERE active = ? AND punished = ? "; - static final String SELECT_RECENT_QUERY = - "SELECT * from " + TABLE_NAME + " WHERE time > ? LIMIT ?"; + String SELECT_RECENT_QUERY = "SELECT * from " + TABLE_NAME + " WHERE time > ? LIMIT ?"; } diff --git a/core/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java b/core/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java index c30f80bf..4efde162 100644 --- a/core/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java +++ b/core/src/main/java/dev/pgm/community/moderation/services/SQLModerationService.java @@ -16,7 +16,7 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class SQLModerationService extends SQLFeatureBase implements ModerationQuery { @@ -26,20 +26,15 @@ public class SQLModerationService extends SQLFeatureBase private static final int RECENT_LIMIT = 50; - private LoadingCache punishmentCache; + private final LoadingCache punishmentCache; private final ModerationConfig config; public SQLModerationService(ModerationConfig config) { super(TABLE_NAME, TABLE_FIELDS); this.config = config; - this.punishmentCache = CacheBuilder.newBuilder() - .build(new CacheLoader() { - @Override - public PlayerPunishments load(UUID key) throws Exception { - return new PlayerPunishments(key); - } - }); + this.punishmentCache = + CacheBuilder.newBuilder().build(CacheLoader.from(PlayerPunishments::new)); } @Override @@ -114,7 +109,7 @@ private long getExpiration(Punishment punishment) { long expires = punishment.getTimeIssued().toEpochMilli(); if (punishment instanceof ExpirablePunishment) { - Duration time = ((ExpirablePunishment) punishment).getDuration(); + Duration time = punishment.getDuration(); expires = punishment.getTimeIssued().plusMillis(time.toMillis()).toEpochMilli(); } @@ -228,7 +223,7 @@ public void invalidate(UUID playerId) { } } - private class PlayerPunishments { + private static class PlayerPunishments { private final UUID playerId; private final List punishments; diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/ModerationTools.java b/core/src/main/java/dev/pgm/community/moderation/tools/ModerationTools.java index 13f0bcbc..03db2c85 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/ModerationTools.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/ModerationTools.java @@ -9,9 +9,9 @@ public class ModerationTools { - private ModerationMenuTool menu; - private TeleportHook tpHook; - private LookupSign sign; + private final ModerationMenuTool menu; + private final TeleportHook tpHook; + private final LookupSign sign; public ModerationTools(ModerationConfig config) { // TODO: allow reloads to enable/disable tools diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/ToolBase.java b/core/src/main/java/dev/pgm/community/moderation/tools/ToolBase.java index 4f642b7e..e48d5847 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/ToolBase.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/ToolBase.java @@ -12,8 +12,8 @@ public abstract class ToolBase implements Tool { - private int slot; - private boolean enabled; + private final int slot; + private final boolean enabled; public ToolBase(int slot, boolean enabled) { this.slot = slot; diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/ToolButtonBase.java b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/ToolButtonBase.java index e37cc786..1098aa6f 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/ToolButtonBase.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/ToolButtonBase.java @@ -11,12 +11,12 @@ public abstract class ToolButtonBase implements ToolButton { - private Player viewer; + private final Player viewer; - private String name; - private List lore; - private Material material; - private int amount; + private final String name; + private final List lore; + private final Material material; + private final int amount; public ToolButtonBase( Player viewer, String name, List lore, Material material, int amount) { diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/TranslatableToolButton.java b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/TranslatableToolButton.java index d644597a..9c670208 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/TranslatableToolButton.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/TranslatableToolButton.java @@ -13,9 +13,9 @@ public abstract class TranslatableToolButton extends ToolButtonBase { - private String nameKey; - private String loreKey; - private NamedTextColor nameColor; + private final String nameKey; + private final String loreKey; + private final NamedTextColor nameColor; public TranslatableToolButton( Player viewer, diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/GamemodeButton.java b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/GamemodeButton.java index 6c11ddfe..470ef0d5 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/GamemodeButton.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/GamemodeButton.java @@ -79,13 +79,10 @@ private boolean isCreative() { } private GameMode getOppositeMode(GameMode mode) { - switch (mode) { - case CREATIVE: - return GameMode.SPECTATOR; - case SPECTATOR: - return GameMode.CREATIVE; - default: - return mode; - } + return switch (mode) { + case CREATIVE -> GameMode.SPECTATOR; + case SPECTATOR -> GameMode.CREATIVE; + default -> mode; + }; } } diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/ObserverVisibilityButton.java b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/ObserverVisibilityButton.java index 0940096d..ac520550 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/ObserverVisibilityButton.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/ObserverVisibilityButton.java @@ -68,14 +68,11 @@ public boolean isVisible() { private String getStatusKey() { MatchPlayer matchPlayer = PGM.get().getMatchManager().getPlayer(getViewer()); SettingValue value = matchPlayer.getSettings().getValue(SettingKey.OBSERVERS); - switch (value) { - case OBSERVERS_FRIEND: - return "misc.friends"; - case OBSERVERS_ON: - return "misc.all"; - default: - return "misc.none"; - } + return switch (value) { + case OBSERVERS_FRIEND -> "misc.friends"; + case OBSERVERS_ON -> "misc.all"; + default -> "misc.none"; + }; } public void toggleObserverVisibility(Player player) { diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/SpeedButton.java b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/SpeedButton.java index c0a7dd03..6e3cfe0d 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/SpeedButton.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/buttons/types/SpeedButton.java @@ -51,7 +51,7 @@ public enum FlySpeed { private final TextColor color; private final float value; - private static FlySpeed[] speeds = values(); + private static final FlySpeed[] speeds = values(); FlySpeed(TextColor color, float value) { this.color = color; diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/menu/ModerationToolsMenu.java b/core/src/main/java/dev/pgm/community/moderation/tools/menu/ModerationToolsMenu.java index ce226b1f..e2542e79 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/menu/ModerationToolsMenu.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/menu/ModerationToolsMenu.java @@ -23,8 +23,8 @@ public class ModerationToolsMenu implements InventoryProvider { - private SmartInventory inventory; - private Random random; + private final SmartInventory inventory; + private final Random random; public ModerationToolsMenu() { this.inventory = SmartInventory.builder() diff --git a/core/src/main/java/dev/pgm/community/moderation/tools/types/ModerationMenuTool.java b/core/src/main/java/dev/pgm/community/moderation/tools/types/ModerationMenuTool.java index 7c275270..6cf34bc2 100644 --- a/core/src/main/java/dev/pgm/community/moderation/tools/types/ModerationMenuTool.java +++ b/core/src/main/java/dev/pgm/community/moderation/tools/types/ModerationMenuTool.java @@ -16,7 +16,7 @@ public class ModerationMenuTool extends ToolBase { private static final List LORE = Lists.newArrayList("&7Click to open the mod tools menu."); - private ModerationToolsMenu menu; + private final ModerationToolsMenu menu; public ModerationMenuTool(int slot, boolean enabled) { super(slot, enabled); diff --git a/core/src/main/java/dev/pgm/community/mutations/MutationType.java b/core/src/main/java/dev/pgm/community/mutations/MutationType.java index 591edfbd..f4fb37c3 100644 --- a/core/src/main/java/dev/pgm/community/mutations/MutationType.java +++ b/core/src/main/java/dev/pgm/community/mutations/MutationType.java @@ -42,9 +42,9 @@ public enum MutationType { "Give potion effects based on distance to Objectives", Material.GLASS_BOTTLE); - String displayName; - String description; - Material icon; + final String displayName; + final String description; + final Material icon; MutationType(String displayName, String description, Material icon) { this.displayName = displayName; diff --git a/core/src/main/java/dev/pgm/community/mutations/feature/MutationFeature.java b/core/src/main/java/dev/pgm/community/mutations/feature/MutationFeature.java index 3aabf977..04ab8b1d 100644 --- a/core/src/main/java/dev/pgm/community/mutations/feature/MutationFeature.java +++ b/core/src/main/java/dev/pgm/community/mutations/feature/MutationFeature.java @@ -58,7 +58,7 @@ public class MutationFeature extends FeatureBase { - private Set mutations; + private final Set mutations; private final InventoryManager inventory; @@ -226,22 +226,19 @@ public void onMatchStart(MatchStartEvent event) { Set names = mutations.stream().map(Mutation::getName).collect(Collectors.toSet()); boolean single = names.size() == 1; - Component broadcast = - text() - .append( - TextFormatter.horizontalLine( - NamedTextColor.DARK_GREEN, TextFormatter.MAX_CHAT_WIDTH)) - .append(newline()) - .append(TextFormatter.list(names, NamedTextColor.GRAY)) - .append(text(" mutation" + (single ? "" : "s"))) - .append(text(single ? " has " : " have ")) - .append(text("been enabled")) - .append(newline()) - .append( - TextFormatter.horizontalLine( - NamedTextColor.DARK_GREEN, TextFormatter.MAX_CHAT_WIDTH)) - .color(NamedTextColor.GRAY) - .build(); + Component broadcast = text() + .append( + TextFormatter.horizontalLine(NamedTextColor.DARK_GREEN, TextFormatter.MAX_CHAT_WIDTH)) + .append(newline()) + .append(TextFormatter.list(names, NamedTextColor.GRAY)) + .append(text(" mutation" + (single ? "" : "s"))) + .append(text(single ? " has " : " have ")) + .append(text("been enabled")) + .append(newline()) + .append( + TextFormatter.horizontalLine(NamedTextColor.DARK_GREEN, TextFormatter.MAX_CHAT_WIDTH)) + .color(NamedTextColor.GRAY) + .build(); if (!mutations.isEmpty()) { BroadcastUtils.sendGlobalMessage(broadcast, Sounds.ALERT); diff --git a/core/src/main/java/dev/pgm/community/mutations/menu/MutationOptionsMenu.java b/core/src/main/java/dev/pgm/community/mutations/menu/MutationOptionsMenu.java index f9545725..47a72f2f 100644 --- a/core/src/main/java/dev/pgm/community/mutations/menu/MutationOptionsMenu.java +++ b/core/src/main/java/dev/pgm/community/mutations/menu/MutationOptionsMenu.java @@ -12,21 +12,15 @@ import fr.minuskube.inv.ClickableItem; import fr.minuskube.inv.content.InventoryContents; import fr.minuskube.inv.content.InventoryProvider; +import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; import tc.oc.pgm.util.inventory.ItemBuilder; -public class MutationOptionsMenu implements InventoryProvider { - - private final MutationFeature mutations; - - public MutationOptionsMenu(MutationFeature mutations) { - this.mutations = mutations; - } +public record MutationOptionsMenu(MutationFeature mutations) implements InventoryProvider { @Override public void init(Player player, InventoryContents contents) { @@ -43,8 +37,8 @@ private void render(Player player, InventoryContents contents) { List options = mutations.getMutations().stream() .map(Mutation::getOptions) - .flatMap(mo -> mo.stream()) - .collect(Collectors.toList()); + .flatMap(Collection::stream) + .toList(); if (options.isEmpty()) { contents.set(1, 4, getNoMutationsIcon()); @@ -73,22 +67,20 @@ private ClickableItem getReturnIcon(Player viewer) { .name(colorize("&eReturn to Mutations")) .flags(ItemFlag.values()) .build(), - c -> { - mutations.getMenu().open(viewer); - }); + c -> mutations.getMenu().open(viewer)); } private ClickableItem getOptionIcon(MutationOption option) { - if (option instanceof MutationBooleanOption) { - return getToggleIcon((MutationBooleanOption) option); + if (option instanceof MutationBooleanOption mutationBooleanOption) { + return getToggleIcon(mutationBooleanOption); } - if (option instanceof MutationRangeOption) { - return getRangeIcon((MutationRangeOption) option); + if (option instanceof MutationRangeOption mutationRangeOption) { + return getRangeIcon(mutationRangeOption); } - if (option instanceof MutationListOption) { - return getListIcon((MutationListOption) option); + if (option instanceof MutationListOption mutationListOption) { + return getListIcon(mutationListOption); } return null; // Option type not implemented yet @@ -110,9 +102,7 @@ private ClickableItem getToggleIcon(MutationBooleanOption option) { + ": " + getBooleanValue(option.getValue())) .build(), - c -> { - option.setValue(!option.getValue()); - }); + c -> option.setValue(!option.getValue())); } private ClickableItem getRangeIcon(MutationRangeOption option) { @@ -156,7 +146,7 @@ private ClickableItem getRangeIcon(MutationRangeOption option) { }); } - private ClickableItem getListIcon(MutationListOption option) { + private ClickableItem getListIcon(MutationListOption option) { return ClickableItem.of( getItem(option) .lore( diff --git a/core/src/main/java/dev/pgm/community/mutations/menu/MutationToggleMenu.java b/core/src/main/java/dev/pgm/community/mutations/menu/MutationToggleMenu.java index d6649aff..69d6e798 100644 --- a/core/src/main/java/dev/pgm/community/mutations/menu/MutationToggleMenu.java +++ b/core/src/main/java/dev/pgm/community/mutations/menu/MutationToggleMenu.java @@ -14,13 +14,7 @@ import org.bukkit.inventory.ItemFlag; import tc.oc.pgm.util.inventory.ItemBuilder; -public class MutationToggleMenu implements InventoryProvider { - - private MutationFeature mutations; - - public MutationToggleMenu(MutationFeature mutations) { - this.mutations = mutations; - } +public record MutationToggleMenu(MutationFeature mutations) implements InventoryProvider { @Override public void init(Player player, InventoryContents contents) { @@ -49,9 +43,7 @@ private ClickableItem getOptionIcon(Player player) { .lore(ChatColor.GRAY + "Click to view active mutation options") .flags(ItemFlag.values()) .build(), - c -> { - mutations.getOptionMenu().open(player); - }); + c -> mutations.getOptionMenu().open(player)); } @Override diff --git a/core/src/main/java/dev/pgm/community/mutations/options/MutationBooleanOption.java b/core/src/main/java/dev/pgm/community/mutations/options/MutationBooleanOption.java index 010339e7..651149de 100644 --- a/core/src/main/java/dev/pgm/community/mutations/options/MutationBooleanOption.java +++ b/core/src/main/java/dev/pgm/community/mutations/options/MutationBooleanOption.java @@ -5,7 +5,7 @@ public class MutationBooleanOption extends MutationOption { private boolean value; - private boolean def; + private final boolean def; public MutationBooleanOption( String name, String description, Material iconMaterial, boolean def, boolean prereq) { diff --git a/core/src/main/java/dev/pgm/community/mutations/options/MutationListOption.java b/core/src/main/java/dev/pgm/community/mutations/options/MutationListOption.java index f332452b..3d4c885b 100644 --- a/core/src/main/java/dev/pgm/community/mutations/options/MutationListOption.java +++ b/core/src/main/java/dev/pgm/community/mutations/options/MutationListOption.java @@ -6,9 +6,9 @@ public class MutationListOption extends MutationOption { - private List options; + private final List options; private int valueIndex; - private T def; + private final T def; public MutationListOption( String name, @@ -19,7 +19,7 @@ public MutationListOption( super(name, description, iconMaterial, prerequisite); this.options = options; this.valueIndex = 0; - this.def = options.get(0); + this.def = options.getFirst(); } public ImmutableList getOptions() { diff --git a/core/src/main/java/dev/pgm/community/mutations/options/MutationRangeOption.java b/core/src/main/java/dev/pgm/community/mutations/options/MutationRangeOption.java index ee959a09..978d7d8a 100644 --- a/core/src/main/java/dev/pgm/community/mutations/options/MutationRangeOption.java +++ b/core/src/main/java/dev/pgm/community/mutations/options/MutationRangeOption.java @@ -4,10 +4,10 @@ public class MutationRangeOption extends MutationOption { - private int min; - private int max; + private final int min; + private final int max; private int value; - private int def; + private final int def; public MutationRangeOption( String name, diff --git a/core/src/main/java/dev/pgm/community/mutations/types/KitMutationBase.java b/core/src/main/java/dev/pgm/community/mutations/types/KitMutationBase.java index ba4dfabd..43e5910c 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/KitMutationBase.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/KitMutationBase.java @@ -17,7 +17,7 @@ /** KitMutation - A base for mutations which grant kits * */ public abstract class KitMutationBase extends MutationBase { - private List kits; + private final List kits; public KitMutationBase(Match match, MutationType type, Kit... kits) { super(match, type); @@ -71,7 +71,7 @@ protected void giveAllKit(Kit... kit) { protected void removeAllKit(Kit kit) { if (kit.isRemovable()) { - match.getParticipants().forEach(player -> kit.remove(player)); + match.getParticipants().forEach(kit::remove); } } @@ -84,11 +84,6 @@ protected void givePlayerKit(MatchPlayer player, List kits) { } protected void removeItems(ItemStack... items) { - match - .getParticipants() - .forEach( - player -> { - player.getInventory().removeItem(items); - }); + match.getParticipants().forEach(player -> player.getInventory().removeItem(items)); } } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/arrows/WebSlingersMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/arrows/WebSlingersMutation.java index 1c1628d5..6a9d4f9b 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/arrows/WebSlingersMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/arrows/WebSlingersMutation.java @@ -34,7 +34,7 @@ public class WebSlingersMutation extends KitMutationBase implements BowMutation { - private static MutationRangeOption WEB_LIFE = new MutationRangeOption( + private static final MutationRangeOption WEB_LIFE = new MutationRangeOption( "Web Life", "Length of time before webs are removed", MutationType.WEB_SLINGERS.getMaterial(), @@ -45,7 +45,7 @@ public class WebSlingersMutation extends KitMutationBase implements BowMutation private int cleanupTask; - private Map webLocations = Maps.newHashMap(); + private final Map webLocations; public WebSlingersMutation(Match match) { super(match, MutationType.WEB_SLINGERS, getWebBowKit()); @@ -87,9 +87,8 @@ public ItemStack[] getAllItems() { @EventHandler public void onShootWeb(final EntityShootBowEvent event) { - if (!(event.getEntity() instanceof Player)) return; - Player player = (Player) event.getEntity(); - if (player == null || match.getParticipant(player) == null) return; + if (!(event.getEntity() instanceof Player player)) return; + if (match.getParticipant(player) == null) return; ItemStack bow = event.getBow(); if (!bow.isSimilar(getWebBow())) return; @@ -104,8 +103,7 @@ public void onShootWeb(final EntityShootBowEvent event) { @EventHandler public void onWebLand(final EntityChangeBlockEvent event) { - if (!(event.getEntity() instanceof FallingBlock)) return; - FallingBlock block = (FallingBlock) event.getEntity(); + if (!(event.getEntity() instanceof FallingBlock block)) return; if (block.getMaterial() != Materials.WEB) return; Location location = block.getLocation(); diff --git a/core/src/main/java/dev/pgm/community/mutations/types/gameplay/BlitzMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/gameplay/BlitzMutation.java index eca018e7..309df94e 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/gameplay/BlitzMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/gameplay/BlitzMutation.java @@ -19,7 +19,7 @@ /** BlitzMutation - Enables blitz on a non-blitz match * */ public class BlitzMutation extends MutationBase { - private static MutationRangeOption BLITZ_LIVES = new MutationRangeOption( + private static final MutationRangeOption BLITZ_LIVES = new MutationRangeOption( "Blitz Lives", "The number of lives per-user", Material.EGG, true, 1, 1, 999); private BlitzMatchModule blitz; diff --git a/core/src/main/java/dev/pgm/community/mutations/types/gameplay/GhostMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/gameplay/GhostMutation.java index bd5e467b..36de1b9c 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/gameplay/GhostMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/gameplay/GhostMutation.java @@ -27,10 +27,8 @@ public void enable() { super.enable(); match.getParties().stream() .filter(party -> party instanceof Competitor) - .forEach( - party -> - ((Competitor) party).setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS)); - ; + .forEach(party -> + ((Competitor) party).setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS)); } @Override diff --git a/core/src/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java index a697f86c..5e2e53a0 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java @@ -38,7 +38,7 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.events.PlayerJoinMatchEvent; @@ -85,8 +85,8 @@ public class BreadMutation extends KitMutationBase { private final WeightedRandomChooser breadChooser; private final WeightedRandomChooser badBreadChooser; private final Random random; - private WeightedRandomChooser potionChooser; - private Set badBreadSet; + private final WeightedRandomChooser potionChooser; + private final Set badBreadSet; public BreadMutation(Match match) { super(match, MutationType.BREAD); @@ -240,9 +240,8 @@ protected void givePlayerKit(MatchPlayer player, List kits) { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerDamageByEntity(EntityDamageByEntityEvent event) { - if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof Player hitPlayer) { ItemStack itemInHand = ((Player) event.getDamager()).getItemInHand(); - Player hitPlayer = (Player) event.getEntity(); if (itemInHand.isSimilar(POTION_BREAD)) { hitPlayer.addPotionEffect(new PotionEffect( potionChooser.choose(random), 20 * random.nextInt(7) + 3, random.nextInt(2) + 1)); @@ -330,7 +329,7 @@ private Location chooseStartingLocation(Player hitPlayer) { return origin; } - @NotNull + @NonNull private static Location copyLocation(Location origin, int x, int y, int z) { Location possibleLocation = new Location(origin.getWorld(), origin.getX() + x, origin.getY() + y, origin.getZ() + z); @@ -359,8 +358,7 @@ private boolean isSafe(Location location, int blockHeight) { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerDamage(EntityDamageEvent event) { - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); + if (event.getEntity() instanceof Player player) { if (player.getItemInHand().isSimilar(ARMORED_BREAD)) { event.setDamage(event.getDamage() * 0.5); } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java index 136962dc..3729f040 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java @@ -50,7 +50,7 @@ /** ExplosionMutation - TNT, Fireballs, and random explosions when mining blocks * */ public class ExplosionMutation extends KitMutationBase { - private static MutationRangeOption FIREBALL_POWER = new MutationRangeOption( + private static final MutationRangeOption FIREBALL_POWER = new MutationRangeOption( "Fireball Power", "Power of fireball explosion", MutationType.EXPLOSION.getMaterial(), @@ -59,14 +59,14 @@ public class ExplosionMutation extends KitMutationBase { 0, 10); - private static MutationBooleanOption FIREBALL_FIRE = new MutationBooleanOption( + private static final MutationBooleanOption FIREBALL_FIRE = new MutationBooleanOption( "Fireball Fire", "Whether fireballs are incendiary", MutationType.EXPLOSION.getMaterial(), true, false); - private static MutationRangeOption LAUNCH_COOLDOWN = new MutationRangeOption( + private static final MutationRangeOption LAUNCH_COOLDOWN = new MutationRangeOption( "Explosive Cooldown", "Delay between fireball or TNT shots", MutationType.EXPLOSION.getMaterial(), @@ -75,14 +75,14 @@ public class ExplosionMutation extends KitMutationBase { 0, 60); - private static MutationBooleanOption MYSTERY_TNT = new MutationBooleanOption( + private static final MutationBooleanOption MYSTERY_TNT = new MutationBooleanOption( "Mystery TNT", "Whether TNT should have a random effect", MutationType.EXPLOSION.getMaterial(), true, false); - private static MutationRangeOption TNT_SIZE = new MutationRangeOption( + private static final MutationRangeOption TNT_SIZE = new MutationRangeOption( "TNT Amount", "Amount of TNT given per player", MutationType.EXPLOSION.getMaterial(), @@ -98,7 +98,7 @@ public class ExplosionMutation extends KitMutationBase { private static final String EXPLOSION_METADATA = "mutation_explosion"; private static final ItemTag EXPLOSION_KIT = ItemTag.newString(EXPLOSION_METADATA); - private Map lastLaunch = Maps.newHashMap(); + private final Map lastLaunch = Maps.newHashMap(); public ExplosionMutation(Match match) { super(match, MutationType.EXPLOSION); @@ -119,7 +119,6 @@ public void onBlockPlace(BlockPlaceEvent event) { if (!isParticipant(event.getPlayer())) return; if (!MYSTERY_TNT.getValue()) return; - Player player = event.getPlayer(); ItemStack block = event.getItemInHand(); if (block == null) return; if (!isFromKit(block)) return; @@ -221,14 +220,11 @@ private void explode(Block block) { } private static Kit getRandomKit() { - switch (Community.get().getRandom().nextInt(3)) { - case 0: - return getTNTKit(); - case 1: - return getTNTLauncherKit(); - default: - return getFireballKit(); - } + return switch (Community.get().getRandom().nextInt(3)) { + case 0 -> getTNTKit(); + case 1 -> getTNTLauncherKit(); + default -> getFireballKit(); + }; } private static Kit getTNTKit() { @@ -248,7 +244,7 @@ public ItemStack[] getAllItems() { List items = getTNTItems(); items.add(getFireballItem()); items.add(getTNTLauncherItem()); - return items.toArray(new ItemStack[items.size()]); + return items.toArray(new ItemStack[0]); } private static List getTNTItems() { @@ -338,7 +334,7 @@ public void launchTNT(Player player, double length) { Location loc = player.getEyeLocation(); // Get the player's eye location Vector direction = loc.getDirection().normalize(); - TNTPrimed tnt = (TNTPrimed) player.getWorld().spawn(loc, TNTPrimed.class); + TNTPrimed tnt = player.getWorld().spawn(loc, TNTPrimed.class); tnt.setVelocity(direction.multiply(4)); tnt.setFuseTicks(60); } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/items/FireworkMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/items/FireworkMutation.java index f89b256b..4734ae21 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/items/FireworkMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/items/FireworkMutation.java @@ -35,7 +35,7 @@ import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionEffect; import org.bukkit.util.Vector; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchScope; import tc.oc.pgm.api.player.MatchPlayer; @@ -53,9 +53,9 @@ public class FireworkMutation extends KitMutationBase { private static final ItemTag FIREWORK_TAG = ItemTag.newString(FIREWORK_METADATA); private static final int FIREWORK_POWER = 2; - private Cache lastFirework = + private final Cache lastFirework = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build(); - private Set fireworks; + private final Set fireworks; private ScheduledFuture task; @@ -102,8 +102,7 @@ public void task() { private void fling(Firework firework) { if (!firework.hasMetadata(FIREWORK_METADATA)) return; - if (firework.getPassenger() != null && firework.getPassenger() instanceof Player) { - Player player = (Player) firework.getPassenger(); + if (firework.getPassenger() != null && firework.getPassenger() instanceof Player player) { Vector velocity = player.getLocation().getDirection().multiply(7).setY(0); player.setVelocity(velocity); player.addPotionEffect(new PotionEffect(PotionEffects.RESISTANCE, 20 * 5, 5)); @@ -137,11 +136,9 @@ public void onFireworkItemLaunch(PlayerInteractEvent event) { @EventHandler public void onFireworkArrow(ProjectileHitEvent event) { if (event.getEntity() == null) return; - if (!(event.getEntity().getShooter() instanceof Player)) return; + if (!(event.getEntity().getShooter() instanceof Player shooter)) return; if (event.getEntity().getShooter() == null) return; - Player shooter = (Player) event.getEntity().getShooter(); - if (lastFirework.getIfPresent(shooter.getUniqueId()) == null) { launchFirework(shooter, event.getEntity().getLocation()); } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/items/GrapplingHookMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/items/GrapplingHookMutation.java index d9923a5d..d404789c 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/items/GrapplingHookMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/items/GrapplingHookMutation.java @@ -107,8 +107,7 @@ public void onPlayerFishEvent(PlayerFishEvent event) { @EventHandler(ignoreCancelled = true) public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof FishHook)) return; - FishHook fishHook = (FishHook) event.getDamager(); + if (!(event.getDamager() instanceof FishHook fishHook)) return; if (!(fishHook.getShooter() instanceof Player)) return; // Cancel damage if caused by a grappling hook diff --git a/core/src/main/java/dev/pgm/community/mutations/types/items/PotionMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/items/PotionMutation.java index 7a1b15ec..2ac78fbd 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/items/PotionMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/items/PotionMutation.java @@ -25,7 +25,7 @@ /** PotionMutation - Random potions given on spawn and when mining blocks * */ public class PotionMutation extends KitMutationBase { - private static double SPLASH_CHANCE = 0.05; + private static final double SPLASH_CHANCE = 0.05; public PotionMutation(Match match) { super(match, MutationType.POTION); diff --git a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/DoubleJumpMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/DoubleJumpMutation.java index a6323f57..67419d78 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/DoubleJumpMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/DoubleJumpMutation.java @@ -18,11 +18,10 @@ /** DoubleJumpMutation - Enables {@link DoubleJumpKit} and no fall damage for all players * */ public class DoubleJumpMutation extends KitMutationBase { - private static MutationRangeOption JUMP_POWER = - new MutationRangeOption( - "Jump Power", "Power of double jump", MutationType.JUMP.getMaterial(), true, 2, 1, 10); + private static final MutationRangeOption JUMP_POWER = new MutationRangeOption( + "Jump Power", "Power of double jump", MutationType.JUMP.getMaterial(), true, 2, 1, 10); - private DoubleJumpKit disabledKit = getJumpKit(false); + private final DoubleJumpKit disabledKit; public DoubleJumpMutation(Match match) { super(match, MutationType.JUMP, getJumpKit(true)); diff --git a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FlyMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FlyMutation.java index 3ecf9926..69c79545 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FlyMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FlyMutation.java @@ -2,6 +2,7 @@ import static net.kyori.adventure.text.Component.space; import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.title.Title.Times.times; import static net.kyori.adventure.title.Title.title; import com.google.common.collect.Sets; @@ -17,7 +18,6 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.title.Title.Times; import net.kyori.adventure.util.Ticks; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -28,19 +28,17 @@ /** FlyMutation - Enables the {@link FlyKit} for all players */ public class FlyMutation extends KitMutationBase { - private static MutationRangeOption FLY_DISABLE_DELAY = - new MutationRangeOption( - "Flight Disable countdown", - "Delay before flight is disabled", - MutationType.FLY.getMaterial(), - false, - 5, - 0, - 20); + private static final MutationRangeOption FLY_DISABLE_DELAY = new MutationRangeOption( + "Flight Disable countdown", + "Delay before flight is disabled", + MutationType.FLY.getMaterial(), + false, + 5, + 0, + 20); - private static MutationRangeOption FLY_SPEED = - new MutationRangeOption( - "Flight Speed", "Speed of flight", MutationType.FLY.getMaterial(), true, 1, 1, 5); + private static final MutationRangeOption FLY_SPEED = new MutationRangeOption( + "Flight Speed", "Speed of flight", MutationType.FLY.getMaterial(), true, 1, 1, 5); private int disableTaskID; private boolean disableTaskEnabled; @@ -57,12 +55,11 @@ public Collection getOptions() { @Override public void disable() { if (!match.isFinished()) { - this.disableTaskID = - Community.get() - .getServer() - .getScheduler() - .scheduleSyncRepeatingTask( - Community.get(), new DisableFlightTask(FLY_DISABLE_DELAY.getValue()), 0L, 20L); + this.disableTaskID = Community.get() + .getServer() + .getScheduler() + .scheduleSyncRepeatingTask( + Community.get(), new DisableFlightTask(FLY_DISABLE_DELAY.getValue()), 0L, 20L); this.disableTaskEnabled = true; } else { super.disable(); @@ -104,23 +101,18 @@ public void run() { remove(); } else { Component time = text(seconds, NamedTextColor.RED, TextDecoration.BOLD); - Component left = - text() - .append(text("second")) - .append(text(seconds != 1 ? "s" : "")) - .append(text(" left to land")) - .color(NamedTextColor.GRAY) - .build(); - BroadcastUtils.sendGlobalMessage(text().append(time).append(space()).append(left).build()); + Component left = text() + .append(text("second")) + .append(text(seconds != 1 ? "s" : "")) + .append(text(" left to land")) + .color(NamedTextColor.GRAY) + .build(); + BroadcastUtils.sendGlobalMessage( + text().append(time).append(space()).append(left).build()); match .getParticipants() - .forEach( - player -> - player.showTitle( - title( - time, - left, - Times.of(Ticks.duration(0), Ticks.duration(20), Ticks.duration(5))))); + .forEach(player -> player.showTitle(title( + time, left, times(Ticks.duration(0), Ticks.duration(20), Ticks.duration(5))))); seconds--; } } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FriendlyFireMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FriendlyFireMutation.java index 4557cd0f..a9095274 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FriendlyFireMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/FriendlyFireMutation.java @@ -36,9 +36,7 @@ private void forceTeamUpdate() { ScoreboardMatchModule smm = match.getModule(ScoreboardMatchModule.class); if (smm == null) return; smm.getScoreboards() - .forEach( - board -> { - board.getTeams().forEach(team -> team.setAllowFriendlyFire(match.getFriendlyFire())); - }); + .forEach(board -> + board.getTeams().forEach(team -> team.setAllowFriendlyFire(match.getFriendlyFire()))); } } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/MobMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/MobMutation.java index edcfe7cf..28a79205 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/mechanics/MobMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/mechanics/MobMutation.java @@ -24,7 +24,7 @@ import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.util.Vector; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.party.Party; import tc.oc.pgm.api.player.MatchPlayer; @@ -41,7 +41,7 @@ public class MobMutation extends ScheduledMutationBase { private static final int RANDOM_DISTANCE = 45; private static final String MOB_METADATA = "mob-mutation"; - private static MutationListOption TOTAL_MOBS = new MutationListOption<>( + private static final MutationListOption TOTAL_MOBS = new MutationListOption<>( "Total Mobs", "Total number of mobs spawned", MutationType.MOBS.getMaterial(), @@ -101,7 +101,7 @@ private RandomPointProvider getPointProvider() { return null; } - private EntityType[] MOB_TYPES = { + private final EntityType[] MOB_TYPES = { EntityType.ZOMBIE, EntityType.SKELETON, EntityType.SPIDER, diff --git a/core/src/main/java/dev/pgm/community/mutations/types/world/BlockDecayMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/world/BlockDecayMutation.java index f4704270..f25b0b49 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/world/BlockDecayMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/world/BlockDecayMutation.java @@ -23,17 +23,16 @@ public class BlockDecayMutation extends ScheduledMutationBase { - private static MutationRangeOption DECAY_SECONDS = - new MutationRangeOption( - "Decay Delay", - "Delay of time before blocks decay", - MutationType.BLOCK_DECAY.getMaterial(), - false, - 5, - 1, - 60); + private static final MutationRangeOption DECAY_SECONDS = new MutationRangeOption( + "Decay Delay", + "Delay of time before blocks decay", + MutationType.BLOCK_DECAY.getMaterial(), + false, + 5, + 1, + 60); - private Map placedBlocks = Maps.newHashMap(); + private final Map placedBlocks = Maps.newHashMap(); public BlockDecayMutation(Match match) { super(match, MutationType.BLOCK_DECAY, 1); @@ -51,7 +50,7 @@ public boolean canEnable(Set existing) { @Override public void disable() { - if (this.placedBlocks != null && !this.placedBlocks.isEmpty()) { + if (!this.placedBlocks.isEmpty()) { this.placedBlocks.keySet().forEach(location -> location.getBlock().setType(Material.AIR)); this.placedBlocks.clear(); } diff --git a/core/src/main/java/dev/pgm/community/mutations/types/world/StormMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/world/StormMutation.java index 2d0b3ef4..0d303323 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/world/StormMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/world/StormMutation.java @@ -7,7 +7,6 @@ import dev.pgm.community.mutations.types.ScheduledMutationBase; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.event.EventHandler; @@ -67,10 +66,8 @@ private void delayedStrike(final MatchPlayer player, int delay) { Bukkit.getScheduler() .scheduleSyncDelayedTask( Community.get(), - () -> { - match.getWorld().spigot().strikeLightning(player.getLocation(), false); - }, - 20 * delay); + () -> match.getWorld().spigot().strikeLightning(player.getLocation(), false), + 20L * delay); } @EventHandler(priority = EventPriority.HIGH) @@ -80,7 +77,7 @@ public void onWeatherChange(WeatherChangeEvent event) { private Set selectRandomPlayers(int amount) { Set chosen = Sets.newHashSet(); - List everyone = match.getParticipants().stream().collect(Collectors.toList()); + List everyone = match.getParticipants().stream().toList(); if (!everyone.isEmpty()) { int retrys = 0; while (chosen.size() < amount && retrys < 5) { diff --git a/core/src/main/java/dev/pgm/community/mutations/types/world/TNTRainMutation.java b/core/src/main/java/dev/pgm/community/mutations/types/world/TNTRainMutation.java index bf06564d..bde4f199 100644 --- a/core/src/main/java/dev/pgm/community/mutations/types/world/TNTRainMutation.java +++ b/core/src/main/java/dev/pgm/community/mutations/types/world/TNTRainMutation.java @@ -26,6 +26,7 @@ * @deprecated Keeping for future use... TNTRainMutation - Spawns falling primed TNT on a scheduled * interval, with no damage to players */ +@Deprecated public class TNTRainMutation extends ScheduledMutationBase { private static final int TASK_SECONDS = 30; @@ -56,7 +57,7 @@ public boolean canEnable(Set existing) { @Override public void run() { - List players = new ArrayList(match.getParticipants()); + List players = new ArrayList<>(match.getParticipants()); if (players.isEmpty()) return; List spawned = Lists.newArrayList(); while (spawned.size() < Math.min(MAX_PLAYERS_PER_RUN, players.size())) { @@ -70,8 +71,7 @@ public void run() { @EventHandler public void onTNTDamagePrevention(EntityDamageByEntityEvent event) { - if (event.getDamager() instanceof TNTPrimed && event.getEntity() instanceof Player) { - TNTPrimed tnt = (TNTPrimed) event.getDamager(); + if (event.getDamager() instanceof TNTPrimed tnt && event.getEntity() instanceof Player) { if (tnt.hasMetadata(TNT_META)) { event.setDamage(0); } @@ -80,8 +80,7 @@ public void onTNTDamagePrevention(EntityDamageByEntityEvent event) { @EventHandler public void onTNTExplode(EntityExplodeEvent event) { - if (event.getEntity() instanceof TNTPrimed) { - TNTPrimed tnt = (TNTPrimed) event.getEntity(); + if (event.getEntity() instanceof TNTPrimed tnt) { if (tnt.hasMetadata(TNT_META)) { event.setYield(random.nextFloat() + 1f); diff --git a/core/src/main/java/dev/pgm/community/network/Channels.java b/core/src/main/java/dev/pgm/community/network/Channels.java index dfc16eb2..aadb9407 100644 --- a/core/src/main/java/dev/pgm/community/network/Channels.java +++ b/core/src/main/java/dev/pgm/community/network/Channels.java @@ -15,7 +15,7 @@ public class Channels { // PUNISHMENT_UPDATE - Used to alert servers of unmuted or unbanned players public static final String PUNISHMENT_UPDATE = formatChannel("punishment_update"); - private static final String formatChannel(String name) { + private static String formatChannel(String name) { return "community_" + name; } } diff --git a/core/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java b/core/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java index 4a6e88e7..334ce022 100644 --- a/core/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java +++ b/core/src/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java @@ -7,8 +7,8 @@ public abstract class NetworkSubscriber extends JedisPubSub { - private String channel; - private String networkId; + private final String channel; + private final String networkId; protected Logger logger; protected Gson gson; diff --git a/core/src/main/java/dev/pgm/community/network/subs/types/AssistanceSubscriber.java b/core/src/main/java/dev/pgm/community/network/subs/types/AssistanceSubscriber.java index 27a930df..cc1acfb4 100644 --- a/core/src/main/java/dev/pgm/community/network/subs/types/AssistanceSubscriber.java +++ b/core/src/main/java/dev/pgm/community/network/subs/types/AssistanceSubscriber.java @@ -9,7 +9,7 @@ /** AssistanceSubscriber - Listens for {@link AssistanceRequest} */ public class AssistanceSubscriber extends NetworkSubscriber { - private AssistanceFeature assist; + private final AssistanceFeature assist; public AssistanceSubscriber(AssistanceFeature assist, String networkId, Logger logger) { super(Channels.ASSISTANCE, networkId, logger); diff --git a/core/src/main/java/dev/pgm/community/network/subs/types/ChatSubscriber.java b/core/src/main/java/dev/pgm/community/network/subs/types/ChatSubscriber.java index 46c201aa..1e32df50 100644 --- a/core/src/main/java/dev/pgm/community/network/subs/types/ChatSubscriber.java +++ b/core/src/main/java/dev/pgm/community/network/subs/types/ChatSubscriber.java @@ -9,7 +9,7 @@ /** ChatSubscriber - Listens for {@link NetworkChatMessage} */ public class ChatSubscriber extends NetworkSubscriber { - private NetworkChatFeature chat; + private final NetworkChatFeature chat; public ChatSubscriber(NetworkChatFeature chat, String networkId, Logger logger) { super(Channels.CHAT, networkId, logger); diff --git a/core/src/main/java/dev/pgm/community/network/subs/types/PunishmentSubscriber.java b/core/src/main/java/dev/pgm/community/network/subs/types/PunishmentSubscriber.java index d1d17c83..0cf9925e 100644 --- a/core/src/main/java/dev/pgm/community/network/subs/types/PunishmentSubscriber.java +++ b/core/src/main/java/dev/pgm/community/network/subs/types/PunishmentSubscriber.java @@ -9,7 +9,7 @@ /** PunishmentSubscriber - Listens for {@link NetworkPunishment} */ public class PunishmentSubscriber extends NetworkSubscriber { - private ModerationFeature moderation; + private final ModerationFeature moderation; public PunishmentSubscriber(ModerationFeature moderation, String networkId, Logger logger) { super(Channels.PUNISHMENTS, networkId, logger); diff --git a/core/src/main/java/dev/pgm/community/network/subs/types/RefreshPunishmentSubscriber.java b/core/src/main/java/dev/pgm/community/network/subs/types/RefreshPunishmentSubscriber.java index 88d28e8e..b9d568a2 100644 --- a/core/src/main/java/dev/pgm/community/network/subs/types/RefreshPunishmentSubscriber.java +++ b/core/src/main/java/dev/pgm/community/network/subs/types/RefreshPunishmentSubscriber.java @@ -9,7 +9,7 @@ /** RefreshPunishmentSubscriber - Invalidates punishment cache for unbans/unmutes */ public class RefreshPunishmentSubscriber extends NetworkSubscriber { - private ModerationFeature moderation; + private final ModerationFeature moderation; public RefreshPunishmentSubscriber( ModerationFeature moderation, String networkId, Logger logger) { @@ -24,9 +24,8 @@ public void onReceiveUpdate(String data) { moderation.recieveRefresh(playerId); logger.info(String.format("Refreshed punishment data for %s", data)); } catch (IllegalArgumentException e) { - logger.warning( - String.format( - "Invalid UUID (%s) recieved for message channel (%s)", Channels.PUNISHMENTS, data)); + logger.warning(String.format( + "Invalid UUID (%s) recieved for message channel (%s)", Channels.PUNISHMENTS, data)); } } } diff --git a/core/src/main/java/dev/pgm/community/network/types/RedisNetworkFeature.java b/core/src/main/java/dev/pgm/community/network/types/RedisNetworkFeature.java index ad95622c..c686b8ab 100644 --- a/core/src/main/java/dev/pgm/community/network/types/RedisNetworkFeature.java +++ b/core/src/main/java/dev/pgm/community/network/types/RedisNetworkFeature.java @@ -19,7 +19,7 @@ public class RedisNetworkFeature extends NetworkFeatureBase { private JedisPool pool; - private Set subscribers; + private final Set subscribers; public RedisNetworkFeature(Configuration config, Logger logger) { super(config, logger, "Network (Redis)"); @@ -33,19 +33,18 @@ public void registerSubscriber(NetworkSubscriber sub) { @Override public void enable() { super.enable(); - this.pool = - new JedisPool( - new JedisPoolConfig(), - getNetworkConfig().getHost(), - getNetworkConfig().getPort(), - Protocol.DEFAULT_TIMEOUT, - getNetworkConfig().getPassword(), - getNetworkConfig().isSSL()); + this.pool = new JedisPool( + new JedisPoolConfig(), + getNetworkConfig().getHost(), + getNetworkConfig().getPort(), + Protocol.DEFAULT_TIMEOUT, + getNetworkConfig().getPassword(), + getNetworkConfig().isSSL()); testConnection(); // Delay subscriber so all features can register - Community.get().getServer().getScheduler().runTaskLater(Community.get(), this::subscribe, 20l); + Community.get().getServer().getScheduler().runTaskLater(Community.get(), this::subscribe, 20L); } @Override @@ -72,34 +71,24 @@ private void subscribe() { } private void asyncSubscribe(NetworkSubscriber sub) { - Community.get() - .getServer() - .getScheduler() - .runTaskAsynchronously( - Community.get(), - () -> { - try (Jedis jedi = pool.getResource()) { - jedi.subscribe(sub, sub.getChannel()); - } - }); + Community.get().getServer().getScheduler().runTaskAsynchronously(Community.get(), () -> { + try (Jedis jedi = pool.getResource()) { + jedi.subscribe(sub, sub.getChannel()); + } + }); } @Override public void sendUpdate(NetworkUpdate update) { if (!isEnabled()) return; - Community.get() - .getServer() - .getScheduler() - .runTaskAsynchronously( - Community.get(), - () -> { - if (pool != null) { - try (Jedis jedi = pool.getResource()) { - jedi.publish( - update.getChannel(), - String.format("%s;%s", getNetworkConfig().getNetworkId(), update.getData())); - } - } - }); + Community.get().getServer().getScheduler().runTaskAsynchronously(Community.get(), () -> { + if (pool != null) { + try (Jedis jedi = pool.getResource()) { + jedi.publish( + update.getChannel(), + String.format("%s;%s", getNetworkConfig().getNetworkId(), update.getData())); + } + } + }); } } diff --git a/core/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java b/core/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java index a83eec07..bcc59f48 100644 --- a/core/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java +++ b/core/src/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java @@ -5,9 +5,9 @@ public abstract class NetworkUpdateBase implements NetworkUpdate { - private T item; - private String channel; - private Gson gson; + private final T item; + private final String channel; + private final Gson gson; public NetworkUpdateBase(T item, String channel) { this.item = item; diff --git a/core/src/main/java/dev/pgm/community/network/updates/types/RefreshPunishmentUpdate.java b/core/src/main/java/dev/pgm/community/network/updates/types/RefreshPunishmentUpdate.java index e6ae1b10..ae3ea667 100644 --- a/core/src/main/java/dev/pgm/community/network/updates/types/RefreshPunishmentUpdate.java +++ b/core/src/main/java/dev/pgm/community/network/updates/types/RefreshPunishmentUpdate.java @@ -5,13 +5,7 @@ import java.util.UUID; /** RefreshPunishmentUpdate - Called on ban pardon or unmute */ -public class RefreshPunishmentUpdate implements NetworkUpdate { - - private final UUID playerId; - - public RefreshPunishmentUpdate(UUID playerId) { - this.playerId = playerId; - } +public record RefreshPunishmentUpdate(UUID playerId) implements NetworkUpdate { @Override public String getChannel() { diff --git a/core/src/main/java/dev/pgm/community/nick/Nick.java b/core/src/main/java/dev/pgm/community/nick/Nick.java index c41e8c8b..f4a6cdb2 100644 --- a/core/src/main/java/dev/pgm/community/nick/Nick.java +++ b/core/src/main/java/dev/pgm/community/nick/Nick.java @@ -48,7 +48,7 @@ default void clear() { setEnabled(false); } - public static Nick of(UUID playerId, String nick) { + static Nick of(UUID playerId, String nick) { return new NickImpl(playerId, nick, Instant.now(), true); } } diff --git a/core/src/main/java/dev/pgm/community/nick/NickImpl.java b/core/src/main/java/dev/pgm/community/nick/NickImpl.java index 42700c33..2e08b15b 100644 --- a/core/src/main/java/dev/pgm/community/nick/NickImpl.java +++ b/core/src/main/java/dev/pgm/community/nick/NickImpl.java @@ -5,7 +5,7 @@ public class NickImpl implements Nick { - private UUID playerId; + private final UUID playerId; private String nickName; private Instant date; private boolean enabled; diff --git a/core/src/main/java/dev/pgm/community/nick/commands/NickCommands.java b/core/src/main/java/dev/pgm/community/nick/commands/NickCommands.java index 75284c72..4c503336 100644 --- a/core/src/main/java/dev/pgm/community/nick/commands/NickCommands.java +++ b/core/src/main/java/dev/pgm/community/nick/commands/NickCommands.java @@ -25,7 +25,7 @@ import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.integration.Integration; import tc.oc.pgm.lib.org.incendo.cloud.annotations.Argument; import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command; @@ -59,10 +59,10 @@ public void checkNickStatus( if (viewer.hasPermission(CommunityPermissions.NICKNAME_OTHER) && target != null) { getTarget(target, users).thenAcceptAsync(uuid -> { if (uuid.isPresent()) { - users.renderUsername(uuid, NameStyle.FANCY).thenAcceptAsync(name -> { - sendNickStatus(viewer, viewer.getPlayer(), uuid.get(), name); - return; - }); + users + .renderUsername(uuid, NameStyle.FANCY) + .thenAcceptAsync( + name -> sendNickStatus(viewer, viewer.getPlayer(), uuid.get(), name)); } else { viewer.sendWarning(formatNotFoundComponent(target)); } @@ -239,15 +239,15 @@ public void setOtherNick( if (uuid.isPresent()) { nicks.setNick(uuid.get(), nick).thenAcceptAsync(success -> { if (success) { - users.renderUsername(uuid, NameStyle.FANCY).thenAcceptAsync(name -> { - viewer.sendMessage(text() - .append(text("Nickname for ")) - .append(name) - .append(text(" set to ")) - .append(text(nick, NamedTextColor.AQUA, TextDecoration.BOLD)) - .color(NamedTextColor.GRAY) - .build()); - }); + users + .renderUsername(uuid, NameStyle.FANCY) + .thenAcceptAsync(name -> viewer.sendMessage(text() + .append(text("Nickname for ")) + .append(name) + .append(text(" set to ")) + .append(text(nick, NamedTextColor.AQUA, TextDecoration.BOLD)) + .color(NamedTextColor.GRAY) + .build())); } else { viewer.sendWarning(text() .append(text("Could not set nickname for ")) @@ -269,21 +269,21 @@ public void clearNick(CommandAudience viewer, @Argument("target") TargetPlayer t if (viewer.hasPermission(CommunityPermissions.NICKNAME_CLEAR) && target != null) { getTarget(target.getIdentifier(), users).thenAcceptAsync(uuid -> { if (uuid.isPresent()) { - users.renderUsername(uuid, NameStyle.FANCY).thenAcceptAsync(name -> { - nicks.clearNick(uuid.get()).thenAcceptAsync(success -> { - Component setName = text() - .append(text("You have reset the nickname of ")) - .append(name) - .color(NamedTextColor.GREEN) - .build(); - Component noName = text() - .append(name) - .append(text(" does not have a nickname set")) - .color(NamedTextColor.RED) - .build(); - viewer.sendWarning(success ? setName : noName); - }); - }); + users + .renderUsername(uuid, NameStyle.FANCY) + .thenAcceptAsync(name -> nicks.clearNick(uuid.get()).thenAcceptAsync(success -> { + Component setName = text() + .append(text("You have reset the nickname of ")) + .append(name) + .color(NamedTextColor.GREEN) + .build(); + Component noName = text() + .append(name) + .append(text(" does not have a nickname set")) + .color(NamedTextColor.RED) + .build(); + viewer.sendWarning(success ? setName : noName); + })); } else { viewer.sendWarning(formatNotFoundComponent(target.getIdentifier())); } @@ -294,11 +294,11 @@ public void clearNick(CommandAudience viewer, @Argument("target") TargetPlayer t if (!viewer.isPlayer()) return; // Reset own nickname - nicks.clearNick(viewer.getPlayer().getUniqueId()).thenAcceptAsync(success -> { - viewer.sendWarning(text( - success ? "You have reset your nickname" : "You do not have a nickname set", - success ? NamedTextColor.GRAY : NamedTextColor.RED)); - }); + nicks + .clearNick(viewer.getPlayer().getUniqueId()) + .thenAcceptAsync(success -> viewer.sendWarning(text( + success ? "You have reset your nickname" : "You do not have a nickname set", + success ? NamedTextColor.GRAY : NamedTextColor.RED))); } @Command("toggle") diff --git a/core/src/main/java/dev/pgm/community/nick/data/NickSelection.java b/core/src/main/java/dev/pgm/community/nick/data/NickSelection.java index 09c82b1f..d5854156 100644 --- a/core/src/main/java/dev/pgm/community/nick/data/NickSelection.java +++ b/core/src/main/java/dev/pgm/community/nick/data/NickSelection.java @@ -6,8 +6,8 @@ public class NickSelection { - private List names; - private Instant lastRefresh; + private final List names; + private final Instant lastRefresh; public NickSelection(List names) { this.names = names; diff --git a/core/src/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java b/core/src/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java index 593c761e..827353d7 100644 --- a/core/src/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java +++ b/core/src/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -21,9 +20,9 @@ public class PGMNickIntegration implements NickIntegration { private boolean hotbarColor = false; - private NickFeature nick; + private final NickFeature nick; - private Future hotbarTask; + private final Future hotbarTask; public PGMNickIntegration(NickFeature nick) { this.nick = nick; @@ -44,10 +43,9 @@ public void cancelTask() { private void updateHotbars() { Match match = PGMUtils.getMatch(); if (match != null) { - List nicked = - match.getPlayers().stream() - .filter(p -> nick.isNicked(p.getId()) && !Integration.isVanished(p.getBukkit())) - .collect(Collectors.toList()); + List nicked = match.getPlayers().stream() + .filter(p -> nick.isNicked(p.getId()) && !Integration.isVanished(p.getBukkit())) + .toList(); nicked.forEach(mp -> sendHotbarNicked(mp, hotbarColor)); } hotbarColor = !hotbarColor; diff --git a/core/src/main/java/dev/pgm/community/nick/feature/types/NickFeatureCore.java b/core/src/main/java/dev/pgm/community/nick/feature/types/NickFeatureCore.java index 07f4c0eb..ba270e41 100644 --- a/core/src/main/java/dev/pgm/community/nick/feature/types/NickFeatureCore.java +++ b/core/src/main/java/dev/pgm/community/nick/feature/types/NickFeatureCore.java @@ -41,7 +41,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.text.TextFormatter; @@ -121,7 +121,7 @@ public Player getPlayerFromNick(String nickName) { .filter((e) -> e.getValue().equalsIgnoreCase(nickName)) .map(Entry::getKey) .findAny(); - return player.isPresent() ? Bukkit.getPlayer(player.get()) : null; + return player.map(Bukkit::getPlayer).orElse(null); } @Override @@ -179,18 +179,18 @@ public void onJoin(PlayerJoinEvent event) { sendLoginNotification(player, nick.getName(), false); } else { // Auto apply a random name if none set - WebUtils.getRandomName().thenAcceptAsync(name -> { - this.setNick(player.getUniqueId(), name).thenAcceptAsync(success -> { - if (success) { - nickedPlayers.put(player.getUniqueId(), nick.getName()); - Audience.get(player) - .sendWarning(text( - "You had no nickname, so a random one has been assigned", - NamedTextColor.GREEN)); - sendLoginNotification(player, nick.getName(), true); - } - }); - }); + WebUtils.getRandomName() + .thenAcceptAsync( + name -> this.setNick(player.getUniqueId(), name).thenAcceptAsync(success -> { + if (success) { + nickedPlayers.put(player.getUniqueId(), nick.getName()); + Audience.get(player) + .sendWarning(text( + "You had no nickname, so a random one has been assigned", + NamedTextColor.GREEN)); + sendLoginNotification(player, nick.getName(), true); + } + })); } } else { diff --git a/core/src/main/java/dev/pgm/community/nick/services/NickQuery.java b/core/src/main/java/dev/pgm/community/nick/services/NickQuery.java index 9dde8307..2eeaeaa3 100644 --- a/core/src/main/java/dev/pgm/community/nick/services/NickQuery.java +++ b/core/src/main/java/dev/pgm/community/nick/services/NickQuery.java @@ -2,19 +2,19 @@ public interface NickQuery { - static final String TABLE_NAME = "nicknames"; - static final String TABLE_FIELDS = + String TABLE_NAME = "nicknames"; + String TABLE_FIELDS = "(playerId VARCHAR(36) PRIMARY KEY, nickname VARCHAR(16), date LONG, enabled BOOL)"; - static final String INSERT_NICKNAME_QUERY = + String INSERT_NICKNAME_QUERY = "INSERT INTO " + TABLE_NAME + "(playerId, nickname, date, enabled) VALUES (?,?,?,?)"; - static final String SELECT_NICKNAME_BY_ID_QUERY = + String SELECT_NICKNAME_BY_ID_QUERY = "SELECT * from " + TABLE_NAME + " where playerId = ? LIMIT 1"; - static final String UPDATE_NICKNAME_QUERY = + String UPDATE_NICKNAME_QUERY = "UPDATE " + TABLE_NAME + " set nickname = ?, enabled = ?, date = ? where playerId = ?"; - static final String SELECT_NICKNAME_BY_NAME_QUERY = + String SELECT_NICKNAME_BY_NAME_QUERY = "SELECT * from " + TABLE_NAME + " where LOWER(nickname) = LOWER(?)"; } diff --git a/core/src/main/java/dev/pgm/community/nick/services/SQLNickService.java b/core/src/main/java/dev/pgm/community/nick/services/SQLNickService.java index 8cec5f75..45a45d30 100644 --- a/core/src/main/java/dev/pgm/community/nick/services/SQLNickService.java +++ b/core/src/main/java/dev/pgm/community/nick/services/SQLNickService.java @@ -10,12 +10,13 @@ import dev.pgm.community.nick.NickImpl; import java.time.Instant; import java.util.List; +import java.util.Objects; import java.util.UUID; import java.util.concurrent.CompletableFuture; public class SQLNickService extends SQLFeatureBase implements NickQuery { - private LoadingCache nickCache; + private final LoadingCache nickCache; public SQLNickService(NickConfig config) { super(TABLE_NAME, TABLE_FIELDS); @@ -87,7 +88,7 @@ public CompletableFuture update(Nick nick) { } public CompletableFuture isNameAvailable(String name) { - return queryByName(name).thenApplyAsync(results -> results == null); + return queryByName(name).thenApplyAsync(Objects::isNull); } public CompletableFuture queryByName(String name) { @@ -103,7 +104,7 @@ public CompletableFuture queryByName(String name) { name); } - private class NickInfo { + private static class NickInfo { private final UUID playerId; private Nick nick; diff --git a/core/src/main/java/dev/pgm/community/nick/skin/SkinCache.java b/core/src/main/java/dev/pgm/community/nick/skin/SkinCache.java index 2d3a97cb..2469719f 100644 --- a/core/src/main/java/dev/pgm/community/nick/skin/SkinCache.java +++ b/core/src/main/java/dev/pgm/community/nick/skin/SkinCache.java @@ -12,7 +12,6 @@ import java.util.Random; import java.util.UUID; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -42,7 +41,7 @@ private Skin getRandomSkin() { if (offlineSkins.size() == 0) { return Skin.EMPTY; // TODO: Warning, this may be bad for 1.16 clients... } - List skins = offlineSkins.asMap().values().stream().collect(Collectors.toList()); + List skins = offlineSkins.asMap().values().stream().toList(); return skins.get(random.nextInt(skins.size())); } diff --git a/core/src/main/java/dev/pgm/community/nick/skin/SkinManager.java b/core/src/main/java/dev/pgm/community/nick/skin/SkinManager.java index 406e52af..a2cbb56b 100644 --- a/core/src/main/java/dev/pgm/community/nick/skin/SkinManager.java +++ b/core/src/main/java/dev/pgm/community/nick/skin/SkinManager.java @@ -6,7 +6,7 @@ public class SkinManager { - private SkinCache cache; + private final SkinCache cache; public SkinManager() { this.cache = new SkinCache(); diff --git a/core/src/main/java/dev/pgm/community/party/MapPartyBase.java b/core/src/main/java/dev/pgm/community/party/MapPartyBase.java index 1d9eb591..b932f1e9 100644 --- a/core/src/main/java/dev/pgm/community/party/MapPartyBase.java +++ b/core/src/main/java/dev/pgm/community/party/MapPartyBase.java @@ -23,8 +23,8 @@ public abstract class MapPartyBase implements MapParty { private String name; private String description; private Duration length; - private MapPartyHosts hosts; - private MapPartySettings settings; + private final MapPartyHosts hosts; + private final MapPartySettings settings; private boolean running; private boolean setup; diff --git a/core/src/main/java/dev/pgm/community/party/MapPartyCommands.java b/core/src/main/java/dev/pgm/community/party/MapPartyCommands.java index 6bd96486..c1316779 100644 --- a/core/src/main/java/dev/pgm/community/party/MapPartyCommands.java +++ b/core/src/main/java/dev/pgm/community/party/MapPartyCommands.java @@ -196,7 +196,7 @@ public void addHost(CommandAudience viewer, @Argument("targets") String targets) if (isPartyMissing(viewer)) return; MapPartyHosts hosts = party.getParty().getHosts(); PlayerSelection selection = getPlayers(viewer, targets); - selection.getPlayers().forEach(player -> { + selection.players().forEach(player -> { if (!party.canHost(player)) { viewer.sendWarning(MapPartyMessages.getAddHostError(player)); return; diff --git a/core/src/main/java/dev/pgm/community/party/MapPartyConfig.java b/core/src/main/java/dev/pgm/community/party/MapPartyConfig.java index 4beb01b4..3808ce49 100644 --- a/core/src/main/java/dev/pgm/community/party/MapPartyConfig.java +++ b/core/src/main/java/dev/pgm/community/party/MapPartyConfig.java @@ -195,7 +195,7 @@ private Permission parsePermissions(List permissions) { // Register permission try { Community.get().getServer().getPluginManager().addPermission(permission); - } catch (Throwable t) { + } catch (Throwable ignored) { } return permission; } diff --git a/core/src/main/java/dev/pgm/community/party/MapPartyStatusType.java b/core/src/main/java/dev/pgm/community/party/MapPartyStatusType.java index cc2be7fa..824695a1 100644 --- a/core/src/main/java/dev/pgm/community/party/MapPartyStatusType.java +++ b/core/src/main/java/dev/pgm/community/party/MapPartyStatusType.java @@ -10,8 +10,8 @@ public enum MapPartyStatusType { END("stopped", NamedTextColor.RED), RESTART("restarted", NamedTextColor.DARK_GREEN); - String name; - NamedTextColor color; + final String name; + final NamedTextColor color; MapPartyStatusType(String name, NamedTextColor color) { this.name = name; diff --git a/core/src/main/java/dev/pgm/community/party/MapPartyType.java b/core/src/main/java/dev/pgm/community/party/MapPartyType.java index 931f470e..4cab411b 100644 --- a/core/src/main/java/dev/pgm/community/party/MapPartyType.java +++ b/core/src/main/java/dev/pgm/community/party/MapPartyType.java @@ -7,8 +7,8 @@ public enum MapPartyType { REGULAR(Material.IRON_INGOT, "Use an existing map pool"), CUSTOM(Material.GOLD_INGOT, "Select a custom list of maps"); - private Material material; - private String description; + private final Material material; + private final String description; MapPartyType(Material material, String description) { this.material = material; @@ -28,7 +28,7 @@ public Material getMaterial() { } public static MapPartyType parse(String name) { - if (name.toLowerCase().equalsIgnoreCase("custom")) { + if (name.equalsIgnoreCase("custom")) { return MapPartyType.CUSTOM; } return MapPartyType.REGULAR; diff --git a/core/src/main/java/dev/pgm/community/party/broadcasts/MapPartyBroadcastManager.java b/core/src/main/java/dev/pgm/community/party/broadcasts/MapPartyBroadcastManager.java index 7c6e27c7..abb3802c 100644 --- a/core/src/main/java/dev/pgm/community/party/broadcasts/MapPartyBroadcastManager.java +++ b/core/src/main/java/dev/pgm/community/party/broadcasts/MapPartyBroadcastManager.java @@ -22,8 +22,8 @@ public class MapPartyBroadcastManager { - private MapPartyFeature feature; - private MapPartyConfig config; + private final MapPartyFeature feature; + private final MapPartyConfig config; private int taskId = -1; private int lineIndex; @@ -143,10 +143,10 @@ private static boolean hasTimePassed(Instant last, Duration duration) { private class EventBroadcastLine { - private String message; - private String command; - private String hover; - private Duration interval; + private final String message; + private final String command; + private final String hover; + private final Duration interval; private Instant lastBroadcast; private final Component DEFAULT_HOVER = text("Click to view more info", NamedTextColor.GRAY); diff --git a/core/src/main/java/dev/pgm/community/party/exceptions/MapPartyException.java b/core/src/main/java/dev/pgm/community/party/exceptions/MapPartyException.java index 71f05a5e..5616eb66 100644 --- a/core/src/main/java/dev/pgm/community/party/exceptions/MapPartyException.java +++ b/core/src/main/java/dev/pgm/community/party/exceptions/MapPartyException.java @@ -4,7 +4,7 @@ public abstract class MapPartyException extends Exception { - private MapParty party; + private final MapParty party; public MapPartyException(MapParty party, String error) { super(error); diff --git a/core/src/main/java/dev/pgm/community/party/feature/MapPartyFeature.java b/core/src/main/java/dev/pgm/community/party/feature/MapPartyFeature.java index 27527e71..4f23e858 100644 --- a/core/src/main/java/dev/pgm/community/party/feature/MapPartyFeature.java +++ b/core/src/main/java/dev/pgm/community/party/feature/MapPartyFeature.java @@ -1,7 +1,6 @@ package dev.pgm.community.party.feature; import static dev.pgm.community.party.MapPartyMessages.formatTime; -import static dev.pgm.community.utils.PGMUtils.parseMapText; import static net.kyori.adventure.text.Component.text; import static tc.oc.pgm.util.bukkit.BukkitUtils.colorize; import static tc.oc.pgm.util.player.PlayerComponent.player; @@ -127,7 +126,7 @@ public Optional getMostRecentHistory() { public MapPartyPreset getPreset(String presetName) { return getPresets().stream() - .filter(preset -> cleanName(preset.getName()).equalsIgnoreCase(presetName)) + .filter(preset -> cleanName(preset.name()).equalsIgnoreCase(presetName)) .findAny() .orElse(null); } @@ -143,24 +142,22 @@ public void create(CommandAudience viewer, Player sender, MapPartyPreset preset, return; } - if (preset.getName() != null) { - setName(viewer, preset.getName()); + if (preset.name() != null) { + setName(viewer, preset.name()); } - if (preset.getDescription() != null) { - setDescription(viewer, preset.getDescription()); + if (preset.description() != null) { + setDescription(viewer, preset.description()); } - if (preset.getDuration() != null) { - setTimelimit(viewer, preset.getDuration(), false); + if (preset.duration() != null) { + setTimelimit(viewer, preset.duration(), false); } if (type == MapPartyType.REGULAR) { - setMapPool(viewer, preset.getPool()); + setMapPool(viewer, preset.pool()); } else { - preset.getMaps().stream() - .map(mapName -> parseMapText(mapName)) - .forEach(map -> addMap(viewer, map)); + preset.maps().stream().map(PGMUtils::parseMapText).forEach(map -> addMap(viewer, map)); } } @@ -171,9 +168,10 @@ public boolean create(CommandAudience viewer, Player sender, MapPartyType type, } if (getEventConfig().restrictSingleSession() && historyStore.hasAnyEndedEvents() && !force) { - historyStore.mostRecent().ifPresent(lastParty -> { - viewer.sendWarning(MapPartyMessages.getPreviousPartyWarning(lastParty)); - }); + historyStore + .mostRecent() + .ifPresent( + lastParty -> viewer.sendWarning(MapPartyMessages.getPreviousPartyWarning(lastParty))); return false; } @@ -247,9 +245,8 @@ public boolean restart(CommandSender sender) { private boolean canModify(CommandSender sender) { if (party == null) return false; - if (!(sender instanceof Player)) return true; + if (!(sender instanceof Player player)) return true; - Player player = (Player) sender; return party.getHosts().isHost(player.getUniqueId()) || player.hasPermission(CommunityPermissions.PARTY_ADMIN); } @@ -334,7 +331,6 @@ public void setTimelimit(CommandAudience viewer, Duration timeLimit, boolean for .color(NamedTextColor.GREEN)) .color(NamedTextColor.GRAY) .build()); - ; } } @@ -528,10 +524,8 @@ public void onPartyStart(MapPartyStartEvent event) { Bukkit.getScheduler() .runTaskLater( Community.get(), - () -> { - Bukkit.dispatchCommand( - Bukkit.getConsoleSender(), getEventConfig().getRaindropActivateCommand()); - }, + () -> Bukkit.dispatchCommand( + Bukkit.getConsoleSender(), getEventConfig().getRaindropActivateCommand()), 20L * 8); } @@ -595,11 +589,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { .getServer() .getScheduler() .scheduleSyncDelayedTask( - Community.get(), - () -> { - sendPartyWelcome(event.getPlayer()); - }, - 30L); + Community.get(), () -> sendPartyWelcome(event.getPlayer()), 30L); } } } @@ -716,10 +706,7 @@ public void sendHistoryEntry(CommandAudience sender, int sequence, boolean verbo historyStore .getBySequence(sequence) .ifPresentOrElse( - entry -> { - sender.getAudience().sendMessage(entry.format(verbose)); - }, - () -> sender + entry -> sender.getAudience().sendMessage(entry.format(verbose)), () -> sender .getAudience() .sendWarning(text("No party history found for #" + sequence, NamedTextColor.RED))); } diff --git a/core/src/main/java/dev/pgm/community/party/history/MapPartyHistoryEntry.java b/core/src/main/java/dev/pgm/community/party/history/MapPartyHistoryEntry.java index 56c04633..5fe85cfb 100644 --- a/core/src/main/java/dev/pgm/community/party/history/MapPartyHistoryEntry.java +++ b/core/src/main/java/dev/pgm/community/party/history/MapPartyHistoryEntry.java @@ -226,7 +226,7 @@ public Component format(boolean verbose) { .append(text(matches.size(), NamedTextColor.AQUA)) .build(); - Component verboseBlock = text() + Component combined = text() .append(top) .appendNewline() .append(text(" ")) @@ -251,7 +251,6 @@ public Component format(boolean verbose) { .append(matchHeader) .build(); - Component combined = verboseBlock; for (int i = 0; i < matches.size(); i++) { Component line = matches.get(i).formatLine(i + 1); combined = combined.appendNewline().append(text(" ")).append(line); diff --git a/core/src/main/java/dev/pgm/community/party/hosts/MapPartyHosts.java b/core/src/main/java/dev/pgm/community/party/hosts/MapPartyHosts.java index 83d6dc5e..b775472f 100644 --- a/core/src/main/java/dev/pgm/community/party/hosts/MapPartyHosts.java +++ b/core/src/main/java/dev/pgm/community/party/hosts/MapPartyHosts.java @@ -8,11 +8,11 @@ import dev.pgm.community.Community; import dev.pgm.community.CommunityPermissions; import dev.pgm.community.utils.BroadcastUtils; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; @@ -66,11 +66,10 @@ public void addSubHost(Player player) { } public boolean removeSubHost(String name) { - Entry cachedEntry = - nameCache.entrySet().stream() - .filter(e -> e.getValue().equalsIgnoreCase(name)) - .findAny() - .orElse(null); + Entry cachedEntry = nameCache.entrySet().stream() + .filter(e -> e.getValue().equalsIgnoreCase(name)) + .findAny() + .orElse(null); if (cachedEntry != null) { UUID playerId = cachedEntry.getKey(); @@ -106,7 +105,7 @@ public Set getSubHostIds() { } public Set getHostNames() { - return this.nameCache.values().stream().collect(Collectors.toSet()); + return new HashSet<>(this.nameCache.values()); } public String getCachedName(UUID playerId) { diff --git a/core/src/main/java/dev/pgm/community/party/menu/MapPartyMainMenu.java b/core/src/main/java/dev/pgm/community/party/menu/MapPartyMainMenu.java index cc9cad28..9493431a 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/MapPartyMainMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/MapPartyMainMenu.java @@ -99,9 +99,7 @@ private void renderPartyCreation(Player player, InventoryContents contents) { .material(Material.CAKE) .name(colorize("&aCreate a new map party")) .build(), - c -> { - selectTypeSub.open(this); - })); + c -> selectTypeSub.open(this))); List presets = getFeature().getPresets(); int[] SLOTS = {1, 3, 5, 7}; @@ -126,28 +124,21 @@ private Optional getParty() { } private ClickableItem getStartIcon() { - return ClickableItem.of(START_ITEM, c -> { - getParty().ifPresent(party -> { - Bukkit.dispatchCommand(getViewer(), "event start " + (c.isLeftClick() ? "false" : "true")); - }); - }); + return ClickableItem.of(START_ITEM, c -> getParty() + .ifPresent(party -> Bukkit.dispatchCommand( + getViewer(), "event start " + (c.isLeftClick() ? "false" : "true")))); } private ClickableItem getRestartIcon() { - return ClickableItem.of(RESTART_ITEM, c -> { - getParty().ifPresent(party -> { - Bukkit.dispatchCommand(getViewer(), "event restart"); - }); - }); + return ClickableItem.of(RESTART_ITEM, c -> getParty() + .ifPresent(party -> Bukkit.dispatchCommand(getViewer(), "event restart"))); } private ClickableItem getEndIcon() { - return ClickableItem.of(END_ITEM, c -> { - getParty().ifPresent(party -> { - Bukkit.dispatchCommand(getViewer(), "event stop"); - close(); - }); - }); + return ClickableItem.of(END_ITEM, c -> getParty().ifPresent(party -> { + Bukkit.dispatchCommand(getViewer(), "event stop"); + close(); + })); } private ClickableItem getHostIcon(MapPartyHosts hosts) { @@ -159,9 +150,7 @@ private ClickableItem getHostIcon(MapPartyHosts hosts) { .lore(colorize("&7Click to manage party hosts")) .flags(ItemFlag.values()) .build(), - c -> { - new HostMenu(getFeature(), getViewer()); - }); + c -> new HostMenu(getFeature(), getViewer())); } private ClickableItem getMapsIcon(MapPartyType type) { @@ -173,9 +162,7 @@ private ClickableItem getMapsIcon(MapPartyType type) { "&7Click to manage party " + (type == MapPartyType.REGULAR ? "pool" : "maps"))) .flags(ItemFlag.values()) .build(), - c -> { - Bukkit.dispatchCommand(getViewer(), "event maps"); - }); + c -> Bukkit.dispatchCommand(getViewer(), "event maps")); } private ClickableItem getSettingsIcon() { @@ -186,9 +173,7 @@ private ClickableItem getSettingsIcon() { .lore(colorize("&7Click to manage party settings")) .flags(ItemFlag.values()) .build(), - c -> { - new MapPartySettingsMenu(getFeature(), getViewer()); - }); + c -> new MapPartySettingsMenu(getFeature(), getViewer())); } private ClickableItem getModifierMenu() { @@ -199,20 +184,18 @@ private ClickableItem getModifierMenu() { .lore(colorize("&7Click to manage party modifiers")) .flags(ItemFlag.values()) .build(), - c -> { - new MapPartyModifierMenu(getFeature(), getViewer()); - }); + c -> new MapPartyModifierMenu(getFeature(), getViewer())); } private ClickableItem getPresetIcon(MapPartyPreset preset) { List lore = Lists.newArrayList(); - lore.add(colorize("&6Description&7: &3" + preset.getDescription())); + lore.add(colorize("&6Description&7: &3" + preset.description())); lore.add(colorize("&6Mode&7: &a" + preset.getType().getName())); if (preset.getType() == MapPartyType.REGULAR) { - lore.add(colorize("&6Pool&7: &b" + preset.getPool())); + lore.add(colorize("&6Pool&7: &b" + preset.pool())); } else { - lore.add(colorize("&6Maps: &b" + preset.getMaps().size())); + lore.add(colorize("&6Maps: &b" + preset.maps().size())); } lore.add(""); @@ -222,17 +205,17 @@ private ClickableItem getPresetIcon(MapPartyPreset preset) { new ItemBuilder() .material(Materials.STAINED_GLASS_PANE) .color(DyeColor.CYAN) - .name(colorize(preset.getName())) - .lore(lore.toArray(new String[lore.size()])) + .name(colorize(preset.name())) + .lore(lore.toArray(new String[0])) .build(), c -> { - String command = "event preset " + preset.getName(); + String command = "event preset " + preset.name(); if (getFeature().requiresForceForCreate()) { new MapPartyCreateConfirmMenu( getFeature(), getViewer(), - "event preset --force " + preset.getName(), - preset.getName()) + "event preset --force " + preset.name(), + preset.name()) .open(this); } else { Bukkit.dispatchCommand(getViewer(), command); @@ -249,11 +232,11 @@ private ClickableItem getEmptyItem(int i) { } private static final String START_PARTY_SKIN = - "http://textures.minecraft.net/texture/4ae29422db4047efdb9bac2cdae5a0719eb772fccc88a66d912320b343c341"; + "https://textures.minecraft.net/texture/4ae29422db4047efdb9bac2cdae5a0719eb772fccc88a66d912320b343c341"; private static final String RESTART_PARTY_SKIN = - "http://textures.minecraft.net/texture/479e8cf21b839b255a2836e251941c5fdc99af01559e3733d5325ccfa3d922aa"; + "https://textures.minecraft.net/texture/479e8cf21b839b255a2836e251941c5fdc99af01559e3733d5325ccfa3d922aa"; private static final String END_PARTY_SKIN = - "http://textures.minecraft.net/texture/e9cdb9af38cf41daa53bc8cda7665c509632d14e678f0f19f263f46e541d8a30"; + "https://textures.minecraft.net/texture/e9cdb9af38cf41daa53bc8cda7665c509632d14e678f0f19f263f46e541d8a30"; private static final ItemStack START_ITEM = PLAYER_UTILS.customSkull( START_PARTY_SKIN, diff --git a/core/src/main/java/dev/pgm/community/party/menu/MapPartyMenu.java b/core/src/main/java/dev/pgm/community/party/menu/MapPartyMenu.java index 5f048f37..6dc620a0 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/MapPartyMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/MapPartyMenu.java @@ -123,7 +123,7 @@ protected ClickableItem getBorderItem() { } protected static final String ADD_SKIN = - "http://textures.minecraft.net/texture/b056bc1244fcff99344f12aba42ac23fee6ef6e3351d27d273c1572531f"; + "https://textures.minecraft.net/texture/b056bc1244fcff99344f12aba42ac23fee6ef6e3351d27d273c1572531f"; protected DyeColor getBorderColor() { return getFeature().getParty() == null @@ -133,9 +133,8 @@ protected DyeColor getBorderColor() { protected ClickableItem getMainMenuIcon() { return ClickableItem.of( - getNamedItem("&7Return to &dMap Party Manager", Material.CAKE, 1), c -> { - Bukkit.dispatchCommand(getViewer(), "event"); - }); + getNamedItem("&7Return to &dMap Party Manager", Material.CAKE, 1), + c -> Bukkit.dispatchCommand(getViewer(), "event")); } protected ItemStack getPlayerHead( @@ -161,7 +160,7 @@ private ClickableItem getPageItem(Player player, int page, ItemStack icon) { return ClickableItem.of(icon, c -> getInventory().open(player, page)); } - private final ItemStack getPageIcon(String text, int page) { + private ItemStack getPageIcon(String text, int page) { return getNamedItem(text, Material.ARROW, page); } diff --git a/core/src/main/java/dev/pgm/community/party/menu/hosts/HostAddMenu.java b/core/src/main/java/dev/pgm/community/party/menu/hosts/HostAddMenu.java index 6a60cc2c..5b865d76 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/hosts/HostAddMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/hosts/HostAddMenu.java @@ -37,9 +37,11 @@ public HostAddMenu(MapPartyHosts hosts) { public void init(Player player, InventoryContents contents) { super.init(player, contents); contents.set( - 5, 4, ClickableItem.of(getNamedItem("&7Return to &aEvent Hosts", Material.CAKE, 1), c -> { - Bukkit.dispatchCommand(player, "event hosts"); - })); + 5, + 4, + ClickableItem.of( + getNamedItem("&7Return to &aEvent Hosts", Material.CAKE, 1), + c -> Bukkit.dispatchCommand(player, "event hosts"))); } @Override diff --git a/core/src/main/java/dev/pgm/community/party/menu/hosts/HostMenu.java b/core/src/main/java/dev/pgm/community/party/menu/hosts/HostMenu.java index 6fe162b8..2a9cfcd0 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/hosts/HostMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/hosts/HostMenu.java @@ -49,7 +49,7 @@ public void render(Player player, InventoryContents contents) { .collect(Collectors.toSet()); Pagination page = contents.pagination(); - page.setItems(players.toArray(new ClickableItem[players.size()])); + page.setItems(players.toArray(new ClickableItem[0])); page.setItemsPerPage(7); page.addToIterator(contents.newIterator(SlotIterator.Type.HORIZONTAL, 2, 1)); @@ -75,9 +75,7 @@ public void render(Player player, InventoryContents contents) { 4, ClickableItem.of( PLAYER_UTILS.customSkull(ADD_SKIN, "&a&lAdd Host", "&7Click to add event host"), - c -> { - new HostAddMenu(hosts).open(getViewer()); - })); + c -> new HostAddMenu(hosts).open(getViewer()))); // Return to party menu contents.set(5, 4, getMainMenuIcon()); diff --git a/core/src/main/java/dev/pgm/community/party/menu/maps/MapAddMenu.java b/core/src/main/java/dev/pgm/community/party/menu/maps/MapAddMenu.java index 088970f6..63310084 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/maps/MapAddMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/maps/MapAddMenu.java @@ -39,8 +39,8 @@ public class MapAddMenu extends MapPartyMenu { private static final int ROWS = 6; private static final boolean HOST_ONLY = true; - private List maps; - private List tags; + private final List maps; + private final List tags; private int filterIndex = 0; @@ -75,7 +75,7 @@ private void render(Player player, InventoryContents contents) { List mapItems = getFilteredMapItems(); Pagination page = contents.pagination(); - page.setItems(mapItems.toArray(new ClickableItem[mapItems.size()])); + page.setItems(mapItems.toArray(new ClickableItem[0])); page.setItemsPerPage(36); page.addToIterator(contents.newIterator(SlotIterator.Type.HORIZONTAL, 1, 0)); @@ -96,9 +96,12 @@ private void render(Player player, InventoryContents contents) { } // Return to party menu - contents.set(5, 4, ClickableItem.of(getNamedItem("&7Return to &6Maps", Material.CAKE, 1), c -> { - Bukkit.dispatchCommand(player, "event maps"); - })); + contents.set( + 5, + 4, + ClickableItem.of( + getNamedItem("&7Return to &6Maps", Material.CAKE, 1), + c -> Bukkit.dispatchCommand(player, "event maps"))); } private ClickableItem getAllIcon() { @@ -167,7 +170,6 @@ public void update(Player player, InventoryContents contents) { contents.setProperty("update", delay + 1); if (delay >= 5) { render(player, contents); - delay = 0; } } @@ -190,11 +192,10 @@ private ClickableItem getMapIcon(MapInfo map) { boolean isAdded = getFeature().getParty().isMapAdded(map); Material icon; - icon = map.getTags().isEmpty() - || !map.getTags().stream().filter(t -> t.isGamemode()).findAny().isPresent() + icon = map.getTags().isEmpty() || map.getTags().stream().noneMatch(MapTag::isGamemode) ? Material.MAP : mapTagMaterial( - map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get()); + map.getTags().stream().filter(MapTag::isGamemode).findAny().get()); ItemBuilder builder = new ItemBuilder() .material(icon) @@ -210,9 +211,8 @@ private ClickableItem getMapIcon(MapInfo map) { builder.enchant(Enchantments.LUCK_OF_THE_SEA, 1); } - return ClickableItem.of(builder.build(), c -> { - Bukkit.dispatchCommand(getViewer(), "event addmap " + map.getName()); - }); + return ClickableItem.of( + builder.build(), c -> Bukkit.dispatchCommand(getViewer(), "event addmap " + map.getName())); } private ClickableItem getNoMapsIcon() { diff --git a/core/src/main/java/dev/pgm/community/party/menu/maps/MapMenu.java b/core/src/main/java/dev/pgm/community/party/menu/maps/MapMenu.java index 9d56cab9..e831ab9b 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/maps/MapMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/maps/MapMenu.java @@ -15,7 +15,6 @@ import fr.minuskube.inv.content.Pagination; import fr.minuskube.inv.content.SlotIterator; import java.util.List; -import java.util.stream.Collectors; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.DyeColor; @@ -42,15 +41,14 @@ public MapMenu(MapPartyFeature feature, Player viewer) { private void render(Player player, InventoryContents contents) { contents.fillBorders(getBorderItem()); - if (getFeature().getParty() != null && getFeature().getParty() instanceof CustomPoolParty) { - CustomPoolParty party = (CustomPoolParty) getFeature().getParty(); + if (getFeature().getParty() != null + && getFeature().getParty() instanceof CustomPoolParty party) { List maps = party.getMaps(); - List mapItems = - maps.stream().map(this::getMapIcon).collect(Collectors.toList()); + List mapItems = maps.stream().map(this::getMapIcon).toList(); Pagination page = contents.pagination(); - page.setItems(mapItems.toArray(new ClickableItem[mapItems.size()])); + page.setItems(mapItems.toArray(new ClickableItem[0])); page.setItemsPerPage(27); page.addToIterator(contents.newIterator(SlotIterator.Type.HORIZONTAL, 1, 0)); @@ -77,9 +75,7 @@ private void render(Player player, InventoryContents contents) { ClickableItem.of( PLAYER_UTILS.customSkull( ADD_SKIN, "&a&lAdd Map", "&7Click to add a map to the selection"), - c -> { - new MapAddMenu(getFeature(), getViewer()); - })); + c -> new MapAddMenu(getFeature(), getViewer()))); } else { RegularPoolParty party = (RegularPoolParty) getFeature().getParty(); MapPoolManager poolManager = PGMUtils.getMapPoolManager(); @@ -123,9 +119,7 @@ private ClickableItem getMapIcon(MapInfo map) { .lore(colorize("&7Click to remove")) .flags(ItemFlag.values()) .build(), - c -> { - Bukkit.dispatchCommand(getViewer(), "event removemap " + map.getName()); - }); + c -> Bukkit.dispatchCommand(getViewer(), "event removemap " + map.getName())); } private ClickableItem getPoolIcon(MapPool pool, boolean active) { @@ -140,9 +134,8 @@ private ClickableItem getPoolIcon(MapPool pool, boolean active) { if (active) { icon.enchant(Enchantments.LUCK_OF_THE_SEA, 1); } - return ClickableItem.of(icon.build(), c -> { - Bukkit.dispatchCommand(getViewer(), "event setpool " + pool.getName()); - }); + return ClickableItem.of( + icon.build(), c -> Bukkit.dispatchCommand(getViewer(), "event setpool " + pool.getName())); } private ClickableItem getNoMapsIcon() { diff --git a/core/src/main/java/dev/pgm/community/party/menu/modifiers/MapPartyModifierMenu.java b/core/src/main/java/dev/pgm/community/party/menu/modifiers/MapPartyModifierMenu.java index 7a2b2e1e..824c98c1 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/modifiers/MapPartyModifierMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/modifiers/MapPartyModifierMenu.java @@ -54,9 +54,8 @@ private ClickableItem getRaindropMultiplierIcon() { .lore( colorize("&7Click to toggle multiplier"), "", - colorize( - "&7Status&8: " - + (getFeature().isRaindropMultiplierActive() ? "&aEnabled" : "&cDisabled"))) + colorize("&7Status&8: " + + (getFeature().isRaindropMultiplierActive() ? "&aEnabled" : "&cDisabled"))) .flags(ItemFlag.values()) .build(), c -> { @@ -74,17 +73,14 @@ private ClickableItem getMutationIcon() { .lore(colorize("&7Click to view match mutations")) .flags(ItemFlag.values()) .build(), - c -> { - Bukkit.dispatchCommand(getViewer(), "mutation"); - }); + c -> Bukkit.dispatchCommand(getViewer(), "mutation")); } - return ClickableItem.empty( - new ItemBuilder() - .material(Material.BARRIER) - .name(colorize("&cDisabled")) - .lore(colorize("&7Mutations are disabled! You can enable then in the config")) - .flags(ItemFlag.values()) - .build()); + return ClickableItem.empty(new ItemBuilder() + .material(Material.BARRIER) + .name(colorize("&cDisabled")) + .lore(colorize("&7Mutations are disabled! You can enable then in the config")) + .flags(ItemFlag.values()) + .build()); } } diff --git a/core/src/main/java/dev/pgm/community/party/menu/settings/MapPartySettingsMenu.java b/core/src/main/java/dev/pgm/community/party/menu/settings/MapPartySettingsMenu.java index d7fe744a..56f3e25e 100644 --- a/core/src/main/java/dev/pgm/community/party/menu/settings/MapPartySettingsMenu.java +++ b/core/src/main/java/dev/pgm/community/party/menu/settings/MapPartySettingsMenu.java @@ -172,9 +172,8 @@ private ClickableItem getPoolModeItem(CustomPoolParty party) { colorize("&7Click to toggle mode")) .flags(ItemFlag.values()); - return ClickableItem.of(builder.build(), c -> { - Bukkit.dispatchCommand(getViewer(), "event mode"); - }); + return ClickableItem.of( + builder.build(), c -> Bukkit.dispatchCommand(getViewer(), "event mode")); } private ClickableItem getSettingItem(PartyBooleanSetting setting) { diff --git a/core/src/main/java/dev/pgm/community/party/presets/MapPartyPreset.java b/core/src/main/java/dev/pgm/community/party/presets/MapPartyPreset.java index 20d16bc3..5e18d062 100644 --- a/core/src/main/java/dev/pgm/community/party/presets/MapPartyPreset.java +++ b/core/src/main/java/dev/pgm/community/party/presets/MapPartyPreset.java @@ -7,13 +7,8 @@ import java.util.List; import org.bukkit.configuration.ConfigurationSection; -public class MapPartyPreset { - - private final String name; - private final String description; - private final Duration duration; - private final String pool; - private final List maps; +public record MapPartyPreset( + String name, String description, Duration duration, String pool, List maps) { public static MapPartyPreset of(ConfigurationSection section) { return new MapPartyPreset( @@ -24,36 +19,7 @@ public static MapPartyPreset of(ConfigurationSection section) { section.getStringList("maps")); } - public MapPartyPreset( - String name, String description, Duration duration, String pool, List maps) { - this.name = name; - this.description = description; - this.duration = duration; - this.pool = pool; - this.maps = maps; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public Duration getDuration() { - return duration; - } - - public String getPool() { - return pool; - } - - public List getMaps() { - return maps; - } - public MapPartyType getType() { - return (getPool() == null || getPool().isEmpty()) ? MapPartyType.CUSTOM : MapPartyType.REGULAR; + return (pool() == null || pool().isEmpty()) ? MapPartyType.CUSTOM : MapPartyType.REGULAR; } } diff --git a/core/src/main/java/dev/pgm/community/party/settings/MapPartySettings.java b/core/src/main/java/dev/pgm/community/party/settings/MapPartySettings.java index 839e8054..cd2bd6a3 100644 --- a/core/src/main/java/dev/pgm/community/party/settings/MapPartySettings.java +++ b/core/src/main/java/dev/pgm/community/party/settings/MapPartySettings.java @@ -6,9 +6,9 @@ public class MapPartySettings { - private PartyBooleanSetting showLoginMessage; - private PartyBooleanSetting showPartyNotifications; - private PartyBooleanSetting autoscalingTeams; + private final PartyBooleanSetting showLoginMessage; + private final PartyBooleanSetting showPartyNotifications; + private final PartyBooleanSetting autoscalingTeams; public MapPartySettings(MapPartyConfig config) { this.showLoginMessage = new PartyBooleanSetting( diff --git a/core/src/main/java/dev/pgm/community/party/settings/PartyBooleanSetting.java b/core/src/main/java/dev/pgm/community/party/settings/PartyBooleanSetting.java index 6509c709..4af687fd 100644 --- a/core/src/main/java/dev/pgm/community/party/settings/PartyBooleanSetting.java +++ b/core/src/main/java/dev/pgm/community/party/settings/PartyBooleanSetting.java @@ -4,8 +4,8 @@ public class PartyBooleanSetting extends PartySetting { - private Material trueIcon; - private Material falseIcon; + private final Material trueIcon; + private final Material falseIcon; private boolean value; diff --git a/core/src/main/java/dev/pgm/community/party/settings/PartySetting.java b/core/src/main/java/dev/pgm/community/party/settings/PartySetting.java index 9b387f17..6c5c1785 100644 --- a/core/src/main/java/dev/pgm/community/party/settings/PartySetting.java +++ b/core/src/main/java/dev/pgm/community/party/settings/PartySetting.java @@ -4,8 +4,8 @@ public abstract class PartySetting { - private String name; - private String description; + private final String name; + private final String description; public PartySetting(String name, String description) { this.name = name; diff --git a/core/src/main/java/dev/pgm/community/party/types/CustomPoolParty.java b/core/src/main/java/dev/pgm/community/party/types/CustomPoolParty.java index 9cf1316b..2e35dd8e 100644 --- a/core/src/main/java/dev/pgm/community/party/types/CustomPoolParty.java +++ b/core/src/main/java/dev/pgm/community/party/types/CustomPoolParty.java @@ -25,7 +25,7 @@ public class CustomPoolParty extends MapPartyBase { private boolean voted; - private List maps; + private final List maps; public CustomPoolParty(Player creator, Duration length, MapPartyConfig config) { this( diff --git a/core/src/main/java/dev/pgm/community/polls/PollBuilder.java b/core/src/main/java/dev/pgm/community/polls/PollBuilder.java index ed4a4552..cd3538d3 100644 --- a/core/src/main/java/dev/pgm/community/polls/PollBuilder.java +++ b/core/src/main/java/dev/pgm/community/polls/PollBuilder.java @@ -22,23 +22,23 @@ import java.util.UUID; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.map.MapInfo; public class PollBuilder { private static final int MAX_POLL_OPTIONS = 4; - private PollEditAlerter alert; // Used to broadcast changes to values + private final PollEditAlerter alert; // Used to broadcast changes to values // Required private Component question; private UUID creator; - private PollThreshold threshold = PollThreshold.SIMPLE; + private PollThreshold threshold; private Duration duration; // Optional - private Set endActions = Sets.newHashSet(); + private final Set endActions = Sets.newHashSet(); public PollBuilder(PollConfig config, PollEditAlerter alert) { this.alert = alert; @@ -152,17 +152,14 @@ public Poll build() { endActions.add(new NullEndAction()); } - for (EndAction action : endActions) { - actions.add(action); - } + actions.addAll(endActions); if (question == null) { question = generateQuestion(actions); } if (actions.size() == 1) { - poll = new SingleChoicePoll( - question, creator, threshold, duration, actions.iterator().next()); + poll = new SingleChoicePoll(question, creator, threshold, duration, actions.getFirst()); } else if (endActions.size() > 1) { threshold = PollThreshold.SIMPLE; poll = new MultiChoicePoll(question, creator, threshold, duration, actions); @@ -200,7 +197,7 @@ public static Component generateQuestion(List actions) { } if (actions.size() == 1) { - return actions.iterator().next().getDefaultQuestion(); + return actions.getFirst().getDefaultQuestion(); } Set> uniqueActionTypes = new HashSet<>(); @@ -211,39 +208,35 @@ public static Component generateQuestion(List actions) { } } - if (uniqueActionTypes.size() == 1) { - Class singleActionType = uniqueActionTypes.iterator().next(); - NamedTextColor textColor = NamedTextColor.WHITE; - String actionTypeName = ""; - String questionSuffix = ""; - - if (singleActionType.equals(CommandEndAction.class)) { - actionTypeName = "command"; - textColor = NamedTextColor.AQUA; - questionSuffix = "execute?"; - } else if (singleActionType.equals(KickPlayerEndAction.class)) { - actionTypeName = "player"; - textColor = NamedTextColor.GOLD; - questionSuffix = "kick?"; - } else if (singleActionType.equals(MutationEndAction.class)) { - actionTypeName = "mutation"; - textColor = NamedTextColor.GREEN; - questionSuffix = "toggle?"; - } else if (singleActionType.equals(MapEndAction.class)) { - actionTypeName = "map"; - textColor = NamedTextColor.YELLOW; - questionSuffix = "play next?"; - } - - return text() - .append(text("Which ")) - .append(text(actionTypeName, textColor)) - .append(text(" should we ")) - .append(text(questionSuffix)) - .color(NamedTextColor.WHITE) - .build(); + Class singleActionType = uniqueActionTypes.iterator().next(); + NamedTextColor textColor = NamedTextColor.WHITE; + String actionTypeName = ""; + String questionSuffix = ""; + + if (singleActionType.equals(CommandEndAction.class)) { + actionTypeName = "command"; + textColor = NamedTextColor.AQUA; + questionSuffix = "execute?"; + } else if (singleActionType.equals(KickPlayerEndAction.class)) { + actionTypeName = "player"; + textColor = NamedTextColor.GOLD; + questionSuffix = "kick?"; + } else if (singleActionType.equals(MutationEndAction.class)) { + actionTypeName = "mutation"; + textColor = NamedTextColor.GREEN; + questionSuffix = "toggle?"; + } else if (singleActionType.equals(MapEndAction.class)) { + actionTypeName = "map"; + textColor = NamedTextColor.YELLOW; + questionSuffix = "play next?"; } - return text("What should we do?", NamedTextColor.WHITE); + return text() + .append(text("Which ")) + .append(text(actionTypeName, textColor)) + .append(text(" should we ")) + .append(text(questionSuffix)) + .color(NamedTextColor.WHITE) + .build(); } } diff --git a/core/src/main/java/dev/pgm/community/polls/PollComponents.java b/core/src/main/java/dev/pgm/community/polls/PollComponents.java index 6d1d1656..57791b27 100644 --- a/core/src/main/java/dev/pgm/community/polls/PollComponents.java +++ b/core/src/main/java/dev/pgm/community/polls/PollComponents.java @@ -13,9 +13,9 @@ import dev.pgm.community.utils.MessageUtils; import dev.pgm.community.utils.Sounds; import java.time.Duration; +import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.ClickEvent; @@ -103,25 +103,21 @@ default Component formatCategoryDetail(String category, Component value) { } default Component formatQuestion(Poll poll) { - Component question = - text() - .append(text("Question", NamedTextColor.GOLD, TextDecoration.BOLD)) - .append(text(": ", NamedTextColor.GRAY)) - .hoverEvent( - HoverEvent.showText( - text() - .append(poll.getRequiredThreshold().toComponent()) - .append(text(" required for success.", NamedTextColor.GRAY)))) - .build(); + Component question = text() + .append(text("Question", NamedTextColor.GOLD, TextDecoration.BOLD)) + .append(text(": ", NamedTextColor.GRAY)) + .hoverEvent(HoverEvent.showText(text() + .append(poll.getRequiredThreshold().toComponent()) + .append(text(" required for success.", NamedTextColor.GRAY)))) + .build(); return text().append(question).append(poll.getQuestion()).build(); } default void sendPollBroadcast(Poll poll) { List lines = Lists.newArrayList(); - lines.add( - TextFormatter.horizontalLineHeading( - null, text("Server Poll", NamedTextColor.AQUA), NamedTextColor.YELLOW)); + lines.add(TextFormatter.horizontalLineHeading( + null, text("Server Poll", NamedTextColor.AQUA), NamedTextColor.YELLOW)); lines.add(text(" ")); Component question = formatQuestion(poll); @@ -140,25 +136,21 @@ default void sendBooleanPollResults(Poll poll, long yay, long nay, boolean succe final NamedTextColor lineColor = success ? NamedTextColor.GREEN : NamedTextColor.RED; - Component header = - TextFormatter.horizontalLineHeading( - null, text("Poll Results", NamedTextColor.AQUA), lineColor); + Component header = TextFormatter.horizontalLineHeading( + null, text("Poll Results", NamedTextColor.AQUA), lineColor); Component footer = TextFormatter.horizontalLine(lineColor, TextFormatter.MAX_CHAT_WIDTH); Component question = formatQuestion(poll); - Component finalResult = - text() - .append(text("Final Result", NamedTextColor.GOLD, TextDecoration.BOLD)) - .append(text(": ", NamedTextColor.GRAY)) - .append(text(success ? "YES" : "NO", lineColor, TextDecoration.UNDERLINED)) - .hoverEvent( - HoverEvent.showText( - text() - .append(poll.getRequiredThreshold().toComponent()) - .appendNewline() - .append(createYesNoInfo(yay, nay)))) - .build(); + Component finalResult = text() + .append(text("Final Result", NamedTextColor.GOLD, TextDecoration.BOLD)) + .append(text(": ", NamedTextColor.GRAY)) + .append(text(success ? "YES" : "NO", lineColor, TextDecoration.UNDERLINED)) + .hoverEvent(HoverEvent.showText(text() + .append(poll.getRequiredThreshold().toComponent()) + .appendNewline() + .append(createYesNoInfo(yay, nay)))) + .build(); Component graphBreakdown = createGraphBreakdown(yay, nay); @@ -225,26 +217,22 @@ default void sendMultiChoicePollResults( Poll poll, Map voteCounts, EndAction winningAction) { List lines = Lists.newArrayList(); - Component header = - TextFormatter.horizontalLineHeading( - null, text("Poll Results", NamedTextColor.AQUA), NamedTextColor.GREEN); + Component header = TextFormatter.horizontalLineHeading( + null, text("Poll Results", NamedTextColor.AQUA), NamedTextColor.GREEN); Component footer = TextFormatter.horizontalLine(NamedTextColor.GREEN, TextFormatter.MAX_CHAT_WIDTH); Component question = formatQuestion(poll); - Component finalResult = - text() - .append(text("Final Result", NamedTextColor.GOLD, TextDecoration.BOLD)) - .append(text(": ", NamedTextColor.GRAY)) - .append(winningAction.getPreviewValue().decorate(TextDecoration.UNDERLINED)) - .hoverEvent( - HoverEvent.showText( - text() - .append(poll.getRequiredThreshold().toComponent()) - .appendNewline() - .append(createMultiChoiceInfo(voteCounts)))) - .build(); + Component finalResult = text() + .append(text("Final Result", NamedTextColor.GOLD, TextDecoration.BOLD)) + .append(text(": ", NamedTextColor.GRAY)) + .append(winningAction.getPreviewValue().decorate(TextDecoration.UNDERLINED)) + .hoverEvent(HoverEvent.showText(text() + .append(poll.getRequiredThreshold().toComponent()) + .appendNewline() + .append(createMultiChoiceInfo(voteCounts)))) + .build(); Component graphBreakdown = createRankedGraphBreakdown(voteCounts, winningAction); @@ -283,11 +271,10 @@ default Component createMultiChoiceInfo(Map voteCounts) { default Component createRankedGraphBreakdown( Map voteCounts, EndAction winningAction) { - List rankedActions = - voteCounts.entrySet().stream() - .sorted(Map.Entry.comparingByValue().reversed()) - .map(Map.Entry::getKey) - .collect(Collectors.toList()); + List rankedActions = voteCounts.entrySet().stream() + .sorted(Map.Entry.comparingByValue().reversed()) + .map(Map.Entry::getKey) + .toList(); final int maxBarLength = 17; // Max length of the bar in characters int totalVotes = rankedActions.stream().mapToInt(voteCounts::get).sum(); @@ -312,9 +299,8 @@ default Component createRankedGraphBreakdown( barColor = NamedTextColor.GRAY; } - builder.append( - createHoverableBar( - action, actionBarLength, maxBarLength, barColor, actionVotes, actionPercentage)); + builder.append(createHoverableBar( + action, actionBarLength, maxBarLength, barColor, actionVotes, actionPercentage)); } builder @@ -339,15 +325,14 @@ default Component createHoverableBar( for (int i = 0; i < maxBarLength; i++) { if (i < barLength) { - Component hoverText = - text() - .append(action.getPreviewValue().color(barColor)) - .append(text(": ", NamedTextColor.GRAY)) - .append(text(actionVotes + " vote" + (actionVotes != 1 ? "s" : ""), barColor)) - .append(text(" (", NamedTextColor.GRAY)) - .append(text(String.format("%.2f", actionPercentage * 100) + "%", barColor)) - .append(text(")", NamedTextColor.GRAY)) - .build(); + Component hoverText = text() + .append(action.getPreviewValue().color(barColor)) + .append(text(": ", NamedTextColor.GRAY)) + .append(text(actionVotes + " vote" + (actionVotes != 1 ? "s" : ""), barColor)) + .append(text(" (", NamedTextColor.GRAY)) + .append(text(String.format("%.2f", actionPercentage * 100) + "%", barColor)) + .append(text(")", NamedTextColor.GRAY)) + .build(); builder.append(SQUARE.hoverEvent(HoverEvent.showText(hoverText))); } } @@ -387,17 +372,16 @@ default Component formatButton( } default Component createVoteReminderBroadcast(Poll poll, Duration timeLeft, boolean hasVoted) { - TextComponent.Builder alert = - text() - .append(text("[", NamedTextColor.GRAY)) - .append(text("Poll", NamedTextColor.AQUA)) - .append(text("]", NamedTextColor.GRAY)) - .appendSpace() - .append(text("Only ")) - .append(TemporalComponent.duration(timeLeft, urgencyColor(timeLeft))) - .append(text(" left to vote! ")) - .color(NamedTextColor.DARK_AQUA) - .hoverEvent(HoverEvent.showText(poll.getQuestion())); + TextComponent.Builder alert = text() + .append(text("[", NamedTextColor.GRAY)) + .append(text("Poll", NamedTextColor.AQUA)) + .append(text("]", NamedTextColor.GRAY)) + .appendSpace() + .append(text("Only ")) + .append(TemporalComponent.duration(timeLeft, urgencyColor(timeLeft))) + .append(text(" left to vote! ")) + .color(NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(poll.getQuestion())); if (!hasVoted) { alert.append(poll.getVoteButtons(true)); @@ -455,21 +439,18 @@ default void sendBuilderDetails(PollBuilder builder, CommandAudience audience) { builder.getQuestion(), builder.getDuration(), builder.getThreshold(), - builder.getEndAction().stream().collect(Collectors.toList()), + new ArrayList<>(builder.getEndAction()), true, !builder.canBuild()); if (builder.canBuild()) { - Component buttons = - text() - .append( - formatButton( - "Start", NamedTextColor.GREEN, "/poll start", "Click to start poll", false)) - .appendSpace() - .append( - formatButton( - "Reset", NamedTextColor.RED, "/poll reset", "Click to reset values", false)) - .build(); + Component buttons = text() + .append(formatButton( + "Start", NamedTextColor.GREEN, "/poll start", "Click to start poll", false)) + .appendSpace() + .append(formatButton( + "Reset", NamedTextColor.RED, "/poll reset", "Click to reset values", false)) + .build(); audience.sendMessage(buttons); audience.sendMessage(getFooter()); @@ -486,9 +467,8 @@ default void sendDetails( boolean builder, boolean footer) { - audience.sendMessage( - TextFormatter.horizontalLineHeading( - audience.getSender(), text(title, NamedTextColor.AQUA), NamedTextColor.GRAY)); + audience.sendMessage(TextFormatter.horizontalLineHeading( + audience.getSender(), text(title, NamedTextColor.AQUA), NamedTextColor.GRAY)); List optionLines = Lists.newArrayList(); int i = 0; @@ -498,59 +478,46 @@ default void sendDetails( } if (builder && optionLines.isEmpty()) { - optionLines.add( - createEndActionLine(new NullEndAction(), 0, false) - .append(text(" - ", NamedTextColor.GRAY)) - .append( - formatButton( - "Command", - NamedTextColor.YELLOW, - "/poll command", - "Click to set a command", - true)) - .append( - formatButton("Map", NamedTextColor.GOLD, "/poll map", "Click to set a map", true)) - .append( - formatButton( - "Kick", NamedTextColor.RED, "/poll kick", "Click to kick a player", true))); + optionLines.add(createEndActionLine(new NullEndAction(), 0, false) + .append(text(" - ", NamedTextColor.GRAY)) + .append(formatButton( + "Command", NamedTextColor.YELLOW, "/poll command", "Click to set a command", true)) + .append(formatButton("Map", NamedTextColor.GOLD, "/poll map", "Click to set a map", true)) + .append(formatButton( + "Kick", NamedTextColor.RED, "/poll kick", "Click to kick a player", true))); } Component durationComponent = TemporalComponent.duration(duration, NamedTextColor.GREEN); if (builder) { - durationComponent = - durationComponent - .append(text(" - ", NamedTextColor.GRAY)) - .append( - formatButton( - "1m", - NamedTextColor.DARK_AQUA, - "/poll duration 1m", - "Click to set a 1 minute time limit", - false)) - .append( - formatButton( - "5m", - NamedTextColor.DARK_AQUA, - "/poll duration 5m", - "Click to set a 5 minute time limit", - false)) - .append( - formatButton( - "Custom", - NamedTextColor.DARK_AQUA, - "/poll duration", - "Click to set a custom time limit", - true)); + durationComponent = durationComponent + .append(text(" - ", NamedTextColor.GRAY)) + .append(formatButton( + "1m", + NamedTextColor.DARK_AQUA, + "/poll duration 1m", + "Click to set a 1 minute time limit", + false)) + .append(formatButton( + "5m", + NamedTextColor.DARK_AQUA, + "/poll duration 5m", + "Click to set a 5 minute time limit", + false)) + .append(formatButton( + "Custom", + NamedTextColor.DARK_AQUA, + "/poll duration", + "Click to set a custom time limit", + true)); } - Component thresholdComponent = - text() - .append(threshold.toComponent()) - .append(text(" for vote to pass.", NamedTextColor.GRAY)) - .hoverEvent(HoverEvent.showText(text("Click to adjust threshold", NamedTextColor.GRAY))) - .clickEvent(ClickEvent.suggestCommand("/poll threshold")) - .build(); + Component thresholdComponent = text() + .append(threshold.toComponent()) + .append(text(" for vote to pass.", NamedTextColor.GRAY)) + .hoverEvent(HoverEvent.showText(text("Click to adjust threshold", NamedTextColor.GRAY))) + .clickEvent(ClickEvent.suggestCommand("/poll threshold")) + .build(); if (question == null) { question = PollBuilder.generateQuestion(options); @@ -574,13 +541,12 @@ default void sendDetails( } default Component createEndActionLine(EndAction action, int index, boolean showRemove) { - Component remove = - formatIconButton( - MessageUtils.DENY, - null, - NamedTextColor.RED, - "/poll remove " + action.getValue(), - "Click to remove"); + Component remove = formatIconButton( + MessageUtils.DENY, + null, + NamedTextColor.RED, + "/poll remove " + action.getValue(), + "Click to remove"); TextComponent.Builder line = text(); diff --git a/core/src/main/java/dev/pgm/community/polls/PollEditAlerter.java b/core/src/main/java/dev/pgm/community/polls/PollEditAlerter.java index 99b8f9a4..bd9f5435 100644 --- a/core/src/main/java/dev/pgm/community/polls/PollEditAlerter.java +++ b/core/src/main/java/dev/pgm/community/polls/PollEditAlerter.java @@ -22,8 +22,8 @@ public interface PollEditAlerter { - static final NamedTextColor CATEGORY_COLOR = NamedTextColor.DARK_AQUA; - static final Component RESET_MSG = text("value has been reset", NamedTextColor.YELLOW); + NamedTextColor CATEGORY_COLOR = NamedTextColor.DARK_AQUA; + Component RESET_MSG = text("value has been reset", NamedTextColor.YELLOW); default void broadcastChange(CommandAudience sender, String announcement) { broadcastChange(sender, announcement, null, true); @@ -40,28 +40,24 @@ default void broadcastChange( if (value != null) { valueComponent = text(value.toString()); - if (value instanceof Duration) { - Duration time = (Duration) value; + if (value instanceof Duration time) { valueComponent = TemporalComponent.duration(time, NamedTextColor.AQUA); } - if (value instanceof MapInfo) { - MapInfo map = (MapInfo) value; + if (value instanceof MapInfo map) { valueComponent = map.getStyledName(MapNameStyle.COLOR); } - if (value instanceof UUID) { - UUID playerId = (UUID) value; + if (value instanceof UUID playerId) { valueComponent = player(playerId, NameStyle.FANCY); } - if (value instanceof PollThreshold) { - PollThreshold threshold = (PollThreshold) value; + if (value instanceof PollThreshold threshold) { valueComponent = threshold.toComponent(); } - if (value instanceof Component) { - valueComponent = (Component) value; + if (value instanceof Component component) { + valueComponent = component; } } @@ -69,11 +65,10 @@ default void broadcastChange( sender = new CommandAudience(Bukkit.getConsoleSender()); } - TextComponent.Builder broadcast = - text() - .append(sender.getStyledName()) - .append(BroadcastUtils.BROADCAST_DIV) - .append(text(category, CATEGORY_COLOR)); + TextComponent.Builder broadcast = text() + .append(sender.getStyledName()) + .append(BroadcastUtils.BROADCAST_DIV) + .append(text(category, CATEGORY_COLOR)); if (!empty) { broadcast.append(BroadcastUtils.BROADCAST_DIV).append(valueComponent); diff --git a/core/src/main/java/dev/pgm/community/polls/ending/types/CommandEndAction.java b/core/src/main/java/dev/pgm/community/polls/ending/types/CommandEndAction.java index fc18a167..e9b6dc05 100644 --- a/core/src/main/java/dev/pgm/community/polls/ending/types/CommandEndAction.java +++ b/core/src/main/java/dev/pgm/community/polls/ending/types/CommandEndAction.java @@ -9,13 +9,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class CommandEndAction implements EndAction { - - private final String command; - - public CommandEndAction(String command) { - this.command = command; - } +public record CommandEndAction(String command) implements EndAction { public String getBukkitCommand() { return command.startsWith("/") ? command.substring(1) : command; diff --git a/core/src/main/java/dev/pgm/community/polls/ending/types/KickPlayerEndAction.java b/core/src/main/java/dev/pgm/community/polls/ending/types/KickPlayerEndAction.java index eff9a07c..d6315f29 100644 --- a/core/src/main/java/dev/pgm/community/polls/ending/types/KickPlayerEndAction.java +++ b/core/src/main/java/dev/pgm/community/polls/ending/types/KickPlayerEndAction.java @@ -17,15 +17,9 @@ import tc.oc.pgm.api.integration.Integration; import tc.oc.pgm.util.named.NameStyle; -public class KickPlayerEndAction implements EndAction { +public record KickPlayerEndAction(UUID targetId) implements EndAction { - private static int DELAY_SECONDS = 2; - - private final UUID targetId; - - public KickPlayerEndAction(UUID targetId) { - this.targetId = targetId; - } + private static final int DELAY_SECONDS = 2; public UUID getPlayerId() { return targetId; @@ -53,14 +47,10 @@ public void execute(Player creator) { .getFeatures() .getUsers() .renderUsername(targetId, NameStyle.FANCY) - .thenAcceptAsync( - playerName -> { - BroadcastUtils.sendGlobalMessage( - text() - .append(playerName) - .append(text(" is no longer online!", NamedTextColor.YELLOW)) - .build()); - }); + .thenAcceptAsync(playerName -> BroadcastUtils.sendGlobalMessage(text() + .append(playerName) + .append(text(" is no longer online!", NamedTextColor.YELLOW)) + .build())); return; } @@ -70,11 +60,10 @@ public void execute(Player creator) { Community.get(), () -> { // Send broadcast before kick, so name renders properly - BroadcastUtils.sendGlobalMessage( - text() - .append(player(target, NameStyle.FANCY)) - .append(text(" has been kicked!", NamedTextColor.RED, TextDecoration.BOLD)) - .build()); + BroadcastUtils.sendGlobalMessage(text() + .append(player(target, NameStyle.FANCY)) + .append(text(" has been kicked!", NamedTextColor.RED, TextDecoration.BOLD)) + .build()); target.kickPlayer(colorize("&4&lYou have been voted off the server!")); }, 20L * DELAY_SECONDS); @@ -83,9 +72,8 @@ public void execute(Player creator) { @Override public Component getName() { return text("Kick Player") - .hoverEvent( - HoverEvent.showText( - text("Kicks the target player upon completion", NamedTextColor.GRAY))); + .hoverEvent(HoverEvent.showText( + text("Kicks the target player upon completion", NamedTextColor.GRAY))); } @Override diff --git a/core/src/main/java/dev/pgm/community/polls/ending/types/MapEndAction.java b/core/src/main/java/dev/pgm/community/polls/ending/types/MapEndAction.java index 5379f009..033e824a 100644 --- a/core/src/main/java/dev/pgm/community/polls/ending/types/MapEndAction.java +++ b/core/src/main/java/dev/pgm/community/polls/ending/types/MapEndAction.java @@ -18,17 +18,7 @@ import tc.oc.pgm.util.named.MapNameStyle; import tc.oc.pgm.util.text.TextFormatter; -public class MapEndAction implements EndAction { - - private MapInfo map; - - public MapEndAction(MapInfo map) { - this.map = map; - } - - public MapInfo getMap() { - return map; - } +public record MapEndAction(MapInfo map) implements EndAction { @Override public String getValue() { @@ -72,19 +62,17 @@ private Component getFancyMapName() { } else if (!gamemodes.isEmpty()) { boolean acronyms = gamemodes.size() > 1; hover - .append( - TextFormatter.list( - gamemodes.stream() - .map(gm -> text(acronyms ? gm.getAcronym() : gm.getFullName())) - .collect(Collectors.toList()), - NamedTextColor.AQUA)) + .append(TextFormatter.list( + gamemodes.stream() + .map(gm -> text(acronyms ? gm.getAcronym() : gm.getFullName())) + .collect(Collectors.toList()), + NamedTextColor.AQUA)) .appendNewline(); } - hover.append( - text( - map.getTags().stream().map(MapTag::toString).collect(Collectors.joining(" ")), - NamedTextColor.YELLOW)); + hover.append(text( + map.getTags().stream().map(MapTag::toString).collect(Collectors.joining(" ")), + NamedTextColor.YELLOW)); return text() .append(map.getStyledName(MapNameStyle.PLAIN).color(NamedTextColor.AQUA)) @@ -105,12 +93,12 @@ public Component getDefaultQuestion() { @Override public boolean equals(Object other) { - if (!(other instanceof MapEndAction)) return false; - return ((MapEndAction) other).getMap().equals(getMap()); + if (!(other instanceof MapEndAction action)) return false; + return action.map().equals(map()); } @Override public int hashCode() { - return getMap().hashCode(); + return map().hashCode(); } } diff --git a/core/src/main/java/dev/pgm/community/polls/ending/types/NullEndAction.java b/core/src/main/java/dev/pgm/community/polls/ending/types/NullEndAction.java index edba881d..0a15e3bd 100644 --- a/core/src/main/java/dev/pgm/community/polls/ending/types/NullEndAction.java +++ b/core/src/main/java/dev/pgm/community/polls/ending/types/NullEndAction.java @@ -8,28 +8,16 @@ import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; -public class NullEndAction implements EndAction { - - private final String option; +public record NullEndAction(String option) implements EndAction { public NullEndAction() { this(null); } - public NullEndAction(String option) { - this.option = option; - } - - @Nullable - public String getOption() { - return option; - } - @Override public String getValue() { - return getOption(); + return option(); } @Override @@ -70,16 +58,15 @@ public Component getDefaultQuestion() { @Override public boolean equals(Object other) { - if (!(other instanceof NullEndAction)) return false; - NullEndAction otherAction = ((NullEndAction) other); - if (otherAction.getOption() != null) { - return otherAction.getOption().equalsIgnoreCase(getOption()); + if (!(other instanceof NullEndAction(String otherAction))) return false; + if (otherAction != null) { + return otherAction.equalsIgnoreCase(option()); } return true; } @Override public int hashCode() { - return Objects.hash(getOption()); + return Objects.hash(option()); } } diff --git a/core/src/main/java/dev/pgm/community/polls/events/PollVoteEvent.java b/core/src/main/java/dev/pgm/community/polls/events/PollVoteEvent.java index 87cec8d0..582caade 100644 --- a/core/src/main/java/dev/pgm/community/polls/events/PollVoteEvent.java +++ b/core/src/main/java/dev/pgm/community/polls/events/PollVoteEvent.java @@ -5,7 +5,7 @@ public class PollVoteEvent extends PollEvent { - private Player player; + private final Player player; public PollVoteEvent(Player player, Poll poll) { super(poll); diff --git a/core/src/main/java/dev/pgm/community/polls/response/SingleChoiceResponseConverter.java b/core/src/main/java/dev/pgm/community/polls/response/SingleChoiceResponseConverter.java index b7a6b025..d5c5aaf8 100644 --- a/core/src/main/java/dev/pgm/community/polls/response/SingleChoiceResponseConverter.java +++ b/core/src/main/java/dev/pgm/community/polls/response/SingleChoiceResponseConverter.java @@ -7,25 +7,12 @@ public class SingleChoiceResponseConverter { public static boolean convert(String input) { String cleanInput = input.trim().toLowerCase(); - switch (cleanInput) { - case "true": - case "yes": - case "y": - case "affirmative": - case "ok": - case "okay": - case "yeah": - return true; - case "false": - case "no": - case "n": - case "negative": - case "nope": - case "not okay": - return false; - default: + return switch (cleanInput) { + case "true", "yes", "y", "affirmative", "ok", "okay", "yeah" -> true; + case "false", "no", "n", "negative", "nope", "not okay" -> false; + default -> throw exception( "Invalid input: '" + input + "'! Please provide a valid 'yes' or 'no' response."); - } + }; } } diff --git a/core/src/main/java/dev/pgm/community/requests/MapCooldown.java b/core/src/main/java/dev/pgm/community/requests/MapCooldown.java index 252fbcd3..b3c86764 100644 --- a/core/src/main/java/dev/pgm/community/requests/MapCooldown.java +++ b/core/src/main/java/dev/pgm/community/requests/MapCooldown.java @@ -4,11 +4,9 @@ import java.time.Instant; import tc.oc.pgm.util.TimeUtils; -public class MapCooldown { - private final Instant endsAt; - - public MapCooldown(Duration cooldown) { - this.endsAt = Instant.now().plus(cooldown); +public record MapCooldown(Instant endsAt) { + public MapCooldown(Duration endsAt) { + this(Instant.now().plus(endsAt)); } public boolean hasExpired() { diff --git a/core/src/main/java/dev/pgm/community/requests/SponsorRequest.java b/core/src/main/java/dev/pgm/community/requests/SponsorRequest.java index e77b24da..2d1ef3f5 100644 --- a/core/src/main/java/dev/pgm/community/requests/SponsorRequest.java +++ b/core/src/main/java/dev/pgm/community/requests/SponsorRequest.java @@ -3,27 +3,4 @@ import java.util.UUID; import tc.oc.pgm.api.map.MapInfo; -public class SponsorRequest { - - private UUID playerId; - private MapInfo map; - private boolean canRefund; - - public SponsorRequest(UUID playerId, MapInfo map, boolean canRefund) { - this.playerId = playerId; - this.map = map; - this.canRefund = canRefund; - } - - public UUID getPlayerId() { - return playerId; - } - - public MapInfo getMap() { - return map; - } - - public boolean canRefund() { - return canRefund; - } -} +public record SponsorRequest(UUID playerId, MapInfo map, boolean canRefund) {} diff --git a/core/src/main/java/dev/pgm/community/requests/commands/sponsor/SponsorCommands.java b/core/src/main/java/dev/pgm/community/requests/commands/sponsor/SponsorCommands.java index 499d1471..45760a49 100644 --- a/core/src/main/java/dev/pgm/community/requests/commands/sponsor/SponsorCommands.java +++ b/core/src/main/java/dev/pgm/community/requests/commands/sponsor/SponsorCommands.java @@ -144,7 +144,7 @@ public void info(CommandAudience audience, Player player) { audience.sendMessage(current); audience.sendMessage(text() .append(text(" - ", NamedTextColor.YELLOW)) - .append(sponsor.getMap().getStyledName(MapNameStyle.COLOR_WITH_AUTHORS)) + .append(sponsor.map().getStyledName(MapNameStyle.COLOR_WITH_AUTHORS)) .build()); audience.sendMessage(queue); }); @@ -238,9 +238,9 @@ public void viewMapList( .append(text("Current online player range", NamedTextColor.DARK_AQUA)) .appendSpace() .append(text("(", NamedTextColor.GRAY)) - .append(text(bounds.getLowerBound(), NamedTextColor.GOLD)) + .append(text(bounds.lowerBound(), NamedTextColor.GOLD)) .append(text("-", NamedTextColor.GRAY)) - .append(text(bounds.getUpperBound(), NamedTextColor.GOLD)) + .append(text(bounds.upperBound(), NamedTextColor.GOLD)) .append(text(")", NamedTextColor.GRAY)) .build(); Component title = text() @@ -359,17 +359,17 @@ public void viewQueue(CommandAudience audience, @Argument("page") @Default("1") new PaginatedComponentResults(formattedTitle, resultsPerPage) { @Override public Component format(SponsorRequest sponsor, int index) { - MapInfo map = sponsor.getMap(); + MapInfo map = sponsor.map(); Component mapName = map.getStyledName(MapNameStyle.COLOR) .clickEvent(ClickEvent.runCommand("/map " + map.getName())) .hoverEvent(HoverEvent.showText(translatable( "command.maps.hover", NamedTextColor.GRAY, map.getStyledName(MapNameStyle.COLOR)))); - Component playerName = VisibilityUtils.isDisguised(sponsor.getPlayerId()) + Component playerName = VisibilityUtils.isDisguised(sponsor.playerId()) ? empty() : text() .append(BroadcastUtils.BROADCAST_DIV) - .append(player(sponsor.getPlayerId(), NameStyle.FANCY)) + .append(player(sponsor.playerId(), NameStyle.FANCY)) .build(); return text() @@ -404,19 +404,19 @@ private Component renderExtraInfo(Player player, RequestProfile profile) { .build(); } - if (info.getDuration() != null) { + if (info.timeLeft() != null) { boolean canClaim = profile.getSponsorTokens() < config.getMaxTokens(); if (canClaim) { return text() .append(text(" | ")) .append(text("Next token (")) - .append(text("+" + info.getAmount(), NamedTextColor.GREEN, TextDecoration.BOLD)) + .append(text("+" + info.amount(), NamedTextColor.GREEN, TextDecoration.BOLD)) .append(text("): ")) .append( - info.getDuration().isNegative() + info.timeLeft().isNegative() ? text("Now! Please rejoin") - : duration(info.getDuration(), NamedTextColor.YELLOW)) + : duration(info.timeLeft(), NamedTextColor.YELLOW)) .build(); } else { return text() diff --git a/core/src/main/java/dev/pgm/community/requests/commands/sponsor/TokenCommands.java b/core/src/main/java/dev/pgm/community/requests/commands/sponsor/TokenCommands.java index cf365652..074987b6 100644 --- a/core/src/main/java/dev/pgm/community/requests/commands/sponsor/TokenCommands.java +++ b/core/src/main/java/dev/pgm/community/requests/commands/sponsor/TokenCommands.java @@ -109,23 +109,7 @@ private void sendTokenBalanceMessage(Audience viewer, Component name, int tokens .build()); } - public static class TokenRefreshAmount { - private Duration timeLeft; - private int amount; - - public TokenRefreshAmount(Duration timeLeft, int amount) { - this.timeLeft = timeLeft; - this.amount = amount; - } - - public Duration getDuration() { - return timeLeft; - } - - public int getAmount() { - return amount; - } - } + public record TokenRefreshAmount(Duration timeLeft, int amount) {} public static TokenRefreshAmount getTimeLeft( Player player, Instant lastRefresh, RequestFeature requests) { @@ -152,13 +136,13 @@ private void sendRefreshDuration(Audience viewer, Player player, RequestProfile } TokenRefreshAmount info = getTimeLeft(player, profile.getLastTokenRefreshTime(), requests); - if (info.getDuration() != null) { + if (info.timeLeft() != null) { if (profile.getSponsorTokens() >= ((RequestConfig) requests.getConfig()).getMaxTokens()) { viewer.sendMessage(text("Spend some tokens in order to claim more", NamedTextColor.GRAY)); return; } - if (info.getDuration().isNegative()) { + if (info.timeLeft().isNegative()) { viewer.sendMessage( text("Token refresh ready! Please rejoin the server to claim", NamedTextColor.GRAY)); return; @@ -168,9 +152,9 @@ private void sendRefreshDuration(Audience viewer, Player player, RequestProfile .append(text("- ", NamedTextColor.YELLOW)) .append(text("Next token (")) .append(text("+", NamedTextColor.GREEN, TextDecoration.BOLD)) - .append(text(info.getAmount(), NamedTextColor.GREEN, TextDecoration.BOLD)) + .append(text(info.amount(), NamedTextColor.GREEN, TextDecoration.BOLD)) .append(text(") in ")) - .append(duration(info.getDuration(), NamedTextColor.YELLOW)) + .append(duration(info.timeLeft(), NamedTextColor.YELLOW)) .color(NamedTextColor.GRAY) .build()); } diff --git a/core/src/main/java/dev/pgm/community/requests/feature/RequestFeature.java b/core/src/main/java/dev/pgm/community/requests/feature/RequestFeature.java index 32558e62..30140b2d 100644 --- a/core/src/main/java/dev/pgm/community/requests/feature/RequestFeature.java +++ b/core/src/main/java/dev/pgm/community/requests/feature/RequestFeature.java @@ -19,14 +19,14 @@ import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerJoinEvent; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.api.map.MapInfo; public interface RequestFeature extends Feature { - static final String TOKEN_SYMBOL = "✪"; - static final Component TOKEN = text(TOKEN_SYMBOL, NamedTextColor.GOLD); - static final Component SPONSOR = text("+", NamedTextColor.GREEN, TextDecoration.BOLD); + String TOKEN_SYMBOL = "✪"; + Component TOKEN = text(TOKEN_SYMBOL, NamedTextColor.GOLD); + Component SPONSOR = text("+", NamedTextColor.GREEN, TextDecoration.BOLD); /** * Submit a map request diff --git a/core/src/main/java/dev/pgm/community/requests/feature/SponsorVotingBookCreator.java b/core/src/main/java/dev/pgm/community/requests/feature/SponsorVotingBookCreator.java index b8c2e55c..3b447bdf 100644 --- a/core/src/main/java/dev/pgm/community/requests/feature/SponsorVotingBookCreator.java +++ b/core/src/main/java/dev/pgm/community/requests/feature/SponsorVotingBookCreator.java @@ -37,13 +37,13 @@ public ComponentLike getHover(MatchPlayer viewer, MapInfo map, boolean voted) { // Add sponsor hover if available SponsorRequest sponsor = manager.getCurrentSponsor(); - if (sponsor != null && sponsor.getMap().equals(map)) { + if (sponsor != null && sponsor.map().equals(map)) { return text() .append(originalHover) .append(newline()) .append(text("+ ", NamedTextColor.YELLOW, TextDecoration.BOLD)) .append(text("Sponsored by ", NamedTextColor.GRAY)) - .append(player(sponsor.getPlayerId(), NameStyle.FANCY)) + .append(player(sponsor.playerId(), NameStyle.FANCY)) .build(); } @@ -136,7 +136,7 @@ private Component getVoteMultiplierComponent(int multiplier) { for (Rank rank : Community.get().getServerConfig().getRanksConfig().getRanks()) { Component rankComponent = text() - .append(text(rank.getPrefix() + " " + rank.getName(), rank.getTextColor())) + .append(text(rank.prefix() + " " + rank.name(), rank.getTextColor())) .append(text(" has a ", NamedTextColor.GRAY)) .append(text(rank.getVoteMultiplier() + "x", rank.getTextColor(), TextDecoration.BOLD)) .append(text(" multiplier", NamedTextColor.GRAY)) diff --git a/core/src/main/java/dev/pgm/community/requests/feature/types/RequestFeatureCore.java b/core/src/main/java/dev/pgm/community/requests/feature/types/RequestFeatureCore.java index 57bf21b9..a13d52fb 100644 --- a/core/src/main/java/dev/pgm/community/requests/feature/types/RequestFeatureCore.java +++ b/core/src/main/java/dev/pgm/community/requests/feature/types/RequestFeatureCore.java @@ -35,8 +35,16 @@ import dev.pgm.community.utils.VisibilityUtils; import java.time.Duration; import java.time.Instant; -import java.util.*; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.Queue; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; @@ -383,21 +391,21 @@ public void onMatchEnd(MatchFinishEvent event) { if (nextRequest == null) return; // Notify PGM of the sponsored map and minimum cooldown - options.addMap(nextRequest.getMap(), nextRequest.getPlayerId()); - sponsor.startNewMapCooldown(nextRequest.getMap(), Duration.ZERO); + options.addMap(nextRequest.map(), nextRequest.playerId()); + sponsor.startNewMapCooldown(nextRequest.map(), Duration.ZERO); // Track the current sponsor sponsor.setCurrentSponsor(nextRequest); // Update profile - getRequestProfile(nextRequest.getPlayerId()).thenAcceptAsync(profile -> { + getRequestProfile(nextRequest.playerId()).thenAcceptAsync(profile -> { // Update RequestProfile with sponsor map info - profile.sponsor(nextRequest.getMap()); + profile.sponsor(nextRequest.map()); update(profile); }); // Alert online player if their sponsor request has been processed - sponsor.alertRequesterToConfirmation(nextRequest.getPlayerId()); + sponsor.alertRequesterToConfirmation(nextRequest.playerId()); }, 1, TimeUnit.SECONDS); @@ -411,11 +419,11 @@ public void onVoteEnd(MatchVoteFinishEvent event) { if (currentSponsor != null) { - Player player = Bukkit.getPlayer(currentSponsor.getPlayerId()); + Player player = Bukkit.getPlayer(currentSponsor.playerId()); // Same map = winner, refund the token even if offline - if (currentSponsor.getMap().equals(event.getPickedMap()) && currentSponsor.canRefund()) { - getRequestProfile(currentSponsor.getPlayerId()).thenAcceptAsync(profile -> { + if (currentSponsor.map().equals(event.getPickedMap()) && currentSponsor.canRefund()) { + getRequestProfile(currentSponsor.playerId()).thenAcceptAsync(profile -> { profile.giveSponsorToken(1); update(profile); @@ -439,16 +447,16 @@ public void onMatchJoinMessage(PlayerJoinMatchEvent event) { MapInfo map = event.getMatch().getMap(); if (getCurrentSponsor() == null) return; - if (VisibilityUtils.isDisguised(getCurrentSponsor().getPlayerId())) return; - if (!getCurrentSponsor().getMap().equals(map)) return; + if (VisibilityUtils.isDisguised(getCurrentSponsor().playerId())) return; + if (!getCurrentSponsor().map().equals(map)) return; event.getExtraLines().add(empty()); event .getExtraLines() - .add(SponsorComponents.getSponsoredJoinMessage(getCurrentSponsor().getPlayerId())); + .add(SponsorComponents.getSponsoredJoinMessage(getCurrentSponsor().playerId())); } - private Cache voteConfirm = + private final Cache voteConfirm = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build(); private static final List BLOCKED_COMMANDS = @@ -500,7 +508,7 @@ public SponsorRequest getCurrentSponsor() { @Override public boolean cancelSponsorRequest(UUID playerId) { - return this.sponsor.getSponsorQueue().removeIf(s -> s.getPlayerId().equals(playerId)); + return this.sponsor.getSponsorQueue().removeIf(s -> s.playerId().equals(playerId)); } @Override @@ -533,7 +541,7 @@ public Queue getSponsorQueue() { @Override public Optional getPendingSponsor(UUID playerId) { return this.sponsor.getSponsorQueue().stream() - .filter(sr -> sr.getPlayerId().equals(playerId)) + .filter(sr -> sr.playerId().equals(playerId)) .findAny(); } @@ -546,13 +554,13 @@ private void removeOfflineSponsors() { Iterator iterator = sponsor.getSponsorQueue().iterator(); while (iterator.hasNext()) { SponsorRequest request = iterator.next(); - Player player = Bukkit.getPlayer(request.getPlayerId()); + Player player = Bukkit.getPlayer(request.playerId()); if (player == null || !player.isOnline()) { iterator.remove(); - logger.info("Removed offline sponsor request:" + request.getPlayerId() + " for map " - + request.getMap().getName()); + logger.info("Removed offline sponsor request:" + request.playerId() + " for map " + + request.map().getName()); } } } diff --git a/core/src/main/java/dev/pgm/community/requests/services/RequestQuery.java b/core/src/main/java/dev/pgm/community/requests/services/RequestQuery.java index a0579dcf..d7bf265c 100644 --- a/core/src/main/java/dev/pgm/community/requests/services/RequestQuery.java +++ b/core/src/main/java/dev/pgm/community/requests/services/RequestQuery.java @@ -2,17 +2,15 @@ public interface RequestQuery { - static final String TABLE_FIELDS = + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, last_request_time LONG, last_request_map VARCHAR(255), last_sponsor_time LONG, last_sponsor_map VARCHAR(255), tokens INT, last_token_refresh LONG, super_votes INT, last_super_vote LONG)"; - static final String TABLE_NAME = "requests"; + String TABLE_NAME = "requests"; - static final String INSERT_REQUESTS_QUERY = - "INSERT INTO " + TABLE_NAME + " VALUES (?,?,?,?,?,?,?,?,?)"; + String INSERT_REQUESTS_QUERY = "INSERT INTO " + TABLE_NAME + " VALUES (?,?,?,?,?,?,?,?,?)"; - static final String UPDATE_REQUEST_QUERY = "UPDATE " + String UPDATE_REQUEST_QUERY = "UPDATE " + TABLE_NAME + " SET last_request_time = ?, last_request_map = ?, last_sponsor_time = ?, last_sponsor_map = ?, tokens = ?, last_token_refresh = ?, super_votes = ?, last_super_vote = ? WHERE id = ? "; - static final String SELECT_REQUEST_QUERY = - "SELECT * from " + TABLE_NAME + " WHERE id = ? LIMIT 1"; + String SELECT_REQUEST_QUERY = "SELECT * from " + TABLE_NAME + " WHERE id = ? LIMIT 1"; } diff --git a/core/src/main/java/dev/pgm/community/requests/services/SQLRequestService.java b/core/src/main/java/dev/pgm/community/requests/services/SQLRequestService.java index bdf35198..c56d743a 100644 --- a/core/src/main/java/dev/pgm/community/requests/services/SQLRequestService.java +++ b/core/src/main/java/dev/pgm/community/requests/services/SQLRequestService.java @@ -11,22 +11,17 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class SQLRequestService extends SQLFeatureBase implements RequestQuery { - private LoadingCache profileCache; + private final LoadingCache profileCache; public SQLRequestService() { super(TABLE_NAME, TABLE_FIELDS); - this.profileCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public UserRequestData load(UUID key) throws Exception { - return new UserRequestData(key); - } - }); + this.profileCache = CacheBuilder.newBuilder().build(CacheLoader.from(UserRequestData::new)); } public CompletableFuture login(UUID playerId) { @@ -143,9 +138,9 @@ private long convertTime(Instant time) { return time.toEpochMilli(); } - private class UserRequestData { + private static class UserRequestData { - private UUID playerId; + private final UUID playerId; private RequestProfile profile; private boolean loaded; diff --git a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorComponents.java b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorComponents.java index 69d6b8c5..e06b8d05 100644 --- a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorComponents.java +++ b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorComponents.java @@ -28,9 +28,9 @@ public class SponsorComponents { public static ComponentLike getMapSizeBoundsComponent(MapSizeBounds bounds) { return text("(", NamedTextColor.YELLOW) - .append(text(bounds.getLowerBound(), NamedTextColor.GOLD)) + .append(text(bounds.lowerBound(), NamedTextColor.GOLD)) .append(text("-")) - .append(text(bounds.getUpperBound(), NamedTextColor.GOLD)) + .append(text(bounds.upperBound(), NamedTextColor.GOLD)) .append(text(")")); } diff --git a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java index 79aedfde..34114320 100644 --- a/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java +++ b/core/src/main/java/dev/pgm/community/requests/sponsor/SponsorManager.java @@ -66,11 +66,11 @@ public LinkedList getSponsorQueue() { } public boolean isQueued(UUID playerId) { - return getSponsorQueue().stream().anyMatch(sr -> sr.getPlayerId().equals(playerId)); + return getSponsorQueue().stream().anyMatch(sr -> sr.playerId().equals(playerId)); } public boolean isMapQueued(MapInfo map) { - return getSponsorQueue().stream().anyMatch(sr -> sr.getMap().equals(map)); + return getSponsorQueue().stream().anyMatch(sr -> sr.map().equals(map)); } public boolean isQueueOpen() { @@ -104,7 +104,7 @@ public MapSizeBounds getCurrentMapSizeBounds() { public SponsorRequest getNextSponsor() { for (Iterator it = sponsors.iterator(); it.hasNext(); ) { SponsorRequest request = it.next(); - if (!isMapSizeAllowed(request.getMap())) { + if (!isMapSizeAllowed(request.map())) { sendWrongSizeMapError(request); continue; } @@ -188,12 +188,12 @@ public boolean isMapSizeAllowed(MapInfo map) { } private void sendWrongSizeMapError(SponsorRequest request) { - Player player = Bukkit.getPlayer(request.getPlayerId()); + Player player = Bukkit.getPlayer(request.playerId()); if (player == null || !player.isOnline()) return; Audience viewer = Audience.get(player); viewer.sendWarning(SponsorComponents.getWrongSizeMapError( - request.getMap().getStyledName(MapNameStyle.COLOR), getCurrentMapSizeBounds())); + request.map().getStyledName(MapNameStyle.COLOR), getCurrentMapSizeBounds())); } private void sendDelayedTokenRefreshMessage(Player player, int amount, boolean daily, int total) { diff --git a/core/src/main/java/dev/pgm/community/requests/supervotes/SuperVoteManager.java b/core/src/main/java/dev/pgm/community/requests/supervotes/SuperVoteManager.java index bdf57a79..7873a1bc 100644 --- a/core/src/main/java/dev/pgm/community/requests/supervotes/SuperVoteManager.java +++ b/core/src/main/java/dev/pgm/community/requests/supervotes/SuperVoteManager.java @@ -121,13 +121,9 @@ public boolean isActive(Player player) { return this.activeSuperVoters.contains(player.getUniqueId()); } - private class StoredPermission { - private PermissionAttachment attachment; - private String permission; - - public StoredPermission(Player player, String permission) { - this.attachment = player.addAttachment(Community.get()); - this.permission = permission; + private record StoredPermission(PermissionAttachment attachment, String permission) { + private StoredPermission(Player player, String permission) { + this(player.addAttachment(Community.get()), permission); } public void enable() { @@ -138,10 +134,6 @@ public void disable(Player player) { attachment.setPermission(permission, false); player.removeAttachment(attachment); } - - public String getPermission() { - return permission; - } } public void sendSuperVoterActivationFeedback(Player player) { diff --git a/core/src/main/java/dev/pgm/community/sessions/SessionQuery.java b/core/src/main/java/dev/pgm/community/sessions/SessionQuery.java index b0ccb578..528ad671 100644 --- a/core/src/main/java/dev/pgm/community/sessions/SessionQuery.java +++ b/core/src/main/java/dev/pgm/community/sessions/SessionQuery.java @@ -2,30 +2,17 @@ import java.util.UUID; -public class SessionQuery { - - private final UUID playerId; // the UUID of the player - private final boolean ignoreDisguised; // do we want to find a disguised session? - - public SessionQuery(UUID playerId, boolean ignoreDisguised) { - this.playerId = playerId; - this.ignoreDisguised = ignoreDisguised; - } - - public UUID getPlayerId() { - return playerId; - } - - public boolean ignoreDisguised() { - return ignoreDisguised; - } +/** + * @param playerId the UUID of the player + * @param ignoreDisguised do we want to find a disguised session? + */ +public record SessionQuery(UUID playerId, boolean ignoreDisguised) { @Override public boolean equals(Object obj) { - if (!(obj instanceof SessionQuery)) return false; - SessionQuery other = (SessionQuery) obj; + if (!(obj instanceof SessionQuery(UUID id, boolean disguised))) return false; - return other.playerId.equals(playerId) && other.ignoreDisguised == ignoreDisguised; + return id.equals(playerId) && disguised == ignoreDisguised; } @Override diff --git a/core/src/main/java/dev/pgm/community/sessions/VanishedSessionListener.java b/core/src/main/java/dev/pgm/community/sessions/VanishedSessionListener.java index 83ad1f96..79957430 100644 --- a/core/src/main/java/dev/pgm/community/sessions/VanishedSessionListener.java +++ b/core/src/main/java/dev/pgm/community/sessions/VanishedSessionListener.java @@ -6,25 +6,16 @@ import org.bukkit.event.Listener; import tc.oc.pgm.api.player.event.PlayerVanishEvent; -public class VanishedSessionListener implements Listener { - - private final SessionFeature sessions; - - public VanishedSessionListener(SessionFeature sessions) { - this.sessions = sessions; - } +public record VanishedSessionListener(SessionFeature sessions) implements Listener { @EventHandler public void onVanish(PlayerVanishEvent event) { Player player = event.getPlayer().getBukkit(); if (sessions.isPlayerJoining(player)) return; - sessions - .getLatestSession(player.getUniqueId(), false) - .thenAcceptAsync( - session -> { - sessions.endSession(session); - sessions.startSession(player); - }); + sessions.getLatestSession(player.getUniqueId(), false).thenAcceptAsync(session -> { + sessions.endSession(session); + sessions.startSession(player); + }); } } diff --git a/core/src/main/java/dev/pgm/community/sessions/services/SQLSessionService.java b/core/src/main/java/dev/pgm/community/sessions/services/SQLSessionService.java index c6161519..fb1bc5aa 100644 --- a/core/src/main/java/dev/pgm/community/sessions/services/SQLSessionService.java +++ b/core/src/main/java/dev/pgm/community/sessions/services/SQLSessionService.java @@ -13,7 +13,6 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import org.jetbrains.annotations.NotNull; public class SQLSessionService extends SQLFeatureBase implements SessionDataQuery { @@ -24,12 +23,7 @@ public class SQLSessionService extends SQLFeatureBase public SQLSessionService() { super(TABLE_NAME, TABLE_FIELDS); this.sessionCache = CacheBuilder.newBuilder() - .build(new CacheLoader() { - @Override - public SessionData load(@NotNull SessionQuery key) { - return new SessionData(key.getPlayerId(), key.ignoreDisguised()); - } - }); + .build(CacheLoader.from(key -> new SessionData(key.playerId(), key.ignoreDisguised()))); this.upsertLatestSessionQuery = DatabaseExecutor.getDialect().upsertLatestSessionQuery(); } @@ -146,7 +140,7 @@ public CompletableFuture query(SessionQuery target) { return new Session( UUID.fromString(id), UUID.fromString(player), disguised, server, start, end); }, - target.getPlayerId().toString(), + target.playerId().toString(), target.ignoreDisguised()) .thenApplyAsync(result -> { if (result != null) { @@ -157,7 +151,7 @@ public CompletableFuture query(SessionQuery target) { } } - private class SessionData { + private static class SessionData { private final UUID playerId; private final boolean ignoreDisguised; diff --git a/core/src/main/java/dev/pgm/community/sessions/services/SessionDataQuery.java b/core/src/main/java/dev/pgm/community/sessions/services/SessionDataQuery.java index 9aa695a1..8038ac4b 100644 --- a/core/src/main/java/dev/pgm/community/sessions/services/SessionDataQuery.java +++ b/core/src/main/java/dev/pgm/community/sessions/services/SessionDataQuery.java @@ -2,29 +2,28 @@ public interface SessionDataQuery { - static final String TABLE_NAME = "sessions"; - static final String TABLE_FIELDS = + String TABLE_NAME = "sessions"; + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, player VARCHAR(36), disguised BOOL, server VARCHAR(32), start_time BIGINT, end_time BIGINT)"; - static final String INSERT_SESSION_QUERY = "INSERT INTO " + TABLE_NAME + String INSERT_SESSION_QUERY = "INSERT INTO " + TABLE_NAME + "(id, player, disguised, server, start_time, end_time) VALUES (?, ?, ?, ?, ?, ?)"; - static final String UPDATE_SESSION_ENDTIME_QUERY = - "UPDATE " + TABLE_NAME + " SET end_time = ? WHERE id = ?"; + String UPDATE_SESSION_ENDTIME_QUERY = "UPDATE " + TABLE_NAME + " SET end_time = ? WHERE id = ?"; - static final String UPDATE_ONGOING_SESSION_ENDING_QUERY = + String UPDATE_ONGOING_SESSION_ENDING_QUERY = "UPDATE " + TABLE_NAME + " SET end_time = ? WHERE server = ? AND end_time IS NULL"; - static final String LATEST_TABLE_NAME = "latest_sessions"; - static final String LATEST_TABLE_FIELDS = + String LATEST_TABLE_NAME = "latest_sessions"; + String LATEST_TABLE_FIELDS = "(player VARCHAR(36), ignore_disguised BOOL, session_id VARCHAR(36), disguised BOOL, server VARCHAR(32), start_time BIGINT, end_time BIGINT, PRIMARY KEY (player, ignore_disguised))"; - static final String SELECT_LATEST_SESSION_QUERY = + String SELECT_LATEST_SESSION_QUERY = "SELECT * FROM " + LATEST_TABLE_NAME + " WHERE player = ? AND ignore_disguised = ? LIMIT 1"; - static final String UPDATE_LATEST_ENDTIME_QUERY = + String UPDATE_LATEST_ENDTIME_QUERY = "UPDATE " + LATEST_TABLE_NAME + " SET end_time = ? WHERE session_id = ?"; - static final String UPDATE_LATEST_ONGOING_SESSION_ENDING_QUERY = + String UPDATE_LATEST_ONGOING_SESSION_ENDING_QUERY = "UPDATE " + LATEST_TABLE_NAME + " SET end_time = ? WHERE server = ? AND end_time IS NULL"; } diff --git a/core/src/main/java/dev/pgm/community/teleports/TeleportCommand.java b/core/src/main/java/dev/pgm/community/teleports/TeleportCommand.java index e8f05f80..b3e1a5bc 100644 --- a/core/src/main/java/dev/pgm/community/teleports/TeleportCommand.java +++ b/core/src/main/java/dev/pgm/community/teleports/TeleportCommand.java @@ -40,12 +40,12 @@ public void teleportCommand( public void teleportAll(CommandAudience viewer, @Argument("target") Player target) { PlayerSelection selection = getPlayers(viewer, "*"); - if (selection.getPlayers().isEmpty()) { + if (selection.players().isEmpty()) { selection.sendNoPlayerComponent(viewer); return; } - teleport.teleport(viewer, selection.getPlayers(), target, selection.getText()); + teleport.teleport(viewer, selection.players(), target, selection.getText()); } @Command("tpteam ") @@ -57,8 +57,10 @@ public void teleportTeam( team.getPlayers().stream().map(MatchPlayer::getBukkit).collect(Collectors.toSet()); if (players.isEmpty()) { - viewer.sendWarning( - text().append(team.getName()).append(text(" has no players to teleport")).build()); + viewer.sendWarning(text() + .append(team.getName()) + .append(text(" has no players to teleport")) + .build()); return; } @@ -85,7 +87,7 @@ public void teleportLocation( return; } - if (!viewer.isPlayer()) TextException.playerOnly(); + if (!viewer.isPlayer()) throw TextException.playerOnly(); teleport.teleport(viewer, viewer.getPlayer(), location); } diff --git a/core/src/main/java/dev/pgm/community/teleports/TeleportFeatureBase.java b/core/src/main/java/dev/pgm/community/teleports/TeleportFeatureBase.java index 45701c15..1112e705 100644 --- a/core/src/main/java/dev/pgm/community/teleports/TeleportFeatureBase.java +++ b/core/src/main/java/dev/pgm/community/teleports/TeleportFeatureBase.java @@ -6,6 +6,7 @@ import dev.pgm.community.feature.FeatureBase; import dev.pgm.community.utils.CommandAudience; import dev.pgm.community.utils.Sounds; +import java.util.Objects; import java.util.logging.Logger; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -32,7 +33,8 @@ public TeleportConfig getTeleportConfig() { public void teleport( CommandAudience sender, Player teleporter, Location target, Component message) { boolean involved = sender.isPlayer() - && (sender.getPlayer().equals(teleporter) || sender.getPlayer().equals(teleporter)); + && (Objects.equals(sender.getPlayer(), teleporter) + || Objects.equals(sender.getPlayer(), teleporter)); teleporter.teleport(target); if (message != null) { @@ -57,7 +59,8 @@ public void teleport( Component targetMsg, boolean senderFeedback) { boolean involved = sender.isPlayer() - && (sender.getPlayer().equals(teleporter) || sender.getPlayer().equals(target)); + && (Objects.equals(sender.getPlayer(), teleporter) + || Objects.equals(sender.getPlayer(), target)); teleporter.teleport(target); diff --git a/core/src/main/java/dev/pgm/community/text/UTF8Control.java b/core/src/main/java/dev/pgm/community/text/UTF8Control.java index fb087a88..a5b76b0e 100644 --- a/core/src/main/java/dev/pgm/community/text/UTF8Control.java +++ b/core/src/main/java/dev/pgm/community/text/UTF8Control.java @@ -6,7 +6,6 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.PropertyResourceBundle; @@ -54,6 +53,6 @@ public ResourceBundle newBundle( @Override public List getCandidateLocales(String name, Locale locale) { - return Arrays.asList(Locale.ROOT); + return List.of(Locale.ROOT); } } diff --git a/core/src/main/java/dev/pgm/community/users/UserProfileImpl.java b/core/src/main/java/dev/pgm/community/users/UserProfileImpl.java index 51eba932..77b27f04 100644 --- a/core/src/main/java/dev/pgm/community/users/UserProfileImpl.java +++ b/core/src/main/java/dev/pgm/community/users/UserProfileImpl.java @@ -9,7 +9,7 @@ public class UserProfileImpl implements UserProfile { - private UUID playerId; + private final UUID playerId; private String username; private Instant firstLogin; private int joinCount; diff --git a/core/src/main/java/dev/pgm/community/users/UserProfileWithSessionCallback.java b/core/src/main/java/dev/pgm/community/users/UserProfileWithSessionCallback.java index 7c7a133b..d5f74038 100644 --- a/core/src/main/java/dev/pgm/community/users/UserProfileWithSessionCallback.java +++ b/core/src/main/java/dev/pgm/community/users/UserProfileWithSessionCallback.java @@ -4,5 +4,5 @@ public interface UserProfileWithSessionCallback { - public void run(UserProfile profile, Session session); + void run(UserProfile profile, Session session); } diff --git a/core/src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java b/core/src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java index 0c783cf1..176cf67e 100644 --- a/core/src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java +++ b/core/src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java @@ -4,6 +4,7 @@ import static net.kyori.adventure.text.Component.newline; import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; +import static net.kyori.adventure.text.JoinConfiguration.separator; import static tc.oc.pgm.util.player.PlayerComponent.player; import static tc.oc.pgm.util.text.TemporalComponent.duration; import static tc.oc.pgm.util.text.TemporalComponent.relativePastApproximate; @@ -36,7 +37,6 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.JoinConfiguration; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; @@ -71,52 +71,41 @@ public void seenPlayer(CommandAudience audience, @Argument("target") TargetPlaye boolean staff = audience.hasPermission(CommunityPermissions.STAFF); boolean findAnyone = audience.hasPermission(CommunityPermissions.FIND_ANYONE); - users.findUserWithSession( - target.getIdentifier(), - !staff, - (profile, session) -> { - if (profile == null || session == null) { - audience.sendWarning( - findAnyone - ? MessageUtils.formatUnseen(target.getIdentifier()) - : MessageUtils.formatNotFriend(target.getIdentifier())); - return; - } - - if (audience.isPlayer() - && !friends.isFriend(audience.getPlayer().getUniqueId(), profile.getId()) - && !findAnyone) { - audience.sendWarning( - text("You are not friends with ") - .append(text(profile.getUsername(), NamedTextColor.DARK_AQUA))); - return; - } + users.findUserWithSession(target.getIdentifier(), !staff, (profile, session) -> { + if (profile == null || session == null) { + audience.sendWarning( + findAnyone + ? MessageUtils.formatUnseen(target.getIdentifier()) + : MessageUtils.formatNotFriend(target.getIdentifier())); + return; + } - boolean online = !session.hasEnded(); - boolean disguised = session.isDisguised(); - boolean visible = online && (!disguised || staff); + if (audience.isPlayer() + && !friends.isFriend(audience.getPlayer().getUniqueId(), profile.getId()) + && !findAnyone) { + audience.sendWarning(text("You are not friends with ") + .append(text(profile.getUsername(), NamedTextColor.DARK_AQUA))); + return; + } - Component lastSeenMsg = - text() - .append(player(profile.getId(), NameStyle.FANCY)) - .append( - text( - visible ? " has been online for " : " was last seen ")) // TODO: translate - .append( - (visible - ? duration( - Duration.between(session.getLatestUpdateDate(), Instant.now())) - : TemporalComponent.relativePastApproximate( - session.getLatestUpdateDate())) - .color(online ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN)) - .append(text(session.isOnThisServer() ? "" : " on ")) - .append( - text(session.isOnThisServer() ? "" : session.getServerName()) - .color(online ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN)) - .color(NamedTextColor.GRAY) - .build(); - audience.sendMessage(lastSeenMsg); - }); + boolean online = !session.hasEnded(); + boolean disguised = session.isDisguised(); + boolean visible = online && (!disguised || staff); + + Component lastSeenMsg = text() + .append(player(profile.getId(), NameStyle.FANCY)) + .append(text(visible ? " has been online for " : " was last seen ")) // TODO: translate + .append((visible + ? duration(Duration.between(session.getLatestUpdateDate(), Instant.now())) + : TemporalComponent.relativePastApproximate(session.getLatestUpdateDate())) + .color(online ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN)) + .append(text(session.isOnThisServer() ? "" : " on ")) + .append(text(session.isOnThisServer() ? "" : session.getServerName()) + .color(online ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN)) + .color(NamedTextColor.GRAY) + .build(); + audience.sendMessage(lastSeenMsg); + }); } @Command("alts|alternateaccounts [target]") @@ -129,94 +118,78 @@ public void viewAlts(CommandAudience audience, @Argument("target") TargetPlayer return; } - users - .getStoredProfile(target.getIdentifier()) - .thenAcceptAsync( - profile -> { - if (profile == null) { - audience.sendWarning(MessageUtils.formatUnseen(target.getIdentifier())); - return; - } - - Set alts = users.getAlternateAccounts(profile.getId()).join(); - - Component targetPlayer = - users.renderUsername(profile.getId(), NameStyle.COLOR).join(); - if (alts.isEmpty()) { - audience.sendWarning( - translatable("moderation.alts.noAlts", NamedTextColor.GRAY, targetPlayer)); - return; - } - - Set altNames = - alts.stream() - .map( - altId -> { - Component name = users.renderUsername(altId, NameStyle.COLOR).join(); - - return text() - .append(name) - .clickEvent(ClickEvent.runCommand("/l " + altId.toString())) - .hoverEvent( - HoverEvent.showText( - text( - "Click to view punishment history of ", - NamedTextColor.GRAY) - .append(name))) - .build(); - }) - .collect(Collectors.toSet()); - - Component numberOfAlts = - text(alts.size(), NamedTextColor.YELLOW, TextDecoration.BOLD); - - Component altNameList = - text() - .append(targetPlayer) - .append(text(" has ")) - .append(numberOfAlts) - .append(text(" known alternate account")) - .append(text(alts.size() != 1 ? "s" : "")) - .append(text(": ")) - .append(TextFormatter.list(altNames, NamedTextColor.GRAY)) - .color(NamedTextColor.GRAY) - .build(); - - List altsWithBans = - alts.stream() - .filter(altId -> moderation.isBanned(altId.toString()).join()) - .map( - altId -> { - Component name = users.renderUsername(altId, NameStyle.FANCY).join(); - - return text() - .append(name) - .clickEvent(ClickEvent.runCommand("/l " + altId)) - .hoverEvent( - HoverEvent.showText( - text( - "Click to view punishment history of ", - NamedTextColor.GRAY) - .append(name))) - .build(); - }) - .collect(Collectors.toList()); - - Component numberOfBannedAlts = - text(altsWithBans.size(), NamedTextColor.YELLOW, TextDecoration.BOLD); - - Component altBans = - text() - .append(numberOfBannedAlts) - .append(text(" of these accounts are currently banned: ")) - .append(TextFormatter.list(altsWithBans, NamedTextColor.GRAY)) - .color(NamedTextColor.GRAY) - .build(); - audience.sendMessage(altNameList); - if (altsWithBans.size() > 0) { - audience.sendMessage(altBans); - } - }); + users.getStoredProfile(target.getIdentifier()).thenAcceptAsync(profile -> { + if (profile == null) { + audience.sendWarning(MessageUtils.formatUnseen(target.getIdentifier())); + return; + } + + Set alts = users.getAlternateAccounts(profile.getId()).join(); + + Component targetPlayer = + users.renderUsername(profile.getId(), NameStyle.COLOR).join(); + if (alts.isEmpty()) { + audience.sendWarning( + translatable("moderation.alts.noAlts", NamedTextColor.GRAY, targetPlayer)); + return; + } + + Set altNames = alts.stream() + .map(altId -> { + Component name = users.renderUsername(altId, NameStyle.COLOR).join(); + + return text() + .append(name) + .clickEvent(ClickEvent.runCommand("/l " + altId.toString())) + .hoverEvent(HoverEvent.showText( + text("Click to view punishment history of ", NamedTextColor.GRAY) + .append(name))) + .build(); + }) + .collect(Collectors.toSet()); + + Component numberOfAlts = text(alts.size(), NamedTextColor.YELLOW, TextDecoration.BOLD); + + Component altNameList = text() + .append(targetPlayer) + .append(text(" has ")) + .append(numberOfAlts) + .append(text(" known alternate account")) + .append(text(alts.size() != 1 ? "s" : "")) + .append(text(": ")) + .append(TextFormatter.list(altNames, NamedTextColor.GRAY)) + .color(NamedTextColor.GRAY) + .build(); + + List altsWithBans = alts.stream() + .filter(altId -> moderation.isBanned(altId.toString()).join()) + .map(altId -> { + Component name = users.renderUsername(altId, NameStyle.FANCY).join(); + + return text() + .append(name) + .clickEvent(ClickEvent.runCommand("/l " + altId)) + .hoverEvent(HoverEvent.showText( + text("Click to view punishment history of ", NamedTextColor.GRAY) + .append(name))) + .build(); + }) + .collect(Collectors.toList()); + + Component numberOfBannedAlts = + text(altsWithBans.size(), NamedTextColor.YELLOW, TextDecoration.BOLD); + + Component altBans = text() + .append(numberOfBannedAlts) + .append(text(" of these accounts are currently banned: ")) + .append(TextFormatter.list(altsWithBans, NamedTextColor.GRAY)) + .color(NamedTextColor.GRAY) + .build(); + audience.sendMessage(altNameList); + if (!altsWithBans.isEmpty()) { + audience.sendMessage(altBans); + } + }); } @Command("profile|user [all]") @@ -226,122 +199,95 @@ public void viewUserProfile( CommandAudience audience, @Argument("target") TargetPlayer target, @Argument("all") @Default("false") boolean viewAll) { - users.findUserWithSession( - target.getIdentifier(), - false, - (profile, session) -> { - if (profile == null || session == null) { - audience.sendWarning(MessageUtils.formatUnseen(target.getIdentifier())); - return; + users.findUserWithSession(target.getIdentifier(), false, (profile, session) -> { + if (profile == null || session == null) { + audience.sendWarning(MessageUtils.formatUnseen(target.getIdentifier())); + return; + } + + Component header = text("Account Info", NamedTextColor.RED) + .append(text(" - ", NamedTextColor.GRAY)) + .append(player(profile.getId(), NameStyle.FANCY)); + + Component uuid = + formatInfoField("UUID", text(profile.getId().toString(), NamedTextColor.YELLOW)); + Component firstLogin = + formatInfoField("First Login", formatDateWithHover(profile.getFirstLogin())); + Component lastLogin = + formatInfoField("Last Login", formatDateWithHover(session.getLatestUpdateDate())); + Component joinCount = + formatInfoField("Join Count", text(profile.getJoinCount(), NamedTextColor.LIGHT_PURPLE)); + + Component lastServer = + formatInfoField("Last Server", text(session.getServerName(), NamedTextColor.AQUA)); + + Component knownIPs = formatInfoField("Known IPs", empty()); + + audience.sendMessage(TextFormatter.horizontalLineHeading( + audience.getSender(), header, NamedTextColor.DARK_GRAY)); + + audience.sendMessage(uuid); + audience.sendMessage(firstLogin); + audience.sendMessage(lastLogin); + audience.sendMessage(joinCount); + audience.sendMessage(lastServer); + + if (audience.getSender().hasPermission(CommunityPermissions.RESTRICTED)) { + users.getLatestAddress(profile.getId()).thenAcceptAsync(latest -> { + final String lastIpFieldName = "Latest IP"; + + if (latest == null) { + audience.sendMessage(formatInfoField( + lastIpFieldName, + text("Unavailable", NamedTextColor.RED) + .hoverEvent(HoverEvent.showText(text( + "No IP info found (user has not logged in recently)", + NamedTextColor.RED))))); + } else { + audience.sendMessage(formatInfoField( + lastIpFieldName, + text() + .append(text(latest.getAddress(), NamedTextColor.AQUA)) + .append(text(" (")) + .append(relativePastApproximate(latest.getDate())) + .append(text(")")) + .color(NamedTextColor.GRAY) + .build())); } + }); - Component header = - text("Account Info", NamedTextColor.RED) - .append(text(" - ", NamedTextColor.GRAY)) - .append(player(profile.getId(), NameStyle.FANCY)); - - Component uuid = - formatInfoField("UUID", text(profile.getId().toString(), NamedTextColor.YELLOW)); - Component firstLogin = - formatInfoField("First Login", formatDateWithHover(profile.getFirstLogin())); - Component lastLogin = - formatInfoField("Last Login", formatDateWithHover(session.getLatestUpdateDate())); - Component joinCount = - formatInfoField( - "Join Count", text(profile.getJoinCount(), NamedTextColor.LIGHT_PURPLE)); - - Component lastServer = - formatInfoField("Last Server", text(session.getServerName(), NamedTextColor.AQUA)); - - Component knownIPs = formatInfoField("Known IPs", empty()); - - audience.sendMessage( - TextFormatter.horizontalLineHeading( - audience.getSender(), header, NamedTextColor.DARK_GRAY)); - - audience.sendMessage(uuid); - audience.sendMessage(firstLogin); - audience.sendMessage(lastLogin); - audience.sendMessage(joinCount); - audience.sendMessage(lastServer); - - if (audience.getSender().hasPermission(CommunityPermissions.RESTRICTED)) { - users - .getLatestAddress(profile.getId()) - .thenAcceptAsync( - latest -> { - final String lastIpFieldName = "Latest IP"; - - if (latest == null) { - audience.sendMessage( - formatInfoField( - lastIpFieldName, - text("Unavailable", NamedTextColor.RED) - .hoverEvent( - HoverEvent.showText( - text( - "No IP info found (user has not logged in recently)", - NamedTextColor.RED))))); - } else { - audience.sendMessage( - formatInfoField( - lastIpFieldName, - text() - .append(text(latest.getAddress(), NamedTextColor.AQUA)) - .append(text(" (")) - .append(relativePastApproximate(latest.getDate())) - .append(text(")")) - .color(NamedTextColor.GRAY) - .build())); - } - }); - - users - .getKnownIPs(profile.getId()) - .thenAcceptAsync( - ips -> { - if (ips.size() > 1) { - final int MAX_VIEWABLE = 6; - List viewableIps = Lists.newArrayList(ips); - if (!viewAll) { - viewableIps = viewableIps.subList(0, Math.min(ips.size(), MAX_VIEWABLE)); - } - audience.sendMessage( - knownIPs.append(text("(" + ips.size() + ")", NamedTextColor.GRAY))); - audience.sendMessage( - formatListItems( - viewableIps.stream() - .map( - ip -> - text() - .append(text(" - ", NamedTextColor.YELLOW)) - .append(text(ip, NamedTextColor.DARK_AQUA)) - .build()) - .collect(Collectors.toList()))); - if (ips.size() > MAX_VIEWABLE && !viewAll) { - audience.sendMessage( - text() - .append( - text( - ips.size() - MAX_VIEWABLE, - NamedTextColor.YELLOW, - TextDecoration.BOLD)) - .append(text(" Additional IPs found! ", NamedTextColor.DARK_AQUA)) - .append(text("[", NamedTextColor.GRAY)) - .append(text("View All", NamedTextColor.BLUE)) - .append(text("]", NamedTextColor.GRAY)) - .clickEvent( - ClickEvent.runCommand( - "/profile " + target.getIdentifier() + " true")) - .hoverEvent( - HoverEvent.showText( - text("Click to view all ips", NamedTextColor.GRAY))) - .build()); - } - } - }); + users.getKnownIPs(profile.getId()).thenAcceptAsync(ips -> { + if (ips.size() > 1) { + final int MAX_VIEWABLE = 6; + List viewableIps = Lists.newArrayList(ips); + if (!viewAll) { + viewableIps = viewableIps.subList(0, Math.min(ips.size(), MAX_VIEWABLE)); + } + audience.sendMessage( + knownIPs.append(text("(" + ips.size() + ")", NamedTextColor.GRAY))); + audience.sendMessage(formatListItems(viewableIps.stream() + .map(ip -> text() + .append(text(" - ", NamedTextColor.YELLOW)) + .append(text(ip, NamedTextColor.DARK_AQUA)) + .build()) + .collect(Collectors.toList()))); + if (ips.size() > MAX_VIEWABLE && !viewAll) { + audience.sendMessage(text() + .append( + text(ips.size() - MAX_VIEWABLE, NamedTextColor.YELLOW, TextDecoration.BOLD)) + .append(text(" Additional IPs found! ", NamedTextColor.DARK_AQUA)) + .append(text("[", NamedTextColor.GRAY)) + .append(text("View All", NamedTextColor.BLUE)) + .append(text("]", NamedTextColor.GRAY)) + .clickEvent(ClickEvent.runCommand("/profile " + target.getIdentifier() + " true")) + .hoverEvent( + HoverEvent.showText(text("Click to view all ips", NamedTextColor.GRAY))) + .build()); + } } }); + } + }); } private Component formatDateWithHover(Instant pastDate) { @@ -354,7 +300,7 @@ private Component formatDateWithHover(Instant pastDate) { } private Component formatListItems(Collection components) { - return Component.join(newline(), components); + return Component.join(separator(newline()), components); } private Component formatInfoField(String field, Component value) { @@ -373,9 +319,7 @@ private void showOnlineAlts(CommandAudience audience, int page) { for (Player player : Bukkit.getOnlinePlayers()) { Set alts = getOnlineAltAccounts(player); - if (alts.isEmpty() || accountedFor.contains(player.getUniqueId())) { - continue; - } else { + if (!(alts.isEmpty() || accountedFor.contains(player.getUniqueId()))) { altAccounts.add(formatAltAccountList(player, alts)); accountedFor.add(player.getUniqueId()); accountedFor.addAll(alts); @@ -386,28 +330,28 @@ private void showOnlineAlts(CommandAudience audience, int page) { } private void showBannedAlts(CommandAudience audience, int page) { - CompletableFuture.runAsync( - () -> { - Set altAccounts = Sets.newHashSet(); - Set accountedFor = Sets.newHashSet(); - - for (Player player : Bukkit.getOnlinePlayers()) { - Set alts = users.getAlternateAccounts(player.getUniqueId()).join(); - Map punishmentMap = new HashMap<>(); - for (UUID alt : alts) { - Optional punishment = moderation.getActiveBan(alt.toString()).join(); - punishment.ifPresent(value -> punishmentMap.put(alt, value)); - } - - if (!punishmentMap.isEmpty() && !accountedFor.contains(player.getUniqueId())) { - altAccounts.add(formatAltAccountList(player, punishmentMap)); - accountedFor.add(player.getUniqueId()); - accountedFor.addAll(punishmentMap.keySet()); - } - } + CompletableFuture.runAsync(() -> { + Set altAccounts = Sets.newHashSet(); + Set accountedFor = Sets.newHashSet(); + + for (Player player : Bukkit.getOnlinePlayers()) { + Set alts = users.getAlternateAccounts(player.getUniqueId()).join(); + Map punishmentMap = new HashMap<>(); + for (UUID alt : alts) { + Optional punishment = + moderation.getActiveBan(alt.toString()).join(); + punishment.ifPresent(value -> punishmentMap.put(alt, value)); + } + + if (!punishmentMap.isEmpty() && !accountedFor.contains(player.getUniqueId())) { + altAccounts.add(formatAltAccountList(player, punishmentMap)); + accountedFor.add(player.getUniqueId()); + accountedFor.addAll(punishmentMap.keySet()); + } + } - sendAltList(audience, page, altAccounts, true); - }); + sendAltList(audience, page, altAccounts, true); + }); } private void sendAltList( @@ -415,26 +359,23 @@ private void sendAltList( int perPage = Math.max(15, altAccounts.size()); int pages = (altAccounts.size() + perPage - 1) / perPage; - Component pageHeader = - translatable( - "command.pageHeader", - NamedTextColor.GRAY, - text(Integer.toString(page), NamedTextColor.DARK_AQUA), - text(Integer.toString(pages), NamedTextColor.DARK_AQUA)); - - Component headerText = - translatable( - banned ? "Banned Alt-Accounts" : "moderation.alts.header", NamedTextColor.DARK_AQUA); - - Component header = - text() - .append(headerText) - .append(text(" (", NamedTextColor.GRAY)) - .append(text(Integer.toString(altAccounts.size()), NamedTextColor.DARK_AQUA)) - .append(text(")", NamedTextColor.GRAY)) - .append(text(" » ", NamedTextColor.GOLD)) - .append(pageHeader) - .build(); + Component pageHeader = translatable( + "command.pageHeader", + NamedTextColor.GRAY, + text(Integer.toString(page), NamedTextColor.DARK_AQUA), + text(Integer.toString(pages), NamedTextColor.DARK_AQUA)); + + Component headerText = translatable( + banned ? "Banned Alt-Accounts" : "moderation.alts.header", NamedTextColor.DARK_AQUA); + + Component header = text() + .append(headerText) + .append(text(" (", NamedTextColor.GRAY)) + .append(text(Integer.toString(altAccounts.size()), NamedTextColor.DARK_AQUA)) + .append(text(")", NamedTextColor.GRAY)) + .append(text(" » ", NamedTextColor.GOLD)) + .append(pageHeader) + .build(); Component formattedHeader = TextFormatter.horizontalLineHeading(audience.getSender(), header, NamedTextColor.BLUE); @@ -455,12 +396,11 @@ public Component formatEmpty() { } private Component formatAltAccountList(Player target, Set alts) { - Component names = - Component.join( - text(", ", NamedTextColor.GRAY), - alts.stream() - .map(pl -> users.renderUsername(pl, NameStyle.FANCY).join()) - .collect(Collectors.toSet())); + Component names = Component.join( + separator(text(", ", NamedTextColor.GRAY)), + alts.stream() + .map(pl -> users.renderUsername(pl, NameStyle.FANCY).join()) + .collect(Collectors.toSet())); Component size = text(Integer.toString(alts.size()), NamedTextColor.YELLOW); return text("[", NamedTextColor.GOLD) @@ -473,30 +413,24 @@ private Component formatAltAccountList(Player target, Set alts) { } private Component formatAltAccountList(Player target, Map alts) { - Component names = - Component.join( - text(", ", NamedTextColor.GRAY), - alts.entrySet().stream() - .map( - pl -> { - Punishment punishment = pl.getValue(); - List components = new ArrayList<>(); - components.add( - TemporalComponent.relativePastApproximate(punishment.getTimeIssued()) - .color(NamedTextColor.YELLOW)); - components.add(punishment.formatTimeComponent()); - components.add(text(punishment.getReason()).color(NamedTextColor.RED)); - - return users - .renderUsername(pl.getKey(), NameStyle.FANCY) - .join() - .hoverEvent( - HoverEvent.showText( - Component.join( - JoinConfiguration.separator(BroadcastUtils.BROADCAST_DIV), - components))); - }) - .collect(Collectors.toSet())); + Component names = Component.join( + separator(text(", ", NamedTextColor.GRAY)), + alts.entrySet().stream() + .map(pl -> { + Punishment punishment = pl.getValue(); + List components = new ArrayList<>(); + components.add(TemporalComponent.relativePastApproximate(punishment.getTimeIssued()) + .color(NamedTextColor.YELLOW)); + components.add(punishment.formatTimeComponent()); + components.add(text(punishment.getReason()).color(NamedTextColor.RED)); + + return users + .renderUsername(pl.getKey(), NameStyle.FANCY) + .join() + .hoverEvent(HoverEvent.showText( + Component.join(separator(BroadcastUtils.BROADCAST_DIV), components))); + }) + .collect(Collectors.toSet())); Component size = text(Integer.toString(alts.size()), NamedTextColor.YELLOW); return text("[", NamedTextColor.GOLD) diff --git a/core/src/main/java/dev/pgm/community/users/feature/UsersFeature.java b/core/src/main/java/dev/pgm/community/users/feature/UsersFeature.java index a0935bc8..47f38de0 100644 --- a/core/src/main/java/dev/pgm/community/users/feature/UsersFeature.java +++ b/core/src/main/java/dev/pgm/community/users/feature/UsersFeature.java @@ -10,11 +10,10 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.event.player.PlayerJoinEvent; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.named.NameStyle; import tc.oc.pgm.util.player.PlayerComponent; @@ -36,9 +35,10 @@ default CompletableFuture renderUsername(UUID userId, NameStyle style * @return The rendered name component of provided UUID */ default CompletableFuture renderUsername(Optional userId, NameStyle style) { - if (!userId.isPresent()) return CompletableFuture.completedFuture(PlayerComponent.CONSOLE); - return getStoredUsername(userId.get()) - .thenApplyAsync(name -> player(Bukkit.getPlayer(userId.get()), name, style)); + return userId + .map(uuid -> getStoredUsername(uuid) + .thenApplyAsync(name -> player(Bukkit.getPlayer(uuid), name, style))) + .orElseGet(() -> CompletableFuture.completedFuture(PlayerComponent.CONSOLE)); } /** @@ -147,7 +147,6 @@ default CompletableFuture renderUsername(Optional userId, NameS * @param target Player username * @param ignoreDisguised Whether the target's latest session should include disguised sessions * @param callback The callback to be ran with - * @throws ExecutionException */ default void findUserWithSession( String target, boolean ignoreDisguised, UserProfileWithSessionCallback callback) { @@ -158,7 +157,7 @@ default void findUserWithSession( return profile.getLatestSession(ignoreDisguised).join(); }), - (profile, session) -> callback.run(profile, session)); + callback::run); } /** @@ -167,7 +166,6 @@ default void findUserWithSession( * @param id Player UUID * @param ignoreDisguised Whether the target's latest session should include disguised sessions * @param callback The callback to be ran with - * @throws ExecutionException */ default void findUserWithSession( UUID id, boolean ignoreDisguised, UserProfileWithSessionCallback callback) { @@ -178,6 +176,6 @@ default void findUserWithSession( return profile.getLatestSession(ignoreDisguised).join(); }), - (profile, session) -> callback.run(profile, session)); + callback::run); } } diff --git a/core/src/main/java/dev/pgm/community/users/listeners/UserProfileLoginListener.java b/core/src/main/java/dev/pgm/community/users/listeners/UserProfileLoginListener.java index c1495138..4f7593f5 100644 --- a/core/src/main/java/dev/pgm/community/users/listeners/UserProfileLoginListener.java +++ b/core/src/main/java/dev/pgm/community/users/listeners/UserProfileLoginListener.java @@ -14,13 +14,7 @@ import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.text.TextParser; -public class UserProfileLoginListener implements Listener { - - private UsersFeature users; - - public UserProfileLoginListener(UsersFeature users) { - this.users = users; - } +public record UserProfileLoginListener(UsersFeature users) implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onLoginEvent(final PlayerJoinEvent event) { @@ -41,7 +35,7 @@ public void onPostLoginEvent(UserProfileLoadEvent event) { .replace("%name%", player.getName()); boolean message = command.startsWith("!send"); if (message) { - String msg = command.substring(5, command.length()); + String msg = command.substring(5); Audience.get(player).sendMessage(TextParser.parseComponent(MessageUtils.format(msg))); } else { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); diff --git a/core/src/main/java/dev/pgm/community/users/services/AddressHistoryService.java b/core/src/main/java/dev/pgm/community/users/services/AddressHistoryService.java index f6d62c45..373e749d 100644 --- a/core/src/main/java/dev/pgm/community/users/services/AddressHistoryService.java +++ b/core/src/main/java/dev/pgm/community/users/services/AddressHistoryService.java @@ -15,39 +15,19 @@ public class AddressHistoryService implements AddressQuery { - private LoadingCache historyCache; + private final LoadingCache historyCache; - private LoadingCache latestCache; + private final LoadingCache latestCache; - private LoadingCache resolvedIPCache; + private final LoadingCache resolvedIPCache; - private LoadingCache altsCache; + private final LoadingCache altsCache; public AddressHistoryService() { - this.historyCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public AddressHistory load(UUID key) throws Exception { - return new AddressHistory(key); - } - }); - this.latestCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public LatestAddressInfo load(UUID key) throws Exception { - return new LatestAddressInfo(key); - } - }); - this.resolvedIPCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public ResolvedIP load(String key) throws Exception { - return new ResolvedIP(key); - } - }); - this.altsCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public IpAlts load(String key) throws Exception { - return new IpAlts(key); - } - }); + this.historyCache = CacheBuilder.newBuilder().build(CacheLoader.from(AddressHistory::new)); + this.latestCache = CacheBuilder.newBuilder().build(CacheLoader.from(LatestAddressInfo::new)); + this.resolvedIPCache = CacheBuilder.newBuilder().build(CacheLoader.from(ResolvedIP::new)); + this.altsCache = CacheBuilder.newBuilder().build(CacheLoader.from(IpAlts::new)); DatabaseExecutor.executeUpdateAsync(Query.createTable(IP_TABLE_NAME, IP_TABLE_FIELDS)); DatabaseExecutor.executeUpdateAsync( @@ -83,7 +63,7 @@ public void trackIp(UUID id, String address) { Set known = getKnownIps(id).join(); if (known == null || known.isEmpty() - || !known.stream().anyMatch(ip -> ip.equalsIgnoreCase(address))) { + || known.stream().noneMatch(ip -> ip.equalsIgnoreCase(address))) { // Add user to known ip-id list DatabaseExecutor.executeUpdateAsync(INSERT_IP_USER_QUERY, id.toString(), ipId); } @@ -184,9 +164,9 @@ public CompletableFuture> getAlternateAccounts(UUID playerId) { }); } - private class IpAlts { - private String ipId; - private Set playerIds; + private static class IpAlts { + private final String ipId; + private final Set playerIds; private boolean loaded; public IpAlts(String ipId) { @@ -214,7 +194,7 @@ public void setLoaded(boolean loaded) { public static class ResolvedIP { - private String ipId; + private final String ipId; private String address; private boolean loaded; @@ -244,8 +224,8 @@ public boolean isLoaded() { /** Holds Player ID and list of IP ids that match */ public static class AddressHistory { - private UUID playerId; - private Set addressesIds; + private final UUID playerId; + private final Set addressesIds; private boolean loaded; public AddressHistory(UUID playerId) { diff --git a/core/src/main/java/dev/pgm/community/users/services/AddressQuery.java b/core/src/main/java/dev/pgm/community/users/services/AddressQuery.java index 6fe6713f..555db126 100644 --- a/core/src/main/java/dev/pgm/community/users/services/AddressQuery.java +++ b/core/src/main/java/dev/pgm/community/users/services/AddressQuery.java @@ -2,67 +2,62 @@ public interface AddressQuery { - static final String IP_ADDRESS_FIELD = "address"; - static final String IP_ID_FIELD = "ip_id"; - static final String USER_ID_FIELD = "user_id"; - static final String DATE_FIELD = "last_time"; + String IP_ADDRESS_FIELD = "address"; + String IP_ID_FIELD = "ip_id"; + String USER_ID_FIELD = "user_id"; + String DATE_FIELD = "last_time"; - static final String IP_TABLE_FIELDS = + String IP_TABLE_FIELDS = String.format("(%s VARCHAR(15), %s VARCHAR(36))", IP_ADDRESS_FIELD, IP_ID_FIELD); - static final String IP_TABLE_NAME = "addresses"; + String IP_TABLE_NAME = "addresses"; - static final String IP_USER_TABLE_FIELDS = + String IP_USER_TABLE_FIELDS = String.format("(%s VARCHAR(36), %s VARCHAR(36))", USER_ID_FIELD, IP_ID_FIELD); - static final String IP_USER_TABLE_NAME = "ip_history"; - - static final String LATEST_IP_TABLE_FIELDS = - String.format( - "(%s VARCHAR(36) PRIMARY KEY, %s VARCHAR(15), %s LONG)", - USER_ID_FIELD, IP_ADDRESS_FIELD, DATE_FIELD); - static final String LATEST_IP_TABLE_NAME = "latest_ip"; - - static final String INSERT_LATEST_IP_QUERY = - "REPLACE INTO " - + LATEST_IP_TABLE_NAME - + "(" - + USER_ID_FIELD - + "," - + IP_ADDRESS_FIELD - + "," - + DATE_FIELD - + ")" - + " VALUES(?,?,?)"; - - static final String SELECT_IP_QUERY = + String IP_USER_TABLE_NAME = "ip_history"; + + String LATEST_IP_TABLE_FIELDS = String.format( + "(%s VARCHAR(36) PRIMARY KEY, %s VARCHAR(15), %s LONG)", + USER_ID_FIELD, IP_ADDRESS_FIELD, DATE_FIELD); + String LATEST_IP_TABLE_NAME = "latest_ip"; + + String INSERT_LATEST_IP_QUERY = "REPLACE INTO " + + LATEST_IP_TABLE_NAME + + "(" + + USER_ID_FIELD + + "," + + IP_ADDRESS_FIELD + + "," + + DATE_FIELD + + ")" + + " VALUES(?,?,?)"; + + String SELECT_IP_QUERY = "SELECT " + IP_ID_FIELD + " FROM " + IP_TABLE_NAME + " WHERE " + IP_ADDRESS_FIELD + " = ?"; - static final String INSERT_IP_QUERY = - "INSERT INTO " - + IP_TABLE_NAME - + " (" - + IP_ADDRESS_FIELD - + "," - + IP_ID_FIELD - + ") VALUES (?,?)"; - - static final String INSERT_IP_USER_QUERY = - "INSERT INTO " - + IP_USER_TABLE_NAME - + " (" - + USER_ID_FIELD - + "," - + IP_ID_FIELD - + ") VALUES (?,?)"; - - static final String SELECT_LATEST_IP_QUERY = + String INSERT_IP_QUERY = "INSERT INTO " + + IP_TABLE_NAME + + " (" + + IP_ADDRESS_FIELD + + "," + + IP_ID_FIELD + + ") VALUES (?,?)"; + + String INSERT_IP_USER_QUERY = "INSERT INTO " + + IP_USER_TABLE_NAME + + " (" + + USER_ID_FIELD + + "," + + IP_ID_FIELD + + ") VALUES (?,?)"; + + String SELECT_LATEST_IP_QUERY = "SELECT * FROM " + LATEST_IP_TABLE_NAME + " WHERE " + USER_ID_FIELD + " = ?"; - static final String SELECT_IP_HISTORY_QUERY = - "SELECT ip_id FROM " + IP_USER_TABLE_NAME + " WHERE user_id = ?"; + String SELECT_IP_HISTORY_QUERY = "SELECT ip_id FROM " + IP_USER_TABLE_NAME + " WHERE user_id = ?"; - static final String SELECT_IP_ID_QUERY = + String SELECT_IP_ID_QUERY = "SELECT " + IP_ADDRESS_FIELD + " FROM " + IP_TABLE_NAME + " WHERE " + IP_ID_FIELD + " = ?"; - static final String SELECT_ALTS_QUERY = + String SELECT_ALTS_QUERY = "SELECT " + USER_ID_FIELD + " FROM " + IP_USER_TABLE_NAME + " WHERE " + IP_ID_FIELD + " = ?"; } diff --git a/core/src/main/java/dev/pgm/community/users/services/SQLUserService.java b/core/src/main/java/dev/pgm/community/users/services/SQLUserService.java index e3eb9e2b..9c95d77c 100644 --- a/core/src/main/java/dev/pgm/community/users/services/SQLUserService.java +++ b/core/src/main/java/dev/pgm/community/users/services/SQLUserService.java @@ -16,17 +16,12 @@ public class SQLUserService extends SQLFeatureBase implements UserQuery { - private LoadingCache profileCache; + private final LoadingCache profileCache; public SQLUserService() { super(TABLE_NAME, TABLE_FIELDS); - this.profileCache = CacheBuilder.newBuilder().build(new CacheLoader() { - @Override - public UserData load(UUID key) throws Exception { - return new UserData(key); - } - }); + this.profileCache = CacheBuilder.newBuilder().build(CacheLoader.from(UserData::new)); } @Override @@ -109,9 +104,9 @@ public CompletableFuture login(UUID id, String username, String add }); } - private class UserData { + private static class UserData { - private UUID playerId; + private final UUID playerId; private UserProfile profile; private boolean loaded; diff --git a/core/src/main/java/dev/pgm/community/users/services/UserQuery.java b/core/src/main/java/dev/pgm/community/users/services/UserQuery.java index 2d79e789..293c5b35 100644 --- a/core/src/main/java/dev/pgm/community/users/services/UserQuery.java +++ b/core/src/main/java/dev/pgm/community/users/services/UserQuery.java @@ -2,17 +2,15 @@ public interface UserQuery { - static final String TABLE_FIELDS = + String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, name VARCHAR(16), first_join LONG, join_count INT)"; - static final String TABLE_NAME = "users"; + String TABLE_NAME = "users"; - static final String INSERT_USER_QUERY = + String INSERT_USER_QUERY = "INSERT INTO " + TABLE_NAME + "(id, name, first_join, join_count) VALUES (?,?,?,?)"; - static final String USERNAME_QUERY = - "SELECT * from " + TABLE_NAME + " WHERE LOWER(name) = LOWER(?) LIMIT 1"; - static final String PLAYERID_QUERY = "SELECT * from " + TABLE_NAME + " WHERE id = ? LIMIT 1"; + String USERNAME_QUERY = "SELECT * from " + TABLE_NAME + " WHERE LOWER(name) = LOWER(?) LIMIT 1"; + String PLAYERID_QUERY = "SELECT * from " + TABLE_NAME + " WHERE id = ? LIMIT 1"; - static final String UPDATE_USER_QUERY = - "UPDATE " + TABLE_NAME + " SET name = ?, join_count = ? WHERE id = ? "; + String UPDATE_USER_QUERY = "UPDATE " + TABLE_NAME + " SET name = ?, join_count = ? WHERE id = ? "; } diff --git a/core/src/main/java/dev/pgm/community/utils/BroadcastUtils.java b/core/src/main/java/dev/pgm/community/utils/BroadcastUtils.java index 22761269..a7cee688 100644 --- a/core/src/main/java/dev/pgm/community/utils/BroadcastUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/BroadcastUtils.java @@ -3,6 +3,7 @@ import static net.kyori.adventure.text.Component.empty; import static net.kyori.adventure.text.Component.space; import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.title.Title.Times.times; import static net.kyori.adventure.title.Title.title; import dev.pgm.community.Community; @@ -13,12 +14,11 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.title.Title.Times; import net.kyori.adventure.util.Ticks; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.bukkit.ViaUtils; @@ -124,7 +124,7 @@ public static void sendGlobalTitle( public static void sendGlobalTitle( @Nullable Component title, @Nullable Component subTitle, int stay, @Nullable Sound sound) { - Bukkit.getOnlinePlayers().stream().forEach(p -> { + Bukkit.getOnlinePlayers().forEach(p -> { Audience viewer = Audience.get(p); // Support legacy players if (ViaUtils.getProtocolVersion(p) <= ViaUtils.VERSION_1_7) { @@ -133,7 +133,7 @@ public static void sendGlobalTitle( viewer.showTitle(title( title == null ? empty() : title, subTitle == null ? empty() : subTitle, - Times.of(Ticks.duration(5), Ticks.duration(20 * stay), Ticks.duration(15)))); + times(Ticks.duration(5), Ticks.duration(20L * stay), Ticks.duration(15)))); if (sound != null) { viewer.playSound(sound); diff --git a/core/src/main/java/dev/pgm/community/utils/CommandAudience.java b/core/src/main/java/dev/pgm/community/utils/CommandAudience.java index 83a3efde..da6bdf74 100644 --- a/core/src/main/java/dev/pgm/community/utils/CommandAudience.java +++ b/core/src/main/java/dev/pgm/community/utils/CommandAudience.java @@ -6,15 +6,15 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.Audience; import tc.oc.pgm.util.named.NameStyle; import tc.oc.pgm.util.player.PlayerComponent; public class CommandAudience { - private Audience audience; - private CommandSender sender; + private final Audience audience; + private final CommandSender sender; public static CommandAudience CONSOLE = new CommandAudience(Bukkit.getConsoleSender()); @@ -60,6 +60,6 @@ public void sendWarning(Component message) { } public boolean hasPermission(String permission) { - return isPlayer() ? getPlayer().hasPermission(permission) : true; + return !isPlayer() || getPlayer().hasPermission(permission); } } diff --git a/core/src/main/java/dev/pgm/community/utils/ImportUtils.java b/core/src/main/java/dev/pgm/community/utils/ImportUtils.java index 03bb6871..88b9f1f8 100644 --- a/core/src/main/java/dev/pgm/community/utils/ImportUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/ImportUtils.java @@ -20,7 +20,7 @@ import java.util.Date; import java.util.List; import java.util.UUID; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; import tc.oc.pgm.util.text.TextException; public class ImportUtils { @@ -46,12 +46,22 @@ public static class BukkitBanEntry { private final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); - private UUID uuid; - private String name; - private String source; - private String created; - private String expires; - private String reason; + private final UUID uuid; + private final String name; + private final String source; + private final String created; + private final String expires; + private final String reason; + + public BukkitBanEntry( + UUID uuid, String name, String source, String created, String expires, String reason) { + this.uuid = uuid; + this.name = name; + this.source = source; + this.created = created; + this.expires = expires; + this.reason = reason; + } public UUID getUUID() { return uuid; diff --git a/core/src/main/java/dev/pgm/community/utils/MessageUtils.java b/core/src/main/java/dev/pgm/community/utils/MessageUtils.java index 877ac125..5ca235ed 100644 --- a/core/src/main/java/dev/pgm/community/utils/MessageUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/MessageUtils.java @@ -2,6 +2,7 @@ import static net.kyori.adventure.text.Component.space; import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.text.JoinConfiguration.separator; import static tc.oc.pgm.util.text.TemporalComponent.duration; import com.google.common.collect.Lists; @@ -35,7 +36,7 @@ public class MessageUtils { public static final Component TOKEN = text(TOKEN_SYMBOL, NamedTextColor.GOLD); public static final Component VOTE = text(VOTE_SYMBOL, NamedTextColor.LIGHT_PURPLE); - public static final Component getStoreLink() { + public static Component getStoreLink() { return text() .append(text( Community.get().getServerConfig().getStoreLink(), @@ -54,10 +55,11 @@ public static String formatKickScreenMessage(String headerTitle, List LegacyFormatUtils.horizontalLine(ChatColor.DARK_GRAY, LegacyFormatUtils.MAX_CHAT_WIDTH)); message.add(header); // Header Line - FIRST - lines.forEach(message::add); // Add messages + message.addAll(lines); // Add messages message.add(footer); // Footer Line - LAST - return TextTranslations.translateLegacy(Component.join(text("\n" + ChatColor.RESET), message)); + return TextTranslations.translateLegacy( + Component.join(separator(text("\n" + ChatColor.RESET)), message)); } public static Component formatUnseen(String target) { @@ -125,8 +127,8 @@ public static Component parseComponentWithURL(String line) { } } - private static final Pattern URL_PATTERN = Pattern.compile( - "(https?://[\\w\\-\\.]+(:\\d+)?(/[\\w\\-\\./?%&=]*)?)", Pattern.CASE_INSENSITIVE); + private static final Pattern URL_PATTERN = + Pattern.compile("(https?://[\\w\\-.]+(:\\d+)?(/[\\w\\-./?%&=]*)?)", Pattern.CASE_INSENSITIVE); private static Component addUrlEventsToComponent(Component component) { return component.replaceText( diff --git a/core/src/main/java/dev/pgm/community/utils/NameUtils.java b/core/src/main/java/dev/pgm/community/utils/NameUtils.java index 1e4b9766..482ef36a 100644 --- a/core/src/main/java/dev/pgm/community/utils/NameUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/NameUtils.java @@ -13,7 +13,7 @@ public static boolean isMinecraftName(String name) { public static boolean isPlayerId(String uuid) { try { - UUID playerId = UUID.fromString(uuid); + UUID.fromString(uuid); return true; } catch (IllegalArgumentException e) { return false; diff --git a/core/src/main/java/dev/pgm/community/utils/PGMUtils.java b/core/src/main/java/dev/pgm/community/utils/PGMUtils.java index ed3db150..369b1ecf 100644 --- a/core/src/main/java/dev/pgm/community/utils/PGMUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/PGMUtils.java @@ -68,23 +68,7 @@ public static MapInfo getCurrentMap() { return isPGMEnabled() && getMatch() != null ? getMatch().getMap() : null; } - public static class MapSizeBounds { - private int lowerBound; - private int upperBound; - - public MapSizeBounds(int lowerBound, int upperBound) { - this.lowerBound = lowerBound; - this.upperBound = upperBound; - } - - public int getLowerBound() { - return lowerBound; - } - - public int getUpperBound() { - return upperBound; - } - } + public record MapSizeBounds(int lowerBound, int upperBound) {} public static boolean isMapSizeAllowed( MapInfo map, int lowerBoundOffset, int upperBoundOffset, double scaleFactor) { @@ -93,7 +77,7 @@ public static boolean isMapSizeAllowed( int max = getMapMaxSize(map); - return max >= bounds.getLowerBound() && max <= bounds.getUpperBound(); + return max >= bounds.lowerBound() && max <= bounds.upperBound(); } return true; @@ -149,8 +133,7 @@ public static boolean isBlitz() { public static void setMapPool(CommandSender sender, MapPool pool) { if (isPGMEnabled()) { - if (PGM.get().getMapOrder() instanceof MapPoolManager) { - MapPoolManager manager = (MapPoolManager) PGM.get().getMapOrder(); + if (PGM.get().getMapOrder() instanceof MapPoolManager manager) { manager.updateActiveMapPool(pool, getMatch(), true, sender, null, 0); } } @@ -173,8 +156,7 @@ public static MapPool getActiveMapPool() { public static Optional getMapPool(String name) { if (isPGMEnabled()) { - if (PGM.get().getMapOrder() instanceof MapPoolManager) { - MapPoolManager manager = (MapPoolManager) PGM.get().getMapOrder(); + if (PGM.get().getMapOrder() instanceof MapPoolManager manager) { return Optional.ofNullable(manager.getMapPoolByName(name)); } } diff --git a/core/src/main/java/dev/pgm/community/utils/PaginatedComponentResults.java b/core/src/main/java/dev/pgm/community/utils/PaginatedComponentResults.java index 3315ec15..8bebed8b 100644 --- a/core/src/main/java/dev/pgm/community/utils/PaginatedComponentResults.java +++ b/core/src/main/java/dev/pgm/community/utils/PaginatedComponentResults.java @@ -12,8 +12,8 @@ public abstract class PaginatedComponentResults { - private Component header; - private int resultsPerPage; + private final Component header; + private final int resultsPerPage; /** * Constructor @@ -88,7 +88,7 @@ public void display(Audience audience, Collection data, int page) * @throws TextException no match exceptions */ public void display(Audience audience, List data, int page) throws TextException { - if (data.size() == 0) { + if (data.isEmpty()) { audience.sendWarning(formatEmpty()); return; } diff --git a/core/src/main/java/dev/pgm/community/utils/ranks/RankUtils.java b/core/src/main/java/dev/pgm/community/utils/ranks/RankUtils.java index 784e6273..0b1d7ffc 100644 --- a/core/src/main/java/dev/pgm/community/utils/ranks/RankUtils.java +++ b/core/src/main/java/dev/pgm/community/utils/ranks/RankUtils.java @@ -3,19 +3,18 @@ import dev.pgm.community.Community; import java.util.List; import org.bukkit.entity.Player; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class RankUtils { - @Nullable - public static RanksConfig.Rank getHighestLevelRank(Player player) { + public static RanksConfig.@Nullable Rank getHighestLevelRank(Player player) { List allRanks = Community.get().getServerConfig().getRanksConfig().getRanks(); RanksConfig.Rank highestRank = null; for (RanksConfig.Rank rank : allRanks) { - if (player.hasPermission(rank.getPermission())) { - if (highestRank == null || rank.getWeight() > highestRank.getWeight()) { + if (player.hasPermission(rank.permission())) { + if (highestRank == null || rank.weight() > highestRank.weight()) { highestRank = rank; } } diff --git a/core/src/main/java/dev/pgm/community/utils/ranks/RanksConfig.java b/core/src/main/java/dev/pgm/community/utils/ranks/RanksConfig.java index a1b1fe38..e6729441 100644 --- a/core/src/main/java/dev/pgm/community/utils/ranks/RanksConfig.java +++ b/core/src/main/java/dev/pgm/community/utils/ranks/RanksConfig.java @@ -1,7 +1,6 @@ package dev.pgm.community.utils.ranks; import com.google.common.collect.Lists; -import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; @@ -41,57 +40,18 @@ public void reload(Configuration config) { ranks.add(rank); } - Collections.sort(ranks, Comparator.comparingInt(Rank::getWeight)); + ranks.sort(Comparator.comparingInt(Rank::weight)); } - public static class Rank { - private String name; - private String prefix; - private String permission; - private ChatColor color; - private int multiplier; - private int weight; - - public Rank( - String name, - String prefix, - String permission, - ChatColor color, - int multiplier, - int weight) { - this.name = name; - this.prefix = prefix; - this.color = color; - this.multiplier = multiplier; - this.weight = weight; - } - - public String getName() { - return name; - } - - public String getPrefix() { - return prefix; - } - - public String getPermission() { - return permission; - } - - public ChatColor getColor() { - return color; - } + public record Rank( + String name, String prefix, String permission, ChatColor color, int multiplier, int weight) { public NamedTextColor getTextColor() { - return TextFormatter.convert(getColor()); + return TextFormatter.convert(color()); } public int getVoteMultiplier() { return multiplier; } - - public int getWeight() { - return weight; - } } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f8e1ee31..61285a65 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernInventoryUtils.java b/platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernInventoryUtils.java index 2b6bda4b..d38a6bb4 100644 --- a/platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernInventoryUtils.java +++ b/platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernInventoryUtils.java @@ -6,7 +6,6 @@ import dev.pgm.community.util.Supports; import java.util.List; import java.util.Random; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.bukkit.Material; import org.bukkit.attribute.Attribute; @@ -33,7 +32,7 @@ public ItemStack getRandomPotion(boolean splash, Random random) { case WATER, MUNDANE, THICK, AWKWARD, WEAVING, OOZING, INFESTED -> false; default -> true; }) - .collect(Collectors.toList()); + .toList(); PotionType randomType = safeTypes.get(random.nextInt(safeTypes.size())); ItemStack item = new ItemStack(splash ? Material.SPLASH_POTION : Material.POTION); if (item.getItemMeta() instanceof PotionMeta meta) { diff --git a/platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpInventoryUtils.java b/platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpInventoryUtils.java index c2c865aa..dfe161ca 100644 --- a/platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpInventoryUtils.java +++ b/platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpInventoryUtils.java @@ -6,7 +6,6 @@ import dev.pgm.community.util.Supports; import java.util.List; import java.util.Random; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.bukkit.Material; import org.bukkit.attribute.Attribute; @@ -30,7 +29,7 @@ public void addAttributeModifier(ItemMeta meta, Attribute attribute, AttributeMo public ItemStack getRandomPotion(boolean splash, Random random) { List safeTypes = Stream.of(PotionType.values()) .filter(p -> p != PotionType.WATER) // No water lol - .collect(Collectors.toList()); + .toList(); PotionType randomType = safeTypes.get(random.nextInt(safeTypes.size())); Potion potion = new Potion(randomType, 1, splash); ItemStack item = new ItemStack(Material.POTION); diff --git a/util/src/main/java/dev/pgm/community/util/Attributes.java b/util/src/main/java/dev/pgm/community/util/Attributes.java index df01cbeb..f60d6e46 100644 --- a/util/src/main/java/dev/pgm/community/util/Attributes.java +++ b/util/src/main/java/dev/pgm/community/util/Attributes.java @@ -10,7 +10,6 @@ public class Attributes { parse("GENERIC_KNOCKBACK_RESISTANCE", "KNOCKBACK_RESISTANCE"); private static Attribute parse(String... names) { - Attribute type = BukkitUtils.parse(Attribute::valueOf, names); - return type; + return BukkitUtils.parse(Attribute::valueOf, names); } }