diff --git a/pom.xml b/pom.xml
index 717c3bc..9f48c97 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.warp
CoordinatesObfuscator
- 1.4.6
+ 1.4.7
CoordinatesObfuscator
diff --git a/src/main/java/org/warp/coordinatesobfuscator/CoordinatesObfuscator.java b/src/main/java/org/warp/coordinatesobfuscator/CoordinatesObfuscator.java
index 2081829..5817e9b 100644
--- a/src/main/java/org/warp/coordinatesobfuscator/CoordinatesObfuscator.java
+++ b/src/main/java/org/warp/coordinatesobfuscator/CoordinatesObfuscator.java
@@ -7,6 +7,12 @@
import com.comphenix.protocol.events.*;
import com.comphenix.protocol.injector.GamePhase;
import com.comphenix.protocol.wrappers.nbt.NbtBase;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+import java.lang.invoke.MethodType;
+
import org.bukkit.Bukkit;
import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
@@ -28,6 +34,20 @@ public class CoordinatesObfuscator extends JavaPlugin implements Listener {
public static final boolean DEBUG_ENABLED = "debug".equals(System.getProperty("coordinates_obfuscator.env"));
public static final boolean DISALLOW_REMOVING_NONEXISTENT_COORDINATES = false;
+
+ private static final MethodHandle CREATE_WORLD_BORDER_METHOD;
+
+ static {
+ var lookup = MethodHandles.publicLookup();
+ MethodHandle createWorldBorderMethod = null;
+ try {
+ Class> worldBorderClass = lookup.findClass("org.bukkit.WorldBorder");
+ createWorldBorderMethod = lookup.findStatic(Bukkit.class, "createWorldBorder", MethodType.methodType(worldBorderClass));
+ } catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException e) {
+ // ignore
+ }
+ CREATE_WORLD_BORDER_METHOD = createWorldBorderMethod;
+ }
private Logger logger;
@Override
@@ -46,7 +66,7 @@ public void onEnable() {
final ProtocolManager pm = ProtocolLibrary.getProtocolManager();
- final HashSet packets = new HashSet();
+ final HashSet packets = new HashSet<>();
// /Server side packets
{
@@ -204,7 +224,15 @@ public void onPlayerTeleport(final PlayerRespawnEvent event){
private void setMaxWorldBorder(final Player player){
Bukkit.getScheduler().runTaskLater(this, () -> {
if (!player.isOnline()) return;
- WorldBorder border = Bukkit.createWorldBorder();
+ // Some bukkit versions don't have this method
+ if (CREATE_WORLD_BORDER_METHOD == null) return;
+ WorldBorder border;
+ try {
+ border = (WorldBorder) CREATE_WORLD_BORDER_METHOD.invokeExact();
+ } catch (Throwable e) {
+ // This shouldn't happen
+ throw new RuntimeException(e);
+ }
border.setCenter(player.getWorld().getWorldBorder().getCenter());
border.setSize(59999968E7);
player.setWorldBorder(border);