From fba9c17e3f0381cb61f0cf8008335e3d7e7b4a9d Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 28 Jul 2025 15:08:07 +0200 Subject: [PATCH] fix not using relocated bukkit.yml correctly and remove duplicate code --- core/src/main/java/com/volmit/iris/Iris.java | 42 ++------- .../java/com/volmit/iris/core/IrisWorlds.java | 2 +- .../iris/core/commands/CommandIris.java | 93 +------------------ .../volmit/iris/core/tools/IrisCreator.java | 3 +- .../iris/util/misc/ServerProperties.java | 31 +++++-- 5 files changed, 39 insertions(+), 132 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 194abbab4..f17fec0be 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -22,6 +22,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.IrisWorlds; import com.volmit.iris.core.ServerConfigurator; import com.volmit.iris.core.link.IrisPapiExpansion; import com.volmit.iris.core.link.MultiverseCoreLink; @@ -65,9 +66,6 @@ import org.bukkit.*; import org.bukkit.block.data.BlockData; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.*; import org.bukkit.generator.BiomeProvider; @@ -81,6 +79,7 @@ import java.io.*; import java.lang.annotation.Annotation; import java.net.URL; import java.util.*; +import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -466,42 +465,19 @@ public class Iris extends VolmitPlugin implements Listener { IrisSafeguard.splash(false); autoStartStudio(); - checkForBukkitWorlds(); + checkForBukkitWorlds(s -> true); IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName()); IrisToolbelt.retainMantleDataForSlice(BlockData.class.getCanonicalName()); }); } - private void checkForBukkitWorlds() { - FileConfiguration fc = new YamlConfiguration(); + public void checkForBukkitWorlds(Predicate filter) { try { - fc.load(new File("bukkit.yml")); - ConfigurationSection section = fc.getConfigurationSection("worlds"); - if (section == null) { - return; - } - - for (String s : section.getKeys(false)) { - ConfigurationSection entry = section.getConfigurationSection(s); - if (!entry.contains("generator", true)) { - continue; - } - - String generator = entry.getString("generator"); - if (generator.startsWith("Iris:")) { - generator = generator.split("\\Q:\\E")[1]; - } else if (generator.equalsIgnoreCase("Iris")) { - generator = IrisSettings.get().getGenerator().getDefaultWorldType(); - } else { - continue; - } - - if (Bukkit.getWorld(s) != null) - continue; - - Iris.info("Loading World: %s | Generator: %s", s, generator); - + IrisWorlds.readBukkitWorlds().forEach((s, generator) -> { try { + if (Bukkit.getWorld(s) != null || !filter.test(s)) return; + + Iris.info("Loading World: %s | Generator: %s", s, generator); var gen = getDefaultWorldGenerator(s, generator); var dim = loadDimension(s, generator); assert dim != null && gen != null; @@ -516,7 +492,7 @@ public class Iris extends VolmitPlugin implements Listener { Iris.error("Failed to load world " + s + "!"); e.printStackTrace(); } - } + }); } catch (Throwable e) { e.printStackTrace(); reportError(e); 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 a46be559e..69721ced2 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisWorlds.java +++ b/core/src/main/java/com/volmit/iris/core/IrisWorlds.java @@ -101,7 +101,7 @@ public class IrisWorlds { } } - private static KMap readBukkitWorlds() { + public static KMap readBukkitWorlds() { var bukkit = YamlConfiguration.loadConfiguration(ServerProperties.BUKKIT_YML); var worlds = bukkit.getConfigurationSection("worlds"); if (worlds == null) return new KMap<>(); diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 77f794781..89fa7cf5f 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -20,15 +20,12 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.pregenerator.ChunkUpdater; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; -import com.volmit.iris.engine.object.IrisWorld; -import com.volmit.iris.engine.platform.BukkitChunkGenerator; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; @@ -44,21 +41,17 @@ import com.volmit.iris.util.scheduling.J; import lombok.SneakyThrows; import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.WorldCreator; import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import org.bukkit.generator.ChunkGenerator; import org.bukkit.scheduler.BukkitRunnable; import java.io.*; -import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import static com.volmit.iris.Iris.service; import static com.volmit.iris.core.service.EditSVC.deletingWorld; +import static com.volmit.iris.util.misc.ServerProperties.BUKKIT_YML; import static org.bukkit.Bukkit.getServer; @Decree(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") @@ -504,7 +497,6 @@ public class CommandIris implements DecreeExecutor { return; } - File BUKKIT_YML = new File("bukkit.yml"); String pathtodim = world + File.separator +"iris"+File.separator +"pack"+File.separator +"dimensions"+File.separator; File directory = new File(Bukkit.getWorldContainer(), pathtodim); @@ -542,7 +534,7 @@ public class CommandIris implements DecreeExecutor { return; } } - checkForBukkitWorlds(world); + Iris.instance.checkForBukkitWorlds(world::equals); sender().sendMessage(C.GREEN + world + " loaded successfully."); } @Decree(description = "Evacuate an iris world", origin = DecreeOrigin.PLAYER, sync = true) @@ -563,85 +555,4 @@ public class CommandIris implements DecreeExecutor { File worldDirectory = new File(worldContainer, worldName); return worldDirectory.exists() && worldDirectory.isDirectory(); } - private void checkForBukkitWorlds(String world) { - FileConfiguration fc = new YamlConfiguration(); - try { - fc.load(new File("bukkit.yml")); - ConfigurationSection section = fc.getConfigurationSection("worlds"); - if (section == null) { - return; - } - - List worldsToLoad = Collections.singletonList(world); - - for (String s : section.getKeys(false)) { - if (!worldsToLoad.contains(s)) { - continue; - } - ConfigurationSection entry = section.getConfigurationSection(s); - if (!entry.contains("generator", true)) { - continue; - } - String generator = entry.getString("generator"); - if (generator.startsWith("Iris:")) { - generator = generator.split("\\Q:\\E")[1]; - } else if (generator.equalsIgnoreCase("Iris")) { - generator = IrisSettings.get().getGenerator().getDefaultWorldType(); - } else { - continue; - } - Iris.info("2 World: %s | Generator: %s", s, generator); - if (Bukkit.getWorlds().stream().anyMatch(w -> w.getName().equals(s))) { - continue; - } - Iris.info(C.LIGHT_PURPLE + "Preparing Spawn for " + s + "' using Iris:" + generator + "..."); - WorldCreator c = new WorldCreator(s) - .generator(getDefaultWorldGenerator(s, generator)) - .environment(IrisData.loadAnyDimension(generator).getEnvironment()); - INMS.get().createWorld(c); - Iris.info(C.LIGHT_PURPLE + "Loaded " + s + "!"); - } - } catch (Throwable e) { - e.printStackTrace(); - } - } - public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { - Iris.debug("Default World Generator Called for " + worldName + " using ID: " + id); - IrisDimension dim; - if (id == null || id.isEmpty()) { - dim = IrisData.loadAnyDimension(IrisSettings.get().getGenerator().getDefaultWorldType()); - } else { - dim = IrisData.loadAnyDimension(id); - } - Iris.debug("Generator ID: " + id + " requested by bukkit/plugin"); - - if (dim == null) { - Iris.warn("Unable to find dimension type " + id + " Looking for online packs..."); - - service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender()), id, true); - dim = IrisData.loadAnyDimension(id); - - if (dim == null) { - throw new RuntimeException("Can't find dimension " + id + "!"); - } else { - Iris.info("Resolved missing dimension, proceeding with generation."); - } - } - Iris.debug("Assuming IrisDimension: " + dim.getName()); - IrisWorld w = IrisWorld.builder() - .name(worldName) - .seed(1337) - .environment(dim.getEnvironment()) - .worldFolder(new File(Bukkit.getWorldContainer(), worldName)) - .minHeight(dim.getMinHeight()) - .maxHeight(dim.getMaxHeight()) - .build(); - Iris.debug("Generator Config: " + w.toString()); - File ff = new File(w.worldFolder(), "iris/pack"); - if (!ff.exists() || ff.listFiles().length == 0) { - ff.mkdirs(); - service(StudioSVC.class).installIntoWorld(sender, dim.getLoadKey(), ff.getParentFile()); - } - return new BukkitChunkGenerator(w, false, ff, dim.getLoadKey()); - } } diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java index fac42b051..f10cbdfd2 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisCreator.java @@ -46,13 +46,14 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; +import static com.volmit.iris.util.misc.ServerProperties.BUKKIT_YML; + /** * Makes it a lot easier to setup an engine, world, studio or whatever */ @Data @Accessors(fluent = true, chain = true) public class IrisCreator { - private static final File BUKKIT_YML = new File("bukkit.yml"); /** * Specify an area to pregenerate during creation */ diff --git a/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java b/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java index ecfc4f518..fb9a31c73 100644 --- a/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java +++ b/core/src/main/java/com/volmit/iris/util/misc/ServerProperties.java @@ -1,5 +1,8 @@ package com.volmit.iris.util.misc; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -22,12 +25,13 @@ public class ServerProperties { String bukkitYml = "bukkit.yml"; String levelName = null; - for (int i = 0; i < args.length - 1; i++) { - switch (args[i]) { - case "-c", "--config" -> propertiesPath = args[i + 1]; - case "-b", "--bukkit-settings" -> bukkitYml = args[i + 1]; - case "-w", "--level-name", "--world" -> levelName = args[i + 1]; - } + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + String next = i < args.length - 1 ? args[i + 1] : null; + + propertiesPath = parse(arg, next, propertiesPath, "-c", "--config"); + bukkitYml = parse(arg, next, bukkitYml, "-b", "--bukkit-settings"); + levelName = parse(arg, next, levelName, "-w", "--level-name", "--world"); } SERVER_PROPERTIES = new File(propertiesPath); @@ -41,4 +45,19 @@ public class ServerProperties { if (levelName != null) LEVEL_NAME = levelName; else LEVEL_NAME = DATA.getProperty("level-name", "world"); } + + private static String parse( + @NotNull String current, + @Nullable String next, + String fallback, + @NotNull String @NotNull ... keys + ) { + for (String k : keys) { + if (current.equals(k) && next != null) + return next; + if (current.startsWith(k + "=") && current.length() > k.length() + 1) + return current.substring(k.length() + 1); + } + return fallback; + } }