diff --git a/src/main/java/me/firephoenix/ps3minigames/PS3Minigames.java b/src/main/java/me/firephoenix/ps3minigames/PS3Minigames.java index 7683a1b..5273ec0 100644 --- a/src/main/java/me/firephoenix/ps3minigames/PS3Minigames.java +++ b/src/main/java/me/firephoenix/ps3minigames/PS3Minigames.java @@ -15,6 +15,7 @@ import me.firephoenix.ps3minigames.listener.MoveListener; import me.firephoenix.ps3minigames.listener.WorldListener; import me.firephoenix.ps3minigames.states.GameState; import me.firephoenix.ps3minigames.states.LobbyState; +import me.firephoenix.ps3minigames.util.GameUtil; import me.firephoenix.ps3minigames.util.Timer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -47,6 +48,8 @@ public final class PS3Minigames extends JavaPlugin { public ArrayList frozenPlayer = new ArrayList<>(); + public GameUtil gameUtil = new GameUtil(); + @Override public void onEnable() { // Set Instance @@ -76,67 +79,4 @@ public final class PS3Minigames extends JavaPlugin { public void onDisable() { // Plugin shutdown logic } - - public void startNewGame(ArrayList players, World map) { - String newName = map.getName() + "game" + getGames().size() + 1; - boolean copydone = getMultiverseCore().getMVWorldManager().cloneWorld(map.getName(), newName); - if (copydone) { - boolean loadingdone = getMultiverseCore().getMVWorldManager().loadWorld(newName); - if (loadingdone) { - getMultiverseCore().getMVWorldManager().getMVWorld(newName).setAlias(newName); - World gameWorld = Bukkit.getWorld(newName); - Game newGame = new Game(getGames().size() + 1, players, gameWorld, GameState.STARTING); - games.add(newGame); - worldToGameHashMap.put(gameWorld, newGame); - int spawnnumber = 1; - for (UUID uuid : players) { - if (getServer().getPlayer(uuid) == null) return; - getServer().getPlayer(uuid).sendMessage(ChatColor.translateAlternateColorCodes('&', getConfig().getString("messages.teleporting"))); - String configpathtospawnloc = "maps." + map.getName() + ".spawn" + spawnnumber++; - Location location = new Location(gameWorld, getConfig().getDouble(configpathtospawnloc + ".x"), getConfig().getDouble(configpathtospawnloc + ".y"), getConfig().getDouble(configpathtospawnloc + ".z"), (float) getConfig().getDouble(configpathtospawnloc + ".yaw"), (float) getConfig().getDouble(configpathtospawnloc + ".pitch")); - System.out.println(configpathtospawnloc + ".x"); - Bukkit.getServer().getPlayer(uuid).teleport(location); - getFrozenPlayer().add(uuid); - } - Timer timer = new Timer(10, PS3Minigames.INSTANCE); - timer.start(); - timer.eachSecond(() -> { - for (UUID uuid : newGame.getPlayers()) { - if (Bukkit.getServer().getPlayer(uuid) == null) return; - Bukkit.getServer().getPlayer(uuid).sendTitle(ChatColor.translateAlternateColorCodes('&',"&6" + timer.getCounter()), ""); - } - }); - timer.whenComplete(() -> { - newGame.setGameState(GameState.RUNNING); - gameWorld.getPlayers().forEach(player -> { - frozenPlayer.remove(player.getUniqueId()); - player.sendMessage(ChatColor.translateAlternateColorCodes('&', getConfig().getString("messages.game-start-no-countdown"))); - }); - }); - } else { - System.out.println("error while trying to load the world!"); - } - } else { - System.out.println("error while trying to copy the world!"); - } - } - - public void stopGame(Game game) { - if (game.getGameState() != GameState.STOPPING) game.setGameState(GameState.STOPPING); - game.getPlayers().forEach(uuid -> Bukkit.getServer().getPlayer(uuid).teleport(new Location(getServer().getWorld(getConfig().getString("spawn-lobby.world")), getConfig().getDouble("spawn-lobby.x"), getConfig().getDouble("spawn-lobby.y"), getConfig().getDouble("spawn-lobby.z"), (float) getConfig().getDouble("spawn-lobby.yaw"), (float) getConfig().getDouble("spawn-lobby.pitch")))); - if (game.getMap().getPlayers().size() == 0) { - getMultiverseCore().getMVWorldManager().deleteWorld(game.getMap().getName()); - } - games.remove(game); - } - - public Game getGameByWorld(World world) { - return worldToGameHashMap.get(world); - } - - @Nullable - public Game getGameByID(int id) { - //we use id - 1 because the id is the absolute size of the list which starts at 1 and the arraylist position starts at 0 - return getGames().stream().anyMatch(game -> game.getGameid() == id) ? getGames().get(id - 1) : null; - } } diff --git a/src/main/java/me/firephoenix/ps3minigames/commands/ForceStart.java b/src/main/java/me/firephoenix/ps3minigames/commands/ForceStart.java index 2116565..832c396 100644 --- a/src/main/java/me/firephoenix/ps3minigames/commands/ForceStart.java +++ b/src/main/java/me/firephoenix/ps3minigames/commands/ForceStart.java @@ -29,7 +29,7 @@ public class ForceStart implements CommandExecutor { if (world != null) { ArrayList players = new ArrayList<>(); PS3Minigames.INSTANCE.getLobby().getPlayers().forEach(player -> players.add(player.getUniqueId())); - PS3Minigames.INSTANCE.startNewGame(players, world); + PS3Minigames.INSTANCE.getGameUtil().startNewGame(players, world); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.force-starting-game").replace("%map%", world.getName()))); return true; } else { diff --git a/src/main/java/me/firephoenix/ps3minigames/commands/ForceStop.java b/src/main/java/me/firephoenix/ps3minigames/commands/ForceStop.java index 9d90d07..e1f81c3 100644 --- a/src/main/java/me/firephoenix/ps3minigames/commands/ForceStop.java +++ b/src/main/java/me/firephoenix/ps3minigames/commands/ForceStop.java @@ -28,11 +28,11 @@ public class ForceStop implements CommandExecutor { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.invalid-game-id").replace("%id%", args[0]))); return false; } - if (PS3Minigames.INSTANCE.getGameByID(gameID) == null || gameID == 0) { + if (PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID) == null || gameID == 0) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.cant-find-game"))); return true; } else { - PS3Minigames.INSTANCE.stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameByID(gameID))); + PS3Minigames.INSTANCE.getGameUtil().stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByID(gameID))); return true; } } diff --git a/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java b/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java index c7db055..281f136 100644 --- a/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java +++ b/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java @@ -8,6 +8,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; +import java.util.Objects; + /** * @author NieGestorben * Copyright© (c) 2023, All Rights Reserved. @@ -23,7 +25,7 @@ public class DeathListener implements Listener { player.getWorld().getPlayers().forEach(players -> players.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.player-death").replace("%player%", player.getDisplayName()).replace("%cause%", killer == null ? "enviroment" : killer.getDisplayName())))); if (player.getWorld().getPlayers().size() == 1) { - PS3Minigames.INSTANCE.stopGame(PS3Minigames.INSTANCE.getGameByWorld(player.getWorld())); + PS3Minigames.INSTANCE.getGameUtil().stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByWorld(player.getWorld()))); } } } diff --git a/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java b/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java index fbf29c4..f8d81a2 100644 --- a/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java +++ b/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java @@ -2,6 +2,7 @@ package me.firephoenix.ps3minigames.listener; import me.firephoenix.ps3minigames.PS3Minigames; import me.firephoenix.ps3minigames.states.LobbyState; +import me.firephoenix.ps3minigames.util.GameUtil; import me.firephoenix.ps3minigames.util.Timer; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -70,7 +71,7 @@ public class JoinQuitListener implements Listener { gameTimer.start(); gameTimer = new Timer(plugin.getLobby().getPlayers().size() >= 3 ? 10 : 25, plugin); - gameTimer.whenComplete(() -> PS3Minigames.INSTANCE.startNewGame(lobbyPlayers, plugin.getServer().getWorld("cavern"))); + gameTimer.whenComplete(() -> PS3Minigames.INSTANCE.getGameUtil().startNewGame(lobbyPlayers, plugin.getServer().getWorld("cavern"))); } } } diff --git a/src/main/java/me/firephoenix/ps3minigames/listener/MoveListener.java b/src/main/java/me/firephoenix/ps3minigames/listener/MoveListener.java index 7159470..4578bae 100644 --- a/src/main/java/me/firephoenix/ps3minigames/listener/MoveListener.java +++ b/src/main/java/me/firephoenix/ps3minigames/listener/MoveListener.java @@ -1,6 +1,7 @@ package me.firephoenix.ps3minigames.listener; import me.firephoenix.ps3minigames.PS3Minigames; +import org.bukkit.Location; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; @@ -13,8 +14,16 @@ public class MoveListener implements Listener { @EventHandler public void onMove(PlayerMoveEvent e) { - if (PS3Minigames.INSTANCE.getFrozenPlayer().contains(e.getPlayer().getUniqueId()) && e.getFrom() != e.getTo()) { + if (PS3Minigames.INSTANCE.getFrozenPlayer().contains(e.getPlayer().getUniqueId()) && !isSimilarLocation(e.getFrom(), e.getTo())) { e.setTo(e.getFrom()); } } + + public boolean isSimilarLocation(Location location, Location location2) { + if (location.getX() != location2.getX() || location.getY() != location2.getY() || location.getZ() != location2.getZ()) { + return false; + } else { + return true; + } + } } diff --git a/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java b/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java new file mode 100644 index 0000000..defec5c --- /dev/null +++ b/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java @@ -0,0 +1,86 @@ +package me.firephoenix.ps3minigames.util; + +import me.firephoenix.ps3minigames.PS3Minigames; +import me.firephoenix.ps3minigames.game.Game; +import me.firephoenix.ps3minigames.states.GameState; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.UUID; + +/** + * @author NieGestorben + * Copyright© (c) 2023, All Rights Reserved. + */ +public class GameUtil { + + + public void startNewGame(ArrayList players, World map) { + int ID = PS3Minigames.INSTANCE.getGames().size() + 1; + String newName = map.getName() + "game" + ID; + boolean copydone = PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().cloneWorld(map.getName(), newName); + if (copydone) { + boolean loadingdone = PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().loadWorld(newName); + if (loadingdone) { + PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().getMVWorld(newName).setAlias(newName); + World gameWorld = Bukkit.getWorld(newName); + Game newGame = new Game(ID, players, gameWorld, GameState.STARTING); + PS3Minigames.INSTANCE.getGames().add(newGame); + PS3Minigames.INSTANCE.getWorldToGameHashMap().put(gameWorld, newGame); + int spawnnumber = 1; + for (UUID uuid : players) { + if (PS3Minigames.INSTANCE.getServer().getPlayer(uuid) == null) return; + PS3Minigames.INSTANCE.getServer().getPlayer(uuid).sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.teleporting"))); + String configpathtospawnloc = "maps." + map.getName() + ".spawn" + spawnnumber++; + Location location = new Location(gameWorld, PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".x"), PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".y"), PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".z"), (float) PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".yaw"), (float) PS3Minigames.INSTANCE.getConfig().getDouble(configpathtospawnloc + ".pitch")); + Bukkit.getServer().getPlayer(uuid).teleport(location); + PS3Minigames.INSTANCE.getFrozenPlayer().add(uuid); + } + Timer timer = new Timer(10, PS3Minigames.INSTANCE); + timer.start(); + timer.eachSecond(() -> { + for (UUID uuid : newGame.getPlayers()) { + if (Bukkit.getServer().getPlayer(uuid) == null) return; + Bukkit.getServer().getPlayer(uuid).sendTitle(ChatColor.translateAlternateColorCodes('&',"&6" + timer.getCounter()), ""); + } + }); + timer.whenComplete(() -> { + newGame.setGameState(GameState.RUNNING); + gameWorld.getPlayers().forEach(player -> { + PS3Minigames.INSTANCE.getFrozenPlayer().remove(player.getUniqueId()); + player.sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.game-start-no-countdown"))); + }); + }); + } else { + System.out.println("error while trying to load the world!"); + } + } else { + System.out.println("error while trying to copy the world!"); + } + } + + public void stopGame(Game game) { + if (game.getGameState() != GameState.STOPPING) game.setGameState(GameState.STOPPING); + game.getPlayers().forEach(uuid -> Bukkit.getServer().getPlayer(uuid).teleport(new Location(PS3Minigames.INSTANCE.getServer().getWorld(PS3Minigames.INSTANCE.getConfig().getString("spawn-lobby.world")), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.x"), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.y"), PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.z"), (float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.yaw"), (float) PS3Minigames.INSTANCE.getConfig().getDouble("spawn-lobby.pitch")))); + if (game.getMap().getPlayers().size() == 0) { + PS3Minigames.INSTANCE.getMultiverseCore().getMVWorldManager().deleteWorld(game.getMap().getName()); + } + PS3Minigames.INSTANCE.getGames().remove(game); + } + + @Nullable + public Game getGameByWorld(World world) { + return PS3Minigames.INSTANCE.getWorldToGameHashMap().get(world); + } + + @Nullable + public Game getGameByID(int id) { + //we use id - 1 because the id is the absolute size of the list which starts at 1 and the arraylist position starts at 0 + return PS3Minigames.INSTANCE.getGames().stream().anyMatch(game -> game.getGameid() == id) ? PS3Minigames.INSTANCE.getGames().get(id - 1) : null; + } + +}