From 6f82e3404cba1aa10dbdde5acc874650d2d7a69d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20Dasc=C4=83lu?= Date: Sun, 27 Aug 2023 12:03:14 +0200 Subject: [PATCH] fix #815 --- .../bedwars/arena/tasks/GameStartingTask.java | 14 ++- .../andrei1058/bedwars/sidebar/BwTabList.java | 19 ++-- .../bedwars/sidebar/ScoreboardListener.java | 99 +++++++++++-------- .../bedwars/sidebar/SidebarService.java | 20 ++++ 4 files changed, 93 insertions(+), 59 deletions(-) diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/arena/tasks/GameStartingTask.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/arena/tasks/GameStartingTask.java index 0241f4f57..41f5b385f 100644 --- a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/arena/tasks/GameStartingTask.java +++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/arena/tasks/GameStartingTask.java @@ -33,6 +33,7 @@ import com.andrei1058.bedwars.api.tasks.StartingTask; import com.andrei1058.bedwars.arena.Arena; import com.andrei1058.bedwars.arena.team.BedWarsTeam; +import com.andrei1058.bedwars.arena.team.LegacyTeamAssigner; import com.andrei1058.bedwars.configuration.Sounds; import com.andrei1058.bedwars.support.papi.SupportPAPI; import org.bukkit.Bukkit; @@ -102,14 +103,11 @@ public void run() { } } - - - // todo enable me back in production -// if (BedWars.config.getBoolean(ConfigPath.GENERAL_CONFIGURATION_EXPERIMENTAL_TEAM_ASSIGNER)) { -// getArena().getTeamAssigner().assignTeams(getArena()); -// } else { -// LegacyTeamAssigner.assignTeams(getArena()); -// } + if (BedWars.config.getBoolean(ConfigPath.GENERAL_CONFIGURATION_EXPERIMENTAL_TEAM_ASSIGNER)) { + getArena().getTeamAssigner().assignTeams(getArena()); + } else { + LegacyTeamAssigner.assignTeams(getArena()); + } //Color bed block if possible diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/BwTabList.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/BwTabList.java index 78d6f1881..709432938 100644 --- a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/BwTabList.java +++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/BwTabList.java @@ -144,7 +144,7 @@ public boolean isTabFormattingDisabled() { !config.getLobbyWorldName().trim().isEmpty()) { World lobby = Bukkit.getWorld(config.getLobbyWorldName()); - return null != lobby; + return null == lobby || !sidebar.getPlayer().getWorld().getName().equals(lobby.getName()); } } @@ -153,18 +153,18 @@ public boolean isTabFormattingDisabled() { GameState status = sidebar.getArena().getStatus(); // if tab formatting is disabled in game - if (status == GameState.playing && config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_PLAYING)) { - return false; + if (status == GameState.playing) { + return !config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_PLAYING); } // if tab formatting is disabled in starting - if (status == GameState.starting && config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_STARTING)) { - return false; + if (status == GameState.starting) { + return !config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_STARTING); } // if tab formatting is disabled in waiting - if (status == GameState.waiting && config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_WAITING)) { - return false; + if (status == GameState.waiting) { + return !config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_WAITING); } // if tab formatting is disabled in restarting @@ -328,8 +328,6 @@ public void giveUpdateTabFormat(@NotNull Player player, boolean skipStateCheck) if (player.hasPotionEffect(PotionEffectType.INVISIBILITY)) { teamTab.setNameTagVisibility(PlayerTab.NameTagVisibility.NEVER); } - - Bukkit.broadcastMessage(playerTabIdentifier.toString()); } @NotNull @@ -432,6 +430,7 @@ private boolean hasPlayerIdentifier(@NotNull String id) { return false; } + @SuppressWarnings("unused") private @NotNull String getPlayerTabIdentifierAliveInTeam(ITeam team, Player player) { return getPlayerTabIdentifierAliveInTeam(team, getCreatePlayerTabIdentifier(player)); } @@ -440,6 +439,7 @@ private boolean hasPlayerIdentifier(@NotNull String id) { return getCreateTeamTabOrderPrefix(team) + playerId; } + @SuppressWarnings("unused") private @NotNull String getPlayerTabIdentifierEliminatedInTeam(ITeam team, Player player) { return getPlayerTabIdentifierEliminatedInTeam(team, getCreatePlayerTabIdentifier(player)); } @@ -448,6 +448,7 @@ private boolean hasPlayerIdentifier(@NotNull String id) { return getCreateTeamTabOrderPrefix(team) + ELIMINATED_FROM_TEAM_PREFIX + playerId; } + @SuppressWarnings("unused") private @NotNull String getPlayerTabIdentifierSpectator(@Nullable ITeam team, Player player) { return getPlayerTabIdentifierSpectator(team, getCreatePlayerTabIdentifier(player)); } diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/ScoreboardListener.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/ScoreboardListener.java index b50b9aa63..c23d62feb 100644 --- a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/ScoreboardListener.java +++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/ScoreboardListener.java @@ -22,11 +22,8 @@ import com.andrei1058.bedwars.BedWars; import com.andrei1058.bedwars.api.arena.IArena; -import com.andrei1058.bedwars.api.configuration.ConfigPath; -import com.andrei1058.bedwars.api.events.player.PlayerBedBreakEvent; -import com.andrei1058.bedwars.api.events.player.PlayerKillEvent; -import com.andrei1058.bedwars.api.events.player.PlayerReJoinEvent; -import com.andrei1058.bedwars.api.events.player.PlayerReSpawnEvent; +import com.andrei1058.bedwars.api.events.player.*; +import com.andrei1058.bedwars.api.server.ServerType; import com.andrei1058.bedwars.arena.Arena; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -34,73 +31,91 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.jetbrains.annotations.NotNull; public class ScoreboardListener implements Listener { - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerDamage(EntityDamageEvent e) { - if (e == null) return; - if (e.isCancelled()) return; - if (!(e.getEntity() instanceof Player)) return; + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerDamage(@NotNull EntityDamageEvent e) { + if (!(e.getEntity() instanceof Player)) { + return; + } + final Player player = (Player) e.getEntity(); final IArena arena = Arena.getArenaByPlayer(player); - int health = (int) Math.ceil((player.getHealth() - e.getFinalDamage())); - if (arena == null) return; + if (arena == null) { + return; + } + int health = (int) Math.ceil((player.getHealth() - e.getFinalDamage())); SidebarService.getInstance().refreshHealth(arena, player, health); } - @EventHandler(priority = EventPriority.MONITOR) - public void onRegain(EntityRegainHealthEvent e) { - if (e == null) return; - if (e.isCancelled()) return; - if (!(e.getEntity() instanceof Player)) return; + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onRegain(@NotNull EntityRegainHealthEvent e) { + if (!(e.getEntity() instanceof Player)) { + return; + } + final Player player = (Player) e.getEntity(); final IArena arena = Arena.getArenaByPlayer(player); - if (arena == null) return; + if (arena == null) { + return; + } int health = (int) Math.ceil(player.getHealth() + e.getAmount()); - SidebarService.getInstance().refreshHealth(arena, player, health); } @EventHandler(priority = EventPriority.MONITOR) - public void onReSpawn(PlayerReSpawnEvent e) { - if (e == null) return; + public void onReSpawn(@NotNull PlayerReSpawnEvent e) { final IArena arena = e.getArena(); SidebarService.getInstance().refreshHealth(arena, e.getPlayer(), (int) Math.ceil(e.getPlayer().getHealth())); } - @EventHandler(priority = EventPriority.LOWEST) - public void reJoin(PlayerReJoinEvent e) { - if (e == null) return; - if (e.isCancelled()) return; - if (!BedWars.config.getBoolean(ConfigPath.SB_CONFIG_SIDEBAR_LIST_FORMAT_PLAYING)) return; - final IArena arena = e.getArena(); - final Player player = e.getPlayer(); - + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void reJoin(@NotNull PlayerReJoinEvent e) { // re-add player to scoreboard tab list - SidebarService.getInstance().handleReJoin(arena, player); + SidebarService.getInstance().handleReJoin(e.getArena(), e.getPlayer()); } - @EventHandler - public void onBedDestroy(PlayerBedBreakEvent e) { - if (e == null) return; - final IArena arena = e.getArena(); + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void arenaJoin(@NotNull PlayerJoinArenaEvent e) { + // add player to scoreboard tab list + SidebarService.getInstance().handleJoin(e.getArena(), e.getPlayer()); + } - // refresh placeholders in case placeholders refresh is disabled - SidebarService.getInstance().refreshPlaceholders(arena); + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void serverJoin(@NotNull PlayerJoinEvent e) { + if (BedWars.getServerType() == ServerType.MULTIARENA || BedWars.getServerType() == ServerType.SHARED) { + // add player to scoreboard tab list + SidebarService.getInstance().applyLobbyTab(e.getPlayer()); + } } - @EventHandler - public void onFinalKill(PlayerKillEvent e) { - if (e == null) return; - if (!e.getCause().isFinalKill()) return; - final IArena arena = e.getArena(); + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void arenaLeave(@NotNull PlayerLeaveArenaEvent e) { + if (BedWars.getServerType() == ServerType.MULTIARENA || BedWars.getServerType() == ServerType.SHARED) { + // add player to scoreboard tab list + SidebarService.getInstance().applyLobbyTab(e.getPlayer()); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBedDestroy(@NotNull PlayerBedBreakEvent e) { + // refresh placeholders in case placeholders refresh is disabled + SidebarService.getInstance().refreshPlaceholders(e.getArena()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFinalKill(@NotNull PlayerKillEvent e) { + if (!e.getCause().isFinalKill()) { + return; + } // refresh placeholders in case placeholders refresh is disabled - SidebarService.getInstance().refreshPlaceholders(arena); + SidebarService.getInstance().refreshPlaceholders(e.getArena()); } } diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/SidebarService.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/SidebarService.java index 50f5f7fd7..afcc1a02f 100644 --- a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/SidebarService.java +++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/sidebar/SidebarService.java @@ -205,6 +205,26 @@ public void handleReJoin(IArena arena, Player player) { }); } + public void handleJoin(IArena arena, Player player) { + this.sidebars.forEach((k,v) -> { + if (null != v.getArena() && v.getArena().equals(arena)) { + if (!v.getPlayer().equals(player)) { + v.giveUpdateTabFormat(player, false); + } + } + }); + } + + public void applyLobbyTab(Player player) { + this.sidebars.forEach((k,v) -> { + if (null == v.getArena()) { + if (!v.getPlayer().equals(player)) { + v.giveUpdateTabFormat(player, false); + } + } + }); + } + public void handleInvisibility(ITeam team, Player player, boolean toggle) { this.sidebars.forEach((k,v) -> { if (null != v.getArena() && v.getArena().equals(team.getArena())) {