diff --git a/pom.xml b/pom.xml
index 61899b4..4ce1453 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,14 @@
viaversion-repo
https://repo.viaversion.com
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/repository/public/
+
+
+ eldonexus
+ https://eldonexus.de/repository/maven-releases/
+
@@ -62,6 +70,18 @@
provided
+ com.comphenix.protocol
+ ProtocolLib
+ 4.7.0
+ provided
+
+
+ com.github.yannicklamprecht.worldborderapi
+ api
+ 1.170.0
+ provided
+
+
org.jetbrains
annotations
RELEASE
diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java
index 4b0ffd6..9a9a20d 100644
--- a/src/main/java/de/fanta/challenges/Challenges.java
+++ b/src/main/java/de/fanta/challenges/Challenges.java
@@ -1,7 +1,8 @@
package de.fanta.challenges;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
import de.cubeside.nmsutils.NMSUtils;
-import de.fanta.challenges.challenges.BingoChallengeEvent;
import de.fanta.challenges.challenges.MLGChallenge;
import de.fanta.challenges.challenges.RandomDropsChallenge;
import de.fanta.challenges.commands.CommandRegistration;
@@ -47,6 +48,8 @@
private static Challenges plugin;
+ private ProtocolManager protocolManager;
+
private File backpackConfigFile;
private FileConfiguration BackpackConfig;
@@ -90,6 +93,7 @@
public void onEnable() {
LOGGER = getLogger();
plugin = this;
+ protocolManager = ProtocolLibrary.getProtocolManager();
nmsUtils = getServer().getServicesManager().load(NMSUtils.class);
this.timer = new Timer(this);
@@ -377,4 +381,8 @@
public NMSUtils getNMSUtils() {
return nmsUtils;
}
+
+ public ProtocolManager getProtocolManager() {
+ return protocolManager;
+ }
}
diff --git a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java
index 2ebbae8..e7c5bf4 100644
--- a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java
+++ b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java
@@ -1,25 +1,21 @@
package de.fanta.challenges.challenges;
+import com.github.yannicklamprecht.worldborder.api.BorderAPI;
+import com.github.yannicklamprecht.worldborder.api.WorldBorderApi;
import de.fanta.challenges.Challenges;
-import de.fanta.challenges.utils.ChatUtil;
-import io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
-import org.bukkit.GameRule;
-import org.bukkit.OfflinePlayer;
import org.bukkit.Sound;
-import org.bukkit.World;
-import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerExpChangeEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLevelChangeEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
+import org.bukkit.event.player.PlayerRespawnEvent;
+import org.bukkit.event.world.SpawnChangeEvent;
public class WorldBorderLevelChallenge implements Listener {
@@ -30,7 +26,7 @@
Player p = e.getPlayer();
if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) {
if (plugin.getConfig().getBoolean("worldborderlevel")) {
- xpSync(e.getPlayer());
+ xpSync(e.getPlayer(), false);
}
}
}
@@ -40,7 +36,12 @@
Player p = e.getPlayer();
if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) {
if (plugin.getConfig().getBoolean("worldborderlevel")) {
- xpSync(e.getPlayer());
+ xpSync(e.getPlayer(), true);
+ if (e.getOldLevel() < e.getNewLevel()) {
+ for (Player pp : Bukkit.getOnlinePlayers()) {
+ pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.03f, 1);
+ }
+ }
}
}
}
@@ -54,36 +55,71 @@
}
@EventHandler
- public void border(WorldBorderBoundsChangeEvent e) {
- if (e.getNewSize() > e.getOldSize()) {
- if (plugin.getConfig().getBoolean("worldborderlevel")) {
- for (Player pp : Bukkit.getOnlinePlayers()) {
- pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 0.01f, 1);
- }
+ public void onRespawn(PlayerRespawnEvent e) {
+ if (plugin.getConfig().getBoolean("worldborderlevel")) {
+ Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
+ WorldBorderApi worldBorderAPI = BorderAPI.getApi();
+ worldBorderAPI.setBorder(e.getPlayer(), plugin.getCurrentEditor().getLevel(), e.getPlayer().getWorld().getSpawnLocation());
+ }, 5L);
+ }
+ }
+
+ @EventHandler
+ public void onWorldSpawnChange(SpawnChangeEvent e) {
+ if (plugin.getConfig().getBoolean("worldborderlevel")) {
+ for (Player pp : Bukkit.getOnlinePlayers()) {
+ xpSync(pp, true);
}
}
}
- private void xpSync(Player p) {
- if (Bukkit.getServer().getOnlinePlayers().size() >= 2) {
+ @EventHandler
+ public void onJoin(PlayerJoinEvent e) {
+ Player p = e.getPlayer();
+ if (plugin.getConfig().getBoolean("worldborderlevel")) {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
- for (Player player : Bukkit.getOnlinePlayers()) {
- if (player != p) {
+ WorldBorderApi worldBorderAPI = BorderAPI.getApi();
+ xpSync(e.getPlayer(), true);
+ }, 10L);
+ }
+ }
+
+ @EventHandler
+ public void onWorldChange(PlayerChangedWorldEvent e) {
+ if (plugin.getConfig().getBoolean("worldborderlevel")) {
+ e.getPlayer().getWorld().setSpawnLocation(Bukkit.getWorld("world").getSpawnLocation());
+ Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
+ WorldBorderApi worldBorderAPI = BorderAPI.getApi();
+ worldBorderAPI.setBorder(e.getPlayer(), plugin.getCurrentEditor().getLevel(), e.getPlayer().getWorld().getSpawnLocation());
+ }, 10L);
+ }
+ }
+
+ private void xpSync(Player p, Boolean borderupdate) {
+ Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ if (player != p) {
+ if (p.getPlayer() != null) {
player.setLevel(p.getPlayer().getLevel());
player.setExp(p.getPlayer().getExp());
}
}
+ }
+ if (borderupdate) {
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
- for (World w : plugin.getServer().getWorlds()) {
- if (w != null) {
- WorldBorder border = w.getWorldBorder();
- if (plugin.getCurrentEditor() != null) {
- border.setSize(plugin.getCurrentEditor().getLevel(), 5);
+ if (plugin.getCurrentEditor() != null) {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ int level = player.getLevel();
+ WorldBorderApi worldBorderAPI = BorderAPI.getApi();
+ if (level > 0) {
+ worldBorderAPI.setBorder(player, level, player.getWorld().getSpawnLocation());
+ } else {
+ worldBorderAPI.setBorder(player, 1, player.getWorld().getSpawnLocation());
}
}
}
}, 1L);
- }, 1L);
- }
+ }
+ }, 1L);
}
}
diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java
index 8e6b44a..c919c12 100644
--- a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java
+++ b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java
@@ -1,5 +1,7 @@
package de.fanta.challenges.guis.settingsgui;
+import com.github.yannicklamprecht.worldborder.api.BorderAPI;
+import com.github.yannicklamprecht.worldborder.api.WorldBorderApi;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.utils.ChatUtil;
import de.fanta.challenges.utils.guiutils.GUIUtils;
@@ -370,11 +372,15 @@
for (World w : plugin.getServer().getWorlds()) {
if (w != null) {
w.getWorldBorder().setCenter(w.getSpawnLocation());
- w.getWorldBorder().setSize(0);
}
}
for (Player pp : Bukkit.getOnlinePlayers()) {
+ WorldBorderApi worldBorderAPI = BorderAPI.getApi();
+ worldBorderAPI.setBorder(pp, 1, plugin.getServer().getWorld("world").getSpawnLocation());
+ }
+
+ for (Player pp : Bukkit.getOnlinePlayers()) {
pp.teleport(pp.getWorld().getSpawnLocation());
}
GUIUtils.sendTitleToAll("Challenge", "World Border Level aktiviert", ChatUtil.GREEN);
diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java
index 8bebdfb..512743d 100644
--- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java
+++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java
@@ -1,6 +1,7 @@
package de.fanta.challenges.listeners;
-import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent;
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.events.PacketContainer;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.events.PlayerCountChangedEvent;
import de.fanta.challenges.utils.ChatUtil;
@@ -8,6 +9,7 @@
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
+import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -21,9 +23,11 @@
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
+import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.kitteh.vanish.event.VanishStatusChangeEvent;
import org.spigotmc.event.player.PlayerSpawnLocationEvent;
+import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
import static org.bukkit.Bukkit.getServer;
@@ -164,4 +168,33 @@
}
}
}
+
+ /*@EventHandler
+ public void onSneak(PlayerToggleSneakEvent e) {
+ Player player = e.getPlayer();
+ World world = player.getWorld();
+
+ PacketContainer initfakeborder = new PacketContainer(PacketType.Play.Server.INITIALIZE_BORDER);
+ initfakeborder.getDoubles().
+ write(0, world.getSpawnLocation().getX()).
+ write(1, world.getSpawnLocation().getZ());
+ initfakeborder.getLongs().write(0, 1L);
+
+ PacketContainer centerfakeborder = new PacketContainer(PacketType.Play.Server.SET_BORDER_CENTER);
+ centerfakeborder.getDoubles().
+ write(0, world.getSpawnLocation().getX()).
+ write(1, world.getSpawnLocation().getZ());
+
+ PacketContainer sizefakeborder = new PacketContainer(PacketType.Play.Server.SET_BORDER_SIZE);
+ sizefakeborder.getDoubles().
+ write(0, 10000000000.0);
+ try {
+ plugin.getProtocolManager().sendServerPacket(player, initfakeborder);
+ plugin.getProtocolManager().sendServerPacket(player, centerfakeborder);
+ plugin.getProtocolManager().sendServerPacket(player, sizefakeborder);
+ } catch (InvocationTargetException ex) {
+ throw new RuntimeException(
+ "Cannot send packet " + initfakeborder, ex);
+ }
+ }*/
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 8c13281..1beffe2 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -4,7 +4,7 @@
load: STARTUP
api-version: 1.17
author: ${project.author}
-depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils]
+depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, ProtocolLib, WorldBorderAPI]
loadbefore:
- CubesideSettings
commands: