package xyz.twovb.sgm.games.impl; /* * Created by 2vb - 26/6/2024 */ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerQuitEvent; import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.games.GameManager; import xyz.twovb.sgm.games.Minigame; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class TestGame1 implements Minigame { final static String name = "TestGame1"; private final UUID uuid; private CommandSender owner; private GameState state; private final List players; public TestGame1() { this.uuid = UUID.randomUUID(); this.state = GameState.PRESTART; this.players = new ArrayList<>(); } public void init(CommandSender owner) { // Perform initialization logic here Bukkit.getPluginManager().registerEvents(this, SGM.getInstance()); this.owner = owner; state = GameState.READY; owner.sendMessage("A new " + name + " instance with ID " + uuid + " has been created and is now ready!"); } @Override public void start() { if (state == GameState.PRESTART) { state = GameState.STARTED; sendMessageToAllPlayers("The game has started!"); for (Player player : players) { player.teleport(player.getWorld().getSpawnLocation()); } Bukkit.getScheduler().runTaskTimer(SGM.getInstance(), this::onTick, 0L, 1L); } } @Override public void stop() { // Stop game logic state = GameState.ENDING; Player winner; if (players.size() <= 1) { winner = players.get(0); winner.sendMessage("Congratulations on winning the game!"); } players.clear(); // Clear player list GameManager.getActiveGames().remove(uuid); } @Override public void addPlayer(Player player) { players.add(player); sendMessageToAllPlayers(player.getName() + " has joined the game!"); } @Override public void removePlayer(Player player) { players.remove(player); } @EventHandler void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); if (players.contains(player)) { removePlayer(event.getPlayer()); } } @EventHandler void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getPlayer(); if (players.contains(player)) { sendMessageToAllPlayers(player.getName() + " was eliminated!"); event.setDeathMessage(""); removePlayer(player); } } @Override public List getPlayers() { return players; } @Override public String getName() { return name; } @Override public UUID getGameId() { return uuid; } @Override public GameState getState() { return state; } @Override public CommandSender getOwner() { return owner; } @Override public void onTick() { if (state == GameState.STARTED && players.size() <= 1) { this.stop(); } } }