diff --git a/src/main/java/xyz/twovb/sgm/SGM.java b/src/main/java/xyz/twovb/sgm/SGM.java index 5a72828..0f5a1af 100644 --- a/src/main/java/xyz/twovb/sgm/SGM.java +++ b/src/main/java/xyz/twovb/sgm/SGM.java @@ -9,6 +9,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler; import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler; +import xyz.twovb.sgm.commands.impl.GameCommand; import xyz.twovb.sgm.commands.impl.LevelCommand; import xyz.twovb.sgm.commands.impl.SGMCommand; import xyz.twovb.sgm.games.GameManager; @@ -36,6 +37,8 @@ public final class SGM extends JavaPlugin { @Getter private GameManager gameManager; + @Getter + private LevelManager levelManager; @Override @@ -44,6 +47,7 @@ public final class SGM extends JavaPlugin { cLogger = new CustomLogger(this); configManager = new ConfigManager(this); gameManager = new GameManager(); + levelManager = new LevelManager(); Messages = configManager.loadConfig("messages.yml"); BuildInfo = new YamlConfiguration(); try { @@ -53,7 +57,7 @@ public final class SGM extends JavaPlugin { registerCommands(); registerGames(); registerPlaceholders(); - LevelManager.loadLevels(); + levelManager.loadLevels(); } private void registerPlaceholders() { @@ -65,14 +69,11 @@ public final class SGM extends JavaPlugin { } private void registerCommands() { - LiteCommandsBukkit.builder().commands(new SGMCommand(), new LevelCommand()).invalidUsage(new InvalidArgsHandler()).missingPermission(new NoPermissionsHandler()).message(LiteBukkitMessages.PLAYER_NOT_FOUND, input -> Messages.getString("commands.invalid-player").replace("%player%", input)).message(LiteBukkitMessages.PLAYER_ONLY, input -> Messages.getString("commands.player-only")).build(); + LiteCommandsBukkit.builder().commands(new SGMCommand(), new LevelCommand(), new GameCommand()).invalidUsage(new InvalidArgsHandler()).missingPermission(new NoPermissionsHandler()).message(LiteBukkitMessages.PLAYER_NOT_FOUND, input -> Messages.getString("commands.invalid-player").replace("%player%", input)).message(LiteBukkitMessages.PLAYER_ONLY, input -> Messages.getString("commands.player-only")).build(); } private void registerGames() { gameManager.registerGame(new TestGame()); - gameManager.registerGame(new TestGame1()); - gameManager.registerGame(new TestGame2()); - gameManager.registerGame(new TestGame3()); } @Override diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java new file mode 100644 index 0000000..db9248b --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java @@ -0,0 +1,33 @@ +package xyz.twovb.sgm.commands.impl; + + +/* + * Created by 2vb - 2/7/2024 + */ + +/* + * Created by 2vb - 2/7/2024 + */ + +import dev.rollczi.litecommands.annotations.argument.Arg; +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Context; +import dev.rollczi.litecommands.annotations.execute.Execute; +import dev.rollczi.litecommands.annotations.permission.Permission; +import org.bukkit.World; +import org.bukkit.entity.Player; +import xyz.twovb.sgm.SGM; +import xyz.twovb.sgm.levels.LevelManager; +import xyz.twovb.toolbox.api.CustomPlayer; + +@Command(name = "game") +public class GameCommand { + + @Execute(name = "start") + @Permission("sgm.games.start") + void game(@Context Player player, @Arg("name") String name) { + CustomPlayer cPlayer = new CustomPlayer(player); + cPlayer.sendMessage(SGM.getInstance().getGameManager().enabledLevels.toString()); + } + +} diff --git a/src/main/java/xyz/twovb/sgm/games/GameManager.java b/src/main/java/xyz/twovb/sgm/games/GameManager.java index 4b30445..2abcb7a 100644 --- a/src/main/java/xyz/twovb/sgm/games/GameManager.java +++ b/src/main/java/xyz/twovb/sgm/games/GameManager.java @@ -68,6 +68,9 @@ public class GameManager { registeredGames.add(game.getName().toLowerCase()); SGM.getInstance().getCLogger().log("Registered game " + game.getName()); SGM.getInstance().getCLogger().log(registeredGames); + registeredGames.add("testgame1"); + registeredGames.add("testgame2"); + registeredGames.add("testgame3"); } } \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/games/impl/TestGame1.java b/src/main/java/xyz/twovb/sgm/games/impl/TestGame1.java deleted file mode 100644 index 51c5019..0000000 --- a/src/main/java/xyz/twovb/sgm/games/impl/TestGame1.java +++ /dev/null @@ -1,129 +0,0 @@ -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(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/games/impl/TestGame2.java b/src/main/java/xyz/twovb/sgm/games/impl/TestGame2.java deleted file mode 100644 index a7445c2..0000000 --- a/src/main/java/xyz/twovb/sgm/games/impl/TestGame2.java +++ /dev/null @@ -1,129 +0,0 @@ -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 TestGame2 implements Minigame { - - final static String name = "TestGame2"; - private final UUID uuid; - private CommandSender owner; - private GameState state; - private final List players; - - public TestGame2() { - 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(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/games/impl/TestGame3.java b/src/main/java/xyz/twovb/sgm/games/impl/TestGame3.java deleted file mode 100644 index 7ceda78..0000000 --- a/src/main/java/xyz/twovb/sgm/games/impl/TestGame3.java +++ /dev/null @@ -1,129 +0,0 @@ -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 TestGame3 implements Minigame { - - final static String name = "TestGame3"; - private final UUID uuid; - private CommandSender owner; - private GameState state; - private final List players; - - public TestGame3() { - 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(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java index fa79d03..c66f708 100644 --- a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java +++ b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java @@ -14,34 +14,16 @@ import xyz.twovb.sgm.SGM; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class LevelManager { public static final String path = SGM.getInstance().getDataFolder().getPath() + "/levels/"; - public static void loadLevels() { - // List all files (worlds) in the folder - File folder = new File(path); - File[] files = folder.listFiles(); - if (files != null) { - for (File file : files) { - if (file.isDirectory()) { - // Check if sgm.yml exists in the world directory - File configFile = new File(file, "sgm.yml"); - if (configFile.exists()) { - YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); - SGM.getInstance().getGameManager().enabledLevels.put(config.getString("game"), config.getString("name")); - // Load the world if sgm.yml exists - loadWorld(file.getName()); - } else { - SGM.getInstance().getCLogger().log("Skipping directory " + file.getName() + ": sgm.yml not found."); - } - } - } - } - } + public HashMap> enabledMaps = new HashMap<>(); private static void loadWorld(String worldName) { // Check if the world is already loaded @@ -82,10 +64,12 @@ public class LevelManager { world.setSpawnLocation(location); world.setSpawnFlags(false, false); genDataFile(level, name, game.toLowerCase()); + SGM.getInstance().getGameManager().enabledLevels.put(game, name); return CreationResult.SUCCESS; } private static void genDataFile(File path, String name, String game) { + // these are opposite Map data = new HashMap<>(); data.put("name", name); data.put("game", game); @@ -104,6 +88,35 @@ public class LevelManager { return Bukkit.getWorld(new NamespacedKey(SGM.getInstance(), "level_" + name)); } + public void loadLevels() { + for (String game : SGM.getInstance().getGameManager().getRegisteredGames()) { + enabledMaps.put(game, new ArrayList<>()); // Initialize an empty ArrayList for each game + } + // List all files (worlds) in the folder + File folder = new File(path); + File[] files = folder.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + // Check if sgm.yml exists in the world directory + File configFile = new File(file, "sgm.yml"); + if (configFile.exists()) { + YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); + String game = config.getString("game"); + String name = config.getString("name"); + if (enabledMaps.containsKey(game)) { + enabledMaps.get(game).add(name); + // Load the world if sgm.yml exists + loadWorld(file.getName()); + } + } else { + SGM.getInstance().getCLogger().log("Skipping directory " + file.getName() + ": sgm.yml not found."); + } + } + } + } + } + public enum CreationResult { SUCCESS, WORLD_EXISTS, INVALID_ARGS, UNKNOWN }