diff --git a/orebfuscator-api-example/pom.xml b/orebfuscator-api-example/pom.xml index 2e28ad52d..80d361655 100644 --- a/orebfuscator-api-example/pom.xml +++ b/orebfuscator-api-example/pom.xml @@ -13,17 +13,26 @@ jar - - org.spigotmc - spigot-api - 1.18-R0.1-SNAPSHOT - provided - net.imprex orebfuscator-api ${revision} provided + + dev.folia + folia-api + 1.21.4-R0.1-SNAPSHOT + provided + + + + + + src/main/resources + true + + + \ No newline at end of file diff --git a/orebfuscator-api-example/src/main/resources/plugin.yml b/orebfuscator-api-example/src/main/resources/plugin.yml index 8427f0e94..666249853 100644 --- a/orebfuscator-api-example/src/main/resources/plugin.yml +++ b/orebfuscator-api-example/src/main/resources/plugin.yml @@ -1,6 +1,7 @@ -api-version: 1.18 +api-version: 1.21 +folia-supported: true -name: orebfuscator-api-example +name: ${project.name} version: ${project.version} main: net.imprex.api.example.Example diff --git a/orebfuscator-api/pom.xml b/orebfuscator-api/pom.xml index 024f90002..45ac76a23 100644 --- a/orebfuscator-api/pom.xml +++ b/orebfuscator-api/pom.xml @@ -16,7 +16,7 @@ org.spigotmc spigot-api - 1.9.4-R0.1-SNAPSHOT + ${dependency.bukkit.version} provided diff --git a/orebfuscator-api/src/main/java/net/imprex/orebfuscator/api/OrebfuscatorService.java b/orebfuscator-api/src/main/java/net/imprex/orebfuscator/api/OrebfuscatorService.java index 8fdeb8e25..bc55fbefe 100644 --- a/orebfuscator-api/src/main/java/net/imprex/orebfuscator/api/OrebfuscatorService.java +++ b/orebfuscator-api/src/main/java/net/imprex/orebfuscator/api/OrebfuscatorService.java @@ -12,7 +12,7 @@ * *

* All calls to this service are expected to originate from the servers - * main-thread. + * main-thread or in case of folia from a region thread (never the global region thread). *

