package xyz.twovb.sgm.games.impl; /* * Created by 2vb - 5/7/2024 */ /* * Created by 2vb - 26/6/2024 */ import org.bukkit.Bukkit; import org.bukkit.World; 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.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class TestGame implements Minigame { final static String name = "TestGame"; private final UUID uuid; private final List players; private World gameWorld; private GameState state; public TestGame() { this.uuid = UUID.randomUUID(); this.state = GameState.PRESTART; this.players = new ArrayList<>(); } public void init(CommandSender owner, String world) throws IOException { // Perform initialization logic here Bukkit.getPluginManager().registerEvents(this, SGM.getInstance()); gameWorld = createGameWorld(world, uuid); 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.READY) { 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); player.teleport(gameWorld.getSpawnLocation()); 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) && state == GameState.STARTED) { 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 World getWorld() { return gameWorld; } @Override public void onTick() { if (state == GameState.STARTED && players.size() <= 1) { this.stop(); } } }