diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java
index e21764a34..46b66ae70 100644
--- a/src/main/java/com/volmit/iris/Iris.java
+++ b/src/main/java/com/volmit/iris/Iris.java
@@ -18,7 +18,6 @@
package com.volmit.iris;
-import com.google.gson.Gson;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.command.CommandIris;
import com.volmit.iris.core.command.PermissionIris;
@@ -32,6 +31,7 @@ import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.core.service.StudioSVC;
import com.volmit.iris.engine.object.biome.IrisBiome;
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
+import com.volmit.iris.engine.object.block.IrisBlockData;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.engine.object.compat.IrisCompat;
import com.volmit.iris.engine.object.dimensional.IrisDimension;
@@ -49,7 +49,6 @@ import com.volmit.iris.util.io.InstanceState;
import com.volmit.iris.util.io.JarScanner;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.math.RNG;
-import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.parallel.MultiBurst;
import com.volmit.iris.util.plugin.*;
import com.volmit.iris.util.reflect.ShadeFix;
@@ -117,12 +116,10 @@ public class Iris extends VolmitPlugin implements Listener {
sender.setTag(getTag());
instance = this;
compat = IrisCompat.configured(getDataFile("compat.json"));
-
linkMultiverseCore = new MultiverseCoreLink();
linkOraxen = new OraxenLink();
linkMythicMobs = new MythicMobsLink();
configWatcher = new FileWatcher(getDataFile("settings.json"));
-
services.values().forEach(IrisService::onEnable);
services.values().forEach(this::registerListener);
}
diff --git a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudio.java b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudio.java
index 993cdf13f..ada87b74f 100644
--- a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudio.java
+++ b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudio.java
@@ -32,6 +32,9 @@ public class CommandIrisStudio extends MortarCommand {
@Command
private CommandIrisStudioExecute execute;
+ @Command
+ private CommandIrisStudioCompile compile;
+
@Command
private CommandIrisStudioOpen open;
diff --git a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioCompile.java b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioCompile.java
new file mode 100644
index 000000000..6aacda65a
--- /dev/null
+++ b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioCompile.java
@@ -0,0 +1,68 @@
+/*
+ * Iris is a World Generator for Minecraft Bukkit Servers
+ * Copyright (c) 2021 Arcane Arts (Volmit Software)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.volmit.iris.core.command.studio;
+
+import com.volmit.iris.Iris;
+import com.volmit.iris.core.IrisSettings;
+import com.volmit.iris.core.project.IrisProject;
+import com.volmit.iris.core.service.ConversionSVC;
+import com.volmit.iris.core.service.StudioSVC;
+import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.plugin.MortarCommand;
+import com.volmit.iris.util.plugin.VolmitSender;
+import com.volmit.iris.util.scheduling.jobs.Job;
+import com.volmit.iris.util.scheduling.jobs.JobCollection;
+
+public class CommandIrisStudioCompile extends MortarCommand {
+ public CommandIrisStudioCompile() {
+ super("compile");
+ requiresPermission(Iris.perm.studio);
+ setDescription("Compiles a pack for speed");
+ setCategory("Studio");
+ }
+
+ @Override
+ public void addTabOptions(VolmitSender sender, String[] args, KList list) {
+
+ }
+
+ @Override
+ public boolean handle(VolmitSender sender, String[] args) {
+ if (!IrisSettings.get().isStudio()) {
+ sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
+ return true;
+ }
+
+ if(args.length == 0)
+ {
+ sender.sendMessage(getArgsUsage());
+ return true;
+ }
+
+ IrisProject project = new IrisProject(Iris.instance.getDataFolder(StudioSVC.WORKSPACE_NAME, args[0]));
+ project.compile(sender);
+
+ return true;
+ }
+
+ @Override
+ protected String getArgsUsage() {
+ return "[project]";
+ }
+}
diff --git a/src/main/java/com/volmit/iris/core/project/IrisProject.java b/src/main/java/com/volmit/iris/core/project/IrisProject.java
index bc4564a3b..875175bdc 100644
--- a/src/main/java/com/volmit/iris/core/project/IrisProject.java
+++ b/src/main/java/com/volmit/iris/core/project/IrisProject.java
@@ -22,6 +22,7 @@ import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.project.loader.IrisData;
+import com.volmit.iris.core.project.loader.IrisRegistrant;
import com.volmit.iris.core.project.loader.ResourceLoader;
import com.volmit.iris.core.tools.IrisToolbelt;
import com.volmit.iris.engine.object.biome.IrisBiome;
@@ -30,6 +31,7 @@ import com.volmit.iris.engine.object.dimensional.IrisDimension;
import com.volmit.iris.engine.object.entity.IrisEntity;
import com.volmit.iris.engine.object.loot.IrisLootTable;
import com.volmit.iris.engine.object.noise.IrisGenerator;
+import com.volmit.iris.engine.object.objects.IrisObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.regional.IrisRegion;
import com.volmit.iris.engine.object.spawners.IrisSpawner;
@@ -38,6 +40,7 @@ import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.exceptions.IrisException;
+import com.volmit.iris.util.format.C;
import com.volmit.iris.util.format.Form;
import com.volmit.iris.util.io.IO;
import com.volmit.iris.util.json.JSONArray;
@@ -48,6 +51,10 @@ import com.volmit.iris.util.scheduling.ChronoLatch;
import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.O;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
+import com.volmit.iris.util.scheduling.jobs.Job;
+import com.volmit.iris.util.scheduling.jobs.JobCollection;
+import com.volmit.iris.util.scheduling.jobs.ParallelQueueJob;
+import com.volmit.iris.util.scheduling.jobs.QueueJob;
import lombok.Data;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
@@ -443,7 +450,6 @@ public class IrisProject {
return null;
}
-
public static int clean(VolmitSender s, File clean) {
int c = 0;
if (clean.isDirectory()) {
@@ -499,4 +505,131 @@ public class IrisProject {
}
}
}
+
+ public void compile(VolmitSender sender) {
+ IrisData data = IrisData.get(getPath());
+ KList jobs = new KList();
+ KList files = new KList();
+ KList objects = new KList();
+ files(getPath(), files);
+ filesObjects(getPath(), objects);
+
+ jobs.add(new ParallelQueueJob() {
+ @Override
+ public void execute(File f) {
+ try {
+ JSONObject p = new JSONObject(IO.readAll(f));
+ fixBlocks(p);
+ scanForErrors(data, f, p, sender);
+ IO.writeAll(f, p.toString(4));
+
+ } catch (Throwable e) {
+ sender.sendMessage(C.RED + "JSON Error "+ f.getPath() + ": " + e.getMessage());
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "JSON";
+ }
+ }.queue(files));
+
+ jobs.add(new ParallelQueueJob() {
+ @Override
+ public void execute(File f) {
+ try {
+ IrisObject o = new IrisObject(0,0,0);
+ o.read(f);
+
+ if(o.getBlocks().isEmpty())
+ {
+ sender.sendMessage(C.RED + "IOB " + f.getPath() + " has 0 blocks!");
+ }
+
+ if(o.getW() == 0 || o.getH() == 0 || o.getD() == 0)
+ {
+ sender.sendMessage(C.RED + "IOB " + f.getPath() + " is not 3D!");
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "IOB";
+ }
+ }.queue(objects));
+ new JobCollection("Compile", jobs).execute(sender);
+ }
+
+ private void scanForErrors(IrisData data, File f, JSONObject p, VolmitSender sender) {
+ String key = data.toLoadKey(f);
+ ResourceLoader> loader = data.getTypedLoaderFor(f);
+
+ if(loader == null)
+ {
+ sender.sendMessage("Can't find loader for " + f.getPath());
+ return;
+ }
+
+ IrisRegistrant load = loader.load(key);
+ load.scanForErrors(p, sender);
+ }
+
+ public void files(File clean, KList files) {
+ if (clean.isDirectory()) {
+ for (File i : clean.listFiles()) {
+ files(i, files);
+ }
+ } else if (clean.getName().endsWith(".json")) {
+ try {
+ files.add(clean);
+ } catch (Throwable e) {
+ Iris.reportError(e);
+ }
+ }
+ }
+
+ public void filesObjects(File clean, KList files) {
+ if (clean.isDirectory()) {
+ for (File i : clean.listFiles()) {
+ filesObjects(i, files);
+ }
+ } else if (clean.getName().endsWith(".iob")) {
+ try {
+ files.add(clean);
+ } catch (Throwable e) {
+ Iris.reportError(e);
+ }
+ }
+ }
+
+ private void fixBlocks(JSONObject obj) {
+ for (String i : obj.keySet()) {
+ Object o = obj.get(i);
+
+ if (i.equals("block") && o instanceof String && !o.toString().trim().isEmpty() && !o.toString().contains(":")) {
+ obj.put(i, "minecraft:" + o);
+ }
+
+ if (o instanceof JSONObject) {
+ fixBlocks((JSONObject) o);
+ } else if (o instanceof JSONArray) {
+ fixBlocks((JSONArray) o);
+ }
+ }
+ }
+
+ private void fixBlocks(JSONArray obj) {
+ for (int i = 0; i < obj.length(); i++) {
+ Object o = obj.get(i);
+
+ if (o instanceof JSONObject) {
+ fixBlocks((JSONObject) o);
+ } else if (o instanceof JSONArray) {
+ fixBlocks((JSONArray) o);
+ }
+ }
+ }
}
diff --git a/src/main/java/com/volmit/iris/core/project/loader/IrisData.java b/src/main/java/com/volmit/iris/core/project/loader/IrisData.java
index dbb52eb4d..518a151ab 100644
--- a/src/main/java/com/volmit/iris/core/project/loader/IrisData.java
+++ b/src/main/java/com/volmit/iris/core/project/loader/IrisData.java
@@ -19,6 +19,7 @@
package com.volmit.iris.core.project.loader;
import com.volmit.iris.Iris;
+import com.volmit.iris.core.service.StudioSVC;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.biome.IrisBiome;
import com.volmit.iris.engine.object.block.IrisBlockData;
@@ -43,8 +44,9 @@ import com.volmit.iris.util.math.RNG;
import lombok.Data;
import java.io.File;
-import java.util.Objects;
+import java.util.*;
import java.util.function.Function;
+import java.util.stream.Collectors;
@Data
public class IrisData {
@@ -89,6 +91,23 @@ public class IrisData {
dataLoaders.v().forEach(IrisData::cleanupEngine);
}
+ public ResourceLoader> getTypedLoaderFor(File f) {
+ String[] k = f.getPath().split("\\Q"+File.separator+"\\E");
+
+ for(String i : k)
+ {
+ for(ResourceLoader> j : loaders.values())
+ {
+ if(j.getFolderName().equals(i))
+ {
+ return j;
+ }
+ }
+ }
+
+ return null;
+ }
+
public void cleanupEngine()
{
if(engine != null && engine.isClosed())
@@ -311,4 +330,39 @@ public class IrisData {
return null;
}
+
+ public String toLoadKey(File f) {
+ if(f.getPath().startsWith(getDataFolder().getPath()))
+ {
+ String[] full = f.getPath().split("\\Q" + File.separator + "\\E");
+ String[] df = getDataFolder().getPath().split("\\Q" + File.separator + "\\E");
+ String g = "";
+ boolean m = true;
+ for(int i = 0; i < full.length; i++)
+ {
+ if(i >= df.length)
+ {
+ if(m)
+ {
+ m = false;
+ continue;
+ }
+
+ g += "/" + full[i];
+ }
+ }
+
+ String ff = g.toString().substring(1).split("\\Q.\\E")[0];
+ return ff;
+ }
+
+ else
+ {
+ Iris.error("Forign file from loader " + f.getPath() + " (loader realm: " + getDataFolder().getPath() + ")");
+ }
+
+ Iris.error("Failed to load " + f.getPath() + " (loader realm: " + getDataFolder().getPath() + ")");
+
+ return null;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/volmit/iris/core/project/loader/IrisRegistrant.java b/src/main/java/com/volmit/iris/core/project/loader/IrisRegistrant.java
index c457f19b4..40072e565 100644
--- a/src/main/java/com/volmit/iris/core/project/loader/IrisRegistrant.java
+++ b/src/main/java/com/volmit/iris/core/project/loader/IrisRegistrant.java
@@ -24,6 +24,8 @@ import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
import com.volmit.iris.engine.object.common.IrisScript;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.Data;
import java.awt.*;
@@ -55,4 +57,6 @@ public abstract class IrisRegistrant {
return getLoadFile();
}
+
+ public abstract void scanForErrors(JSONObject p, VolmitSender sender);
}
diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java
index 302752a9a..a4d6517f2 100644
--- a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java
+++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java
@@ -237,7 +237,7 @@ public class IrisCaveModifier extends EngineAssignedModifier {
}
public boolean canAir(Material m, BlockData caveFluid) {
- return (B.isSolid(m) ||
+ return (m.isSolid() ||
(B.isDecorant(m.createBlockData())) || m.equals(Material.AIR)
|| m.equals(caveFluid.getMaterial()) ||
m.equals(B.getMaterial("CAVE_AIR")))
@@ -249,6 +249,6 @@ public class IrisCaveModifier extends EngineAssignedModifier {
}
public boolean can(Material m) {
- return B.isSolid(m) && !m.equals(Material.BEDROCK);
+ return m.isSolid() && !m.equals(Material.BEDROCK);
}
}
diff --git a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java
index 4994393f9..e086f36cd 100644
--- a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java
+++ b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java
@@ -48,8 +48,10 @@ import com.volmit.iris.util.data.B;
import com.volmit.iris.util.data.DataProvider;
import com.volmit.iris.util.data.VanillaBiomeMap;
import com.volmit.iris.util.inventorygui.RandomColor;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -696,4 +698,9 @@ public class IrisBiome extends IrisRegistrant implements IRare {
public String getTypeName() {
return "Biome";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/block/IrisBlockData.java b/src/main/java/com/volmit/iris/engine/object/block/IrisBlockData.java
index 693f5811e..df29b7a01 100644
--- a/src/main/java/com/volmit/iris/engine/object/block/IrisBlockData.java
+++ b/src/main/java/com/volmit/iris/engine/object/block/IrisBlockData.java
@@ -26,6 +26,8 @@ import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.data.B;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -216,4 +218,9 @@ public class IrisBlockData extends IrisRegistrant {
public String getTypeName() {
return "Block";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/cave/IrisCave.java b/src/main/java/com/volmit/iris/engine/object/cave/IrisCave.java
index 740933cac..13483cd7d 100644
--- a/src/main/java/com/volmit/iris/engine/object/cave/IrisCave.java
+++ b/src/main/java/com/volmit/iris/engine/object/cave/IrisCave.java
@@ -24,11 +24,13 @@ import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.noise.IrisWorm;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.data.B;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.Worm;
import com.volmit.iris.util.noise.Worm3;
import com.volmit.iris.util.noise.WormIterator3;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -56,4 +58,9 @@ public class IrisCave extends IrisRegistrant {
public String getTypeName() {
return "Cave";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/common/IrisScript.java b/src/main/java/com/volmit/iris/engine/object/common/IrisScript.java
index 413b488e9..0ad77ac6b 100644
--- a/src/main/java/com/volmit/iris/engine/object/common/IrisScript.java
+++ b/src/main/java/com/volmit/iris/engine/object/common/IrisScript.java
@@ -19,6 +19,8 @@
package com.volmit.iris.engine.object.common;
import com.volmit.iris.core.project.loader.IrisRegistrant;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -48,4 +50,9 @@ public class IrisScript extends IrisRegistrant {
public String toString() {
return source;
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java
index 6b9af843a..0c9aa95eb 100644
--- a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java
+++ b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java
@@ -50,9 +50,11 @@ import com.volmit.iris.engine.object.villager.IrisVillagerOverride;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.data.DataProvider;
import com.volmit.iris.util.io.IO;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.Position2;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -543,4 +545,9 @@ public class IrisDimension extends IrisRegistrant {
public String getTypeName() {
return "Dimension";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/entity/IrisEntity.java b/src/main/java/com/volmit/iris/engine/object/entity/IrisEntity.java
index e9d10dd5f..b78044a1c 100644
--- a/src/main/java/com/volmit/iris/engine/object/entity/IrisEntity.java
+++ b/src/main/java/com/volmit/iris/engine/object/entity/IrisEntity.java
@@ -32,7 +32,9 @@ import com.volmit.iris.engine.object.meta.IrisEffect;
import com.volmit.iris.engine.object.spawners.IrisSurface;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.format.C;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
import lombok.AllArgsConstructor;
@@ -380,4 +382,9 @@ public class IrisEntity extends IrisRegistrant {
public String getTypeName() {
return "Entity";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPiece.java b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPiece.java
index 87e9e2526..054db8418 100644
--- a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPiece.java
+++ b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPiece.java
@@ -30,6 +30,8 @@ import com.volmit.iris.engine.object.objects.IrisObject;
import com.volmit.iris.engine.object.objects.IrisObjectPlacement;
import com.volmit.iris.engine.object.objects.ObjectPlaceMode;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -136,4 +138,9 @@ public class IrisJigsawPiece extends IrisRegistrant {
public String getTypeName() {
return "Jigsaw Piece";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPool.java b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPool.java
index 35316d0ea..8dd1a8aeb 100644
--- a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPool.java
+++ b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawPool.java
@@ -24,6 +24,8 @@ import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -54,4 +56,9 @@ public class IrisJigsawPool extends IrisRegistrant {
public String getTypeName() {
return "Jigsaw Pool";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawStructure.java b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawStructure.java
index af36ce9fa..c786948ca 100644
--- a/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawStructure.java
+++ b/src/main/java/com/volmit/iris/engine/object/jigsaw/IrisJigsawStructure.java
@@ -24,6 +24,8 @@ import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.feature.IrisFeature;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -144,4 +146,9 @@ public class IrisJigsawStructure extends IrisRegistrant {
public String getTypeName() {
return "Jigsaw Structure";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/loot/IrisLootTable.java b/src/main/java/com/volmit/iris/engine/object/loot/IrisLootTable.java
index 2f6a2656e..221781d44 100644
--- a/src/main/java/com/volmit/iris/engine/object/loot/IrisLootTable.java
+++ b/src/main/java/com/volmit/iris/engine/object/loot/IrisLootTable.java
@@ -25,7 +25,9 @@ import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.meta.InventorySlotType;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -96,4 +98,9 @@ public class IrisLootTable extends IrisRegistrant {
public String getTypeName() {
return "Loot";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/mods/IrisMod.java b/src/main/java/com/volmit/iris/engine/object/mods/IrisMod.java
index 0dc83583e..19d4d4476 100644
--- a/src/main/java/com/volmit/iris/engine/object/mods/IrisMod.java
+++ b/src/main/java/com/volmit/iris/engine/object/mods/IrisMod.java
@@ -25,6 +25,8 @@ import com.volmit.iris.engine.object.objects.IrisObject;
import com.volmit.iris.engine.object.objects.IrisObjectReplace;
import com.volmit.iris.engine.object.regional.IrisRegion;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -113,4 +115,9 @@ public class IrisMod extends IrisRegistrant {
public String getTypeName() {
return "Mod";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/noise/IrisExpression.java b/src/main/java/com/volmit/iris/engine/object/noise/IrisExpression.java
index 578070b1d..977cf1e4d 100644
--- a/src/main/java/com/volmit/iris/engine/object/noise/IrisExpression.java
+++ b/src/main/java/com/volmit/iris/engine/object/noise/IrisExpression.java
@@ -28,7 +28,9 @@ import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.stream.interpolation.Interpolated;
import lombok.AllArgsConstructor;
@@ -128,4 +130,9 @@ public class IrisExpression extends IrisRegistrant {
public String getTypeName() {
return "Expression";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/noise/IrisGenerator.java b/src/main/java/com/volmit/iris/engine/object/noise/IrisGenerator.java
index 6a1c0d12c..f61c171db 100644
--- a/src/main/java/com/volmit/iris/engine/object/noise/IrisGenerator.java
+++ b/src/main/java/com/volmit/iris/engine/object/noise/IrisGenerator.java
@@ -26,8 +26,10 @@ import com.volmit.iris.engine.object.common.IRare;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.context.IrisContext;
import com.volmit.iris.util.interpolation.IrisInterpolation;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CellGenerator;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -295,4 +297,9 @@ public class IrisGenerator extends IrisRegistrant {
public String getTypeName() {
return "Generator";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java
index d485d3aaf..8c6ade3d5 100644
--- a/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java
+++ b/src/main/java/com/volmit/iris/engine/object/objects/IrisObject.java
@@ -31,10 +31,12 @@ import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.data.B;
import com.volmit.iris.util.interpolation.IrisInterpolation;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.AxisAlignedBB;
import com.volmit.iris.util.math.BlockPosition;
import com.volmit.iris.util.math.Position2;
import com.volmit.iris.util.math.RNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.scheduling.IrisLock;
import lombok.EqualsAndHashCode;
import lombok.Getter;
@@ -994,4 +996,9 @@ public class IrisObject extends IrisRegistrant {
public String getTypeName() {
return "Object";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/regional/IrisRegion.java b/src/main/java/com/volmit/iris/engine/object/regional/IrisRegion.java
index c24ea2ab8..728d99c80 100644
--- a/src/main/java/com/volmit/iris/engine/object/regional/IrisRegion.java
+++ b/src/main/java/com/volmit/iris/engine/object/regional/IrisRegion.java
@@ -44,8 +44,10 @@ import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.data.DataProvider;
import com.volmit.iris.util.data.VanillaBiomeMap;
import com.volmit.iris.util.inventorygui.RandomColor;
+import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -572,4 +574,9 @@ public class IrisRegion extends IrisRegistrant implements IRare {
public String getTypeName() {
return "Region";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/engine/object/spawners/IrisSpawner.java b/src/main/java/com/volmit/iris/engine/object/spawners/IrisSpawner.java
index ece3c420c..2a0e98687 100644
--- a/src/main/java/com/volmit/iris/engine/object/spawners/IrisSpawner.java
+++ b/src/main/java/com/volmit/iris/engine/object/spawners/IrisSpawner.java
@@ -28,6 +28,8 @@ import com.volmit.iris.engine.object.basic.IrisWeather;
import com.volmit.iris.engine.object.biome.IrisBiome;
import com.volmit.iris.engine.object.entity.IrisEntitySpawn;
import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.json.JSONObject;
+import com.volmit.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -106,4 +108,9 @@ public class IrisSpawner extends IrisRegistrant {
public String getTypeName() {
return "Spawner";
}
+
+ @Override
+ public void scanForErrors(JSONObject p, VolmitSender sender) {
+
+ }
}
diff --git a/src/main/java/com/volmit/iris/util/scheduling/jobs/ParallelQueueJob.java b/src/main/java/com/volmit/iris/util/scheduling/jobs/ParallelQueueJob.java
new file mode 100644
index 000000000..579b5303d
--- /dev/null
+++ b/src/main/java/com/volmit/iris/util/scheduling/jobs/ParallelQueueJob.java
@@ -0,0 +1,42 @@
+/*
+ * Iris is a World Generator for Minecraft Bukkit Servers
+ * Copyright (c) 2021 Arcane Arts (Volmit Software)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.volmit.iris.util.scheduling.jobs;
+
+import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.parallel.BurstExecutor;
+import com.volmit.iris.util.parallel.MultiBurst;
+
+public abstract class ParallelQueueJob extends QueueJob {
+ @Override
+ public void execute() {
+ while (queue.isNotEmpty()) {
+ BurstExecutor b = MultiBurst.burst.burst(queue.size());
+ KList q = queue.copy();
+ queue.clear();
+ for(T i : q)
+ {
+ b.queue(() -> {
+ execute(i);
+ completeWork();
+ });
+ }
+ b.complete();
+ }
+ }
+}
diff --git a/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java b/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java
index 4ee511545..6d0338b7e 100644
--- a/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java
+++ b/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java
@@ -18,27 +18,32 @@
package com.volmit.iris.util.scheduling.jobs;
+import com.sun.jna.platform.unix.X11;
import com.volmit.iris.util.collection.KList;
+import java.util.concurrent.atomic.AtomicInteger;
+
public abstract class QueueJob implements Job {
- private final KList queue;
- private int totalWork;
- private int completed;
+ final KList queue;
+ protected int totalWork;
+ private AtomicInteger completed;
public QueueJob() {
totalWork = 0;
- completed = 0;
+ completed = new AtomicInteger(0);
queue = new KList<>();
}
- public void queue(T t) {
+ public QueueJob queue(T t) {
queue.add(t);
totalWork++;
+ return this;
}
- public void queue(KList f) {
+ public QueueJob queue(KList f) {
queue.addAll(f);
totalWork += f.size();
+ return this;
}
public abstract void execute(T t);
@@ -54,7 +59,7 @@ public abstract class QueueJob implements Job {
@Override
public void completeWork() {
- completed++;
+ completed.incrementAndGet();
}
@Override
@@ -64,6 +69,6 @@ public abstract class QueueJob implements Job {
@Override
public int getWorkCompleted() {
- return completed;
+ return completed.get();
}
}