Skip to content

Commit c94e1e5

Browse files
authored
[#454] Fix region file cache on paper (#455)
1 parent e70042a commit c94e1e5

File tree

20 files changed

+54
-38
lines changed

20 files changed

+54
-38
lines changed

orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,27 @@
1010
import java.util.concurrent.locks.ReadWriteLock;
1111
import java.util.concurrent.locks.ReentrantReadWriteLock;
1212
import dev.imprex.orebfuscator.config.api.CacheConfig;
13+
import dev.imprex.orebfuscator.reflect.Reflector;
14+
import dev.imprex.orebfuscator.reflect.accessor.MethodAccessor;
1315
import dev.imprex.orebfuscator.util.ChunkCacheKey;
1416
import dev.imprex.orebfuscator.util.SimpleCache;
1517

1618
public abstract class AbstractRegionFileCache<T> {
1719

20+
private static MethodAccessor serverGetServer;
21+
22+
protected static <T> T serverHandle(Object server, Class<T> targetClass) {
23+
if (serverGetServer == null) {
24+
serverGetServer = Reflector.of(server.getClass()).method()
25+
.banStatic()
26+
.nameIs("getServer")
27+
.returnType().is(targetClass)
28+
.parameterCount(0)
29+
.firstOrThrow();
30+
}
31+
return targetClass.cast(serverGetServer.invoke(server));
32+
}
33+
1834
protected final ReadWriteLock lock = new ReentrantReadWriteLock(true);
1935
protected final Map<Path, T> regionFiles;
2036

orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_16_R1.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
1413
import net.minecraft.server.v1_16_R1.ChunkCoordIntPair;
14+
import net.minecraft.server.v1_16_R1.DedicatedServer;
1515
import net.minecraft.server.v1_16_R1.RegionFile;
1616
import net.minecraft.server.v1_16_R1.RegionFileCompression;
1717

@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().isSyncChunkWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).isSyncChunkWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileCompression.c, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_16_R2.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
1413
import net.minecraft.server.v1_16_R2.ChunkCoordIntPair;
14+
import net.minecraft.server.v1_16_R2.DedicatedServer;
1515
import net.minecraft.server.v1_16_R2.RegionFile;
1616
import net.minecraft.server.v1_16_R2.RegionFileCompression;
1717

@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().isSyncChunkWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).isSyncChunkWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileCompression.c, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
1413
import net.minecraft.server.v1_16_R3.ChunkCoordIntPair;
14+
import net.minecraft.server.v1_16_R3.DedicatedServer;
1515
import net.minecraft.server.v1_16_R3.RegionFile;
1616
import net.minecraft.server.v1_16_R3.RegionFileCompression;
1717

@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().isSyncChunkWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).isSyncChunkWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileCompression.c, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_18_R1.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_19_R1/src/main/java/net/imprex/orebfuscator/nms/v1_19_R1/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_19_R2/src/main/java/net/imprex/orebfuscator/nms/v1_19_R2/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

orebfuscator-nms/orebfuscator-nms-v1_19_R3/src/main/java/net/imprex/orebfuscator/nms/v1_19_R3/RegionFileCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.nio.file.Path;
77

88
import org.bukkit.Bukkit;
9-
import org.bukkit.craftbukkit.v1_19_R3.CraftServer;
109

1110
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
1211
import dev.imprex.orebfuscator.config.api.CacheConfig;
1312
import dev.imprex.orebfuscator.util.ChunkCacheKey;
13+
import net.minecraft.server.dedicated.DedicatedServer;
1414
import net.minecraft.world.level.ChunkPos;
1515
import net.minecraft.world.level.chunk.storage.RegionFile;
1616
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
@@ -23,7 +23,7 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2323

2424
@Override
2525
protected RegionFile createRegionFile(Path path) throws IOException {
26-
boolean isSyncChunkWrites = ((CraftServer) Bukkit.getServer()).getServer().forceSynchronousWrites();
26+
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
2727
return new RegionFile(path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2828
}
2929

0 commit comments

Comments
 (0)