* * @since 5.2.0 diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java index c5f8cd5d0..3c87f7b28 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorCompatibility.java @@ -45,6 +45,10 @@ public static void initialize(Plugin plugin, Config config) { OFCLogger.debug("Compatibility layer successfully loaded"); } + public static boolean isGameThread() { + return instance.isGameThread(); + } + public static void runForPlayer(Player player, Runnable runnable) { instance.getScheduler().runForPlayer(player, runnable); } diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java index 0da2a4ab5..15db93d1e 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-api/src/main/java/net/imprex/orebfuscator/compatibility/CompatibilityLayer.java @@ -9,6 +9,8 @@ public interface CompatibilityLayer { + boolean isGameThread(); + CompatibilityScheduler getScheduler(); CompletableFuture getNeighboringChunks(World world, ChunkPosition position); diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java index e1f04579a..6cd899e8f 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-bukkit/src/main/java/net/imprex/orebfuscator/compatibility/bukkit/BukkitCompatibilityLayer.java @@ -13,6 +13,8 @@ public class BukkitCompatibilityLayer implements CompatibilityLayer { + private final Thread mainThread = Thread.currentThread(); + private final BukkitScheduler scheduler; private final BukkitChunkLoader chunkLoader; @@ -21,6 +23,11 @@ public BukkitCompatibilityLayer(Plugin plugin, Config config) { this.chunkLoader = new BukkitChunkLoader(plugin, config); } + @Override + public boolean isGameThread() { + return Thread.currentThread() == this.mainThread; + } + @Override public CompatibilityScheduler getScheduler() { return this.scheduler; diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java index 51225e485..fc0a3906d 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-folia/src/main/java/net/imprex/orebfuscator/compatibility/folia/FoliaCompatibilityLayer.java @@ -8,12 +8,27 @@ public class FoliaCompatibilityLayer extends AbstractPaperCompatibilityLayer { + private static final Class TICK_THREAD_CLASS = getTickThreadClass(); + + private static Class getTickThreadClass() { + try { + return Class.forName("io.papermc.paper.threadedregions.TickRegionScheduler$TickThreadRunner"); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Can't find tick thread class for folia", e); + } + } + private final FoliaScheduler scheduler; public FoliaCompatibilityLayer(Plugin plugin, Config config) { this.scheduler = new FoliaScheduler(plugin); } + @Override + public boolean isGameThread() { + return TICK_THREAD_CLASS.isInstance(Thread.currentThread()); + } + @Override public CompatibilityScheduler getScheduler() { return this.scheduler; diff --git a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java index abd607e37..99a2bafd8 100644 --- a/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java +++ b/orebfuscator-compatibility/orebfuscator-compatibility-paper/src/main/java/net/imprex/orebfuscator/compatibility/paper/PaperCompatibilityLayer.java @@ -8,12 +8,19 @@ public class PaperCompatibilityLayer extends AbstractPaperCompatibilityLayer { + private final Thread mainThread = Thread.currentThread(); + private final BukkitScheduler scheduler; public PaperCompatibilityLayer(Plugin plugin, Config config) { this.scheduler = new BukkitScheduler(plugin); } + @Override + public boolean isGameThread() { + return Thread.currentThread() == this.mainThread; + } + @Override public CompatibilityScheduler getScheduler() { return this.scheduler; diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/DefaultOrebfuscatorService.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/DefaultOrebfuscatorService.java index 421606b43..1839662f4 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/DefaultOrebfuscatorService.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/DefaultOrebfuscatorService.java @@ -11,18 +11,16 @@ public final class DefaultOrebfuscatorService implements OrebfuscatorService { - private final Orebfuscator orebfuscator; private final ObfuscationSystem obfuscationSystem; public DefaultOrebfuscatorService(Orebfuscator orebfuscator) { - this.orebfuscator = orebfuscator; this.obfuscationSystem = orebfuscator.getObfuscationSystem(); } @Override public final void deobfuscate(Collection blocks) { - if (!this.orebfuscator.isGameThread()) { - throw new IllegalStateException("Asynchronous deobfuscation!"); + if (!OrebfuscatorCompatibility.isGameThread()) { + throw new IllegalStateException("Asynchronous deobfuscation! " + Thread.currentThread()); } else if (blocks == null || blocks.isEmpty()) { throw new IllegalArgumentException("block list is null or empty"); } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java index 9eecdaa94..6522c2c69 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/Orebfuscator.java @@ -25,8 +25,6 @@ public class Orebfuscator extends JavaPlugin implements Listener { public static final ThreadGroup THREAD_GROUP = new ThreadGroup("orebfuscator"); - private final Thread mainThread = Thread.currentThread(); - private OrebfuscatorStatistics statistics; private OrebfuscatorConfig config; private OrebfuscatorPlayerMap playerMap; @@ -137,10 +135,6 @@ public void onEnableFailed(Listener listener, Event event) { } } - public boolean isGameThread() { - return Thread.currentThread() == this.mainThread; - } - public OrebfuscatorStatistics getStatistics() { return statistics; } diff --git a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java index ec2313257..2e8649160 100644 --- a/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java +++ b/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/cache/ObfuscationCache.java @@ -17,7 +17,6 @@ public class ObfuscationCache { - private final Orebfuscator orebfuscator; private final CacheConfig cacheConfig; private final OrebfuscatorStatistics statistics; @@ -25,7 +24,6 @@ public class ObfuscationCache { private final AsyncChunkSerializer serializer; public ObfuscationCache(Orebfuscator orebfuscator) { - this.orebfuscator = orebfuscator; this.cacheConfig = orebfuscator.getOrebfuscatorConfig().cache(); this.statistics = orebfuscator.getStatistics(); @@ -52,7 +50,7 @@ private void onRemoval(RemovalNotification