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 index 81b5b40..8b4e78e 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -105,13 +105,7 @@ public class CTB implements Minigame { // Perform initialization logic here gameWorld = createGameWorld(world, uuid); gameWorld.setAutoSave(false); - gameWorld.setGameRule(GameRule.KEEP_INVENTORY, true); - gameWorld.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - gameWorld.setGameRule(GameRule.DO_WEATHER_CYCLE, false); - gameWorld.setGameRule(GameRule.RANDOM_TICK_SPEED, 0); - gameWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false); - gameWorld.setGameRule(GameRule.DO_MOB_SPAWNING, false); - gameWorld.setGameRule(GameRule.DO_MOB_LOOT, false); + LevelManager.setGameRules(gameWorld); // todo get player attributes and then save if (applyOptions(world)) { this.teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager(); @@ -302,6 +296,7 @@ public class CTB implements Minigame { players.add(player); player.getInventory().clear(); player.setGameMode(GameMode.ADVENTURE); + player.setRespawnLocation(this.spawnLoc); sendMessageToAllPlayers(messages.getString("system.player.join").replace("%player%", player.getName())); } @@ -310,6 +305,7 @@ public class CTB implements Minigame { sendMessageToAllPlayers(messages.getString("system.player.left").replace("%player%", player.getName())); sb.removePlayer(player); removePlayerFromTeams(player); + player.setRespawnLocation(Bukkit.getWorlds().get(0).getSpawnLocation()); players.remove(player); } @@ -333,12 +329,18 @@ public class CTB implements Minigame { void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getPlayer(); if (!players.contains(player)) return; - if (state == GameState.STARTED) { + event.setCancelled(true); + ScoreboardTeam team = getTeam(player); + if (this.state == GameState.STARTED) { addPlayerToJail(player); + if (team == redTeam) { + player.teleport(blueJail); + } else if (team == blueTeam) { + player.teleport(redJail); + } } else { player.teleport(gameWorld.getSpawnLocation()); } - event.setCancelled(true); } @EventHandler @@ -489,11 +491,11 @@ public class CTB implements Minigame { if (!players.contains(player)) return; if (this.state != GameState.STARTED) return; if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return; - CtbData.Territory territory = getTerritory(player); + ScoreboardTeam teams = getTeam(player); Location jail = gameWorld.getSpawnLocation(); - if (territory.equals(CtbData.Territory.Blue)) { + if (teams == redTeam) { jail = this.blueJail; - } else if (territory.equals(CtbData.Territory.Red)) { + } else if (teams == blueTeam) { jail = this.redJail; } double distanceFromJail = jail.distanceSquared(player.getLocation()); @@ -576,7 +578,8 @@ public class CTB implements Minigame { Player player = event.getJailed(); if (this.state != GameState.STARTED) return; if (!players.contains(player)) return; - if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return; + CtbData.PlayerState playerState = playerStateMap.get(player); + if (playerState != CtbData.PlayerState.Jailed) return; CustomPlayer cPlayer = new CustomPlayer(player); cPlayer.sendMessage(messages.getString("system.player.jail.info")); for (String teamMembers : getTeam(cPlayer.player()).defaultDisplay().entries()) { @@ -590,7 +593,7 @@ public class CTB implements Minigame { private int seconds = 1; @Override public void run() { - if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) this.cancel(); +// if (playerState != CtbData.PlayerState.Jailed) this.cancel(); if (seconds > jailTime) { jailbreakPlayer(player); this.cancel(); @@ -739,6 +742,7 @@ public class CTB implements Minigame { PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player); jailedEvent.callEvent(); ScoreboardTeam team = getTeam(player); +// SGM.getInstance().getCLogger().log(team.name()); if (team == redTeam) { player.teleport(blueJail); } else if (team == blueTeam) { @@ -746,10 +750,6 @@ public class CTB implements Minigame { } } - public void freePlayerFromJail(Player player) { - playerStateMap.replace(player, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable); - } - @Override public List getPlayers() { return players; @@ -881,8 +881,8 @@ public class CTB implements Minigame { // before processing each section in the same order as the file. private boolean applyOptions(String worldName) { File configFile = new File(LevelManager.mapPath + worldName + "/sgm.yml"); - SGM.getInstance().getCLogger().log(configFile.getPath()); - SGM.getInstance().getCLogger().log(configFile.getAbsolutePath()); +// SGM.getInstance().getCLogger().log(configFile.getPath()); +// SGM.getInstance().getCLogger().log(configFile.getAbsolutePath()); YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); // Set map information diff --git a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java index ce5e272..0aa3515 100644 --- a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java +++ b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java @@ -52,18 +52,8 @@ public class LevelManager { case MAP -> new WorldCreator(mapPath + worldName, new NamespacedKey(SGM.getInstance(), key)); }; World world = wc.createWorld(); - world.setGameRule(GameRule.KEEP_INVENTORY, true); - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - world.setGameRule(GameRule.DO_WEATHER_CYCLE, false); - world.setGameRule(GameRule.RANDOM_TICK_SPEED, 0); - world.setGameRule(GameRule.DO_MOB_SPAWNING, false); - world.setGameRule(GameRule.DO_MOB_SPAWNING, false); - world.setGameRule(GameRule.DO_MOB_LOOT, false); - if (world != null) { - SGM.getInstance().getCLogger().log("Loaded world: " + worldName); - } else { - SGM.getInstance().getCLogger().error("Failed to load world: " + worldName); - } + setGameRules(world); + SGM.getInstance().getCLogger().log("Loaded world: " + worldName); } private static void genDataFile(File path, String name, String game) { @@ -191,16 +181,20 @@ public class LevelManager { } world.setSpawnLocation(location); world.setSpawnFlags(false, false); + setGameRules(world); + world.setTime(1000); + genDataFile(level, name, game.toLowerCase()); + return LevelResult.SUCCESS; + } + + public static void setGameRules(World world) { world.setGameRule(GameRule.KEEP_INVENTORY, true); world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); world.setGameRule(GameRule.DO_WEATHER_CYCLE, false); world.setGameRule(GameRule.RANDOM_TICK_SPEED, 0); world.setGameRule(GameRule.DO_MOB_SPAWNING, false); - world.setGameRule(GameRule.DO_MOB_SPAWNING, false); world.setGameRule(GameRule.DO_MOB_LOOT, false); - world.setTime(1000); - genDataFile(level, name, game.toLowerCase()); - return LevelResult.SUCCESS; + world.setGameRule(GameRule.DO_IMMEDIATE_RESPAWN, true); } public void loadLevels() {