refactor: updated default world module

This commit is contained in:
Andrey Terentev 2024-11-27 02:12:07 +07:00
parent 3bd876a628
commit e4fd8542da

View File

@ -15,27 +15,33 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
public class PreloadedWorldModule { public class DefaultWorldModule {
private static boolean used = false; private static boolean used = false;
private PreloadedWorldModule() {} private DefaultWorldModule() {}
public static void init(File worldDir, GameMode gameMode, Pos spawnPos) { public static void init(File worldDir, GameMode gameMode, Pos spawnPos, boolean preloadAllChunks) {
init(worldDir, gameMode, () -> spawnPos); init(worldDir, gameMode, () -> spawnPos, preloadAllChunks);
} }
public static synchronized void init(File worldDir, GameMode gameMode, Supplier<Pos> spawnPosSupplier) { public static synchronized void init(File worldDir, GameMode gameMode, Supplier<Pos> spawnPosSupplier, boolean preloadAllChunks) {
if (used) return; if (used) return;
used = true; used = true;
var loadingWorld = MinecraftServer.getInstanceManager().createInstanceContainer(); var loadingWorld = MinecraftServer.getInstanceManager().createInstanceContainer();
loadingWorld.eventNode().addListener(PlayerMoveEvent.class, event -> event.setCancelled(true)); loadingWorld.eventNode().addListener(PlayerMoveEvent.class, event -> event.setCancelled(true));
var factory = WorldFactory.preloadedAnvil(worldDir); WorldFactory factory;
var worlds = new ConcurrentHashMap<UUID, World>(); if (preloadAllChunks) {
var obj = WorldFactory.preloadedAnvil(worldDir);
obj.load();
factory = obj;
} else {
factory = WorldFactory.anvil(worldDir);
}
factory.load(); var worlds = new ConcurrentHashMap<UUID, World>();
MinecraftServer.getGlobalEventHandler().addListener(AsyncPlayerConfigurationEvent.class, event -> { MinecraftServer.getGlobalEventHandler().addListener(AsyncPlayerConfigurationEvent.class, event -> {
var player = event.getPlayer(); var player = event.getPlayer();