From ed6c8fba77a6660691e85f8f903e952f9989c5ad Mon Sep 17 00:00:00 2001 From: Andus Date: Sun, 11 Aug 2024 18:57:18 +0200 Subject: [PATCH] Modified GameLobby, Added Queue Command --- .../cfox/gamejam/game/classes/GameLobby.java | 30 ++++++------- .../gamejam/game/commands/QueueCommand.java | 22 ++++++++++ .../gamejam/game/managers/GameManager.java | 14 +++--- .../dev/cfox/gamejam/game/phases/Phase.java | 44 +++---------------- .../cfox/gamejam/game/phases/PhaseLogic.java | 42 ++++++++++++++++++ .../dev/cfox/gamejam/game/phases/Phases.java | 9 ---- .../cfox/gamejam/utils/events/MiscEvents.java | 20 +++++++++ .../gamejam/utils/events/PhaseEvents.java | 4 -- 8 files changed, 110 insertions(+), 75 deletions(-) create mode 100644 src/main/java/dev/cfox/gamejam/game/commands/QueueCommand.java create mode 100644 src/main/java/dev/cfox/gamejam/game/phases/PhaseLogic.java delete mode 100644 src/main/java/dev/cfox/gamejam/game/phases/Phases.java create mode 100644 src/main/java/dev/cfox/gamejam/utils/events/MiscEvents.java delete mode 100644 src/main/java/dev/cfox/gamejam/utils/events/PhaseEvents.java diff --git a/src/main/java/dev/cfox/gamejam/game/classes/GameLobby.java b/src/main/java/dev/cfox/gamejam/game/classes/GameLobby.java index e3dcc6b..3de5a18 100644 --- a/src/main/java/dev/cfox/gamejam/game/classes/GameLobby.java +++ b/src/main/java/dev/cfox/gamejam/game/classes/GameLobby.java @@ -1,10 +1,10 @@ package dev.cfox.gamejam.game.classes; import dev.cfox.gamejam.game.managers.GameManager; +import dev.cfox.gamejam.game.phases.Phase; import dev.cfox.gamejam.utils.Misc; import dev.cfox.gamejam.utils.classes.Randomized; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.ComponentLike; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import net.minestom.server.MinecraftServer; @@ -21,12 +21,11 @@ import java.util.ArrayList; import java.util.UUID; public class GameLobby { - private static final Logger logger = LoggerFactory.getLogger(GameLobby.class); + private final Logger logger = LoggerFactory.getLogger(GameLobby.class); private final ArrayList players = new ArrayList<>(); Team team = MinecraftServer.getTeamManager().createTeam("team_" + getName()); private final ArrayList eliminated = new ArrayList<>(); - private final ArrayList eliminatedThisRound = new ArrayList<>(); - + private Phase phase; private Instance instance; private String name = ""; @@ -41,8 +40,7 @@ public class GameLobby { public void eliminate(Player player) { if (!eliminated.contains(player)) { eliminated.add(player.getUuid()); - eliminatedThisRound.add(player.getUuid()); - logger.info("Player " + player.getUsername() + " got eliminated (GameLobby: " + name + ")"); + logger.debug("Player " + player.getUsername() + " got eliminated (GameLobby: " + name + ")"); sendMessage(Randomized.elimination(player)); player.sendMessage(Component.text("You've got eliminated!", NamedTextColor.RED, TextDecoration.BOLD)); player.setGameMode(GameMode.SPECTATOR); @@ -63,8 +61,12 @@ public class GameLobby { return eliminated; } - public ArrayList getEliminatedThisRound() { - return eliminatedThisRound; + public void setPhase(Phase newPhase) { + phase = newPhase; + } + + public Phase getPhase() { + return phase; } public void setName(String name) { @@ -86,10 +88,8 @@ public class GameLobby { public void setInstance(Instance instance, Pos pos) { this.instance = instance; - players.forEach(uuid -> { - Misc.getPlayer(uuid).setInstance(instance) - .thenRun(() -> Misc.getPlayer(uuid).teleport(pos)); - }); + players.forEach(uuid -> + Misc.getPlayer(uuid).setInstance(instance).thenRun(() -> Misc.getPlayer(uuid).teleport(pos))); } public Instance getInstance() { @@ -97,12 +97,10 @@ public class GameLobby { } public void teleport(Pos pos) { - players.forEach(uuid -> { - Misc.getPlayer(uuid).teleport(pos); - }); + players.forEach(uuid -> Misc.getPlayer(uuid).teleport(pos)); } - public void sendMessage(ComponentLike component) { + public void sendMessage(Component component) { players.forEach(uuid -> Misc.getPlayer(uuid).sendMessage(component)); } } diff --git a/src/main/java/dev/cfox/gamejam/game/commands/QueueCommand.java b/src/main/java/dev/cfox/gamejam/game/commands/QueueCommand.java new file mode 100644 index 0000000..936207b --- /dev/null +++ b/src/main/java/dev/cfox/gamejam/game/commands/QueueCommand.java @@ -0,0 +1,22 @@ +package dev.cfox.gamejam.game.commands; + +import dev.cfox.gamejam.game.managers.QueueManager; +import net.minestom.server.command.builder.Command; +import net.minestom.server.command.builder.arguments.ArgumentType; +import net.minestom.server.entity.Player; + +public class QueueCommand extends Command { + public QueueCommand() { + super("queue", "q"); + addSyntax(((sender, context) -> { + final String arg1 = context.get("arg1"); + if (sender instanceof Player player) { + if (arg1.equals("join")) { + QueueManager.joinPlayer(player); + } else if (arg1.equals("leave")) { + QueueManager.removePlayer(player); + } + } + }), ArgumentType.String("arg1")); + } +} diff --git a/src/main/java/dev/cfox/gamejam/game/managers/GameManager.java b/src/main/java/dev/cfox/gamejam/game/managers/GameManager.java index 3dbd8cf..ee6436a 100644 --- a/src/main/java/dev/cfox/gamejam/game/managers/GameManager.java +++ b/src/main/java/dev/cfox/gamejam/game/managers/GameManager.java @@ -55,21 +55,19 @@ public class GameManager { public static void sendEndTitles(GameLobby game) { Instance instance = game.getInstance(); List winners = new ArrayList<>(); - List eliminatedThisRound = game.getEliminatedThisRound(); + List eliminated = game.getEliminated(); for (Player player : instance.getPlayers()) { - if (eliminatedThisRound.contains(player.getUuid())) { + if (eliminated.contains(player.getUuid())) { player.showTitle(Title.title(Component.text("Eliminated!", NamedTextColor.RED, TextDecoration.BOLD), Component.text(""))); } else { - // Player is a winner if they were not eliminated this round - if (!game.getEliminated().contains(player.getUuid())) { - player.showTitle(Title.title(Component.text("Qualified!", NamedTextColor.GREEN, TextDecoration.BOLD), Component.text(""))); - winners.add(player.getUsername()); - } + // Player is a winner if they were not eliminated + player.showTitle(Title.title(Component.text("Qualified!", NamedTextColor.GREEN, TextDecoration.BOLD), Component.text(""))); + winners.add(player.getUsername()); } } // Announce winners - instance.sendMessage(Component.text("Winner(s): " + winners, NamedTextColor.YELLOW, TextDecoration.BOLD)); + instance.sendMessage(Component.text("Winner(s): " + winners, NamedTextColor.YELLOW)); } } diff --git a/src/main/java/dev/cfox/gamejam/game/phases/Phase.java b/src/main/java/dev/cfox/gamejam/game/phases/Phase.java index cc43612..cb451b0 100644 --- a/src/main/java/dev/cfox/gamejam/game/phases/Phase.java +++ b/src/main/java/dev/cfox/gamejam/game/phases/Phase.java @@ -1,41 +1,9 @@ package dev.cfox.gamejam.game.phases; -import dev.cfox.gamejam.utils.events.StartEvents; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Random; - -public class Phase { - private static final Logger logger = LoggerFactory.getLogger(Phase.class); - - public static void random() { - Phases[] phases = Phases.values(); - int randomIndex = new Random().nextInt(phases.length); - Phases selectedPhase = phases[randomIndex]; - - switch (selectedPhase) { - case RED -> red(); - case BLUE -> blue(); - case GREEN -> green(); - case YELLOW -> yellow(); - case PURPLE -> purple(); - } - } - - public static void red() { - // Handle red phase logic - } - public static void blue() { - // Handle blue phase logic - } - public static void green() { - // Handle green phase logic - } - public static void yellow() { - // Handle yellow phase logic - } - public static void purple() { - // Handle purple phase logic - } +public enum Phase { + RED, + BLUE, + GREEN, + YELLOW, + PURPLE; } diff --git a/src/main/java/dev/cfox/gamejam/game/phases/PhaseLogic.java b/src/main/java/dev/cfox/gamejam/game/phases/PhaseLogic.java new file mode 100644 index 0000000..8e79a49 --- /dev/null +++ b/src/main/java/dev/cfox/gamejam/game/phases/PhaseLogic.java @@ -0,0 +1,42 @@ +package dev.cfox.gamejam.game.phases; + +import dev.cfox.gamejam.game.classes.GameLobby; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Random; + +public class PhaseLogic { + private static final Logger logger = LoggerFactory.getLogger(PhaseLogic.class); + + public static void random(GameLobby game) { + Phase[] phases = Phase.values(); + int randomIndex = new Random().nextInt(phases.length); + Phase selectedPhase = phases[randomIndex]; + logger.info("Picking random color phase for GameLobby: " + game.getName()); + + switch (selectedPhase) { + case RED -> red(game); + case BLUE -> blue(game); + case GREEN -> green(game); + case YELLOW -> yellow(game); + case PURPLE -> purple(game); + } + } + + public static void red(GameLobby game) { + // Handle red phase logic + } + public static void blue(GameLobby game) { + // Handle blue phase logic + } + public static void green(GameLobby game) { + // Handle green phase logic + } + public static void yellow(GameLobby game) { + // Handle yellow phase logic + } + public static void purple(GameLobby game) { + // Handle purple phase logic + } +} diff --git a/src/main/java/dev/cfox/gamejam/game/phases/Phases.java b/src/main/java/dev/cfox/gamejam/game/phases/Phases.java deleted file mode 100644 index 432f26b..0000000 --- a/src/main/java/dev/cfox/gamejam/game/phases/Phases.java +++ /dev/null @@ -1,9 +0,0 @@ -package dev.cfox.gamejam.game.phases; - -public enum Phases { - RED, - BLUE, - GREEN, - YELLOW, - PURPLE; -} diff --git a/src/main/java/dev/cfox/gamejam/utils/events/MiscEvents.java b/src/main/java/dev/cfox/gamejam/utils/events/MiscEvents.java new file mode 100644 index 0000000..cc21ec0 --- /dev/null +++ b/src/main/java/dev/cfox/gamejam/utils/events/MiscEvents.java @@ -0,0 +1,20 @@ +package dev.cfox.gamejam.utils.events; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.entity.Player; +import net.minestom.server.event.GlobalEventHandler; +import net.minestom.server.event.player.PlayerMoveEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MiscEvents { + static GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler(); + private static final Logger logger = LoggerFactory.getLogger(MiscEvents.class); + + public static void register() { + logger.debug("Registering Misc Listeners"); + globalEventHandler.addListener(PlayerMoveEvent.class, event -> { + Player player = event.getPlayer(); + }); + } +} diff --git a/src/main/java/dev/cfox/gamejam/utils/events/PhaseEvents.java b/src/main/java/dev/cfox/gamejam/utils/events/PhaseEvents.java deleted file mode 100644 index b28ba8a..0000000 --- a/src/main/java/dev/cfox/gamejam/utils/events/PhaseEvents.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.cfox.gamejam.utils.events; - -public class PhaseEvents { -}