diff --git a/type.bedwarslobby/src/main/java/net/swofty/type/bedwarslobby/TypeBedWarsLobbyLoader.java b/type.bedwarslobby/src/main/java/net/swofty/type/bedwarslobby/TypeBedWarsLobbyLoader.java index 66dc8d0af..a84c151fa 100644 --- a/type.bedwarslobby/src/main/java/net/swofty/type/bedwarslobby/TypeBedWarsLobbyLoader.java +++ b/type.bedwarslobby/src/main/java/net/swofty/type/bedwarslobby/TypeBedWarsLobbyLoader.java @@ -100,6 +100,8 @@ public void afterInitialize(MinecraftServer server) { .schedule(); parkourManager = new LobbyParkourManager(getParkour()); + + LobbyTypeLoader.registerLobbyCommands(); } @Override diff --git a/type.lobby/src/main/java/net/swofty/type/lobby/LobbyTypeLoader.java b/type.lobby/src/main/java/net/swofty/type/lobby/LobbyTypeLoader.java index 5d1cb5683..6dc83719f 100644 --- a/type.lobby/src/main/java/net/swofty/type/lobby/LobbyTypeLoader.java +++ b/type.lobby/src/main/java/net/swofty/type/lobby/LobbyTypeLoader.java @@ -1,12 +1,16 @@ package net.swofty.type.lobby; +import net.minestom.server.MinecraftServer; +import net.swofty.type.generic.HypixelGenericLoader; import net.swofty.type.generic.HypixelTypeLoader; +import net.swofty.type.generic.command.HypixelCommand; import net.swofty.type.lobby.item.LobbyItem; import net.swofty.type.lobby.item.LobbyItemHandler; import net.swofty.type.lobby.launchpad.LaunchPad; import net.swofty.type.lobby.parkour.LobbyParkourManager; import net.swofty.type.lobby.parkour.Parkour; import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; import java.util.List; import java.util.Map; @@ -36,4 +40,15 @@ default Parkour getParkour() { } @Nullable LobbyParkourManager getParkourManager(); + + static void registerLobbyCommands() { + HypixelGenericLoader.loopThroughPackage("net.swofty.type.lobby.commands", HypixelCommand.class).forEach(command -> { + try { + MinecraftServer.getCommandManager().register(command.getCommand()); + } catch (Exception e) { + Logger.error(e, "Failed to register command {} in class {}", + command.getCommand().getName(), command.getClass().getSimpleName()); + } + }); + } } diff --git a/type.lobby/src/main/java/net/swofty/type/lobby/commands/ParkourCommand.java b/type.lobby/src/main/java/net/swofty/type/lobby/commands/ParkourCommand.java new file mode 100644 index 000000000..45aa40c1b --- /dev/null +++ b/type.lobby/src/main/java/net/swofty/type/lobby/commands/ParkourCommand.java @@ -0,0 +1,56 @@ +package net.swofty.type.lobby.commands; + +import net.minestom.server.command.builder.arguments.ArgumentLiteral; +import net.minestom.server.entity.Player; +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.command.CommandParameters; +import net.swofty.type.generic.command.HypixelCommand; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.generic.user.categories.Rank; +import net.swofty.type.lobby.LobbyTypeLoader; +import net.swofty.type.lobby.parkour.LobbyParkourManager; +import net.swofty.type.lobby.parkour.Parkour; + +@CommandParameters(aliases = "parkour", allowsConsole = false, description = "Parkour related commands", permission = Rank.DEFAULT, usage = "/parkour") +public class ParkourCommand extends HypixelCommand { + + @Override + public void registerUsage(MinestomCommand command) { + LobbyParkourManager manager; + if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader loader) { + manager = loader.getParkourManager(); + } else { + manager = null; + } + + // start + command.addSyntax((sender, context) -> { + if (manager == null) { + sender.sendMessage("§cThis command is unavailable here."); + return; + } + if (!(sender instanceof Player player)) return; + player.teleport(manager.getParkour().getStartLocation()); + }, new ArgumentLiteral("start")); + + // cancel + command.addSyntax((sender, context) -> { + if (manager == null) { + sender.sendMessage("§cThis command is unavailable here."); + return; + } + if (!(sender instanceof HypixelPlayer player)) return; + manager.cancelParkour(player); + }, new ArgumentLiteral("cancel")); + + // reset + command.addSyntax((sender, context) -> { + if (manager == null) { + sender.sendMessage("§cThis command is unavailable here."); + return; + } + if (!(sender instanceof HypixelPlayer player)) return; + manager.resetPlayer(player); + }, new ArgumentLiteral("reset")); + } +} diff --git a/type.lobby/src/main/java/net/swofty/type/lobby/item/impl/ResetParkour.java b/type.lobby/src/main/java/net/swofty/type/lobby/item/impl/ResetParkour.java index 6a764c972..aadd1e135 100644 --- a/type.lobby/src/main/java/net/swofty/type/lobby/item/impl/ResetParkour.java +++ b/type.lobby/src/main/java/net/swofty/type/lobby/item/impl/ResetParkour.java @@ -6,6 +6,7 @@ import net.minestom.server.item.Material; import net.swofty.type.generic.HypixelConst; import net.swofty.type.generic.gui.inventory.ItemStackCreator; +import net.swofty.type.generic.user.HypixelPlayer; import net.swofty.type.lobby.LobbyTypeLoader; import net.swofty.type.lobby.item.LobbyItem; import net.swofty.type.lobby.parkour.LobbyParkourManager; @@ -27,7 +28,7 @@ public void onItemInteract(PlayerInstanceEvent event) { if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader lobbyLoader) { LobbyParkourManager parkourManager = lobbyLoader.getParkourManager(); if (parkourManager == null) return; - event.getPlayer().teleport(parkourManager.getParkour().getStartLocation()); + parkourManager.resetPlayer((HypixelPlayer) event.getPlayer()); } } } diff --git a/type.lobby/src/main/java/net/swofty/type/lobby/parkour/LobbyParkourManager.java b/type.lobby/src/main/java/net/swofty/type/lobby/parkour/LobbyParkourManager.java index d179112b7..e5da094e5 100644 --- a/type.lobby/src/main/java/net/swofty/type/lobby/parkour/LobbyParkourManager.java +++ b/type.lobby/src/main/java/net/swofty/type/lobby/parkour/LobbyParkourManager.java @@ -229,6 +229,11 @@ public void cancelParkour(HypixelPlayer player) { } } + public void resetPlayer(HypixelPlayer player) { + player.teleport(parkour.getStartLocation()); + startParkour(player); + } + public static void removePlayerHolograms(HypixelPlayer player) { HologramCache cache = perPlayerHolo.remove(player.getUuid()); if (cache != null) { diff --git a/type.murdermysterylobby/src/main/java/net/swofty/type/murdermysterylobby/TypeMurderMysteryLobbyLoader.java b/type.murdermysterylobby/src/main/java/net/swofty/type/murdermysterylobby/TypeMurderMysteryLobbyLoader.java index 0e1936c72..8ffabeb13 100644 --- a/type.murdermysterylobby/src/main/java/net/swofty/type/murdermysterylobby/TypeMurderMysteryLobbyLoader.java +++ b/type.murdermysterylobby/src/main/java/net/swofty/type/murdermysterylobby/TypeMurderMysteryLobbyLoader.java @@ -90,6 +90,8 @@ public void afterInitialize(MinecraftServer server) { .delay(TaskSchedule.seconds(5)) .repeat(TaskSchedule.seconds(2)) .schedule(); + + LobbyTypeLoader.registerLobbyCommands(); } @Override diff --git a/type.prototypelobby/src/main/java/net/swofty/type/prototypelobby/TypePrototypeLobbyLoader.java b/type.prototypelobby/src/main/java/net/swofty/type/prototypelobby/TypePrototypeLobbyLoader.java index 1cdce822d..2da0c6620 100644 --- a/type.prototypelobby/src/main/java/net/swofty/type/prototypelobby/TypePrototypeLobbyLoader.java +++ b/type.prototypelobby/src/main/java/net/swofty/type/prototypelobby/TypePrototypeLobbyLoader.java @@ -62,6 +62,8 @@ public void afterInitialize(MinecraftServer server) { getHotbarItems().values().forEach(itemHandler::add); parkourManager = new LobbyParkourManager(getParkour()); + + LobbyTypeLoader.registerLobbyCommands(); } @Override diff --git a/type.skywarslobby/src/main/java/net/swofty/type/skywarslobby/TypeSkywarsLobbyLoader.java b/type.skywarslobby/src/main/java/net/swofty/type/skywarslobby/TypeSkywarsLobbyLoader.java index 706a950aa..5816b46c7 100644 --- a/type.skywarslobby/src/main/java/net/swofty/type/skywarslobby/TypeSkywarsLobbyLoader.java +++ b/type.skywarslobby/src/main/java/net/swofty/type/skywarslobby/TypeSkywarsLobbyLoader.java @@ -110,6 +110,8 @@ public void afterInitialize(MinecraftServer server) { .delay(TaskSchedule.seconds(5)) .repeat(TaskSchedule.seconds(2)) .schedule(); + + LobbyTypeLoader.registerLobbyCommands(); } @Override