diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 7b15ac9ac..8e8fe659b 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -469,7 +469,6 @@ public class Iris extends VolmitPlugin implements Listener { IrisSafeguard.instance.IrisSafeguardSystem(); getSender().setTag(getTag()); INMS.get().injectBukkit(); - ServerConfigurator.disableDataPack(); if (IrisSafeguard.instance.unstablemode && !IrisSafeguard.instance.acceptUnstable) IrisSafeguard.instance.earlySplash(); compat = IrisCompat.configured(getDataFile("compat.json")); linkMultiverseCore = new MultiverseCoreLink(); @@ -477,6 +476,7 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); + ServerConfigurator.setupDataPack(); installMainDimension(); if (!IrisSafeguard.instance.acceptUnstable && IrisSafeguard.instance.unstablemode) { Iris.info(C.RED + "World loading has been disabled until the incompatibility is resolved."); diff --git a/core/src/main/java/com/volmit/iris/core/IrisSettings.java b/core/src/main/java/com/volmit/iris/core/IrisSettings.java index de38220fb..79cbdc2b3 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -29,6 +29,7 @@ import lombok.Data; import java.io.File; import java.io.IOException; +import java.util.List; @SuppressWarnings("SynchronizeOnNonFinalField") @Data @@ -166,6 +167,7 @@ public class IrisSettings { public int spins = 7; public int spinb = 8; public String cartographerMessage = "Iris does not allow cartographers in its world due to crashes."; + public String[] dataPackPaths = new String[0]; @SuppressWarnings("BooleanMethodIsAlwaysInverted") 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 d82637495..85571b03a 100644 --- a/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/core/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -19,18 +19,20 @@ package com.volmit.iris.core; import com.volmit.iris.Iris; +import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; +import com.volmit.iris.engine.object.IrisBiome; +import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.scheduling.J; -import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.util.Properties; +import java.util.Arrays; +import java.util.Objects; import java.util.concurrent.TimeUnit; public class ServerConfigurator { @@ -73,33 +75,50 @@ public class ServerConfigurator { } } - private static KList getDataPacksFolder() { - if (!IrisSettings.get().getGeneral().forceMainWorld.isEmpty()) { - return new KList().qadd(new File(Bukkit.getWorldContainer(), IrisSettings.get().getGeneral().forceMainWorld + "/datapacks")); - } - KList worlds = new KList<>(); - Bukkit.getServer().getWorlds().forEach(w -> worlds.add(new File(w.getWorldFolder(), "datapacks"))); - if (worlds.isEmpty()) { - worlds.add(new File(getMainWorldFolder(), "datapacks")); - } - return worlds; + private static File[] getDataPacksFolder() { + KList files = new KList<>(); + files.add(new File("plugins/Iris/datapack")); + Arrays.stream(IrisSettings.get().getGeneral().dataPackPaths) + .map(File::new) + .forEach(files::add); + return files.toArray(File[]::new); } - private static File getMainWorldFolder() { - try { - Properties prop = new Properties(); - prop.load(new FileInputStream("server.properties")); - String world = prop.getProperty("level-name", "world"); - return new File(Bukkit.getWorldContainer(), world); - } catch (Exception e) { - e.printStackTrace(); + public static void setupDataPack() { + File packs = new File("plugins/Iris/packs"); + if (!packs.exists()) { + disableDataPack(); + return; } - return null; + for (File i : packs.listFiles()) { + if (!i.isDirectory()) continue; + + Iris.verbose("Checking Pack: " + i.getPath()); + IrisData data = IrisData.get(i); + File dims = new File(i, "dimensions"); + + if (dims.exists()) { + for (File j : dims.listFiles((f, s) -> s.endsWith(".json"))) { + if (!j.isFile()) continue; + IrisDimension dim = data.getDimensionLoader().load(j.getName().split("\\Q.\\E")[0]); + if (dim == null) continue; + + dim.getAllBiomes(() -> data) + .stream() + .map(IrisBiome::getCustomDerivitives) + .filter(Objects::nonNull) + .flatMap(KList::stream) + .forEach(b -> INMS.get().registerBiome(dim.getLoadKey(), b, false)); + } + } + } + dumpDataPack(); } public static void dumpDataPack() { - if (!INMS.get().dumpRegistry(getDataPacksFolder().toArray(File[]::new))) + if (!INMS.get().dumpRegistry(getDataPacksFolder())) { return; + } disableDataPack(); } diff --git a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java index 286f13925..b7e645677 100644 --- a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java +++ b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java @@ -759,6 +759,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java index aa73a211e..bd85fbb62 100644 --- a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java +++ b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java @@ -802,6 +802,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java index 3e8412daf..750fe00e9 100644 --- a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java +++ b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java @@ -806,6 +806,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java index 2edebd934..5083844f4 100644 --- a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java +++ b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java @@ -804,6 +804,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java index de79b2d5c..a76543d66 100644 --- a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java +++ b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java @@ -810,6 +810,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index c5d55614e..db52a6c01 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -817,6 +817,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false); diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index de979f56c..bf94819e6 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -799,6 +799,7 @@ public class NMSBinding implements INMSBinding { return registry .registryKeySet() .stream() + .filter(id -> !id.location().getNamespace().equals("minecraft")) .collect(Collectors.toMap(ResourceKey::location, id -> encode(codec, registry.get(id)).orElse(JsonNull.INSTANCE))); } finally { changedRegistries.put(registryKey, false);