diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 843d21f..4d5b278 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,11 +6,13 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Maven - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: - java-version: 1.8 + java-version: 21 + distribution: temurin + cache: maven - name: maven-settings-xml-action uses: whelk-io/maven-settings-xml-action@v9 with: diff --git a/.github/workflows/push-gh-release.yml b/.github/workflows/push-gh-release.yml index bb65e82..8ae8fe5 100644 --- a/.github/workflows/push-gh-release.yml +++ b/.github/workflows/push-gh-release.yml @@ -7,10 +7,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: - java-version: '8' + java-version: 21 + distribution: temurin + cache: maven - name: Build jar run: mvn --batch-mode --update-snapshots verify - name: Move generated jar file diff --git a/pom.xml b/pom.xml index e525468..04c454f 100644 --- a/pom.xml +++ b/pom.xml @@ -53,9 +53,9 @@ provided - com.github.PGMDev + dev.pgm Events - master-9671be2b43-1 + 1.0.0-SNAPSHOT provided @@ -66,17 +66,17 @@ com.squareup.retrofit2 retrofit - 2.9.0 + 2.11.0 com.squareup.retrofit2 converter-jackson - 2.9.0 + 2.11.0 com.squareup.retrofit2 converter-gson - 2.9.0 + 2.11.0 co.aikar @@ -86,7 +86,7 @@ org.java-websocket Java-WebSocket - 1.5.1 + 1.5.6 @@ -95,10 +95,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 + 3.13.0 - 1.8 - 1.8 + 21 + 21 @@ -123,7 +123,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.1 + 3.6.0 true diff --git a/src/main/java/rip/bolt/ingame/commands/AdminCommands.java b/src/main/java/rip/bolt/ingame/commands/AdminCommands.java index 3effeac..9ea0e5e 100644 --- a/src/main/java/rip/bolt/ingame/commands/AdminCommands.java +++ b/src/main/java/rip/bolt/ingame/commands/AdminCommands.java @@ -5,8 +5,8 @@ import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; -import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import rip.bolt.ingame.Ingame; import rip.bolt.ingame.api.definitions.BoltMatch; @@ -21,20 +21,20 @@ import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchPhase; import tc.oc.pgm.api.player.MatchPlayer; -import tc.oc.pgm.lib.cloud.commandframework.annotations.Argument; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandDescription; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandMethod; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandPermission; -import tc.oc.pgm.lib.cloud.commandframework.annotations.Flag; -import tc.oc.pgm.lib.cloud.commandframework.annotations.specifier.Greedy; +import tc.oc.pgm.lib.org.incendo.cloud.annotation.specifier.Greedy; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Argument; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.CommandDescription; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Flag; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Permission; import tc.oc.pgm.util.Audience; -@CommandMethod("ingame") +@Command("ingame") public class AdminCommands { - @CommandMethod("poll") + @Command("poll") @CommandDescription("Poll the API once for a new Bolt match") - @CommandPermission("ingame.staff.poll") + @Permission("ingame.staff.poll") public void poll( MatchManager matchManager, CommandSender sender, @@ -52,9 +52,9 @@ public void poll( text("Manual poll has been triggered, checking API for match.", NamedTextColor.GRAY)); } - @CommandMethod("clear|reset") + @Command("clear|reset") @CommandDescription("Clear the currently stored Bolt match") - @CommandPermission("ingame.staff.clear") + @Permission("ingame.staff.clear") public void clear(MatchManager matchManager, CommandSender sender) throws CommandException { BoltMatch match = matchManager.getMatch(); if (match == null) @@ -70,9 +70,9 @@ public void clear(MatchManager matchManager, CommandSender sender) throws Comman NamedTextColor.GRAY)); } - @CommandMethod("match") + @Command("match") @CommandDescription("View info about the current Bolt match") - @CommandPermission("ingame.staff.match") + @Permission("ingame.staff.match") public void match(MatchManager matchManager, CommandSender sender) throws CommandException { BoltMatch boltMatch = matchManager.getMatch(); if (boltMatch == null) @@ -83,9 +83,9 @@ public void match(MatchManager matchManager, CommandSender sender) throws Comman if (AppData.Web.getMatchLink() != null) audience.sendMessage(Messages.matchLink(boltMatch)); } - @CommandMethod("status") + @Command("status") @CommandDescription("View the status of the API polling") - @CommandPermission("ingame.staff.status") + @Permission("ingame.staff.status") public void status(MatchManager matchManager, CommandSender sender) throws CommandException { GameManager gameTypeManager = matchManager.getGameManager(); String gameManager = gameTypeManager.getClass().getSimpleName(); @@ -119,9 +119,9 @@ public void status(MatchManager matchManager, CommandSender sender) throws Comma newline().append(apiPolling.append(newline().append(websocketConnected))))); } - @CommandMethod("cancel") + @Command("cancel") @CommandDescription("Report the current Bolt match as cancelled") - @CommandPermission("ingame.staff.cancel") + @Permission("ingame.staff.cancel") public void cancel(MatchManager matchManager, CommandSender sender, Match match) throws CommandException { BoltMatch boltMatch = matchManager.getMatch(); @@ -142,9 +142,9 @@ public void cancel(MatchManager matchManager, CommandSender sender, Match match) match.sendMessage(text("Match has been cancelled by an admin.", NamedTextColor.RED)); } - @CommandMethod("ban [reason]") + @Command("ban [reason]") @CommandDescription("Manually queue bans a player") - @CommandPermission("ingame.staff.ban") + @Permission("ingame.staff.ban") public void ban( CommandSender sender, @Argument("player") MatchPlayer target, @@ -159,9 +159,9 @@ public void ban( Ingame.get(), () -> Ingame.get().getApiManager().postPlayerPunishment(punishment)); } - @CommandMethod("reconnect") + @Command("reconnect") @CommandDescription("Reconnect to the matches websocket") - @CommandPermission("ingame.staff.reconnect") + @Permission("ingame.staff.reconnect") public void reconnect(MatchManager matchManager, CommandSender sender) throws CommandException { GameManager gameManager = matchManager.getGameManager(); if (!(gameManager instanceof PugManager)) @@ -173,9 +173,9 @@ public void reconnect(MatchManager matchManager, CommandSender sender) throws Co ((PugManager) gameManager).connect(matchManager.getMatch()); } - @CommandMethod("disconnect") + @Command("disconnect") @CommandDescription("Disconnect from the matches websocket") - @CommandPermission("ingame.staff.reconnect") + @Permission("ingame.staff.reconnect") public void disconnect(MatchManager matchManager, CommandSender sender) throws CommandException { GameManager gameManager = matchManager.getGameManager(); if (!(gameManager instanceof PugManager)) diff --git a/src/main/java/rip/bolt/ingame/commands/ForfeitCommands.java b/src/main/java/rip/bolt/ingame/commands/ForfeitCommands.java index aaaaaf1..f8b002f 100644 --- a/src/main/java/rip/bolt/ingame/commands/ForfeitCommands.java +++ b/src/main/java/rip/bolt/ingame/commands/ForfeitCommands.java @@ -2,7 +2,7 @@ import static net.kyori.adventure.text.Component.text; -import net.md_5.bungee.api.ChatColor; +import org.bukkit.ChatColor; import rip.bolt.ingame.config.AppData; import rip.bolt.ingame.managers.GameManager; import rip.bolt.ingame.managers.MatchManager; @@ -13,12 +13,12 @@ import tc.oc.pgm.api.match.MatchPhase; import tc.oc.pgm.api.party.Competitor; import tc.oc.pgm.api.player.MatchPlayer; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandDescription; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandMethod; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.CommandDescription; public class ForfeitCommands { - @CommandMethod("forfeit|ff") + @Command("forfeit|ff") @CommandDescription("Accept that you have no chance of winning") public void forfeit(MatchManager matchManager, MatchPlayer sender, Match match) throws CommandException { diff --git a/src/main/java/rip/bolt/ingame/commands/IngameCommandGraph.java b/src/main/java/rip/bolt/ingame/commands/IngameCommandGraph.java index db04f3f..4994e51 100644 --- a/src/main/java/rip/bolt/ingame/commands/IngameCommandGraph.java +++ b/src/main/java/rip/bolt/ingame/commands/IngameCommandGraph.java @@ -13,6 +13,7 @@ import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.party.Party; import tc.oc.pgm.api.player.MatchPlayer; +import tc.oc.pgm.command.injectors.AudienceProvider; import tc.oc.pgm.command.injectors.MatchPlayerProvider; import tc.oc.pgm.command.injectors.MatchProvider; import tc.oc.pgm.command.injectors.PlayerProvider; @@ -25,9 +26,8 @@ import tc.oc.pgm.command.parsers.TeamParser; import tc.oc.pgm.command.parsers.TeamsParser; import tc.oc.pgm.command.util.CommandGraph; -import tc.oc.pgm.lib.cloud.commandframework.extra.confirmation.CommandConfirmationManager; -import tc.oc.pgm.lib.cloud.commandframework.minecraft.extras.MinecraftHelp; import tc.oc.pgm.lib.io.leangen.geantyref.TypeFactory; +import tc.oc.pgm.lib.org.incendo.cloud.minecraft.extras.MinecraftHelp; import tc.oc.pgm.teams.Team; import tc.oc.pgm.teams.TeamMatchModule; import tc.oc.pgm.util.Audience; @@ -40,12 +40,7 @@ public IngameCommandGraph(Ingame ingame) throws Exception { @Override protected MinecraftHelp createHelp() { - return new MinecraftHelp<>("/ingame help", Audience::get, manager); - } - - @Override - protected CommandConfirmationManager createConfirmationManager() { - return null; + return MinecraftHelp.create("/ingame help", manager, Audience::get); } @Override @@ -56,7 +51,7 @@ protected void setupInjectors() { registerInjector(MapOrder.class, () -> PGM.get().getMapOrder()); registerInjector(MatchManager.class, () -> Ingame.get().getMatchManager()); - registerInjector(Audience.class, (c, s) -> Audience.get(c.getSender())); + registerInjector(Audience.class, new AudienceProvider()); registerInjector(Match.class, new MatchProvider()); registerInjector(MatchPlayer.class, new MatchPlayerProvider()); registerInjector(Player.class, new PlayerProvider()); diff --git a/src/main/java/rip/bolt/ingame/commands/PugCommands.java b/src/main/java/rip/bolt/ingame/commands/PugCommands.java index bc45623..d79e894 100644 --- a/src/main/java/rip/bolt/ingame/commands/PugCommands.java +++ b/src/main/java/rip/bolt/ingame/commands/PugCommands.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; import rip.bolt.ingame.api.definitions.pug.PugCommand; import rip.bolt.ingame.api.definitions.pug.PugTeam; import rip.bolt.ingame.managers.GameManager; @@ -19,18 +20,16 @@ import tc.oc.pgm.api.party.Party; import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.join.JoinRequest; -import tc.oc.pgm.lib.cloud.commandframework.CommandTree; -import tc.oc.pgm.lib.cloud.commandframework.annotations.Argument; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandDescription; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandMethod; -import tc.oc.pgm.lib.cloud.commandframework.annotations.specifier.FlagYielding; -import tc.oc.pgm.lib.cloud.commandframework.annotations.specifier.Greedy; -import tc.oc.pgm.lib.cloud.commandframework.arguments.CommandArgument; -import tc.oc.pgm.lib.cloud.commandframework.arguments.StaticArgument; +import tc.oc.pgm.lib.org.incendo.cloud.annotation.specifier.FlagYielding; +import tc.oc.pgm.lib.org.incendo.cloud.annotation.specifier.Greedy; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Argument; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.CommandDescription; +import tc.oc.pgm.lib.org.incendo.cloud.internal.CommandNode; import tc.oc.pgm.teams.Team; import tc.oc.pgm.teams.TeamMatchModule; -@CommandMethod("pug") +@Command("pug") public class PugCommands { private final MatchManager matchManager; @@ -48,17 +47,15 @@ public static Collection getCommandList() { return commandList; } - public static void setupSubCommands(CommandTree.Node> pugNode) { + public static void setupSubCommands(@Nullable CommandNode pugNode) { if (pugNode == null) { commandList = Collections.emptyList(); return; } commandList = - pugNode.getChildren().stream() - .map(CommandTree.Node::getValue) - .filter(v -> v instanceof StaticArgument) - .flatMap(value -> ((StaticArgument) value).getAliases().stream()) + pugNode.children().stream() + .flatMap(n -> n.component().aliases().stream()) .collect(Collectors.toList()); } @@ -69,13 +66,13 @@ private PugManager needPugManager() { return (PugManager) gm; } - @CommandMethod("leave|obs|spectator|spec") + @Command("leave|obs|spectator|spec") @CommandDescription("Leave the match") public void leave(Player sender) { needPugManager().write(PugCommand.joinObs(sender)); } - @CommandMethod("join|play [team]") + @Command("join|play [team]") @CommandDescription("Join the match") public void join(MatchPlayer player, Match match, @Argument("team") @FlagYielding Party team) { PugManager pm = needPugManager(); @@ -97,20 +94,20 @@ public void join(MatchPlayer player, Match match, @Argument("team") @FlagYieldin else throw exception("command.teamNotFound"); } - @CommandMethod("start|begin [duration]") + @Command("start|begin [duration]") @CommandDescription("Start the match") public void start(MatchPlayer sender, @Argument("duration") Duration duration) { needPugManager().write(PugCommand.startMatch(sender.getBukkit(), duration)); } - @CommandMethod("setnext|sn [map]") + @Command("setnext|sn [map]") @CommandDescription("Change the next map") public void setNext(MatchPlayer sender, @Argument("map") @FlagYielding MapInfo map) { if (map == null) throw exception("Map not found!"); needPugManager().write(PugCommand.setMap(sender.getBukkit(), map)); } - @CommandMethod("cycle [duration] [map]") + @Command("cycle [duration] [map]") @CommandDescription("Cycle to the next match") public void cycle( MatchPlayer sender, @@ -121,7 +118,7 @@ public void cycle( else pm.write(PugCommand.cycleMatch(sender.getBukkit())); } - @CommandMethod("recycle|rematch [duration]") + @Command("recycle|rematch [duration]") @CommandDescription("Reload (cycle to) the current map") public void recycle( MatchManager matchManager, MatchPlayer sender, @Argument("duration") Duration duration) { @@ -133,10 +130,10 @@ public void recycle( pm.write(PugCommand.cycleMatch(sender.getBukkit(), matchManager.getMatch().getMap())); } - @CommandMethod("pug team") + @Command("pug team") public class TeamCommands { - @CommandMethod("force [team]") + @Command("force [team]") @CommandDescription("Force a player onto a team") public void force( MatchPlayer sender, @Argument("player") MatchPlayer player, @Argument("team") Party team) { @@ -153,25 +150,25 @@ public void force( pm.write(PugCommand.movePlayer(sender.getBukkit(), player.getBukkit(), pugTeam)); } - @CommandMethod("balance") + @Command("balance") @CommandDescription("Balance teams according to MMR") public void balance(Player sender) { needPugManager().write(PugCommand.balance(sender)); } - @CommandMethod("shuffle") + @Command("shuffle") @CommandDescription("Shuffle players among the teams") public void shuffle(Player sender) { needPugManager().write(PugCommand.shuffle(sender)); } - @CommandMethod("clear") + @Command("clear") @CommandDescription("Clear all teams") public void clear(Player sender) { needPugManager().write(PugCommand.clear(sender)); } - @CommandMethod("alias ") + @Command("alias ") @CommandDescription("Rename a team") public void alias( MatchPlayer sender, @@ -188,7 +185,7 @@ public void alias( pm.write(PugCommand.setTeamName(sender.getBukkit(), pugTeam, newName)); } - @CommandMethod("size ") + @Command("size ") @CommandDescription("Set the max players on a team") public void size( Player sender, @Argument("team") String ignore, @Argument("max-players") Integer max) { diff --git a/src/main/java/rip/bolt/ingame/commands/RequeueCommands.java b/src/main/java/rip/bolt/ingame/commands/RequeueCommands.java index 10b0c88..c09d6ad 100644 --- a/src/main/java/rip/bolt/ingame/commands/RequeueCommands.java +++ b/src/main/java/rip/bolt/ingame/commands/RequeueCommands.java @@ -1,6 +1,6 @@ package rip.bolt.ingame.commands; -import net.md_5.bungee.api.ChatColor; +import org.bukkit.ChatColor; import rip.bolt.ingame.Ingame; import rip.bolt.ingame.api.definitions.MatchStatus; import rip.bolt.ingame.config.AppData; @@ -10,12 +10,12 @@ import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchPhase; import tc.oc.pgm.api.player.MatchPlayer; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandDescription; -import tc.oc.pgm.lib.cloud.commandframework.annotations.CommandMethod; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command; +import tc.oc.pgm.lib.org.incendo.cloud.annotations.CommandDescription; public class RequeueCommands { - @CommandMethod("requeue") + @Command("requeue") @CommandDescription("Requeue for another ranked match") public void requeue(MatchManager matchManager, MatchPlayer sender, Match match) throws CommandException { diff --git a/src/main/java/rip/bolt/ingame/managers/MatchManager.java b/src/main/java/rip/bolt/ingame/managers/MatchManager.java index 1b25e27..e447702 100644 --- a/src/main/java/rip/bolt/ingame/managers/MatchManager.java +++ b/src/main/java/rip/bolt/ingame/managers/MatchManager.java @@ -13,8 +13,8 @@ import java.time.Instant; import java.util.Collection; import java.util.Objects; -import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -43,12 +43,13 @@ import tc.oc.pgm.events.CountdownStartEvent; import tc.oc.pgm.restart.RestartCountdown; import tc.oc.pgm.result.TieVictoryCondition; +import tc.oc.pgm.util.platform.Platform; +import tc.oc.pgm.util.platform.Supports; public class MatchManager implements Listener { private final StatsManager statsManager; private final TabManager tabManager; - private final KnockbackManager knockbackManager; private final BattlepassManager battlepassManager; private final MatchSearch poll; @@ -70,11 +71,12 @@ public MatchManager(Plugin plugin) { gameManager = new GameManager.NoopManager(this); statsManager = new StatsManager(); tabManager = new TabManager(plugin); - knockbackManager = new KnockbackManager(); battlepassManager = BattlepassUtils.createManager(); Bukkit.getPluginManager().registerEvents(this, plugin); - Bukkit.getPluginManager().registerEvents(knockbackManager, plugin); + if (Platform.VARIANT == Supports.Variant.SPORTPAPER) { + Bukkit.getPluginManager().registerEvents(new KnockbackManager(), plugin); + } MatchPreloader.create(); diff --git a/src/main/java/rip/bolt/ingame/pugs/BoltWebSocket.java b/src/main/java/rip/bolt/ingame/pugs/BoltWebSocket.java index 75f72b1..a38fab8 100644 --- a/src/main/java/rip/bolt/ingame/pugs/BoltWebSocket.java +++ b/src/main/java/rip/bolt/ingame/pugs/BoltWebSocket.java @@ -10,7 +10,6 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.craftbukkit.libs.joptsimple.internal.Strings; import org.java_websocket.client.WebSocketClient; import org.java_websocket.framing.CloseFrame; import org.java_websocket.handshake.ServerHandshake; @@ -86,7 +85,7 @@ private void handleMessageSync(PugManager manager, PugResponse pugResponse) { ? PlayerComponent.player(null, chat.getPlayer().getUsername(), NameStyle.VERBOSE) : CONSOLE_NAME; - Component body = text(Strings.join(chat.getMessage(), ", ")); + Component body = text(String.join(", ", chat.getMessage())); switch (chat.getType()) { case PLAYER_INGAME: diff --git a/src/main/java/rip/bolt/ingame/ranked/RequeueManager.java b/src/main/java/rip/bolt/ingame/ranked/RequeueManager.java index 5e98862..7efa47d 100644 --- a/src/main/java/rip/bolt/ingame/ranked/RequeueManager.java +++ b/src/main/java/rip/bolt/ingame/ranked/RequeueManager.java @@ -4,8 +4,7 @@ import java.util.Map; import net.kyori.adventure.text.format.NamedTextColor; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Material; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -18,6 +17,7 @@ import tc.oc.pgm.api.player.MatchPlayer; import tc.oc.pgm.api.player.event.ObserverInteractEvent; import tc.oc.pgm.util.bukkit.OnlinePlayerMapAdapter; +import tc.oc.pgm.util.material.Materials; public class RequeueManager implements Listener { @@ -27,7 +27,7 @@ public class RequeueManager implements Listener { private final Map lastRequeues = new OnlinePlayerMapAdapter<>(Ingame.get()); private static ItemStack createRequeueItem(int data) { - ItemStack item = new ItemStack(Material.INK_SACK, 1, (short) data); + ItemStack item = new ItemStack(Materials.DYE, 1, (short) data); ItemMeta meta = item.getItemMeta(); meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Click to requeue"); item.setItemMeta(meta);