From eb8ac975722bb4c9f0e4070954b8f99938d666ff Mon Sep 17 00:00:00 2001 From: 2vb <2vb@protonmail.com> Date: Wed, 3 Jul 2024 20:52:16 -0700 Subject: [PATCH] testing if work --- .../java/xyz/twovb/sgm/games/Minigame.java | 11 +- .../sgm/games/impl/capturethebrick/CTB.java | 142 ++++++++++++++++++ .../impl/capturethebrick/CTBOptions.java | 22 +++ 3 files changed, 167 insertions(+), 8 deletions(-) create mode 100644 src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java create mode 100644 src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTBOptions.java diff --git a/src/main/java/xyz/twovb/sgm/games/Minigame.java b/src/main/java/xyz/twovb/sgm/games/Minigame.java index 886e651..e8e3c61 100644 --- a/src/main/java/xyz/twovb/sgm/games/Minigame.java +++ b/src/main/java/xyz/twovb/sgm/games/Minigame.java @@ -9,6 +9,7 @@ import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.WorldCreator; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import xyz.twovb.sgm.SGM; @@ -62,19 +63,13 @@ public interface Minigame extends Listener { if (world == null) return null; world.setAutoSave(false); return world; -// FileUtils.copyFile(new File(levelDir + "/sgm.yml"), tempDir); } else { return null; } - -// FileUtils.copyDirectory(levelDir, tempDir); -// WorldCreator wc = new WorldCreator(LevelManager.gamePath + tempName, new NamespacedKey(SGM.getInstance(), tempName)); -// World world = wc.createWorld(); -// if (world == null) return null; -// world.setAutoSave(false); -// return world; } + + enum GameState { PRESTART, READY, STARTED, ENDING } diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java new file mode 100644 index 0000000..ae90fbb --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -0,0 +1,142 @@ +package xyz.twovb.sgm.games.impl.capturethebrick; + + +/* + * Created by 2vb - 3/7/2024 + */ + +/* + * Created by 2vb - 3/7/2024 + */ + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +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 CTB implements Minigame { + + final static String name = "CaptureTheBrick"; + private final UUID uuid; + private final List players; + private World gameWorld; + private CommandSender owner; + private GameState state; + + public CTB() { + 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()); + this.owner = owner; + 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()); + player.teleport(new Location(gameWorld, 0, 0, 0)); + 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 CommandSender getOwner() { + return owner; + } + + @Override + public void onTick() { + if (state == GameState.STARTED && players.size() <= 1) { + this.stop(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTBOptions.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTBOptions.java new file mode 100644 index 0000000..5ffa2b3 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTBOptions.java @@ -0,0 +1,22 @@ +package xyz.twovb.sgm.games.impl.capturethebrick; + +/* + * Created by 2vb - 3/7/2024 + */ + +import org.bukkit.ChatColor; +import org.bukkit.Location; + +import java.util.ArrayList; + +public interface CTBOptions { + + int maxTeams = 2; + int brickCount = 2; + ArrayList redBrickSpawns = new ArrayList<>(); + ArrayList blueBrickSpawns = new ArrayList<>(); + int territoryLevel = 1; + int spawnLevel = 3; + int boundaryLevel = 5; + +}