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: