Compiling

This commit is contained in:
cyberpwn 2021-08-22 03:04:30 -04:00
parent beb80f0422
commit 5bf6687f1f
25 changed files with 434 additions and 16 deletions

View File

@ -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);
}

View File

@ -32,6 +32,9 @@ public class CommandIrisStudio extends MortarCommand {
@Command
private CommandIrisStudioExecute execute;
@Command
private CommandIrisStudioCompile compile;
@Command
private CommandIrisStudioOpen open;

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
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<String> 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]";
}
}

View File

@ -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<Job> jobs = new KList<Job>();
KList<File> files = new KList<File>();
KList<File> objects = new KList<File>();
files(getPath(), files);
filesObjects(getPath(), objects);
jobs.add(new ParallelQueueJob<File>() {
@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<File>() {
@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<File> 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<File> 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);
}
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -237,7 +237,7 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData> {
}
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<BlockData> {
}
public boolean can(Material m) {
return B.isSolid(m) && !m.equals(Material.BEDROCK);
return m.isSolid() && !m.equals(Material.BEDROCK);
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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) {
}
}

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
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<T> extends QueueJob<T> {
@Override
public void execute() {
while (queue.isNotEmpty()) {
BurstExecutor b = MultiBurst.burst.burst(queue.size());
KList<T> q = queue.copy();
queue.clear();
for(T i : q)
{
b.queue(() -> {
execute(i);
completeWork();
});
}
b.complete();
}
}
}

View File

@ -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<T> implements Job {
private final KList<T> queue;
private int totalWork;
private int completed;
final KList<T> 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<T> f) {
public QueueJob queue(KList<T> f) {
queue.addAll(f);
totalWork += f.size();
return this;
}
public abstract void execute(T t);
@ -54,7 +59,7 @@ public abstract class QueueJob<T> implements Job {
@Override
public void completeWork() {
completed++;
completed.incrementAndGet();
}
@Override
@ -64,6 +69,6 @@ public abstract class QueueJob<T> implements Job {
@Override
public int getWorkCompleted() {
return completed;
return completed.get();
}
}