From 1166c7a11dbb3ceaa8a0f74b0d331306f5da574a Mon Sep 17 00:00:00 2001 From: Pablo Herrera Date: Sun, 29 Dec 2024 05:34:49 +0100 Subject: [PATCH] A bunch of minor code quality fixes (#1466) Signed-off-by: Pablo Herrera --- core/src/main/java/tc/oc/pgm/PGMPlugin.java | 5 +- .../java/tc/oc/pgm/action/ActionParser.java | 2 +- .../oc/pgm/action/ActionScopeValidation.java | 9 +- .../oc/pgm/api/map/includes/MapInclude.java | 4 +- .../java/tc/oc/pgm/command/CycleCommand.java | 2 +- .../java/tc/oc/pgm/command/MapCommand.java | 10 +- .../tc/oc/pgm/command/MapOrderCommand.java | 22 ++--- .../java/tc/oc/pgm/command/VotingCommand.java | 42 +++------ .../tc/oc/pgm/death/DeathMessageBuilder.java | 6 +- .../tc/oc/pgm/destroyable/Destroyable.java | 5 - .../pgm/doublejump/DoubleJumpMatchModule.java | 8 +- .../tc/oc/pgm/ffa/FreeForAllMatchModule.java | 14 +-- .../main/java/tc/oc/pgm/filters/Filters.java | 41 --------- core/src/main/java/tc/oc/pgm/flag/Flag.java | 24 +++-- .../java/tc/oc/pgm/goals/TouchableGoal.java | 9 -- .../oc/pgm/hologram/HologramMatchModule.java | 3 +- .../main/java/tc/oc/pgm/kits/KitParser.java | 1 + .../java/tc/oc/pgm/listeners/PGMListener.java | 11 +-- .../tc/oc/pgm/regions/NegativeRegion.java | 5 - .../tc/oc/pgm/regions/XMLRegionReference.java | 5 - .../oc/pgm/snapshot/SnapshotMatchModule.java | 2 +- .../java/tc/oc/pgm/tablist/MatchTabView.java | 8 +- core/src/main/java/tc/oc/pgm/teams/Team.java | 2 +- .../java/tc/oc/pgm/teams/TeamMatchModule.java | 16 +--- .../oc/pgm/timelimit/OvertimeCountdown.java | 15 +-- .../pgm/tracker/trackers/EntityTracker.java | 15 ++- .../tc/oc/pgm/util/UsernameFormatUtils.java | 24 ++--- .../oc/pgm/util/player/PlayerComponent.java | 8 +- .../java/tc/oc/pgm/wool/MonumentWool.java | 9 +- .../platform/modern/impl/ModernMiscUtil.java | 5 - .../modern/listeners/ModernListener.java | 7 +- .../modern/material/ModernMaterialParser.java | 6 +- .../platform/sportpaper/impl/SpNMSHacks.java | 1 + .../sportpaper/material/SpMaterialParser.java | 3 +- .../main/java/tc/oc/pgm/server/PGMServer.java | 63 ++++++------- .../tc/oc/pgm/server/RuntimePluginLoader.java | 26 +++--- util/src/main/i18n/README.md | 2 +- .../tc/oc/pgm/util/block/BlockStates.java | 12 --- .../tc/oc/pgm/util/block/BlockVectorSet.java | 6 +- .../tc/oc/pgm/util/inventory/ItemBuilder.java | 3 +- .../tc/oc/pgm/util/material/Materials.java | 24 ++--- .../oc/pgm/util/reflect/ReflectionUtils.java | 18 +--- .../tc/oc/pgm/util/text/TextFormatter.java | 91 +++++++------------ .../tc/oc/pgm/util/text/TextTranslations.java | 19 ---- .../java/tc/oc/pgm/util/text/UTF8Control.java | 3 +- .../java/tc/oc/pgm/util/xml/XMLUtils.java | 4 +- .../tc/oc/pgm/util/text/TextParserTest.java | 4 +- 47 files changed, 198 insertions(+), 426 deletions(-) delete mode 100644 core/src/main/java/tc/oc/pgm/filters/Filters.java diff --git a/core/src/main/java/tc/oc/pgm/PGMPlugin.java b/core/src/main/java/tc/oc/pgm/PGMPlugin.java index 13f4372054..bb77871512 100644 --- a/core/src/main/java/tc/oc/pgm/PGMPlugin.java +++ b/core/src/main/java/tc/oc/pgm/PGMPlugin.java @@ -458,10 +458,9 @@ private String format(LogRecord record) { cause = xmlErr.getCause(); message = xmlErr.getMessage(); - if (cause instanceof SyntaxException && xmlErr.getNode() != null) { + if (cause instanceof SyntaxException se && xmlErr.getNode() != null) { String value = xmlErr.getNode().getValue(); - SyntaxException se = (SyntaxException) cause; int start = se.getStartIdx(); if (start == -1 || start > value.length()) start = value.length(); int end = se.getEndIdx(); @@ -510,7 +509,7 @@ private String format( private @Nullable E tryException(Class type, @Nullable Throwable thrown) { if (thrown == null) return null; - return type.isInstance(thrown) ? (E) thrown : tryException(type, thrown.getCause()); + return type.isInstance(thrown) ? type.cast(thrown) : tryException(type, thrown.getCause()); } @Override diff --git a/core/src/main/java/tc/oc/pgm/action/ActionParser.java b/core/src/main/java/tc/oc/pgm/action/ActionParser.java index 31b0fe6eaf..bb13773fd4 100644 --- a/core/src/main/java/tc/oc/pgm/action/ActionParser.java +++ b/core/src/main/java/tc/oc/pgm/action/ActionParser.java @@ -138,7 +138,7 @@ private Action parseReference(Node node, String id, Class boun return action; } - @SuppressWarnings("rawtypes, unchecked") + @SuppressWarnings({"rawtypes", "unchecked"}) private void validate( Action action, FeatureValidation> validation, Node node) throws InvalidXMLException { diff --git a/core/src/main/java/tc/oc/pgm/action/ActionScopeValidation.java b/core/src/main/java/tc/oc/pgm/action/ActionScopeValidation.java index 38316d016c..1fa0f1b6c3 100644 --- a/core/src/main/java/tc/oc/pgm/action/ActionScopeValidation.java +++ b/core/src/main/java/tc/oc/pgm/action/ActionScopeValidation.java @@ -11,7 +11,14 @@ public class ActionScopeValidation implements FeatureValidation, ActionScopeValidation> INSTANCES = new HashMap<>(); public static ActionScopeValidation of(Class scope) { - return INSTANCES.computeIfAbsent(scope, ActionScopeValidation::new); + ActionScopeValidation validation = INSTANCES.get(scope); + if (validation != null) return validation; + synchronized (INSTANCES) { + validation = INSTANCES.get(scope); + if (validation != null) return validation; + INSTANCES.put(scope, validation = new ActionScopeValidation(scope)); + return validation; + } } private final Class scope; diff --git a/core/src/main/java/tc/oc/pgm/api/map/includes/MapInclude.java b/core/src/main/java/tc/oc/pgm/api/map/includes/MapInclude.java index 42ea0f4c22..526bbb592a 100644 --- a/core/src/main/java/tc/oc/pgm/api/map/includes/MapInclude.java +++ b/core/src/main/java/tc/oc/pgm/api/map/includes/MapInclude.java @@ -14,8 +14,8 @@ public interface MapInclude { long getLastModified(); /** - * Get a collection of {@link Content} which can be merged into an existing {@link Document}. If - * the underlying file has changed, it will re-load the xml. + * Get a collection of {@link Content} which can be merged into an existing + * {@link org.jdom2.Document}. If the underlying file has changed, it will re-load the xml. * * @return a collection of {@link Content} */ diff --git a/core/src/main/java/tc/oc/pgm/command/CycleCommand.java b/core/src/main/java/tc/oc/pgm/command/CycleCommand.java index 1279ca42fe..509b741bb7 100644 --- a/core/src/main/java/tc/oc/pgm/command/CycleCommand.java +++ b/core/src/main/java/tc/oc/pgm/command/CycleCommand.java @@ -46,7 +46,7 @@ public void cycle( throw exception("map.setNext.notDev"); } mapOrder.setNextMap(map); - MapOrderCommand.sendSetNextMessage(map, sender, match); + MapOrderCommand.sendSetNextMessage(map, sender); } match.needModule(CycleMatchModule.class).startCountdown(duration); diff --git a/core/src/main/java/tc/oc/pgm/command/MapCommand.java b/core/src/main/java/tc/oc/pgm/command/MapCommand.java index 3ce9cd69bf..5b413fd97c 100644 --- a/core/src/main/java/tc/oc/pgm/command/MapCommand.java +++ b/core/src/main/java/tc/oc/pgm/command/MapCommand.java @@ -88,13 +88,9 @@ public void maps( search = search.filter(map -> chosenPhases.contains(map.getPhase())); if (author != null) { - String query = author; - - List collect = search.collect(Collectors.toList()); - boolean exactMatch = - collect.stream().anyMatch((suggestion) -> matchesAuthor(suggestion, query, true)); - search = collect.stream() - .filter((mapSuggestion -> matchesAuthor(mapSuggestion, query, exactMatch))); + List collect = search.toList(); + boolean exactMatch = collect.stream().anyMatch(map -> matchesAuthor(map, author, true)); + search = collect.stream().filter(map -> matchesAuthor(map, author, exactMatch)); } Set maps = search.collect(Collectors.toCollection(TreeSet::new)); diff --git a/core/src/main/java/tc/oc/pgm/command/MapOrderCommand.java b/core/src/main/java/tc/oc/pgm/command/MapOrderCommand.java index 6ec4d853bb..8c8c089cc9 100644 --- a/core/src/main/java/tc/oc/pgm/command/MapOrderCommand.java +++ b/core/src/main/java/tc/oc/pgm/command/MapOrderCommand.java @@ -5,6 +5,7 @@ import static tc.oc.pgm.api.Permissions.DEV; import static tc.oc.pgm.api.map.Phase.DEVELOPMENT; import static tc.oc.pgm.command.util.ParserConstants.CURRENT; +import static tc.oc.pgm.util.player.PlayerComponent.player; import static tc.oc.pgm.util.text.TextException.exception; import net.kyori.adventure.text.Component; @@ -22,11 +23,9 @@ import tc.oc.pgm.api.Permissions; import tc.oc.pgm.api.map.MapInfo; import tc.oc.pgm.api.map.MapOrder; -import tc.oc.pgm.api.match.Match; import tc.oc.pgm.channels.ChatManager; import tc.oc.pgm.restart.RestartManager; import tc.oc.pgm.util.Audience; -import tc.oc.pgm.util.UsernameFormatUtils; import tc.oc.pgm.util.named.MapNameStyle; public final class MapOrderCommand { @@ -51,7 +50,6 @@ public void setNext( Audience viewer, CommandSender sender, MapOrder mapOrder, - Match match, @Flag(value = "force", aliases = "f") boolean force, @Flag(value = "reset", aliases = "r") boolean reset, @Argument("map") @Default(CURRENT) @FlagYielding MapInfo map) { @@ -69,11 +67,8 @@ public void setNext( if (mapOrder.getNextMap() != null) { Component mapName = mapOrder.getNextMap().getStyledName(MapNameStyle.COLOR); mapOrder.setNextMap(null); - ChatManager.broadcastAdminMessage(translatable( - "map.setNext.revert", - NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), - mapName)); + ChatManager.broadcastAdminMessage( + translatable("map.setNext.revert", NamedTextColor.GRAY, player(sender), mapName)); } else { viewer.sendWarning(translatable("map.noNextMap")); } @@ -87,15 +82,12 @@ public void setNext( viewer.sendWarning(translatable("admin.cancelRestart.restartUnqueued", NamedTextColor.GREEN)); } - sendSetNextMessage(map, sender, match); + sendSetNextMessage(map, sender); } - public static void sendSetNextMessage(@NotNull MapInfo map, CommandSender sender, Match match) { + public static void sendSetNextMessage(@NotNull MapInfo map, CommandSender sender) { Component mapName = text(map.getName(), NamedTextColor.GOLD); - ChatManager.broadcastAdminMessage(translatable( - "map.setNext", - NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), - mapName)); + ChatManager.broadcastAdminMessage( + translatable("map.setNext", NamedTextColor.GRAY, player(sender), mapName)); } } diff --git a/core/src/main/java/tc/oc/pgm/command/VotingCommand.java b/core/src/main/java/tc/oc/pgm/command/VotingCommand.java index d4db420c7c..54d9157117 100644 --- a/core/src/main/java/tc/oc/pgm/command/VotingCommand.java +++ b/core/src/main/java/tc/oc/pgm/command/VotingCommand.java @@ -6,6 +6,7 @@ import static net.kyori.adventure.text.event.HoverEvent.showText; import static tc.oc.pgm.api.Permissions.DEV; import static tc.oc.pgm.api.map.Phase.DEVELOPMENT; +import static tc.oc.pgm.util.player.PlayerComponent.player; import static tc.oc.pgm.util.text.TextException.exception; import java.util.List; @@ -23,14 +24,12 @@ import tc.oc.pgm.api.Permissions; import tc.oc.pgm.api.map.MapInfo; import tc.oc.pgm.api.map.MapOrder; -import tc.oc.pgm.api.match.Match; import tc.oc.pgm.channels.ChatManager; import tc.oc.pgm.rotation.MapPoolManager; import tc.oc.pgm.rotation.pools.VotingPool; import tc.oc.pgm.rotation.vote.MapVotePicker; import tc.oc.pgm.rotation.vote.VotePoolOptions; import tc.oc.pgm.util.Audience; -import tc.oc.pgm.util.UsernameFormatUtils; import tc.oc.pgm.util.named.MapNameStyle; import tc.oc.pgm.util.text.TextFormatter; @@ -44,7 +43,6 @@ public void addMap( Audience viewer, CommandSender sender, MapOrder mapOrder, - Match match, @Argument("map") @Greedy MapInfo map) { if (PGM.get().getConfiguration().enforceDevPhase() && DEVELOPMENT.equals(map.getPhase()) @@ -55,10 +53,7 @@ public void addMap( VotePoolOptions vote = getVoteOptions(mapOrder); Component addMessage = translatable( - "vote.add", - NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), - map.getStyledName(MapNameStyle.COLOR)); + "vote.add", NamedTextColor.GRAY, player(sender), map.getStyledName(MapNameStyle.COLOR)); if (vote.isMapAdded(map)) { viewer.sendWarning(addMessage); @@ -79,14 +74,13 @@ public void removeMap( Audience viewer, CommandSender sender, MapOrder mapOrder, - Match match, @Argument("map") @Greedy MapInfo map) { VotePoolOptions vote = getVoteOptions(mapOrder); if (vote.removeMap(map)) { ChatManager.broadcastAdminMessage(translatable( "vote.remove", NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), + player(sender), map.getStyledName(MapNameStyle.COLOR))); } else { viewer.sendWarning(translatable("map.notFound")); @@ -96,21 +90,18 @@ public void removeMap( @Command("mode") @CommandDescription("Toggle the voting mode between replace and override") @Permission(Permissions.SETNEXT) - public void mode(CommandSender sender, MapOrder mapOrder, Match match) { + public void mode(CommandSender sender, MapOrder mapOrder) { VotePoolOptions vote = getVoteOptions(mapOrder); Component voteModeName = translatable( vote.toggleMode() ? "vote.mode.replace" : "vote.mode.create", NamedTextColor.LIGHT_PURPLE); - ChatManager.broadcastAdminMessage(translatable( - "vote.toggle", - NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), - voteModeName)); + ChatManager.broadcastAdminMessage( + translatable("vote.toggle", NamedTextColor.GRAY, player(sender), voteModeName)); } @Command("clear") @CommandDescription("Clear all custom map selections from the next vote") @Permission(Permissions.SETNEXT) - public void clearMaps(Audience viewer, CommandSender sender, Match match, MapOrder mapOrder) { + public void clearMaps(Audience viewer, CommandSender sender, MapOrder mapOrder) { VotePoolOptions vote = getVoteOptions(mapOrder); List maps = vote.getCustomVoteMaps().stream() @@ -119,7 +110,7 @@ public void clearMaps(Audience viewer, CommandSender sender, Match match, MapOrd Component clearedMsg = translatable( "vote.remove", NamedTextColor.GRAY, - UsernameFormatUtils.formatStaffName(sender, match), + player(sender), TextFormatter.list(maps, NamedTextColor.GRAY)); vote.clearMaps(); @@ -177,18 +168,9 @@ public void listMaps(Audience viewer, MapOrder mapOrder) { } public static VotePoolOptions getVoteOptions(MapOrder mapOrder) { - if (mapOrder instanceof MapPoolManager) { - MapPoolManager manager = (MapPoolManager) mapOrder; - if (manager.getActiveMapPool() instanceof VotingPool) { - VotingPool votePool = (VotingPool) manager.getActiveMapPool(); - if (votePool.getCurrentPoll() != null) { - throw exception("vote.modify.disallow"); - } - return manager.getVoteOptions(); - } - throw exception("vote.disabled"); - } - - throw exception("pool.mapPoolsDisabled"); + if (!(mapOrder instanceof MapPoolManager manager)) throw exception("pool.mapPoolsDisabled"); + if (!(manager.getActiveMapPool() instanceof VotingPool pool)) throw exception("vote.disabled"); + if (pool.getCurrentPoll() != null) throw exception("vote.modify.disallow"); + return manager.getVoteOptions(); } } diff --git a/core/src/main/java/tc/oc/pgm/death/DeathMessageBuilder.java b/core/src/main/java/tc/oc/pgm/death/DeathMessageBuilder.java index 421a29353d..91d1248624 100644 --- a/core/src/main/java/tc/oc/pgm/death/DeathMessageBuilder.java +++ b/core/src/main/java/tc/oc/pgm/death/DeathMessageBuilder.java @@ -111,11 +111,7 @@ boolean exists(String prefix) { /** Return a new key built from the current key with the given tokens appended */ String append(String... tokens) { - String newKey = key; - for (String token : tokens) { - newKey += '.' + token; - } - return newKey; + return key + (tokens.length == 0 ? "" : '.' + String.join(".", tokens)); } /** diff --git a/core/src/main/java/tc/oc/pgm/destroyable/Destroyable.java b/core/src/main/java/tc/oc/pgm/destroyable/Destroyable.java index 2c67b37613..2ff797e0d3 100644 --- a/core/src/main/java/tc/oc/pgm/destroyable/Destroyable.java +++ b/core/src/main/java/tc/oc/pgm/destroyable/Destroyable.java @@ -382,11 +382,6 @@ public DestroyableHealthChange handleBlockChange( return changeInfo; } - @Override - protected void playTouchEffects(ParticipantState toucher) { - // We make our own touch sounds - } - /** * Test if the given block change is allowed by this Destroyable * diff --git a/core/src/main/java/tc/oc/pgm/doublejump/DoubleJumpMatchModule.java b/core/src/main/java/tc/oc/pgm/doublejump/DoubleJumpMatchModule.java index 3734a1cabe..c77ed59140 100644 --- a/core/src/main/java/tc/oc/pgm/doublejump/DoubleJumpMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/doublejump/DoubleJumpMatchModule.java @@ -31,10 +31,10 @@ public class DoubleJumpMatchModule implements MatchModule, Listener, Tickable { private static final Sound ZOMBIE_INFECT = parse(Sound::valueOf, "ZOMBIE_INFECT", "ENTITY_ZOMBIE_INFECT"); - private class Jumper { - final Player player; - final DoubleJumpKit kit; - float charge; + private static class Jumper { + private final Player player; + private final DoubleJumpKit kit; + private float charge; private Jumper(Player player, DoubleJumpKit kit) { this.player = player; diff --git a/core/src/main/java/tc/oc/pgm/ffa/FreeForAllMatchModule.java b/core/src/main/java/tc/oc/pgm/ffa/FreeForAllMatchModule.java index 9cdce25f39..e2c156e6e7 100644 --- a/core/src/main/java/tc/oc/pgm/ffa/FreeForAllMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/ffa/FreeForAllMatchModule.java @@ -53,13 +53,7 @@ public class FreeForAllMatchModule implements MatchModule, Listener, JoinHandler ChatColor.DARK_RED }; - class NeedMorePlayers implements UnreadyReason { - final int players; - - NeedMorePlayers(int players) { - this.players = players; - } - + record NeedMorePlayers(int players) implements UnreadyReason { @Override public Component getReason() { if (players == 1) { @@ -73,13 +67,7 @@ public Component getReason() { public boolean canForceStart() { return true; } - - @Override - public String toString() { - return getClass().getSimpleName() + "{players=" + players + "}"; - } } - ; private final Match match; private final FreeForAllOptions options; diff --git a/core/src/main/java/tc/oc/pgm/filters/Filters.java b/core/src/main/java/tc/oc/pgm/filters/Filters.java deleted file mode 100644 index 3046373228..0000000000 --- a/core/src/main/java/tc/oc/pgm/filters/Filters.java +++ /dev/null @@ -1,41 +0,0 @@ -package tc.oc.pgm.filters; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.util.BlockVector; -import org.jetbrains.annotations.Nullable; - -/** Utility methods useful for implementing filters */ -public class Filters { - private Filters() {} - - /** - * Query Argument Coercion Helpers - * - *

These methods are meant to be used on query arguments to coerce them to particular types. If - * the helper returns null, the object is not coercible to that type and the filter should - * abstain. - */ - - /** If the query argument is a block, return its state */ - public static @Nullable BlockState toBlockState(Object obj) { - if (obj instanceof BlockState) { - return (BlockState) obj; - } else if (obj instanceof Block) { - return ((Block) obj).getState(); - } else { - return null; - } - } - - /** If the query argument is a block, return its position */ - public static @Nullable BlockVector toBlockVector(Object obj) { - if (obj instanceof Block) { - return ((Block) obj).getLocation().toVector().toBlockVector(); - } else if (obj instanceof BlockState) { - return ((BlockState) obj).getLocation().toVector().toBlockVector(); - } else { - return null; - } - } -} diff --git a/core/src/main/java/tc/oc/pgm/flag/Flag.java b/core/src/main/java/tc/oc/pgm/flag/Flag.java index ef170c20ea..ebdd01032d 100644 --- a/core/src/main/java/tc/oc/pgm/flag/Flag.java +++ b/core/src/main/java/tc/oc/pgm/flag/Flag.java @@ -5,6 +5,7 @@ import static tc.oc.pgm.util.material.ColorUtils.COLOR_UTILS; import com.google.common.collect.ImmutableSet; +import java.util.Objects; import java.util.Optional; import java.util.Set; import net.kyori.adventure.sound.Sound; @@ -26,7 +27,6 @@ import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.BlockVector; import org.jetbrains.annotations.Nullable; import tc.oc.pgm.api.event.BlockTransformEvent; import tc.oc.pgm.api.filter.query.LocationQuery; @@ -37,7 +37,6 @@ import tc.oc.pgm.api.party.Party; import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.api.player.ParticipantState; -import tc.oc.pgm.api.region.Region; import tc.oc.pgm.flag.event.FlagCaptureEvent; import tc.oc.pgm.flag.event.FlagStateChangeEvent; import tc.oc.pgm.flag.post.PostDefinition; @@ -58,6 +57,7 @@ import tc.oc.pgm.spawns.events.ParticipantDespawnEvent; import tc.oc.pgm.teams.Team; import tc.oc.pgm.teams.TeamMatchModule; +import tc.oc.pgm.util.StreamUtils; import tc.oc.pgm.util.block.BlockFaces; import tc.oc.pgm.util.bukkit.BukkitUtils; import tc.oc.pgm.util.inventory.ItemBuilder; @@ -101,22 +101,20 @@ protected Flag(Match match, FlagDefinition definition, ImmutableSet toBanner(pos.toLocation(match.getWorld()).getBlock())) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); } + if (banner != null) break; } if (banner == null) { diff --git a/core/src/main/java/tc/oc/pgm/goals/TouchableGoal.java b/core/src/main/java/tc/oc/pgm/goals/TouchableGoal.java index 30030c975b..8e4b1f120a 100644 --- a/core/src/main/java/tc/oc/pgm/goals/TouchableGoal.java +++ b/core/src/main/java/tc/oc/pgm/goals/TouchableGoal.java @@ -19,7 +19,6 @@ import tc.oc.pgm.api.party.Competitor; import tc.oc.pgm.api.party.Party; import tc.oc.pgm.api.party.event.CompetitorRemoveEvent; -import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.api.player.ParticipantState; import tc.oc.pgm.channels.ChatManager; import tc.oc.pgm.goals.events.GoalCompleteEvent; @@ -142,7 +141,6 @@ public void touch(final @Nullable ParticipantState toucher) { getMatch().callEvent(event); sendTouchMessage(toucher, !event.getCancelToucherMessage()); - playTouchEffects(toucher); } public void resetTouches() { @@ -214,13 +212,6 @@ protected void sendTouchMessage(@Nullable ParticipantState toucher, boolean incl } } - protected void playTouchEffects(@Nullable ParticipantState toucher) { - if (toucher == null || !hasShowOption(ShowOption.SHOW_EFFECTS)) return; - - MatchPlayer onlineToucher = toucher.getPlayer().orElse(null); - if (onlineToucher == null) return; - } - @EventHandler(priority = EventPriority.MONITOR) public void onPlayerDeath(ParticipantDespawnEvent event) { ParticipantState victim = event.getPlayer().getParticipantState(); diff --git a/core/src/main/java/tc/oc/pgm/hologram/HologramMatchModule.java b/core/src/main/java/tc/oc/pgm/hologram/HologramMatchModule.java index 65702e4871..0edba4e34f 100644 --- a/core/src/main/java/tc/oc/pgm/hologram/HologramMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/hologram/HologramMatchModule.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.util.Vector; @@ -17,7 +18,7 @@ import tc.oc.pgm.events.ListenerScope; @ListenerScope(MatchScope.LOADED) -public class HologramMatchModule implements MatchModule { +public class HologramMatchModule implements MatchModule, Listener { private final Set labelEntities = new HashSet<>(); private final Match match; diff --git a/core/src/main/java/tc/oc/pgm/kits/KitParser.java b/core/src/main/java/tc/oc/pgm/kits/KitParser.java index 7449f89f3b..7abe019b3d 100644 --- a/core/src/main/java/tc/oc/pgm/kits/KitParser.java +++ b/core/src/main/java/tc/oc/pgm/kits/KitParser.java @@ -588,6 +588,7 @@ String itemFlagName(ItemFlag flag) { case HIDE_UNBREAKABLE -> "unbreakable"; case HIDE_DESTROYS -> "can-destroy"; case HIDE_PLACED_ON -> "can-place-on"; + //noinspection UnnecessaryDefault: newer versions do have extra branches default -> { if (flag == InventoryUtils.HIDE_ADDITIONAL_FLAG) yield "other"; yield flag.name().replace("HIDE_", "").toLowerCase().replace("_", "-"); diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 2d5269d806..8cdabf2a9e 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -5,6 +5,7 @@ import static net.kyori.adventure.text.Component.translatable; import static tc.oc.pgm.util.nms.NMSHacks.NMS_HACKS; import static tc.oc.pgm.util.nms.PlayerUtils.PLAYER_UTILS; +import static tc.oc.pgm.util.player.PlayerComponent.player; import java.util.Random; import java.util.concurrent.ExecutionException; @@ -53,7 +54,6 @@ import tc.oc.pgm.events.PlayerLeavePartyEvent; import tc.oc.pgm.gamerules.GameRulesMatchModule; import tc.oc.pgm.modules.WorldTimeModule; -import tc.oc.pgm.util.UsernameFormatUtils; import tc.oc.pgm.util.bukkit.WorldBorders; import tc.oc.pgm.util.event.PlayerCoarseMoveEvent; import tc.oc.pgm.util.material.Materials; @@ -178,10 +178,8 @@ public void fixStuckArrows(final PlayerRespawnEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void clearActiveEnderPearls(final PlayerDeathEvent event) { - for (Entity entity : event.getEntity().getWorld().getEntitiesByClass(EnderPearl.class)) { - if (((EnderPearl) entity).getShooter() == event.getEntity()) { - entity.remove(); - } + for (EnderPearl entity : event.getEntity().getWorld().getEntitiesByClass(EnderPearl.class)) { + if (entity.getShooter() == event.getEntity()) entity.remove(); } } @@ -316,8 +314,7 @@ public void announceDynamicMapPoolChange(MapPoolAdjustEvent event) { // Send feedback to staff, alerting them that the map pool has changed by force if (event.isForced()) { Component poolName = text(event.getNewPool().getName(), NamedTextColor.LIGHT_PURPLE); - Component staffName = - UsernameFormatUtils.formatStaffName(event.getSender(), event.getMatch()); + Component staffName = player(event.getSender()); Component matchLimit = text() .append(text(event.getMatchLimit(), NamedTextColor.GREEN)) .append(space()) diff --git a/core/src/main/java/tc/oc/pgm/regions/NegativeRegion.java b/core/src/main/java/tc/oc/pgm/regions/NegativeRegion.java index e07fa88e07..c94174a8ed 100644 --- a/core/src/main/java/tc/oc/pgm/regions/NegativeRegion.java +++ b/core/src/main/java/tc/oc/pgm/regions/NegativeRegion.java @@ -16,11 +16,6 @@ public boolean contains(Vector point) { return !this.region.contains(point); } - @Override - public boolean isBlockBounded() { - return false; - } - @Override public Bounds getBounds() { throw new UnsupportedOperationException("NegativeRegion is unbounded"); diff --git a/core/src/main/java/tc/oc/pgm/regions/XMLRegionReference.java b/core/src/main/java/tc/oc/pgm/regions/XMLRegionReference.java index 7ebde458c3..ccb66cf34c 100644 --- a/core/src/main/java/tc/oc/pgm/regions/XMLRegionReference.java +++ b/core/src/main/java/tc/oc/pgm/regions/XMLRegionReference.java @@ -131,11 +131,6 @@ public boolean matches(LocationQuery query) { return get().matches(query); } - @Override - public Class queryType() { - return LocationQuery.class; - } - @Override public Stream getBlockPositions() { return get().getBlockPositions(); diff --git a/core/src/main/java/tc/oc/pgm/snapshot/SnapshotMatchModule.java b/core/src/main/java/tc/oc/pgm/snapshot/SnapshotMatchModule.java index ee4ee47a0b..1818165b8e 100644 --- a/core/src/main/java/tc/oc/pgm/snapshot/SnapshotMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/snapshot/SnapshotMatchModule.java @@ -73,7 +73,7 @@ public void onBlockChange(BlockTransformEvent event) { * Manually save the initial state of a block to the snapshot. * * @param cv the chunk vector to save - * @param state optional block state to write on the snapshot + * @param oldState optional block state to write on the snapshot */ public void saveSnapshot(ChunkVector cv, @Nullable BlockState oldState) { snapshot.saveSnapshot(cv, oldState); diff --git a/core/src/main/java/tc/oc/pgm/tablist/MatchTabView.java b/core/src/main/java/tc/oc/pgm/tablist/MatchTabView.java index 7c43908e22..822e4c547e 100644 --- a/core/src/main/java/tc/oc/pgm/tablist/MatchTabView.java +++ b/core/src/main/java/tc/oc/pgm/tablist/MatchTabView.java @@ -231,10 +231,8 @@ private int getMinimumParticipantRows(Collection teams) { int mostRows = 0; for (int x = 0; x < teamsPerColumn && teamIt.hasNext(); x++) { Team team = teamIt.next(); - mostRows = - Math.max( - mostRows, - divideRoundingUp(team.getPlayers().size(), getColumnsForTeam(team, teams))); + mostRows = Math.max( + mostRows, divideRoundingUp(team.getPlayers().size(), getColumnsForTeam(team, teams))); } biggestTeamColumn += 2 + mostRows; @@ -245,7 +243,7 @@ private int getMinimumParticipantRows(Collection teams) { private int getColumnsForTeam(Team team, Collection teams) { if (teams.size() < getWidth()) { float cols = (float) team.getMaxPlayers() * getWidth() / match.getMaxPlayers(); - if (cols % 1 == 0.5 && cols > ((float) getWidth() / teams.size())) cols -= 0.5; + if (cols % 1 == 0.5 && cols > ((float) getWidth() / teams.size())) cols -= 0.5f; return Math.max(1, Math.min(Math.round(cols), getWidth() - teams.size() + 1)); } else { return 1; diff --git a/core/src/main/java/tc/oc/pgm/teams/Team.java b/core/src/main/java/tc/oc/pgm/teams/Team.java index da616863cb..6c070c75ce 100644 --- a/core/src/main/java/tc/oc/pgm/teams/Team.java +++ b/core/src/main/java/tc/oc/pgm/teams/Team.java @@ -222,7 +222,7 @@ public int getOpenSlots(JoinRequest request, boolean priorityKick) { } else { // Subtract all players who cannot be kicked JoinMatchModule jmm = join(); - slots -= + slots -= (int) this.getPlayers().stream().filter(pl -> !jmm.canBePriorityKicked(pl)).count(); } return Math.max(0, slots); diff --git a/core/src/main/java/tc/oc/pgm/teams/TeamMatchModule.java b/core/src/main/java/tc/oc/pgm/teams/TeamMatchModule.java index 460bf8575d..4c297a8969 100644 --- a/core/src/main/java/tc/oc/pgm/teams/TeamMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/teams/TeamMatchModule.java @@ -51,15 +51,7 @@ @ListenerScope(MatchScope.LOADED) public class TeamMatchModule implements MatchModule, Listener, JoinHandler { - class NeedMorePlayers implements UnreadyReason { - final @Nullable Team team; - final int players; - - NeedMorePlayers(@Nullable Team team, int players) { - this.team = team; - this.players = players; - } - + record NeedMorePlayers(@Nullable Team team, int players) implements UnreadyReason { @Override public Component getReason() { if (team != null) { @@ -83,13 +75,7 @@ public Component getReason() { public boolean canForceStart() { return true; } - - @Override - public String toString() { - return getClass().getSimpleName() + "{players=" + players + " team=" + team + "}"; - } } - ; public static class TeamJoinResult implements JoinResult { private final JoinResultOption status; diff --git a/core/src/main/java/tc/oc/pgm/timelimit/OvertimeCountdown.java b/core/src/main/java/tc/oc/pgm/timelimit/OvertimeCountdown.java index e26b51a214..151c477e1c 100644 --- a/core/src/main/java/tc/oc/pgm/timelimit/OvertimeCountdown.java +++ b/core/src/main/java/tc/oc/pgm/timelimit/OvertimeCountdown.java @@ -23,10 +23,6 @@ public OvertimeCountdown(Match match, TimeLimit timeLimit) { super(match, timeLimit); } - public @Nullable Duration getRemaining() { - return remaining; - } - @Override protected TextColor urgencyColor() { long seconds = remaining.getSeconds(); @@ -78,12 +74,11 @@ public void onStart(Duration remaining, Duration total) { overtimeStart = Instant.now(); overtimeEnd = overtimeStart.plus(timeLimit.getMaxOvertime()); - match.sendMessage( - translatable( - "broadcast.overtime.limit", - NamedTextColor.YELLOW, - TemporalComponent.briefNaturalApproximate(timeLimit.getMaxOvertime()) - .color(NamedTextColor.AQUA))); + match.sendMessage(translatable( + "broadcast.overtime.limit", + NamedTextColor.YELLOW, + TemporalComponent.briefNaturalApproximate(timeLimit.getMaxOvertime()) + .color(NamedTextColor.AQUA))); } } diff --git a/core/src/main/java/tc/oc/pgm/tracker/trackers/EntityTracker.java b/core/src/main/java/tc/oc/pgm/tracker/trackers/EntityTracker.java index bdf21f315d..8f42bf1350 100644 --- a/core/src/main/java/tc/oc/pgm/tracker/trackers/EntityTracker.java +++ b/core/src/main/java/tc/oc/pgm/tracker/trackers/EntityTracker.java @@ -38,15 +38,12 @@ public EntityTracker(Match match) { } public PhysicalInfo createEntity(Entity entity, @Nullable ParticipantState owner) { - if (entity instanceof ThrownPotion) { - return new ThrownPotionInfo((ThrownPotion) entity, owner); - } else if (entity instanceof FallingBlock) { - return new FallingBlockInfo((FallingBlock) entity, owner); - } else if (entity instanceof LivingEntity) { - return new MobInfo((LivingEntity) entity, owner); - } else { - return new EntityInfo(entity, owner); - } + return switch (entity) { + case ThrownPotion thrownPotion -> new ThrownPotionInfo(thrownPotion, owner); + case FallingBlock fallingBlock -> new FallingBlockInfo(fallingBlock, owner); + case LivingEntity livingEntity -> new MobInfo(livingEntity, owner); + default -> new EntityInfo(entity, owner); + }; } public PhysicalInfo resolveEntity(Entity entity) { diff --git a/core/src/main/java/tc/oc/pgm/util/UsernameFormatUtils.java b/core/src/main/java/tc/oc/pgm/util/UsernameFormatUtils.java index e53eef8e30..e26e6a4fbe 100644 --- a/core/src/main/java/tc/oc/pgm/util/UsernameFormatUtils.java +++ b/core/src/main/java/tc/oc/pgm/util/UsernameFormatUtils.java @@ -1,31 +1,19 @@ package tc.oc.pgm.util; -import static net.kyori.adventure.text.Component.translatable; +import static tc.oc.pgm.util.player.PlayerComponent.player; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import tc.oc.pgm.api.match.Match; -import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.util.named.NameStyle; /** - * UsernameFormatUtils - A utility class with methods related to username formatting. Mainly used - * for {@link ModerationCommand} but could be useful in other places. + * UsernameFormatUtils - A utility class with methods related to username formatting. Was used for + * staff related commands in the past, but is now deprecated. */ +@Deprecated(forRemoval = true) public class UsernameFormatUtils { - public static final Component CONSOLE_NAME = - translatable("misc.console", NamedTextColor.DARK_AQUA) - .decoration(TextDecoration.ITALIC, true); - - public static Component formatStaffName(CommandSender sender, Match match) { - if (sender != null && sender instanceof Player) { - MatchPlayer matchPlayer = match.getPlayer((Player) sender); - if (matchPlayer != null) return matchPlayer.getName(NameStyle.FANCY); - } - return CONSOLE_NAME; + public static Component formatStaffName(CommandSender sender) { + return player(sender, NameStyle.FANCY); } } diff --git a/core/src/main/java/tc/oc/pgm/util/player/PlayerComponent.java b/core/src/main/java/tc/oc/pgm/util/player/PlayerComponent.java index 9ece453b7d..c631c59e82 100644 --- a/core/src/main/java/tc/oc/pgm/util/player/PlayerComponent.java +++ b/core/src/main/java/tc/oc/pgm/util/player/PlayerComponent.java @@ -24,7 +24,7 @@ public final class PlayerComponent implements RenderableComponent { public static final Component UNKNOWN = translatable("misc.unknown", PlayerRenderer.OFFLINE_COLOR, TextDecoration.ITALIC); public static final Component CONSOLE = - translatable("misc.console", PlayerRenderer.OFFLINE_COLOR); + translatable("misc.console", PlayerRenderer.OFFLINE_COLOR, TextDecoration.ITALIC); public static final PlayerComponent UNKNOWN_PLAYER = new PlayerComponent(null, new PlayerData(null, null, NameStyle.SIMPLE_COLOR), Style.empty()); @@ -49,9 +49,13 @@ public static Component player(@Nullable UUID playerId, @NotNull NameStyle style return PGM.get().getDatastore().getUsername(playerId).getName(style); } + public static Component player(CommandSender sender) { + return player(sender, NameStyle.FANCY); + } + public static Component player(CommandSender sender, @NotNull NameStyle style) { if (sender == null) return UNKNOWN_PLAYER; - if (sender instanceof Player) return player((Player) sender, style); + if (sender instanceof Player p) return player(p, style); return CONSOLE; } diff --git a/core/src/main/java/tc/oc/pgm/wool/MonumentWool.java b/core/src/main/java/tc/oc/pgm/wool/MonumentWool.java index 41bc9a089d..3d0058a620 100644 --- a/core/src/main/java/tc/oc/pgm/wool/MonumentWool.java +++ b/core/src/main/java/tc/oc/pgm/wool/MonumentWool.java @@ -51,12 +51,9 @@ public MonumentWool(MonumentWoolFactory definition, Match match) { @Override public String toString() { - StringBuilder sb = new StringBuilder("MonumentWool{"); - sb.append("id=").append(this.getId()); - sb.append(",owner=").append(this.owner.getNameLegacy()); - sb.append(",definition=").append(this.definition); - sb.append('}'); - return sb.toString(); + return "MonumentWool{" + "id=" + this.getId() + ",owner=" + + this.owner.getNameLegacy() + ",definition=" + + this.definition + '}'; } // Remove @Nullable diff --git a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernMiscUtil.java b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernMiscUtil.java index 9f30c99c02..9ad4ca2c17 100644 --- a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernMiscUtil.java +++ b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernMiscUtil.java @@ -38,11 +38,6 @@ @Supports(value = PAPER, minVersion = "1.20.6") public class ModernMiscUtil implements MiscUtils { - @Override - public boolean yield(Event event) { - return false; - } - @Override public JsonObject getServerListExtra(ServerListPingEvent event, Plugin plugin) { // TODO: PLATFORM 1.20 no support for extra fields in server ping diff --git a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/listeners/ModernListener.java b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/listeners/ModernListener.java index a4e2e1cb32..2d73aa13cc 100644 --- a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/listeners/ModernListener.java +++ b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/listeners/ModernListener.java @@ -44,11 +44,8 @@ public void onBlockFall(EntitySpawnEvent event) { @EventHandler(ignoreCancelled = true) public void onPlayerOnGround(EntityPoseChangeEvent event) { - var entity = event.getEntity(); - if (entity instanceof Player p) { - var pgmEvent = new PlayerOnGroundEvent(p, p.isOnGround()); - handleCall(pgmEvent, event); - } + if (event.getEntity() instanceof Player p) + handleCall(new PlayerOnGroundEvent(p, p.isOnGround()), event); } @EventHandler(ignoreCancelled = true) diff --git a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/material/ModernMaterialParser.java b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/material/ModernMaterialParser.java index 642ddceed7..e9fbc4c44e 100644 --- a/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/material/ModernMaterialParser.java +++ b/platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/material/ModernMaterialParser.java @@ -10,7 +10,6 @@ import org.bukkit.UnsafeValues; import org.bukkit.craftbukkit.legacy.CraftLegacy; import org.bukkit.craftbukkit.util.CraftMagicNumbers; -import org.bukkit.material.MaterialData; import org.jetbrains.annotations.Nullable; import tc.oc.pgm.util.material.BlockMaterialData; import tc.oc.pgm.util.material.ItemMaterialData; @@ -19,7 +18,7 @@ import tc.oc.pgm.util.xml.Node; import tc.oc.pgm.util.xml.XMLUtils; -@SuppressWarnings({"deprecation", "UnstableApiUsage"}) +@SuppressWarnings({"deprecation", "removal", "UnstableApiUsage"}) class ModernMaterialParser { private static final UnsafeValues UNSAFE = Bukkit.getUnsafe(); @@ -128,7 +127,8 @@ public static T parse(String text, @Nullable Node node, boolean matOnly, Ada private static Material upgrade(Material material, short data) { if (material.isLegacy()) { - var newMat = UNSAFE.fromLegacy(new MaterialData(material, (byte) data), true); + var newMat = + UNSAFE.fromLegacy(new org.bukkit.material.MaterialData(material, (byte) data), true); // If material+data is invalid, do fromLegacy with just material return newMat.isAir() ? UNSAFE.fromLegacy(material) : newMat; } diff --git a/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/impl/SpNMSHacks.java b/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/impl/SpNMSHacks.java index 9b850c12ee..a4fee8c33d 100644 --- a/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/impl/SpNMSHacks.java +++ b/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/impl/SpNMSHacks.java @@ -98,6 +98,7 @@ public void resumeServer() { @Override public Inventory createFakeInventory(Player viewer, Inventory realInventory) { if (realInventory.hasCustomName()) { + //noinspection deprecation return realInventory instanceof DoubleChestInventory ? Bukkit.createInventory(viewer, realInventory.getSize(), realInventory.getName()) : Bukkit.createInventory(viewer, realInventory.getType(), realInventory.getName()); diff --git a/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/material/SpMaterialParser.java b/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/material/SpMaterialParser.java index 5af9ee9a85..45a6b9a1e4 100644 --- a/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/material/SpMaterialParser.java +++ b/platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/material/SpMaterialParser.java @@ -61,13 +61,14 @@ public static T parse(String text, @Nullable Node node, boolean matOnly, Ada } } - public interface Adapter { + interface Adapter { Adapter BUKKIT = new Adapter<>() { @Override public MaterialData visit(Material material) { return new MaterialData(material); } + @SuppressWarnings("deprecation") @Override public MaterialData visit(Material material, short data) { return new MaterialData(material, (byte) data); diff --git a/server/src/main/java/tc/oc/pgm/server/PGMServer.java b/server/src/main/java/tc/oc/pgm/server/PGMServer.java index d851e1005a..cad023c1be 100644 --- a/server/src/main/java/tc/oc/pgm/server/PGMServer.java +++ b/server/src/main/java/tc/oc/pgm/server/PGMServer.java @@ -31,6 +31,7 @@ import org.bukkit.plugin.PluginLoadOrder; import org.fusesource.jansi.AnsiConsole; import org.spigotmc.SpigotConfig; +import tc.oc.pgm.util.reflect.ReflectionUtils; /** * Embedded {@link org.bukkit.Bukkit} server that natively runs plugins. @@ -42,9 +43,8 @@ public class PGMServer extends DedicatedServer implements Runnable { public static void main(String[] args) throws InvalidDescriptionException { BasicConfigurator.configure(); - new PGMServer( - new PluginDescriptionFile( - Thread.currentThread().getContextClassLoader().getResourceAsStream("plugin.yml"))) + new PGMServer(new PluginDescriptionFile( + Thread.currentThread().getContextClassLoader().getResourceAsStream("plugin.yml"))) .run(); } @@ -72,13 +72,10 @@ public PGMServer(PluginDescriptionFile... plugins) { } }.parse()); this.plugins = plugins; - this.name = - super.getServerModName() - + " (with " - + Stream.of(plugins) - .map(PluginDescriptionFile::getName) - .collect(Collectors.joining(", ")) - + ")"; + this.name = super.getServerModName() + + " (with " + + Stream.of(plugins).map(PluginDescriptionFile::getName).collect(Collectors.joining(", ")) + + ")"; } @Override @@ -127,7 +124,10 @@ protected Logger setupLogger() { if (logger instanceof org.apache.logging.log4j.core.Logger) { final Iterator appenders = - ((org.apache.logging.log4j.core.Logger) logger).getAppenders().values().iterator(); + ((org.apache.logging.log4j.core.Logger) logger) + .getAppenders() + .values() + .iterator(); while (appenders.hasNext()) { final org.apache.logging.log4j.core.Appender appender = appenders.next(); if (appender instanceof ConsoleAppender) { @@ -142,30 +142,24 @@ protected Logger setupLogger() { BasicConfigurator.resetConfiguration(); - try { - return (Logger) PGMServer.class.getField("LOGGER").get(PGMServer.class); - } catch (IllegalAccessException | NoSuchFieldException e) { - // No-op - } - - return logger; + var actualLogger = ReflectionUtils.readStaticField( + DedicatedServer.class, org.apache.logging.log4j.Logger.class, "LOGGER"); + return actualLogger != null ? actualLogger : logger; } protected void setupConsole() { - final Thread console = - new Thread( - () -> { - try { - while (!isStopped() && isRunning()) { - final String command = reader.readLine(">", null); - if (command != null && !command.trim().isEmpty()) { - issueCommand(command, this); - } - } - } catch (IOException io) { - safeShutdown(); - } - }); + final Thread console = new Thread(() -> { + try { + while (!isStopped() && isRunning()) { + final String command = reader.readLine(">", null); + if (command != null && !command.trim().isEmpty()) { + issueCommand(command, this); + } + } + } catch (IOException io) { + safeShutdown(); + } + }); console.setDaemon(true); console.start(); } @@ -232,10 +226,7 @@ protected void setupWorld() { a(U(), U(), 0 /* seed */, WorldType.FLAT, "" /* generator */); final long duration = System.nanoTime() - start; - logger.info( - "Done (" - + String.format("%.3fs", (double) duration / 1.0E9D) - + ")! For help, type \"help\" or \"?\""); + logger.info("Done (%.3fs)! For help, type \"help\" or \"?\"", (double) duration / 1.0E9D); } protected void setupListener() throws IOException { diff --git a/server/src/main/java/tc/oc/pgm/server/RuntimePluginLoader.java b/server/src/main/java/tc/oc/pgm/server/RuntimePluginLoader.java index 7655ab3079..f59138d64d 100644 --- a/server/src/main/java/tc/oc/pgm/server/RuntimePluginLoader.java +++ b/server/src/main/java/tc/oc/pgm/server/RuntimePluginLoader.java @@ -1,8 +1,6 @@ package tc.oc.pgm.server; import static tc.oc.pgm.util.Assert.assertNotNull; -import static tc.oc.pgm.util.reflect.ReflectionUtils.readField; -import static tc.oc.pgm.util.reflect.ReflectionUtils.setField; import java.io.File; import java.lang.reflect.Field; @@ -27,11 +25,13 @@ import org.bukkit.plugin.UnknownDependencyException; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPluginLoader; +import tc.oc.pgm.util.reflect.ReflectionUtils; /** - * A {@link PluginLoader} that allows for {@link Plugin}s to be loaded at runtime without a {@link - * File}. + * A {@link PluginLoader} that allows for {@link Plugin}s to be loaded at runtime without a + * {@link File}. */ +@SuppressWarnings({"deprecation", "unchecked"}) public class RuntimePluginLoader implements PluginLoader { private final Server server; @@ -42,22 +42,20 @@ public RuntimePluginLoader(Server server) { this.loader = new JavaPluginLoader(server); } - @SuppressWarnings("unchecked") public Plugin loadPlugin(PluginDescriptionFile plugin) throws UnknownDependencyException { final SimplePluginManager manager = (SimplePluginManager) server.getPluginManager(); try { final File file = new File("plugins", plugin.getName()); final Class[] init = new Class[] {JavaPluginLoader.class, PluginDescriptionFile.class, File.class, File.class}; - final JavaPlugin instance = - (JavaPlugin) - Class.forName(plugin.getMain()) - .getConstructor(init) - .newInstance(loader, plugin, file, file); - setField(instance, this, JavaPlugin.class.getDeclaredField("loader")); - - readField(SimplePluginManager.class, manager, List.class, "plugins").add(instance); - readField(SimplePluginManager.class, manager, Map.class, "lookupNames") + final JavaPlugin instance = (JavaPlugin) Class.forName(plugin.getMain()) + .getConstructor(init) + .newInstance(loader, plugin, file, file); + ReflectionUtils.setField(instance, this, JavaPlugin.class.getDeclaredField("loader")); + + ReflectionUtils.readField(SimplePluginManager.class, manager, List.class, "plugins") + .add(instance); + ReflectionUtils.readField(SimplePluginManager.class, manager, Map.class, "lookupNames") .put(instance.getName().toLowerCase(), instance); return instance; diff --git a/util/src/main/i18n/README.md b/util/src/main/i18n/README.md index 239c08e5af..3e3c85934a 100644 --- a/util/src/main/i18n/README.md +++ b/util/src/main/i18n/README.md @@ -25,7 +25,7 @@ public void sendMatchEnd(MatchPlayer player, String winnerName, int points) { player.sendMessage( TranslatableComponent.of("match.end.notifyWinner", TextComponent.of(winnerName, TextColor.GOLD), - TextComponent.of(points, TextColor.GREEN) + TextComponent.of(points, TextColor.GREEN), TextColor.AQUA)); } ``` diff --git a/util/src/main/java/tc/oc/pgm/util/block/BlockStates.java b/util/src/main/java/tc/oc/pgm/util/block/BlockStates.java index accf09e37c..c13ce4c902 100644 --- a/util/src/main/java/tc/oc/pgm/util/block/BlockStates.java +++ b/util/src/main/java/tc/oc/pgm/util/block/BlockStates.java @@ -39,16 +39,4 @@ static BlockState create(World world, BlockVector pos, BlockMaterialData materia materialData.applyTo(state); return state; } - - static String format(BlockState state) { - return "BlockState{pos=(" - + state.getX() - + ", " - + state.getY() - + ", " - + state.getZ() - + ") world=" - + state.getData() - + "}"; - } } diff --git a/util/src/main/java/tc/oc/pgm/util/block/BlockVectorSet.java b/util/src/main/java/tc/oc/pgm/util/block/BlockVectorSet.java index 22d3e38de6..1d5e8cf15c 100644 --- a/util/src/main/java/tc/oc/pgm/util/block/BlockVectorSet.java +++ b/util/src/main/java/tc/oc/pgm/util/block/BlockVectorSet.java @@ -168,12 +168,12 @@ public T[] toArray(T[] a) { } public BlockVector chooseRandom(Random random) { - // The Trove set uses a sparse array, so there isn't really any - // faster way to do this, not even by messing with Trove internals. + // The FastUtil set uses a sparse array, so there isn't really any + // faster way to do this, not even by messing with FastUtil internals. final LongIterator iterator = set.iterator(); long encoded = 0; for (int n = random.nextInt(size()); n >= 0; n--) { - encoded = iterator.next(); + encoded = iterator.nextLong(); } return BlockVectors.decodePos(encoded); } diff --git a/util/src/main/java/tc/oc/pgm/util/inventory/ItemBuilder.java b/util/src/main/java/tc/oc/pgm/util/inventory/ItemBuilder.java index 3f0824b097..7b0bde7cb3 100644 --- a/util/src/main/java/tc/oc/pgm/util/inventory/ItemBuilder.java +++ b/util/src/main/java/tc/oc/pgm/util/inventory/ItemBuilder.java @@ -79,8 +79,7 @@ public ItemBuilder lore(String... lore) { public ItemBuilder lore(@Nullable CommandSender viewer, Component... lore) { meta() .setLore(Lists.transform( - Arrays.asList(lore), - (component) -> TextTranslations.translateLegacy(component, viewer))); + Arrays.asList(lore), component -> TextTranslations.translateLegacy(component, viewer))); return this; } diff --git a/util/src/main/java/tc/oc/pgm/util/material/Materials.java b/util/src/main/java/tc/oc/pgm/util/material/Materials.java index 2ba3cf86d2..11eed97621 100644 --- a/util/src/main/java/tc/oc/pgm/util/material/Materials.java +++ b/util/src/main/java/tc/oc/pgm/util/material/Materials.java @@ -71,7 +71,6 @@ static Material parse(String... names) { */ static int materialId(String text) { return switch (text.length()) { - default -> -1; case 1 -> Character.digit(text.charAt(0), 10); case 2 -> { int a = Character.digit(text.charAt(0), 10); @@ -86,6 +85,7 @@ static int materialId(String text) { int c = Character.digit(text.charAt(2), 10); yield Math.min(b, c) == -1 ? -1 : ((a * 10) + b) * 10 + c; } + default -> -1; }; } @@ -134,6 +134,7 @@ static boolean isSolid(MaterialData material) { return isSolid(material.getItemType()); } + @SuppressWarnings("deprecation") static boolean isSolid(BlockState block) { return isSolid(block.getType()); } @@ -150,6 +151,7 @@ static boolean isWater(Location location) { return isWater(location.getBlock().getType()); } + @SuppressWarnings("deprecation") static boolean isWater(BlockState block) { return isWater(block.getType()); } @@ -166,6 +168,7 @@ static boolean isLava(Location location) { return isLava(location.getBlock().getType()); } + @SuppressWarnings("deprecation") static boolean isLava(BlockState block) { return isLava(block.getType()); } @@ -207,18 +210,11 @@ static Material materialInBucket(ItemStack bucket) { } static Material materialInBucket(Material bucket) { - switch (bucket) { - case BUCKET: - case MILK_BUCKET: - return Material.AIR; - - case LAVA_BUCKET: - return Material.LAVA; - case WATER_BUCKET: - return Material.WATER; - - default: - throw new IllegalArgumentException(bucket + " is not a bucket"); - } + return switch (bucket) { + case BUCKET, MILK_BUCKET -> Material.AIR; + case LAVA_BUCKET -> Material.LAVA; + case WATER_BUCKET -> Material.WATER; + default -> throw new IllegalArgumentException(bucket + " is not a bucket"); + }; } } diff --git a/util/src/main/java/tc/oc/pgm/util/reflect/ReflectionUtils.java b/util/src/main/java/tc/oc/pgm/util/reflect/ReflectionUtils.java index 156de73e29..db96d24160 100644 --- a/util/src/main/java/tc/oc/pgm/util/reflect/ReflectionUtils.java +++ b/util/src/main/java/tc/oc/pgm/util/reflect/ReflectionUtils.java @@ -76,8 +76,10 @@ public static Field getField(Class parent, String name) { public static T readField(Class parent, @Nullable Object obj, Class type, String name) { try { - return type.cast(readField(obj, parent.getDeclaredField(name))); - } catch (NoSuchFieldException e) { + var field = parent.getDeclaredField(name); + field.setAccessible(true); + return type.cast(field.get(obj)); + } catch (NoSuchFieldException | IllegalAccessException e) { throw new RuntimeException(e); } } @@ -86,18 +88,6 @@ public static T readStaticField(Class parent, Class type, String name) return readField(parent, null, type, name); } - public static Object readField(@Nullable Object obj, Field field) { - final boolean wasAccessible = field.isAccessible(); - try { - field.setAccessible(true); - return field.get(obj); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } finally { - field.setAccessible(wasAccessible); - } - } - public static void setField(Class parent, Object base, Object value, String fieldName) { try { setField(base, value, parent.getDeclaredField(fieldName)); diff --git a/util/src/main/java/tc/oc/pgm/util/text/TextFormatter.java b/util/src/main/java/tc/oc/pgm/util/text/TextFormatter.java index a700aa679b..bf5dbeaa6a 100644 --- a/util/src/main/java/tc/oc/pgm/util/text/TextFormatter.java +++ b/util/src/main/java/tc/oc/pgm/util/text/TextFormatter.java @@ -7,9 +7,8 @@ import com.google.common.base.Strings; import com.google.common.collect.Collections2; +import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentLike; @@ -21,6 +20,7 @@ import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; import tc.oc.pgm.util.LegacyFormatUtils; +import tc.oc.pgm.util.bukkit.BukkitUtils; import tc.oc.pgm.util.named.NameStyle; import tc.oc.pgm.util.named.Named; @@ -41,25 +41,22 @@ private TextFormatter() {} */ public static Component list(Collection texts, TextColor color) { final List textList = - texts instanceof List ? (List) texts : new LinkedList<>(texts); - switch (textList.size()) { - case 0: - return empty(); - case 1: - return textList.get(0).colorIfAbsent(color); - case 2: - return translatable("misc.list.pair", color, textList); - default: - final Iterator textIterator = textList.iterator(); - Component a = - translatable("misc.list.start", color, textIterator.next(), textIterator.next()); - Component b = textIterator.next(); - while (textIterator.hasNext()) { + texts instanceof List ? (List) texts : new ArrayList<>(texts); + return switch (textList.size()) { + case 0 -> empty(); + case 1 -> textList.getFirst().colorIfAbsent(color); + case 2 -> translatable("misc.list.pair", color, textList); + default -> { + var it = textList.iterator(); + Component a = translatable("misc.list.start", color, it.next(), it.next()); + Component b = it.next(); + while (it.hasNext()) { a = translatable("misc.list.middle", color, a, b); - b = textIterator.next(); + b = it.next(); } - return translatable("misc.list.end", color, a, b); - } + yield translatable("misc.list.end", color, a, b); + } + }; } /** @@ -98,11 +95,11 @@ public static Component paginate( .append(text) .append(space()) .append(text("(", mainColor)) - .append( - translatable( - simple ? "command.simplePageHeader" : "command.pageHeader", - NamedTextColor.DARK_AQUA) - .args(text(page, pageColor), text(pages, pageColor))) + .append(translatable( + simple ? "command.simplePageHeader" : "command.pageHeader", + mainColor, + text(page, pageColor), + text(pages, pageColor))) .append(text(")", mainColor)) .build(); } @@ -162,44 +159,24 @@ public static Component horizontalLineHeading( /* * Convert ChatColor -> TextColor */ - public static NamedTextColor convert(Enum color) { - NamedTextColor textColor = NamedTextColor.WHITE; - try { - textColor = NamedTextColor.NAMES.value(color.name().toLowerCase()); - } catch (IllegalArgumentException e) { - // If not found use default - } - return textColor; + public static NamedTextColor convert(ChatColor color) { + return NamedTextColor.namedColor(BukkitUtils.colorOf(color).asRGB()); } - public static TextFormat convertFormat(Enum color) { - TextFormat textColor = NamedTextColor.WHITE; - try { - textColor = NamedTextColor.NAMES.value(color.name().toLowerCase()); - } catch (IllegalArgumentException e) { - // If not found use default - if ((color instanceof ChatColor) && convertDecoration((ChatColor) color) != null) { - textColor = convertDecoration((ChatColor) color); - } - } - return textColor; + public static TextFormat convertFormat(ChatColor color) { + TextFormat decoration = convertDecoration(color); + return decoration != null ? decoration : convert(color); } @Nullable public static TextDecoration convertDecoration(ChatColor color) { - switch (color) { - case BOLD: - return TextDecoration.BOLD; - case ITALIC: - return TextDecoration.ITALIC; - case MAGIC: - return TextDecoration.OBFUSCATED; - case STRIKETHROUGH: - return TextDecoration.STRIKETHROUGH; - case UNDERLINE: - return TextDecoration.UNDERLINED; - default: - return null; - } + return switch (color) { + case BOLD -> TextDecoration.BOLD; + case ITALIC -> TextDecoration.ITALIC; + case MAGIC -> TextDecoration.OBFUSCATED; + case STRIKETHROUGH -> TextDecoration.STRIKETHROUGH; + case UNDERLINE -> TextDecoration.UNDERLINED; + default -> null; + }; } } diff --git a/util/src/main/java/tc/oc/pgm/util/text/TextTranslations.java b/util/src/main/java/tc/oc/pgm/util/text/TextTranslations.java index 16b2d513d0..954489d81c 100644 --- a/util/src/main/java/tc/oc/pgm/util/text/TextTranslations.java +++ b/util/src/main/java/tc/oc/pgm/util/text/TextTranslations.java @@ -229,25 +229,6 @@ public static long loadKeys(Locale locale) { return keysFound; } - private static java.util.Locale parseLocale(String locale) { - try { - final String[] split = locale.split("[-_]"); - switch (split.length) { - case 1: // language - return new java.util.Locale(split[0]); - case 2: // language and country - return new java.util.Locale(split[0], split[1]); - case 3: // language, country, and variant - return new java.util.Locale(split[0], split[1], split[2]); - } - } catch (IllegalArgumentException e) { - // ignore - } - - // bad locale sent? - return java.util.Locale.US; - } - public static Locale getLocale(@Nullable Pointered viewer) { if (viewer == null) return SOURCE_LOCALE; return viewer.get(Identity.LOCALE).orElse(SOURCE_LOCALE); diff --git a/util/src/main/java/tc/oc/pgm/util/text/UTF8Control.java b/util/src/main/java/tc/oc/pgm/util/text/UTF8Control.java index c9c754242e..49632e9f6f 100644 --- a/util/src/main/java/tc/oc/pgm/util/text/UTF8Control.java +++ b/util/src/main/java/tc/oc/pgm/util/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/util/src/main/java/tc/oc/pgm/util/xml/XMLUtils.java b/util/src/main/java/tc/oc/pgm/util/xml/XMLUtils.java index 91cf1328cf..6b68cd382d 100644 --- a/util/src/main/java/tc/oc/pgm/util/xml/XMLUtils.java +++ b/util/src/main/java/tc/oc/pgm/util/xml/XMLUtils.java @@ -612,7 +612,7 @@ public static Duration parseDuration(Attribute attr) throws InvalidXMLException public static Duration parseTickDuration(Node node, String text) throws InvalidXMLException { if ("oo".equals(text)) return TimeUtils.INFINITE_DURATION; try { - return Duration.ofMillis(Integer.parseInt(text) * 50); + return Duration.ofMillis(Integer.parseInt(text) * 50L); } catch (NumberFormatException e) { return parseDuration(node); } @@ -916,7 +916,7 @@ public static ChatColor parseChatColor(@Nullable Node node, ChatColor def) public static String getNormalizedNullableText(Element el) { String text = el.getTextNormalize(); - if (text == null || "".equals(text)) { + if (text == null || text.isEmpty()) { return null; } else { return text; diff --git a/util/src/test/java/tc/oc/pgm/util/text/TextParserTest.java b/util/src/test/java/tc/oc/pgm/util/text/TextParserTest.java index 7b49905ab4..ecc52f993f 100644 --- a/util/src/test/java/tc/oc/pgm/util/text/TextParserTest.java +++ b/util/src/test/java/tc/oc/pgm/util/text/TextParserTest.java @@ -17,6 +17,7 @@ import tc.oc.pgm.util.TimeUtils; import tc.oc.pgm.util.Version; +@SuppressWarnings("deprecation") public final class TextParserTest { @ParameterizedTest @@ -203,7 +204,8 @@ void testParseEnumFuzzy(String text) throws TextException { void testParseEnumInvalid(String text) { assertEquals( "error.invalidFormat", - assertThrows(TextException.class, () -> parseEnum(text, ChatColor.class)).getMessage()); + assertThrows(TextException.class, () -> parseEnum(text, ChatColor.class)) + .getMessage()); } @ParameterizedTest