diff --git a/pom.xml b/pom.xml index d4c5c31..a66a653 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,10 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 + 3.5.6 + + -Dnet.bytebuddy.experimental=true + @@ -99,13 +102,13 @@ org.junit.jupiter junit-jupiter - 5.10.2 + 6.1.3 test org.mockito mockito-core - 5.12.0 + 5.23.0 test diff --git a/src/main/java/net/denfry/worldAccessBlocker/WorldAccessBlocker.java b/src/main/java/net/denfry/worldAccessBlocker/WorldAccessBlocker.java index 633a922..1518b6c 100644 --- a/src/main/java/net/denfry/worldAccessBlocker/WorldAccessBlocker.java +++ b/src/main/java/net/denfry/worldAccessBlocker/WorldAccessBlocker.java @@ -88,7 +88,7 @@ public void onEnable() { log.info("PlaceholderAPI hook enabled."); } - runtime.runRepeatingGlobal(new RestrictionEnforcer(this), 0L, 100L); + runtime.runRepeatingGlobal(new RestrictionEnforcer(this), 1L, 100L); VersionChecker versionChecker = new VersionChecker(this, runtime); versionChecker.checkAsync(); diff --git a/src/main/java/net/denfry/worldAccessBlocker/listeners/ElytraBlocker.java b/src/main/java/net/denfry/worldAccessBlocker/listeners/ElytraBlocker.java index beca588..78e6edc 100644 --- a/src/main/java/net/denfry/worldAccessBlocker/listeners/ElytraBlocker.java +++ b/src/main/java/net/denfry/worldAccessBlocker/listeners/ElytraBlocker.java @@ -40,7 +40,7 @@ public void start() { if (enforceFlight) enforceNoGlide(player); }); } - }, 0L, 20L); + }, 1L, 20L); } private void enforceNoGlide(Player player) { diff --git a/src/main/java/net/denfry/worldAccessBlocker/runtime/FoliaRuntimeAdapter.java b/src/main/java/net/denfry/worldAccessBlocker/runtime/FoliaRuntimeAdapter.java index 607da83..02b1415 100644 --- a/src/main/java/net/denfry/worldAccessBlocker/runtime/FoliaRuntimeAdapter.java +++ b/src/main/java/net/denfry/worldAccessBlocker/runtime/FoliaRuntimeAdapter.java @@ -5,96 +5,31 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.function.Consumer; - public class FoliaRuntimeAdapter implements PlatformRuntime { private final Plugin plugin; - private final PlatformRuntime fallback; public FoliaRuntimeAdapter(Plugin plugin) { this.plugin = plugin; - this.fallback = new PaperRuntimeAdapter(plugin); } @Override public void runRepeatingGlobal(Runnable task, long initialDelayTicks, long periodTicks) { - try { - Object globalRegionScheduler = Bukkit.class.getMethod("getGlobalRegionScheduler").invoke(null); - Method runAtFixedRate = globalRegionScheduler.getClass().getMethod( - "runAtFixedRate", - Plugin.class, - Consumer.class, - long.class, - long.class - ); - Consumer consumer = ignored -> task.run(); - runAtFixedRate.invoke(globalRegionScheduler, plugin, consumer, initialDelayTicks, periodTicks); - } catch (Exception ex) { - fallback.runRepeatingGlobal(task, initialDelayTicks, periodTicks); - } + Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, i -> task.run(), initialDelayTicks, periodTicks); } @Override public void runAsync(Runnable task) { - try { - Object asyncScheduler = Bukkit.class.getMethod("getAsyncScheduler").invoke(null); - Method runNow = asyncScheduler.getClass().getMethod("runNow", Plugin.class, Consumer.class); - Consumer consumer = ignored -> task.run(); - runNow.invoke(asyncScheduler, plugin, consumer); - } catch (Exception ex) { - fallback.runAsync(task); - } + Bukkit.getAsyncScheduler().runNow(plugin, i -> task.run()); } @Override public void runLater(Runnable task, long delayTicks) { - try { - Object globalRegionScheduler = Bukkit.class.getMethod("getGlobalRegionScheduler").invoke(null); - Method runDelayed = globalRegionScheduler.getClass().getMethod( - "runDelayed", - Plugin.class, - Consumer.class, - long.class - ); - Consumer consumer = ignored -> task.run(); - runDelayed.invoke(globalRegionScheduler, plugin, consumer, Math.max(1L, delayTicks)); - } catch (Exception ex) { - fallback.runLater(task, delayTicks); - } + Bukkit.getGlobalRegionScheduler().runDelayed(plugin, i -> task.run(), Math.max(1L, delayTicks)); } @Override public void runForPlayer(Player player, Runnable task) { - try { - Object entityScheduler = player.getClass().getMethod("getScheduler").invoke(player); - Method run = Arrays.stream(entityScheduler.getClass().getMethods()) - .filter(m -> m.getName().equals("run")) - .filter(m -> m.getParameterCount() >= 3) - .findFirst() - .orElseThrow(); - Consumer consumer = ignored -> task.run(); - Object[] args = new Object[run.getParameterCount()]; - Class[] paramTypes = run.getParameterTypes(); - for (int i = 0; i < paramTypes.length; i++) { - Class type = paramTypes[i]; - if (Plugin.class.isAssignableFrom(type)) { - args[i] = plugin; - } else if (Consumer.class.isAssignableFrom(type)) { - args[i] = consumer; - } else if (Runnable.class.isAssignableFrom(type)) { - args[i] = null; - } else if (type == long.class || type == Long.class) { - args[i] = 0L; - } else { - args[i] = null; - } - } - run.invoke(entityScheduler, args); - } catch (Exception ex) { - fallback.runForPlayer(player, task); - } + player.getScheduler().run(plugin, t -> task.run(), null); } @Override diff --git a/src/main/java/net/denfry/worldAccessBlocker/runtime/PlatformRuntimeFactory.java b/src/main/java/net/denfry/worldAccessBlocker/runtime/PlatformRuntimeFactory.java index 7c0b619..aeb10fa 100644 --- a/src/main/java/net/denfry/worldAccessBlocker/runtime/PlatformRuntimeFactory.java +++ b/src/main/java/net/denfry/worldAccessBlocker/runtime/PlatformRuntimeFactory.java @@ -1,6 +1,5 @@ package net.denfry.worldAccessBlocker.runtime; -import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; public final class PlatformRuntimeFactory { @@ -17,7 +16,7 @@ public static PlatformRuntime create(Plugin plugin) { public static boolean isFoliaRuntime() { try { Class.forName("io.papermc.paper.threadedregions.RegionizedServer"); - return Bukkit.getName().toLowerCase().contains("folia") || Bukkit.getVersion().contains("Folia"); + return true; } catch (ClassNotFoundException ignored) { return false; }