Correct thread
build / build (push) Successful in 3m43s

This commit is contained in:
ciomek committed 2026-08-16 23:28:05 +02:00
1 parent ba9070eddd
commit f04d2c3260
3 files changed
+27 -7

No files matched your search

@@ -105,13 +105,20 @@ public class WorldServerMixin {
IRequest request; IRequest request;
while ((request = RequestManager.pollRequest()) != null) { while ((request = RequestManager.pollRequest()) != null) {
IRequest current = request; IRequest current = request;
EXECUTOR.submit(() -> { if (current.requireTickThread()) {
try { runRequest(current);
current.handle(mcServer); } else {
} catch (Exception e) { EXECUTOR.submit(() -> runRequest(current));
Loon.LOGGER.error("Failed to handle request: {}, {}", current.getClass().getSimpleName(), e);
} }
}); }
}
@Unique
private void runRequest(IRequest request) {
try {
request.handle(mcServer);
} catch (Exception e) {
Loon.LOGGER.error("Failed to handle request: {}, {}", request.getClass().getSimpleName(), e);
} }
} }
} }
@@ -19,6 +19,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public record ChunkMapRequest(int xStart, int xEnd, int zStart, int zEnd) implements IRequest { public record ChunkMapRequest(int xStart, int xEnd, int zStart, int zEnd) implements IRequest {
private static final boolean REQUIRE_TICK_THREAD = false;
@Override @Override
public void handle(MinecraftServer server) { public void handle(MinecraftServer server) {
World world = server.getDimensionWorld(0); World world = server.getDimensionWorld(0);
@@ -72,10 +74,11 @@ public record ChunkMapRequest(int xStart, int xEnd, int zStart, int zEnd) implem
Chunk resolveChunk(World world, ChunkProvider provider, ChunkLoader loader, int x, int z) Chunk resolveChunk(World world, ChunkProvider provider, ChunkLoader loader, int x, int z)
{ {
if (REQUIRE_TICK_THREAD) {
ChunkPos chunkPos = new ChunkPos(x, z); ChunkPos chunkPos = new ChunkPos(x, z);
if (provider.isChunkLoaded(chunkPos)) if (provider.isChunkLoaded(chunkPos))
return world.getChunk(chunkPos); return world.getChunk(chunkPos);
}
if (loader == null || !loader.chunkExists(world, x, z)) if (loader == null || !loader.chunkExists(world, x, z))
return null; return null;
@@ -86,4 +89,10 @@ public record ChunkMapRequest(int xStart, int xEnd, int zStart, int zEnd) implem
return null; return null;
} }
} }
@Override
public boolean requireTickThread()
{
return REQUIRE_TICK_THREAD;
}
} }
@@ -6,4 +6,8 @@ import net.minecraft.server.entity.player.PlayerServer;
public interface IRequest public interface IRequest
{ {
void handle(MinecraftServer server); void handle(MinecraftServer server);
default boolean requireTickThread()
{
return true;
}
} }