From c4539441a0c087473f565a62fa809a39b503d6e4 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sun, 27 Jul 2025 23:22:40 +0200 Subject: [PATCH] fix datapack generation ignoring worlds when updating from <3.7.0 --- .../java/com/volmit/iris/core/IrisWorlds.java | 43 ++++++++++++++++++- .../volmit/iris/core/ServerConfigurator.java | 5 +-- .../iris/core/safeguard/ServerBootSFG.java | 31 +++---------- 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/IrisWorlds.java b/core/src/main/java/com/volmit/iris/core/IrisWorlds.java index 9c8302102..2e30bf117 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisWorlds.java +++ b/core/src/main/java/com/volmit/iris/core/IrisWorlds.java @@ -4,10 +4,14 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.volmit.iris.Iris; +import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.data.cache.AtomicCache; +import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.misc.ServerProperties; import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; @@ -25,6 +29,7 @@ public class IrisWorlds { private IrisWorlds(KMap worlds) { this.worlds = worlds; + readBukkitWorlds().forEach(this::put); save(); } @@ -56,8 +61,19 @@ public class IrisWorlds { save(); } - public Stream getFolders() { - return worlds.keySet().stream().map(k -> new File(Bukkit.getWorldContainer(), k)); + public Stream getPacks() { + return getDimensions() + .map(IrisDimension::getLoader) + .filter(Objects::nonNull); + } + + public Stream getDimensions() { + return readBukkitWorlds() + .put(worlds) + .entrySet() + .stream() + .map(entry -> Iris.loadDimension(entry.getKey(), entry.getValue())) + .filter(Objects::nonNull); } public void clean() { @@ -76,4 +92,27 @@ public class IrisWorlds { Iris.reportError(e); } } + + private static KMap readBukkitWorlds() { + var bukkit = YamlConfiguration.loadConfiguration(ServerProperties.BUKKIT_YML); + var worlds = bukkit.getConfigurationSection("worlds"); + if (worlds == null) return new KMap<>(); + + var result = new KMap(); + for (String world : worlds.getKeys(false)) { + var gen = worlds.getString(world + ".generator"); + if (gen == null) continue; + + String loadKey; + if (gen.equalsIgnoreCase("iris")) { + loadKey = IrisSettings.get().getGenerator().getDefaultWorldType(); + } else if (gen.startsWith("Iris:")) { + loadKey = gen.substring(5); + } else continue; + + result.put(world, loadKey); + } + + return result; + } } diff --git a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java index d249bfbcd..51ab974c5 100644 --- a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -237,14 +237,13 @@ public class ServerConfigurator { } public static Stream allPacks() { - return Stream.concat(listFiles(Iris.instance.getDataFolder("packs")), - IrisWorlds.get().getFolders().map(w -> new File(w, "iris/pack"))) + return Stream.concat(listFiles(Iris.instance.getDataFolder("packs")) .filter(File::isDirectory) .filter( base -> { var content = new File(base, "dimensions").listFiles(); return content != null && content.length > 0; }) - .map(IrisData::get); + .map(IrisData::get), IrisWorlds.get().getPacks()); } @Nullable diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java index 8ec35899f..50de28b29 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/ServerBootSFG.java @@ -1,15 +1,13 @@ package com.volmit.iris.core.safeguard; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.IrisWorlds; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.v1X.NMSBinding1X; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.util.agent.Agent; import com.volmit.iris.util.collection.KSet; -import com.volmit.iris.util.misc.ServerProperties; import org.bukkit.Bukkit; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import javax.tools.JavaCompiler; @@ -21,6 +19,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.*; +import java.util.stream.Collectors; import static com.volmit.iris.Iris.getJavaVersion; import static com.volmit.iris.core.safeguard.IrisSafeguard.*; @@ -187,27 +186,9 @@ public class ServerBootSFG { } private static KSet getDimensionTypes() { - var bukkit = YamlConfiguration.loadConfiguration(ServerProperties.BUKKIT_YML); - var worlds = bukkit.getConfigurationSection("worlds"); - if (worlds == null) return new KSet<>(); - - var types = new KSet(); - for (String world : worlds.getKeys(false)) { - var gen = worlds.getString(world + ".generator"); - if (gen == null) continue; - - String loadKey; - if (gen.equalsIgnoreCase("iris")) { - loadKey = IrisSettings.get().getGenerator().getDefaultWorldType(); - } else if (gen.startsWith("Iris:")) { - loadKey = gen.substring(5); - } else continue; - - IrisDimension dimension = Iris.loadDimension(world, loadKey); - if (dimension == null) continue; - types.add(dimension.getDimensionTypeKey()); - } - - return types; + return IrisWorlds.get() + .getDimensions() + .map(IrisDimension::getDimensionTypeKey) + .collect(Collectors.toCollection(KSet::new)); } }