Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions orebfuscator-api-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,26 @@
<packaging>jar</packaging>

<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.18-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.imprex</groupId>
<artifactId>orebfuscator-api</artifactId>
<version>${revision}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>dev.folia</groupId>
<artifactId>folia-api</artifactId>
<version>1.21.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
5 changes: 3 additions & 2 deletions orebfuscator-api-example/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion orebfuscator-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.9.4-R0.1-SNAPSHOT</version>
<version>${dependency.bukkit.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
*
* <p>
* 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).
* </p>
*
* @since 5.2.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

public interface CompatibilityLayer {

boolean isGameThread();

CompatibilityScheduler getScheduler();

CompletableFuture<ReadOnlyChunk[]> getNeighboringChunks(World world, ChunkPosition position);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

public class BukkitCompatibilityLayer implements CompatibilityLayer {

private final Thread mainThread = Thread.currentThread();

private final BukkitScheduler scheduler;
private final BukkitChunkLoader chunkLoader;

Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<? extends Block> 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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -137,10 +135,6 @@ public void onEnableFailed(Listener listener, Event event) {
}
}

public boolean isGameThread() {
return Thread.currentThread() == this.mainThread;
}

public OrebfuscatorStatistics getStatistics() {
return statistics;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@

public class ObfuscationCache {

private final Orebfuscator orebfuscator;
private final CacheConfig cacheConfig;
private final OrebfuscatorStatistics statistics;

private final Cache<ChunkPosition, CompressedObfuscationResult> cache;
private final AsyncChunkSerializer serializer;

public ObfuscationCache(Orebfuscator orebfuscator) {
this.orebfuscator = orebfuscator;
this.cacheConfig = orebfuscator.getOrebfuscatorConfig().cache();
this.statistics = orebfuscator.getStatistics();

Expand All @@ -52,7 +50,7 @@ private void onRemoval(RemovalNotification<ChunkPosition, CompressedObfuscationR

// don't serialize invalidated chunks since this would require locking the main
// thread and wouldn't bring a huge improvement
if (this.cacheConfig.enableDiskCache() && notification.wasEvicted() && !this.orebfuscator.isGameThread()) {
if (this.cacheConfig.enableDiskCache() && notification.wasEvicted() && !OrebfuscatorCompatibility.isGameThread()) {
this.serializer.write(notification.getKey(), notification.getValue());
}
}
Expand Down