Fix round not stopping after everyone is dead except winner

This commit is contained in:
FirephoenixX02 2024-05-04 14:40:06 +02:00
parent f6c819b99b
commit fc4a033d8e
4 changed files with 24 additions and 5 deletions

View file

@ -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);
}
}
}
}

View file

@ -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());
}
}

View file

@ -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 -> {

View file

@ -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: