1
0
Fork 0

Modified GameLobby, Added Queue Command

This commit is contained in:
Andus 2024-08-11 18:57:18 +02:00
parent 9b387efe7e
commit ed6c8fba77
8 changed files with 110 additions and 75 deletions

View file

@ -1,10 +1,10 @@
package dev.cfox.gamejam.game.classes; package dev.cfox.gamejam.game.classes;
import dev.cfox.gamejam.game.managers.GameManager; 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.Misc;
import dev.cfox.gamejam.utils.classes.Randomized; import dev.cfox.gamejam.utils.classes.Randomized;
import net.kyori.adventure.text.Component; 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.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.format.TextDecoration;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
@ -21,12 +21,11 @@ import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
public class GameLobby { public class GameLobby {
private static final Logger logger = LoggerFactory.getLogger(GameLobby.class); private final Logger logger = LoggerFactory.getLogger(GameLobby.class);
private final ArrayList<UUID> players = new ArrayList<>(); private final ArrayList<UUID> players = new ArrayList<>();
Team team = MinecraftServer.getTeamManager().createTeam("team_" + getName()); Team team = MinecraftServer.getTeamManager().createTeam("team_" + getName());
private final ArrayList<UUID> eliminated = new ArrayList<>(); private final ArrayList<UUID> eliminated = new ArrayList<>();
private final ArrayList<UUID> eliminatedThisRound = new ArrayList<>(); private Phase phase;
private Instance instance; private Instance instance;
private String name = ""; private String name = "";
@ -41,8 +40,7 @@ public class GameLobby {
public void eliminate(Player player) { public void eliminate(Player player) {
if (!eliminated.contains(player)) { if (!eliminated.contains(player)) {
eliminated.add(player.getUuid()); eliminated.add(player.getUuid());
eliminatedThisRound.add(player.getUuid()); logger.debug("Player " + player.getUsername() + " got eliminated (GameLobby: " + name + ")");
logger.info("Player " + player.getUsername() + " got eliminated (GameLobby: " + name + ")");
sendMessage(Randomized.elimination(player)); sendMessage(Randomized.elimination(player));
player.sendMessage(Component.text("You've got eliminated!", NamedTextColor.RED, TextDecoration.BOLD)); player.sendMessage(Component.text("You've got eliminated!", NamedTextColor.RED, TextDecoration.BOLD));
player.setGameMode(GameMode.SPECTATOR); player.setGameMode(GameMode.SPECTATOR);
@ -63,8 +61,12 @@ public class GameLobby {
return eliminated; return eliminated;
} }
public ArrayList<UUID> getEliminatedThisRound() { public void setPhase(Phase newPhase) {
return eliminatedThisRound; phase = newPhase;
}
public Phase getPhase() {
return phase;
} }
public void setName(String name) { public void setName(String name) {
@ -86,10 +88,8 @@ public class GameLobby {
public void setInstance(Instance instance, Pos pos) { public void setInstance(Instance instance, Pos pos) {
this.instance = instance; this.instance = instance;
players.forEach(uuid -> { players.forEach(uuid ->
Misc.getPlayer(uuid).setInstance(instance) Misc.getPlayer(uuid).setInstance(instance).thenRun(() -> Misc.getPlayer(uuid).teleport(pos)));
.thenRun(() -> Misc.getPlayer(uuid).teleport(pos));
});
} }
public Instance getInstance() { public Instance getInstance() {
@ -97,12 +97,10 @@ public class GameLobby {
} }
public void teleport(Pos pos) { public void teleport(Pos pos) {
players.forEach(uuid -> { players.forEach(uuid -> Misc.getPlayer(uuid).teleport(pos));
Misc.getPlayer(uuid).teleport(pos);
});
} }
public void sendMessage(ComponentLike component) { public void sendMessage(Component component) {
players.forEach(uuid -> Misc.getPlayer(uuid).sendMessage(component)); players.forEach(uuid -> Misc.getPlayer(uuid).sendMessage(component));
} }
} }

View file

@ -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"));
}
}

View file

@ -55,21 +55,19 @@ public class GameManager {
public static void sendEndTitles(GameLobby game) { public static void sendEndTitles(GameLobby game) {
Instance instance = game.getInstance(); Instance instance = game.getInstance();
List<String> winners = new ArrayList<>(); List<String> winners = new ArrayList<>();
List<UUID> eliminatedThisRound = game.getEliminatedThisRound(); List<UUID> eliminated = game.getEliminated();
for (Player player : instance.getPlayers()) { 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(""))); player.showTitle(Title.title(Component.text("Eliminated!", NamedTextColor.RED, TextDecoration.BOLD), Component.text("")));
} else { } else {
// Player is a winner if they were not eliminated this round // Player is a winner if they were not eliminated
if (!game.getEliminated().contains(player.getUuid())) {
player.showTitle(Title.title(Component.text("Qualified!", NamedTextColor.GREEN, TextDecoration.BOLD), Component.text(""))); player.showTitle(Title.title(Component.text("Qualified!", NamedTextColor.GREEN, TextDecoration.BOLD), Component.text("")));
winners.add(player.getUsername()); winners.add(player.getUsername());
} }
} }
}
// Announce winners // Announce winners
instance.sendMessage(Component.text("Winner(s): " + winners, NamedTextColor.YELLOW, TextDecoration.BOLD)); instance.sendMessage(Component.text("Winner(s): " + winners, NamedTextColor.YELLOW));
} }
} }

View file

@ -1,41 +1,9 @@
package dev.cfox.gamejam.game.phases; package dev.cfox.gamejam.game.phases;
import dev.cfox.gamejam.utils.events.StartEvents; public enum Phase {
import org.slf4j.Logger; RED,
import org.slf4j.LoggerFactory; BLUE,
GREEN,
import java.util.Random; YELLOW,
PURPLE;
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
}
} }

View file

@ -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
}
}

View file

@ -1,9 +0,0 @@
package dev.cfox.gamejam.game.phases;
public enum Phases {
RED,
BLUE,
GREEN,
YELLOW,
PURPLE;
}

View file

@ -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();
});
}
}

View file

@ -1,4 +0,0 @@
package dev.cfox.gamejam.utils.events;
public class PhaseEvents {
}