diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 1be6b23ba..325159bdc 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -70,6 +70,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { @Override public void onEnable() { + this.initSlimeWorldHook(); // WorldEdit // FastAsyncWorldEdit if (this.isPluginEnabled("FastAsyncWorldEdit")) { @@ -110,7 +111,6 @@ public class BukkitCompatibilityManager implements CompatibilityManager { @Override public void onDelayedEnable() { - this.initSlimeWorldHook(); if (this.isPluginEnabled("PlaceholderAPI")) { PlaceholderAPIUtils.registerExpansions(this.plugin); this.hasPlaceholderAPI = true; @@ -234,7 +234,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { Bukkit.getPluginManager().registerEvents(adaptor, plugin.javaPlugin()); logHook("AdvancedSlimePaper"); } catch (ClassNotFoundException ignored) { - if (Bukkit.getPluginManager().isPluginEnabled("SlimeWorldPlugin")) { + if (hasPlugin("SlimeWorldPlugin")) { LegacySlimeFormatStorageAdaptor adaptor = new LegacySlimeFormatStorageAdaptor(worldManager, 2); worldManager.setStorageAdaptor(adaptor); Bukkit.getPluginManager().registerEvents(adaptor, plugin.javaPlugin()); diff --git a/bukkit/paper-loader/build.gradle.kts b/bukkit/paper-loader/build.gradle.kts index 0fd95ea61..4dee48518 100644 --- a/bukkit/paper-loader/build.gradle.kts +++ b/bukkit/paper-loader/build.gradle.kts @@ -72,6 +72,7 @@ paper { register("LuckPerms") { required = false } register("ViaVersion") { required = false } register("QuickShop-Hikari") { required = false } + register("SlimeWorldPlugin") { required = false } // external tag register("CustomNameplates") { required = false } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index 2ee4ec1ea..ce298bf65 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -234,8 +234,12 @@ public class BukkitCraftEngine extends CraftEngine { super.senderFactory = new BukkitSenderFactory(this); // 初始化指令管理器 super.commandManager = new BukkitCommandManager(this); + try { + super.compatibilityManager().onEnable(); + } catch (Throwable t) { + this.logger.severe("Failed to enable compatibility manager", t); + } super.onPluginEnable(); - super.compatibilityManager().onEnable(); } @Override 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 702fcf370..841779fb4 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 @@ -49,10 +49,6 @@ public class BukkitWorldManager implements WorldManager, Listener { this.plugin = plugin; this.worlds = ConcurrentUUID2ReferenceChainedHashTable.createWithCapacity(10, 0.5f); this.storageAdaptor = new DefaultStorageAdaptor(); - // fixme 初始化 - for (World world : Bukkit.getWorlds()) { - this.worlds.put(world.getUID(), new BukkitCEWorld(new BukkitWorld(world), this.storageAdaptor)); - } } @Override @@ -77,6 +73,11 @@ public class BukkitWorldManager implements WorldManager, Listener { if (world != null) { this.lastWorldUUID = uuid; this.lastWorld = world; + } else { + World bukkitWorld = Bukkit.getWorld(uuid); + if (bukkitWorld != null) { + world = this.loadWorld(new BukkitWorld(bukkitWorld)); + } } return world; } @@ -139,9 +140,11 @@ public class BukkitWorldManager implements WorldManager, Listener { } @Override - public void loadWorld(net.momirealms.craftengine.core.world.World world) { + public CEWorld loadWorld(net.momirealms.craftengine.core.world.World world) { UUID uuid = world.uuid(); - if (this.worlds.containsKey(uuid)) return; + if (this.worlds.containsKey(uuid)) { + return this.worlds.get(uuid); + } CEWorld ceWorld = new BukkitCEWorld(world, this.storageAdaptor); this.worlds.put(uuid, ceWorld); this.resetWorldArray(); @@ -150,6 +153,7 @@ public class BukkitWorldManager implements WorldManager, Listener { handleChunkLoad(ceWorld, chunk, false); } ceWorld.setTicking(true); + return ceWorld; } @Override diff --git a/common-files/src/main/resources/config.yml b/common-files/src/main/resources/config.yml index 9aebfa866..a0f63e04d 100644 --- a/common-files/src/main/resources/config.yml +++ b/common-files/src/main/resources/config.yml @@ -99,7 +99,7 @@ resource-pack: fix-atlas: true # Optimize your resource pack by reducing its size without any quality loss. optimization: - enable: true + enable: false # .png texture: enable: true diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index 95a78f5c3..d61ec2f8f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -1613,7 +1613,7 @@ public abstract class AbstractPackManager implements PackManager { JsonObject textures = sourceModelJson.get("textures").getAsJsonObject(); for (Map.Entry entry : textures.entrySet()) { String value = entry.getValue().getAsString(); - if (value.charAt(0) == '#') continue; + if (value.isEmpty() || value.charAt(0) == '#') continue; Key textureResourceLocation = Key.from(value); imageToModels.put(textureResourceLocation, sourceModelLocation); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/WorldManager.java b/core/src/main/java/net/momirealms/craftengine/core/world/WorldManager.java index d6a746cbd..c20304252 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/WorldManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/WorldManager.java @@ -15,7 +15,7 @@ public interface WorldManager extends Manageable { CEWorld[] getWorlds(); - void loadWorld(World world); + CEWorld loadWorld(World world); void loadWorld(CEWorld world);