From 276550d478a3274c04a779e63947a5de9467ee98 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 20 Aug 2025 22:03:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=AF=E5=8A=A8=E5=8C=BA?= =?UTF-8?q?=E5=9D=97=E5=8A=A0=E8=BD=BD=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/world/BukkitWorldManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java index 7d557cd21..fd9ac0846 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java @@ -54,6 +54,9 @@ public class BukkitWorldManager implements WorldManager, Listener { this.plugin = plugin; this.worlds = new HashMap<>(); this.storageAdaptor = new DefaultStorageAdaptor(); + for (World world : Bukkit.getWorlds()) { + this.worlds.put(world.getUID(), new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor)); + } } @Override @@ -98,7 +101,6 @@ public class BukkitWorldManager implements WorldManager, Listener { public void delayedInit() { // events and tasks - Bukkit.getPluginManager().registerEvents(this, this.plugin.javaPlugin()); this.tickTask = this.plugin.scheduler().asyncRepeating(() -> { try { if (this.isTicking) { @@ -117,9 +119,7 @@ public class BukkitWorldManager implements WorldManager, Listener { try { for (World world : Bukkit.getWorlds()) { try { - CEWorld ceWorld = new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor); - this.worlds.put(world.getUID(), ceWorld); - this.resetWorldArray(); + CEWorld ceWorld = this.worlds.computeIfAbsent(world.getUID(), k -> new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor)); for (Chunk chunk : world.getLoadedChunks()) { handleChunkLoad(ceWorld, chunk); } @@ -127,9 +127,11 @@ public class BukkitWorldManager implements WorldManager, Listener { CraftEngine.instance().logger().warn("Error loading world: " + world.getName(), e); } } + this.resetWorldArray(); } finally { this.worldMapLock.writeLock().unlock(); } + Bukkit.getPluginManager().registerEvents(this, this.plugin.javaPlugin()); } @Override @@ -246,6 +248,7 @@ public class BukkitWorldManager implements WorldManager, Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onChunkLoad(ChunkLoadEvent event) { + if (!this.fullyLoaded) return; this.worldMapLock.readLock().lock(); CEWorld world; try { @@ -261,6 +264,7 @@ public class BukkitWorldManager implements WorldManager, Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onChunkUnload(ChunkUnloadEvent event) { + if (!this.fullyLoaded) return; CEWorld world; this.worldMapLock.readLock().lock(); try {