1 parent
ba9070eddd
commit
f04d2c3260
3 files changed
+26
-6
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()) {
|
||||||
|
runRequest(current);
|
||||||
|
} else {
|
||||||
|
EXECUTOR.submit(() -> runRequest(current));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private void runRequest(IRequest request) {
|
||||||
try {
|
try {
|
||||||
current.handle(mcServer);
|
request.handle(mcServer);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Loon.LOGGER.error("Failed to handle request: {}, {}", current.getClass().getSimpleName(), 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user