From a902514acee6eafa73ff18174549d17a1edaa09b Mon Sep 17 00:00:00 2001 From: Almighty-Satan <43804777+Almighty-Satan@users.noreply.github.com> Date: Sat, 17 Aug 2024 10:28:55 +0200 Subject: [PATCH] Add showDeathScreen --- .../configurations/config/ConfigSetting.java | 1 + src/de/cuuky/varo/entity/player/stats/Stats.java | 11 +++++++---- src/de/cuuky/varo/listener/PlayerDeathListener.java | 7 +++---- src/de/cuuky/varo/listener/PlayerRespawnListener.java | 10 +++++++++- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/de/cuuky/varo/configuration/configurations/config/ConfigSetting.java b/src/de/cuuky/varo/configuration/configurations/config/ConfigSetting.java index 6c15d1ecc..d0467f2e7 100644 --- a/src/de/cuuky/varo/configuration/configurations/config/ConfigSetting.java +++ b/src/de/cuuky/varo/configuration/configurations/config/ConfigSetting.java @@ -201,6 +201,7 @@ public enum ConfigSetting implements SectionEntry { PLAYER_CHEST_LIMIT(ConfigSettingSection.OTHER, "playerChestLimit", 2, "Wie viele Chests ein Team\nregistrieren darf.\nOff = 0, Unendlich = -1"), PLAYER_FURNACE_LIMIT(ConfigSettingSection.OTHER, "playerFurnaceLimit", -1, "Wie viele Furnaces ein\nSpieler registrieren darf.\nOff = 0, Undendlich = -1"), PLAYER_SPECTATE_AFTER_DEATH(ConfigSettingSection.DEATH, "playerSpectateAfterDeath", false, "Ob ein Spieler nach seinem Tod Spectator wird."), + PLAYER_SHOW_DEATH_SCREEN(ConfigSettingSection.DEATH, "showDeathScreen", false, "Ob ein Spieler seinen death screen sehen soll."), // FINALE PLAYER_SPECTATE_IN_FINALE(ConfigSettingSection.FINALE, "playerSpectateInFinale", true, "Ob die toten Spieler waehrend des Finales spectaten duerfen."), diff --git a/src/de/cuuky/varo/entity/player/stats/Stats.java b/src/de/cuuky/varo/entity/player/stats/Stats.java index 1c1837d0c..91f9fdac0 100644 --- a/src/de/cuuky/varo/entity/player/stats/Stats.java +++ b/src/de/cuuky/varo/entity/player/stats/Stats.java @@ -626,12 +626,10 @@ public void setShowScoreboard(boolean showScoreboard) { this.showScoreboard = showScoreboard; } - public void setState(PlayerState state) { + public void setState(PlayerState state, boolean skipSpectator) { if (EventUtils.callEvent(new PlayerStateChangeEvent(owner, state))) return; this.state = state; - if (state == PlayerState.DEAD) - this.diedAt = new Date(); switch (state) { case ALIVE: @@ -641,7 +639,8 @@ public void setState(PlayerState state) { this.diedAt = new Date(); break; case SPECTATOR: - this.owner.setSpectacting(); + if (!skipSpectator) + this.owner.setSpectacting(); break; default: throw new Error("Unknown playerstate"); @@ -649,6 +648,10 @@ public void setState(PlayerState state) { new WinnerCheck(); } + + public void setState(PlayerState state) { + this.setState(state, false); + } public void setTimeUntilAddSession(Date timeUntilNewSession) { this.timeUntilAddSession = timeUntilNewSession; diff --git a/src/de/cuuky/varo/listener/PlayerDeathListener.java b/src/de/cuuky/varo/listener/PlayerDeathListener.java index a845f36b9..36e3b8b12 100644 --- a/src/de/cuuky/varo/listener/PlayerDeathListener.java +++ b/src/de/cuuky/varo/listener/PlayerDeathListener.java @@ -66,8 +66,8 @@ public void onPlayerDeath(PlayerDeathEvent event) { if (!ConfigSetting.PLAYER_SPECTATE_AFTER_DEATH.getValueAsBoolean()) { if (ConfigSetting.KICK_DELAY_AFTER_DEATH.isIntActivated()) { Main.getLanguageManager().broadcastMessage(ConfigMessages.QUIT_KICK_IN_SECONDS, deadP).replace("%countdown%", String.valueOf(ConfigSetting.KICK_DELAY_AFTER_DEATH.getValueAsInt())); - deadP.getStats().setState(PlayerState.SPECTATOR); - deadP.setSpectacting(); + deadP.getStats().setState(PlayerState.SPECTATOR, ConfigSetting.PLAYER_SHOW_DEATH_SCREEN.getValueAsBoolean()); + deadP.update(); new BukkitRunnable() { @Override public void run() { @@ -81,8 +81,7 @@ public void run() { } else kickDeadPlayer(deadP, killer); } else { - deadP.setSpectacting(); - deadP.getStats().setState(PlayerState.SPECTATOR); + deadP.getStats().setState(PlayerState.SPECTATOR, ConfigSetting.PLAYER_SHOW_DEATH_SCREEN.getValueAsBoolean()); deadP.update(); } } else { diff --git a/src/de/cuuky/varo/listener/PlayerRespawnListener.java b/src/de/cuuky/varo/listener/PlayerRespawnListener.java index e08d359bc..f4df23bf9 100644 --- a/src/de/cuuky/varo/listener/PlayerRespawnListener.java +++ b/src/de/cuuky/varo/listener/PlayerRespawnListener.java @@ -6,16 +6,24 @@ import org.bukkit.scheduler.BukkitRunnable; import de.cuuky.varo.Main; +import de.cuuky.varo.configuration.configurations.config.ConfigSetting; import de.cuuky.varo.entity.player.VaroPlayer; +import de.cuuky.varo.entity.player.stats.stat.PlayerState; public class PlayerRespawnListener implements Listener { @EventHandler public void onPlayerRespawn(PlayerRespawnEvent event) { + VaroPlayer player = VaroPlayer.getPlayer(event.getPlayer()); + if (ConfigSetting.PLAYER_SHOW_DEATH_SCREEN.getValueAsBoolean() && player.getStats().getState() == PlayerState.SPECTATOR) { + player.setSpectacting(); + event.setRespawnLocation(event.getPlayer().getLocation()); + } + new BukkitRunnable() { @Override public void run() { - VaroPlayer.getPlayer(event.getPlayer()).setNormalAttackSpeed(); + player.setNormalAttackSpeed(); } }.runTaskLater(Main.getInstance(), 20L); }