diff --git a/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java b/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java index 281f136..9dae4de 100644 --- a/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java +++ b/src/main/java/me/firephoenix/ps3minigames/listener/DeathListener.java @@ -1,15 +1,15 @@ package me.firephoenix.ps3minigames.listener; import me.firephoenix.ps3minigames.PS3Minigames; +import me.firephoenix.ps3minigames.game.Game; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; 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. @@ -24,8 +24,13 @@ public class DeathListener implements Listener { Player killer = e.getEntity().getKiller(); 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.getGameUtil().stopGame(Objects.requireNonNull(PS3Minigames.INSTANCE.getGameUtil().getGameByWorld(player.getWorld()))); + player.setGameMode(GameMode.SPECTATOR); + Game game = PS3Minigames.INSTANCE.getGameUtil().getGameByWorld(player.getWorld()); + if (game != null) { + game.getPlayers().remove(player.getUniqueId()); + if (game.getPlayers().size() <= 1) { + PS3Minigames.INSTANCE.getGameUtil().stopGame(game); + } } } } diff --git a/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java b/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java index e8c43ca..9664a3d 100644 --- a/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java +++ b/src/main/java/me/firephoenix/ps3minigames/listener/JoinQuitListener.java @@ -1,6 +1,7 @@ package me.firephoenix.ps3minigames.listener; import me.firephoenix.ps3minigames.PS3Minigames; +import me.firephoenix.ps3minigames.game.Game; import me.firephoenix.ps3minigames.states.LobbyState; import me.firephoenix.ps3minigames.util.GameUtil; import me.firephoenix.ps3minigames.util.Timer; @@ -13,6 +14,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import java.util.ArrayList; +import java.util.Objects; import java.util.UUID; /** @@ -79,7 +81,13 @@ public class JoinQuitListener implements Listener { @EventHandler public void onQuit(PlayerQuitEvent e) { + Game game = PS3Minigames.INSTANCE.getGameUtil().getGameByWorld(e.getPlayer().getWorld()); + if (game != null) { + game.getPlayers().remove(e.getPlayer().getUniqueId()); + if (game.getPlayers().size() <= 1) { + PS3Minigames.INSTANCE.getGameUtil().stopGame(game); + } + } lobbyPlayers.remove(e.getPlayer().getUniqueId()); } - } diff --git a/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java b/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java index fcbe84f..5318096 100644 --- a/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java +++ b/src/main/java/me/firephoenix/ps3minigames/util/GameUtil.java @@ -5,6 +5,7 @@ import me.firephoenix.ps3minigames.game.Game; import me.firephoenix.ps3minigames.states.GameState; import org.bukkit.*; import org.bukkit.block.Chest; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; @@ -78,6 +79,10 @@ public class GameUtil { System.out.println("Someone tried to stop a game which is currently stopping, not possible, ignoring."); return; } + if (Bukkit.getServer().getPlayer(game.getPlayers().get(0)) != null) { + Player winner = Bukkit.getPlayer(game.getPlayers().get(0)); + game.getPlayers().forEach(uuid -> Bukkit.getServer().getPlayer(uuid).sendMessage(ChatColor.translateAlternateColorCodes('&', PS3Minigames.INSTANCE.getConfig().getString("messages.game-won").replace("%winner%", winner.getDisplayName())))); + } game.setGameState(GameState.STOPPING); // Teleport all players + Clear inv + Reset Effects + Unfreeze game.getPlayers().forEach(uuid -> { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e42d3dc..093e94f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -30,6 +30,7 @@ messages: force-starting-game: "&7Starting game on map &6%map%&7..." force-stopping-game: "&7Stopping game on map &6%map%&7..." cant-stop-game: "&7Cant stop game because it's already &6stopping&7!" + game-won: "%winner% &7won the game!" # Maps maps: