3
0
Mirror von https://github.com/IntellectualSites/FastAsyncWorldEdit.git synchronisiert 2024-10-03 20:21:05 +02:00

Add folia workaround

Dieser Commit ist enthalten in:
TheMeinerLP 2023-06-18 15:02:12 +02:00 committet von Phillipp Glanz
Ursprung f066939c0e
Commit 296baf0e81

Datei anzeigen

@ -119,9 +119,20 @@ public final class PaperweightPlatformAdapter extends NMSAdapter {
private static Field LEVEL_CHUNK_ENTITIES; private static Field LEVEL_CHUNK_ENTITIES;
private static Field SERVER_LEVEL_ENTITY_MANAGER; private static Field SERVER_LEVEL_ENTITY_MANAGER;
private static boolean FOLIA_SUPPORT;
static { static {
final MethodHandles.Lookup lookup = MethodHandles.lookup(); final MethodHandles.Lookup lookup = MethodHandles.lookup();
try { try {
boolean isFolia = false;
try {
// Assume API is present
Class.forName("io.papermc.paper.threadedregions.scheduler.EntityScheduler");
isFolia = true;
} catch (Exception unused) {
}
FOLIA_SUPPORT = isFolia;
fieldData = PalettedContainer.class.getDeclaredField(Refraction.pickName("data", "d")); fieldData = PalettedContainer.class.getDeclaredField(Refraction.pickName("data", "d"));
fieldData.setAccessible(true); fieldData.setAccessible(true);
@ -263,7 +274,9 @@ public final class PaperweightPlatformAdapter extends NMSAdapter {
} else { } else {
LevelChunk nmsChunk = serverLevel.getChunkSource().getChunkAtIfCachedImmediately(chunkX, chunkZ); LevelChunk nmsChunk = serverLevel.getChunkSource().getChunkAtIfCachedImmediately(chunkX, chunkZ);
if (nmsChunk != null) { if (nmsChunk != null) {
if(!FOLIA_SUPPORT) {// TODO: Dirty folia workaround - Needs be discussed with FAWE members
addTicket(serverLevel, chunkX, chunkZ); addTicket(serverLevel, chunkX, chunkZ);
}
return nmsChunk; return nmsChunk;
} }
nmsChunk = serverLevel.getChunkSource().getChunkAtIfLoadedImmediately(chunkX, chunkZ); nmsChunk = serverLevel.getChunkSource().getChunkAtIfLoadedImmediately(chunkX, chunkZ);
@ -277,6 +290,12 @@ public final class PaperweightPlatformAdapter extends NMSAdapter {
} }
CompletableFuture<org.bukkit.Chunk> future = serverLevel.getWorld().getChunkAtAsync(chunkX, chunkZ, true, true); CompletableFuture<org.bukkit.Chunk> future = serverLevel.getWorld().getChunkAtAsync(chunkX, chunkZ, true, true);
try { try {
/*
CraftChunk chunk = (CraftChunk) future.get();
if(!FOLIA_SUPPORT) {// TODO: Dirty folia workaround - Needs be discussed with FAWE members
addTicket(serverLevel, chunkX, chunkZ);
}
*/
CraftChunk chunk; CraftChunk chunk;
try { try {
chunk = (CraftChunk) future.get(10, TimeUnit.SECONDS); chunk = (CraftChunk) future.get(10, TimeUnit.SECONDS);