diff --git a/pom.xml b/pom.xml index 58b7f77..dc6ca70 100644 --- a/pom.xml +++ b/pom.xml @@ -70,12 +70,6 @@ provided - org.jetbrains - annotations - 24.0.1 - compile - - commons-io commons-io 2.11.0 @@ -94,10 +88,19 @@ provided - LibsDisguises - LibsDisguises - 10.0.32 - provided + com.github.megavexnetwork.scoreboard-library + scoreboard-library-api + 2.0.0-RC8 + + + com.github.megavexnetwork.scoreboard-library + scoreboard-library-implementation + 2.0.0-RC8 + + + com.github.megavexnetwork.scoreboard-library + scoreboard-library-packetevents + 2.0.0-RC8 com.comphenix.protocol @@ -118,6 +121,14 @@ org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + + + + org.apache.maven.plugins maven-shade-plugin 3.3.0 @@ -127,24 +138,21 @@ shade - - - ${project.groupId}.Challenges - - + false + + + net.megavex.scoreboardlibrary.api + de.fanta.challenges.libs.scoreboardlibrary.api + + + net.megavex.scoreboardlibrary.implementation + de.fanta.challenges.libs.scoreboardlibrary.implementation + + - - org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 - - 17 - - diff --git a/src/main/java/de/fanta/challenges/Troll.java b/src/main/java/de/fanta/challenges/Troll.java index 8133704..ae16971 100644 --- a/src/main/java/de/fanta/challenges/Troll.java +++ b/src/main/java/de/fanta/challenges/Troll.java @@ -1,9 +1,6 @@ package de.fanta.challenges; import de.iani.cubesideutils.bukkit.items.ItemGroups; -import me.libraryaddict.disguise.DisguiseAPI; -import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import me.libraryaddict.disguise.disguisetypes.MobDisguise; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java b/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java index ffd6488..02d7066 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeGoals.java @@ -6,7 +6,6 @@ import de.fanta.challenges.utils.Config; import de.iani.cubesideutils.StringUtil; import net.md_5.bungee.api.ChatColor; -import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; @@ -25,7 +24,7 @@ EntityType entityType = EntityType.valueOf(Config.getString("goal").toUpperCase()); if (e.getEntity().getType() == entityType) { plugin.getTimer().stopTimer(); - ChatUtil.sendBrodcastMessage("" + ChatUtil.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + ChatUtil.sendBrodcastMessage(String.valueOf(ChatUtil.GREEN) + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); ChatUtil.sendBrodcastMessage(""); ChatUtil.sendBrodcastMessage(""); ChatUtil.sendBrodcastMessage(""); @@ -51,7 +50,7 @@ ChatUtil.sendBrodcastMessage(""); ChatUtil.sendBrodcastMessage(""); ChatUtil.sendBrodcastMessage(""); - ChatUtil.sendBrodcastMessage("" + ChatUtil.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + ChatUtil.sendBrodcastMessage(String.valueOf(ChatUtil.GREEN) + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } } } diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java index 4592a19..b87957a 100644 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java @@ -2,7 +2,6 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.SaveSlot; -import de.fanta.challenges.ServerType; import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.events.EventStatusChangedEvent; import de.fanta.challenges.utils.ChatUtil; @@ -21,6 +20,8 @@ import java.io.FileReader; import java.io.IOException; import java.util.Properties; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; public class ResetConfirmCommand extends SubCommand { @@ -33,41 +34,52 @@ @Override public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { if ((sender instanceof Player && plugin.isEditor((Player) sender)) || sender.hasPermission("Challenges.editor.override")) { - if (args.hasNext()) { - String seed = args.getNext(); - setSeedInServerProperties(seed); - } else { - setSeedInServerProperties(null); + plugin.setWaitingForShutdown(true); + + Config.setValue("editsettings", true, false); + + for (Player p : Bukkit.getOnlinePlayers()) { + plugin.portPlayerToLobby(p); } - plugin.setWaitingForShutdown(true); - Config.setValue("editsettings", true, false); + setSeedInServerProperties(args.getNext(null)); + plugin.getTimer().stopTimer(); plugin.getTimer().setTime(0); Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); - for (Player p : Bukkit.getOnlinePlayers()) { - if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) { - p.sendTitle(ChatUtil.BLUE + "Server wird zurückgesetzt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10); - } else if (plugin.getServerType() == ServerType.ADVENTURE) { - p.sendTitle(ChatUtil.BLUE + "Server wird gestoppt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10); - } - plugin.portPlayerToLobby(p); - } + Config.setValue("World_Reset", true); for (String key : Config.getConfigurationSection("Saved_Locations").getKeys(false)) { Config.setValue("Saved_Locations." + key, null, false); } + plugin.saveConfig(); plugin.getBackpack().saveInventoryToConfig(); - if (Config.getBoolean("firsttimerstart")) { - SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); - } - plugin.getScheduler().runGlobalDelayed(Bukkit::shutdown, 60); + if (Config.getBoolean("firsttimerstart")) { + CompletableFuture future = new CompletableFuture<>(); + try { + SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); + } finally { + future.complete(null); + } + + plugin.getScheduler().runAsync(() -> { + try { + future.get(); + plugin.getScheduler().runGlobalDelayed(Bukkit::shutdown, 60); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }); + + } else { + plugin.getScheduler().runGlobalDelayed(Bukkit::shutdown, 60); + } } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur" + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann die Map zurücksetzen!"); return true; } else { ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); diff --git a/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java b/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java index 5d95bdf..0189fb1 100644 --- a/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java +++ b/src/main/java/de/fanta/challenges/listeners/FoliaFixListener.java @@ -18,6 +18,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.util.HashMap; +import java.util.UUID; import static org.bukkit.Bukkit.getServer; @@ -25,7 +26,7 @@ private final Challenges plugin; - private final HashMap deadPlayers = new HashMap<>(); + private final HashMap deadPlayers = new HashMap<>(); private final HashMap playerLocationList = new HashMap<>(); public FoliaFixListener(Challenges plugin) { @@ -35,7 +36,7 @@ @EventHandler public void onPlayerDeath(PlayerDeathEvent e) { CancellableTask task = plugin.getScheduler().runOnEntityAtFixedRate(e.getPlayer(), () -> checkDeathPlayers(e.getPlayer()), 1L, 1L); - deadPlayers.put(e.getPlayer(), task); + deadPlayers.put(e.getPlayer().getUniqueId(), task); } private void checkDeathPlayers(Player player) { @@ -44,20 +45,20 @@ if (!Config.getBoolean("respawn")) { ChatUtil.sendTitleToPlayer(player, "Du bist gestorben!", ChatUtil.RED + "Du bist nun Zuschauer", ChatUtil.GREEN, 10, 80, 10, false); plugin.getScheduler().runDelayedOnEntity(player, () -> player.setGameMode(GameMode.SPECTATOR), 1); - deadPlayers.remove(player).cancel(); + deadPlayers.remove(player.getUniqueId()).cancel(); } if (Config.getBoolean("nether.enabled")) { Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); player.teleportAsync(spawn); - deadPlayers.remove(player).cancel(); + deadPlayers.remove(player.getUniqueId()).cancel(); } if (player.getBedSpawnLocation() == null && !Config.getBoolean("nether.enabled")) { player.teleportAsync(getServer().getWorlds().get(0).getSpawnLocation().add(0.5, 1.0, 0.5)); - deadPlayers.remove(player).cancel(); + deadPlayers.remove(player.getUniqueId()).cancel(); } } } else { - deadPlayers.remove(player).cancel(); + deadPlayers.remove(player.getUniqueId()).cancel(); } } @@ -70,7 +71,9 @@ @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { - deadPlayers.remove(e.getPlayer()).cancel(); + if (deadPlayers.containsKey(e.getPlayer().getUniqueId())) { + deadPlayers.remove(e.getPlayer().getUniqueId()).cancel(); + } } @EventHandler @@ -97,7 +100,7 @@ } } else { Location location = playerLocationList.get(e.getPlayer()); - e.getPlayer().teleportAsync(location); + e.getPlayer().teleportAsync(location.subtract(location.getDirection())); } } } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 13ea2cf..3f87e93 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -33,7 +33,7 @@ } if (plugin.texturepacklink != null) { - p.setResourcePack(plugin.texturepacklink, ""); + p.setResourcePack(plugin.texturepacklink, "", true); } if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { @@ -119,13 +119,12 @@ } if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { - if (Config.getBoolean("firsttimerstart")) { - SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); - plugin.startResetTask(); - } else { - if (!plugin.isWaitingForShutdown()) { + if (!plugin.isWaitingForShutdown()) { + if (Config.getBoolean("firsttimerstart")) { + SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), SaveSlot.SLOT_AUTO); + plugin.startResetTask(); + } else { plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); - } } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java index 8b9aae5..6ed166f 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/FoliaScoreBoardManager.java @@ -3,61 +3,90 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.folianmsutils.PlayerBoard; -import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; +import net.kyori.adventure.text.format.NamedTextColor; +import net.megavex.scoreboardlibrary.api.ScoreboardLibrary; +import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException; +import net.megavex.scoreboardlibrary.api.sidebar.Sidebar; +import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; +import net.megavex.scoreboardlibrary.api.team.TeamDisplay; +import net.megavex.scoreboardlibrary.api.team.TeamManager; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; + +import java.util.logging.Level; public class FoliaScoreBoardManager implements ScoreBoardMananger { private final Challenges plugin; + private ScoreboardLibrary scoreboardLibrary; + private final TeamManager teamManager; + private TeamDisplay teamDisplay; + private Sidebar sidebar; + private ScoreboardTeam team; public FoliaScoreBoardManager(Challenges plugin) { this.plugin = plugin; + + + try { + this.scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(plugin); + } catch (NoPacketAdapterAvailableException ex) { + plugin.getLogger().log(Level.SEVERE, "ScoreboardLibrary could not be loaded.", ex); + } + teamManager = scoreboardLibrary.createTeamManager(); } @Override - public void initScoreboard() { // only possible after first world has loaded + public void initScoreboard() { + this.sidebar = scoreboardLibrary.createSidebar(); + this.team = teamManager.createIfAbsent("Player"); + + teamDisplay = team.defaultDisplay(); + teamDisplay.playerColor(NamedTextColor.GREEN); + + updateTabHP(); } @Override public void setScoreboardtoPlayer(Player p) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - return; + if (this.sidebar == null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + initScoreboard(); + } } - Bukkit.getLogger().info("Test123"); - PlayerBoard playerBoard = new PlayerBoard(p, 1); - playerBoard.title(Component.text(ChatUtil.BLUE + "Event")); - playerBoard.setLine(1, Component.text(ChatUtil.GREEN + "Hallo")); + sidebar.addPlayer(p); + teamManager.addPlayer(p); + teamDisplay.addEntry(p.getName()); } @Override public void setScoreboardtoTeam(ChallengeTeam challengeTeam) { - } @Override public void removeScoreboard(Player p) { + if (team != null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + teamManager.removePlayer(p); + teamDisplay.removeEntry(p.getName()); + } + } } @Override public void removeAllFromScoreboard() { - + sidebar.removePlayers(sidebar.players()); } @Override public int countScoreboardPlayers() { - return 0; + return team.teamManager().players().size(); } @Override public void updateTabHP() { - } @Override @@ -70,7 +99,7 @@ } @Override - public Scoreboard getScoreboard() { - return null; + public Object getScoreboard() { + return sidebar; } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java index c67882a..e7c7e0c 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardMananger.java @@ -2,7 +2,6 @@ import de.fanta.challenges.teams.ChallengeTeam; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; public interface ScoreBoardMananger { @@ -15,5 +14,5 @@ void updateTabHP(); void updateEventScoreboard(); void updateEventScore(Scorable s); - Scoreboard getScoreboard(); + Object getScoreboard(); } diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java index 4bc12e7..41b8152 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamUtils.java +++ b/src/main/java/de/fanta/challenges/teams/TeamUtils.java @@ -172,25 +172,26 @@ } public static void createScoreBoardTeams() { - scoreboard = Challenges.getPlugin().getSBManager().getScoreboard(); - if (teamscoreboardObjective == null) { - teamscoreboardObjective = scoreboard.registerNewObjective("teams", "dummy", "Event"); - teamscoreboardObjective.setDisplayName("Event"); - teamscoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); - } - scoreboardTeams = new Team[teams.length]; - scoreboardScores = new Score[teams.length + 1]; - for (int i = 0; i < teams.length; i++) { - ChallengeTeam t = getTeam(i); - if (scoreboardTeams[i] == null) { - if (scoreboard.getTeam(t.getName()) == null) { - scoreboardTeams[i] = scoreboard.registerNewTeam(t.getName()); - scoreboardTeams[i].setPrefix(t.getChatColor().toString()); - scoreboardTeams[i].setColor(t.getChatColor()); - scoreboardTeams[i].setAllowFriendlyFire(false); - scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.FOR_OWN_TEAM); + if (Challenges.getPlugin().getSBManager().getScoreboard() instanceof Scoreboard scoreboard) { + if (teamscoreboardObjective == null) { + teamscoreboardObjective = scoreboard.registerNewObjective("teams", "dummy", "Event"); + teamscoreboardObjective.setDisplayName("Event"); + teamscoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); + } + scoreboardTeams = new Team[teams.length]; + scoreboardScores = new Score[teams.length + 1]; + for (int i = 0; i < teams.length; i++) { + ChallengeTeam t = getTeam(i); + if (scoreboardTeams[i] == null) { + if (scoreboard.getTeam(t.getName()) == null) { + scoreboardTeams[i] = scoreboard.registerNewTeam(t.getName()); + scoreboardTeams[i].setPrefix(t.getChatColor().toString()); + scoreboardTeams[i].setColor(t.getChatColor()); + scoreboardTeams[i].setAllowFriendlyFire(false); + scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.FOR_OWN_TEAM); - scoreboardScores[i] = teamscoreboardObjective.getScore(t.getChatColor() + t.getName()); + scoreboardScores[i] = teamscoreboardObjective.getScore(t.getChatColor() + t.getName()); + } } } } @@ -204,9 +205,11 @@ } if (team != null && oldteam == team) { ChatUtil.sendNormalMessage(player, "Du bist bereits in Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + "."); - Team scoreboardteam = plugin.getSBManager().getScoreboard().getTeam(team.getName()); - if (scoreboardteam != null && !scoreboardteam.getEntries().contains(player)) { - scoreboardteam.addPlayer(player); + if (Challenges.getPlugin().getSBManager().getScoreboard() instanceof Scoreboard scoreboard) { + Team scoreboardteam = scoreboard.getTeam(team.getName()); + if (scoreboardteam != null && !scoreboardteam.getEntries().contains(player)) { + scoreboardteam.addPlayer(player); + } } return; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7d5f0e6..bc15e80 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ author: ${project.author} api-version: 1.16 depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] -softdepend: [CubesideStatistics, ProtocolLib, FoliaNMSUtils] +softdepend: [CubesideStatistics, ProtocolLib, FoliaNMSUtils, packetevents] folia-supported: true commands: hp: