diff --git a/plugin.yml b/plugin.yml index 310acee..7867559 100644 --- a/plugin.yml +++ b/plugin.yml @@ -2,5 +2,5 @@ name: zKoth author: Maxlego08 main: fr.maxlego08.zkoth.ZKothPlugin version: 2.0.0.2 -softdepend: [PlaceholderAPI, Guilds, Factions, FactionsX, SuperiorSkyblock2, LegacyFactions, FeatherBoard] +softdepend: [PlaceholderAPI, Guilds, Factions, FactionsX, SuperiorSkyblock2, LegacyFactions, FeatherBoard, TAB] commands: diff --git a/src/fr/maxlego08/zkoth/ZKothPlugin.java b/src/fr/maxlego08/zkoth/ZKothPlugin.java index 1b0ec22..3e7aa9f 100644 --- a/src/fr/maxlego08/zkoth/ZKothPlugin.java +++ b/src/fr/maxlego08/zkoth/ZKothPlugin.java @@ -11,6 +11,7 @@ import fr.maxlego08.zkoth.save.Config; import fr.maxlego08.zkoth.save.MessageLoader; import fr.maxlego08.zkoth.scoreboard.ScoreBoardManager; import fr.maxlego08.zkoth.scoreboard.implementations.FeatherBoardHook; +import fr.maxlego08.zkoth.scoreboard.implementations.TabPremiumHook; import fr.maxlego08.zkoth.zcore.ZPlugin; import fr.maxlego08.zkoth.zcore.utils.plugins.Metrics; import fr.maxlego08.zkoth.zcore.utils.plugins.Plugins; @@ -58,10 +59,11 @@ public class ZKothPlugin extends ZPlugin { if (this.isEnable(Plugins.FEATHERBOARD)) { this.scoreboardManager.setScoreboard(new FeatherBoardHook()); + } else if (this.isEnable(Plugins.TAB)) { + this.scoreboardManager.setScoreboard(new TabPremiumHook()); } this.scoreboardManager.setDefaultScoreboard(); - - + getSavers().forEach(saver -> saver.load(getPersist())); new Metrics(this, 6924); diff --git a/src/fr/maxlego08/zkoth/api/Scoreboard.java b/src/fr/maxlego08/zkoth/api/Scoreboard.java index 6d6fe27..781d9d9 100644 --- a/src/fr/maxlego08/zkoth/api/Scoreboard.java +++ b/src/fr/maxlego08/zkoth/api/Scoreboard.java @@ -1,19 +1,22 @@ package fr.maxlego08.zkoth.api; +import java.util.function.Consumer; + import org.bukkit.entity.Player; + public interface Scoreboard { /** * * @param player */ - public void toggle(Player player); + public void toggle(Player player, Consumer after); /** * * @param player */ - public void hide(Player player); + public void hide(Player player, Consumer after); } diff --git a/src/fr/maxlego08/zkoth/scoreboard/ScoreBoardManager.java b/src/fr/maxlego08/zkoth/scoreboard/ScoreBoardManager.java index 17f4c22..430f114 100644 --- a/src/fr/maxlego08/zkoth/scoreboard/ScoreBoardManager.java +++ b/src/fr/maxlego08/zkoth/scoreboard/ScoreBoardManager.java @@ -3,6 +3,7 @@ package fr.maxlego08.zkoth.scoreboard; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -74,12 +75,35 @@ public class ScoreBoardManager extends ZUtils { board.updateLines(lines.accept(player)); boards.put(player, board); - this.scoreboard.hide(player); + this.scoreboard.hide(player, create(board, player, title)); return board; } + /** + * + * @param player + * @param title + * @return + */ + private Consumer create(FastBoard current, Player player, String title) { + return p -> { + + if (current != null) + current.delete(); + boards.remove(player); + + FastBoard board = new FastBoard(player); + board.updateTitle(title); + + if (lines != null) + board.updateLines(lines.accept(player)); + + boards.put(player, board); + }; + } + /** * Delete player board * @@ -91,7 +115,9 @@ public class ScoreBoardManager extends ZUtils { return false; FastBoard board = getBoard(player); board.delete(); - this.scoreboard.toggle(player); + this.scoreboard.toggle(player, p -> { + + }); return true; } @@ -114,8 +140,10 @@ public class ScoreBoardManager extends ZUtils { this.isRunning = false; this.boards.keySet().forEach(key -> delete(key)); this.boards.clear(); - for(Player player : Bukkit.getOnlinePlayers()) - this.scoreboard.toggle(player); + for (Player player : Bukkit.getOnlinePlayers()) + this.scoreboard.toggle(player, p -> { + + }); } /** @@ -204,15 +232,12 @@ public class ScoreBoardManager extends ZUtils { public void setDefaultScoreboard() { if (this.scoreboard == null) { this.scoreboard = new Scoreboard() { - @Override - public void toggle(Player player) { - + public void toggle(Player player, Consumer after) { } @Override - public void hide(Player player) { - + public void hide(Player player, Consumer after) { } }; } diff --git a/src/fr/maxlego08/zkoth/scoreboard/implementations/FeatherBoardHook.java b/src/fr/maxlego08/zkoth/scoreboard/implementations/FeatherBoardHook.java index fe6c644..095734d 100644 --- a/src/fr/maxlego08/zkoth/scoreboard/implementations/FeatherBoardHook.java +++ b/src/fr/maxlego08/zkoth/scoreboard/implementations/FeatherBoardHook.java @@ -1,5 +1,7 @@ package fr.maxlego08.zkoth.scoreboard.implementations; +import java.util.function.Consumer; + import org.bukkit.entity.Player; import be.maximvdw.featherboard.api.FeatherBoardAPI; @@ -12,13 +14,13 @@ public class FeatherBoardHook implements Scoreboard { } @Override - public void toggle(Player player) { + public void toggle(Player player, Consumer after) { if (!FeatherBoardAPI.isToggled(player)) FeatherBoardAPI.toggle(player, true); } @Override - public void hide(Player player) { + public void hide(Player player, Consumer after) { if (FeatherBoardAPI.isToggled(player)) FeatherBoardAPI.toggle(player, true); } diff --git a/src/fr/maxlego08/zkoth/scoreboard/implementations/TabPremiumHook.java b/src/fr/maxlego08/zkoth/scoreboard/implementations/TabPremiumHook.java new file mode 100644 index 0000000..ea54f19 --- /dev/null +++ b/src/fr/maxlego08/zkoth/scoreboard/implementations/TabPremiumHook.java @@ -0,0 +1,39 @@ +package fr.maxlego08.zkoth.scoreboard.implementations; + +import java.util.function.Consumer; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import fr.maxlego08.zkoth.api.Scoreboard; +import fr.maxlego08.zkoth.zcore.ZPlugin; +import me.neznamy.tab.api.TABAPI; +import me.neznamy.tab.api.TabPlayer; + +public class TabPremiumHook implements Scoreboard { + + @Override + public void toggle(Player player, Consumer after) { + TabPlayer tabPlayer = TABAPI.getPlayer(player.getUniqueId()); + System.out.println(tabPlayer); + if (tabPlayer != null && !tabPlayer.isScoreboardVisible()) + tabPlayer.toggleScoreboard(false); + } + + @Override + public void hide(Player player, Consumer after) { + TabPlayer tabPlayer = TABAPI.getPlayer(player.getUniqueId()); + if (tabPlayer != null && tabPlayer.isScoreboardVisible()) + tabPlayer.toggleScoreboard(false); + else + Bukkit.getScheduler().runTaskLater(ZPlugin.z(), () -> { + final TabPlayer tabPlayer2 = TABAPI.getPlayer(player.getUniqueId()); + if (tabPlayer2 != null && tabPlayer2.isScoreboardVisible()) { + tabPlayer2.toggleScoreboard(false); + if (after != null) + after.accept(player); + } + }, 20); + } + +} diff --git a/src/fr/maxlego08/zkoth/zcore/utils/plugins/Plugins.java b/src/fr/maxlego08/zkoth/zcore/utils/plugins/Plugins.java index 11bf36a..7a0188e 100644 --- a/src/fr/maxlego08/zkoth/zcore/utils/plugins/Plugins.java +++ b/src/fr/maxlego08/zkoth/zcore/utils/plugins/Plugins.java @@ -5,6 +5,7 @@ public enum Plugins { VAULT("Vault"), ESSENTIALS("Essentials"), FEATHERBOARD("FeatherBoard"), + TAB("TAB"), ;