diff --git a/src/main/java/com/alttd/hunger_games/event_listeners/PlayerDamageListener.java b/src/main/java/com/alttd/hunger_games/event_listeners/PlayerDamageListener.java index 44971be..884a0b1 100644 --- a/src/main/java/com/alttd/hunger_games/event_listeners/PlayerDamageListener.java +++ b/src/main/java/com/alttd/hunger_games/event_listeners/PlayerDamageListener.java @@ -42,7 +42,10 @@ public class PlayerDamageListener implements Listener { @EventHandler public void onPlayerDeath(PlayerDeathEvent event) { Player player = event.getPlayer(); + event.setShowDeathMessages(false); event.deathMessage(null); + event.getDrops().clear(); + player.getInventory().clear(); playerService.handlePlayerDeath(player); statService.addDeath(player.getUniqueId()); diff --git a/src/main/java/com/alttd/hunger_games/services/RoundService.java b/src/main/java/com/alttd/hunger_games/services/RoundService.java index 2de720b..66b0bdc 100644 --- a/src/main/java/com/alttd/hunger_games/services/RoundService.java +++ b/src/main/java/com/alttd/hunger_games/services/RoundService.java @@ -2,14 +2,17 @@ package com.alttd.hunger_games.services; import com.alttd.hunger_games.Main; import com.alttd.hunger_games.config.Messages; +import com.alttd.hunger_games.data_objects.DESTINATION; import com.alttd.hunger_games.data_objects.PLAYER_STATE; import com.alttd.hunger_games.data_objects.ROUND_STATE; import com.alttd.hunger_games.event_listeners.PlayerMovementListener; import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; @@ -21,6 +24,7 @@ public class RoundService implements RoundListener { private static RoundService instance = null; private PlayerMovementListener playerMovementListener; + private final PlayerTeleporterService playerTeleporterService; private final Main main; private final LootService lootService; private final StatService statService; @@ -30,22 +34,24 @@ public class RoundService implements RoundListener { private final HashMap players = new HashMap<>(); private final Round round; + @Setter private BossBarService bossBarService; - public static RoundService createSingletonInstance(Round round, Main main, LootService lootService, StatService statService) { + public static RoundService createSingletonInstance(Round round, Main main, LootService lootService, StatService statService, PlayerTeleporterService playerTeleporterService) { if (instance != null) { throw new IllegalStateException("RoundService is already initialized."); } - instance = new RoundService(round, main, lootService, statService); + instance = new RoundService(round, main, lootService, statService, playerTeleporterService); return instance; } - private RoundService(Round round, Main main, LootService lootService, StatService statService) { + private RoundService(Round round, Main main, LootService lootService, StatService statService, PlayerTeleporterService playerTeleporterService) { this.round = round; this.roundState = round.register(this); this.main = main; this.lootService = lootService; this.statService = statService; + this.playerTeleporterService = playerTeleporterService; } public Set getPlayers(PLAYER_STATE playerState) { @@ -87,6 +93,10 @@ public class RoundService implements RoundListener { statService.setWon(winnerUUID, true); Bukkit.broadcast(MiniMessage.miniMessage().deserialize(Messages.GAME.WINNER, Placeholder.component("player", player.name()))); + playerTeleporterService.teleportPlayer(player, DESTINATION.SPECTATOR_AREA); + player.setHealth(20); + player.setFoodLevel(20); + player.getInventory().clear(); round.endRound(); } @@ -107,6 +117,14 @@ public class RoundService implements RoundListener { lootService.clear(); } if (roundState.equals(ROUND_STATE.COUNTDOWN)) { + Bukkit.getOnlinePlayers().stream() + .filter(player -> PLAYER_STATE.REGISTERED.equals(getPlayerState(player.getUniqueId()).orElse(null))) + .forEach(player -> { + player.setHealth(20); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + player.getInventory().clear(); + }); startFreeze(); } Bukkit.broadcast(MiniMessage.miniMessage().deserialize(Messages.GAME.NEXT_STATE, Placeholder.parsed("state", roundState.getHumandReadableName()))); @@ -127,7 +145,4 @@ public class RoundService implements RoundListener { main.getServer().getPluginManager().registerEvents(playerMovementListener, main); } - public void setBossBarService(BossBarService bossBarService) { - this.bossBarService = bossBarService; - } }