This commit is contained in:
Brian Neumann-Fopiano
2026-02-17 02:54:34 -05:00
parent 43a65135b1
commit cf64fbb730
256 changed files with 820 additions and 3192 deletions

View File

@@ -527,6 +527,7 @@ public class Iris extends VolmitPlugin implements Listener {
public void checkForBukkitWorlds(Predicate<String> filter) {
try {
KList<String> deferredStartupWorlds = new KList<>();
IrisWorlds.readBukkitWorlds().forEach((s, generator) -> {
try {
if (Bukkit.getWorld(s) != null || !filter.test(s)) return;
@@ -543,16 +544,27 @@ public class Iris extends VolmitPlugin implements Listener {
INMS.get().createWorld(c);
Iris.info(C.LIGHT_PURPLE + "Loaded " + s + "!");
} catch (Throwable e) {
Iris.error("Failed to load world " + s + "!");
if (containsCreateWorldUnsupportedOperation(e)) {
if (J.isFolia()) {
if (!deferredStartupWorlds.contains(s)) {
deferredStartupWorlds.add(s);
}
return;
}
Iris.error("Failed to load world " + s + "!");
Iris.error("This server denied Bukkit.createWorld for \"" + s + "\" at the current startup phase.");
Iris.error("Ensure Iris is loaded at STARTUP and restart after staging worlds in bukkit.yml.");
reportError(e);
return;
}
Iris.error("Failed to load world " + s + "!");
e.printStackTrace();
}
});
if (!deferredStartupWorlds.isEmpty()) {
Iris.warn("World init delayed on Folia until server world-init phase for staged Iris worlds: %s", String.join(", ", deferredStartupWorlds));
Iris.warn("Bukkit.createWorld is intentionally unavailable in this startup phase. Worlds remain staged in bukkit.yml.");
}
} catch (Throwable e) {
e.printStackTrace();
reportError(e);

View File

@@ -31,6 +31,7 @@ import art.arcane.iris.core.service.IrisEngineSVC;
import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.core.tools.IrisPackBenchmarking;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.IrisEngineMantle;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisPosition;
@@ -41,19 +42,19 @@ import art.arcane.volmlib.util.collection.KSet;
import art.arcane.iris.util.context.IrisContext;
import art.arcane.iris.engine.object.IrisJigsawStructurePlacement;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.decree.specialhandlers.NullableDimensionHandler;
import art.arcane.iris.util.director.specialhandlers.NullableDimensionHandler;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.CountingDataInputStream;
import art.arcane.volmlib.util.io.IO;
import art.arcane.iris.util.mantle.TectonicPlate;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.mantle.runtime.TectonicPlate;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.matter.Matter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.nbt.mca.MCAFile;
import art.arcane.iris.util.nbt.mca.MCAUtil;
import art.arcane.iris.util.parallel.MultiBurst;
@@ -82,7 +83,7 @@ import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
@Director(name = "Developer", origin = DirectorOrigin.BOTH, description = "Iris World Manager", aliases = {"dev"})
public class CommandDeveloper implements DecreeExecutor {
public class CommandDeveloper implements DirectorExecutor {
private static final long DELETE_CHUNK_HEARTBEAT_MS = 5000L;
private static final int DELETE_CHUNK_MAX_ATTEMPTS = 2;
private static final int DELETE_CHUNK_STACK_LIMIT = 20;
@@ -313,7 +314,7 @@ public class CommandDeveloper implements DecreeExecutor {
if (plate) {
try (var in = CountingDataInputStream.wrap(new BufferedInputStream(new FileInputStream(base)))) {
new TectonicPlate(1088, in, true);
TectonicPlate.read(1088, in, true, IrisEngineMantle.createRuntimeDataAdapter(), IrisEngineMantle.createRuntimeHooks());
} catch (Throwable e) {
e.printStackTrace();
}
@@ -561,7 +562,7 @@ public class CommandDeveloper implements DecreeExecutor {
return;
}
art.arcane.iris.util.mantle.Mantle mantle = access.getEngine().getMantle().getMantle();
art.arcane.volmlib.util.mantle.runtime.Mantle mantle = access.getEngine().getMantle().getMantle();
VolmitSender sender = sender();
sender.sendMessage(C.GREEN + "Deleting blocks in " + C.GOLD + totalChunks + C.GREEN + " chunk(s) with " + C.GOLD + threads + C.GREEN + " worker(s).");
@@ -634,7 +635,7 @@ public class CommandDeveloper implements DecreeExecutor {
private void runDeleteChunkOrchestrator(
VolmitSender sender,
World world,
art.arcane.iris.util.mantle.Mantle mantle,
art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
List<Position2> targets,
int threadCount,
String runId,
@@ -682,7 +683,7 @@ public class CommandDeveloper implements DecreeExecutor {
private DeleteChunkSummary executeDeleteChunkQueue(
World world,
art.arcane.iris.util.mantle.Mantle mantle,
art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
List<Position2> targets,
ThreadPoolExecutor pool,
Set<Thread> workerThreads,
@@ -822,7 +823,7 @@ public class CommandDeveloper implements DecreeExecutor {
private DeleteChunkResult runDeleteChunkTask(
DeleteChunkTask task,
World world,
art.arcane.iris.util.mantle.Mantle mantle,
art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
ConcurrentMap<String, DeleteChunkActiveTask> activeTasks
) {
String worker = Thread.currentThread().getName();
@@ -1150,7 +1151,7 @@ public class CommandDeveloper implements DecreeExecutor {
service.submit(() -> {
try {
CountingDataInputStream raw = CountingDataInputStream.wrap(new FileInputStream(file));
TectonicPlate plate = new TectonicPlate(height, raw, versioned);
TectonicPlate<Matter> plate = TectonicPlate.read(height, raw, versioned, IrisEngineMantle.createRuntimeDataAdapter(), IrisEngineMantle.createRuntimeHooks());
raw.close();
double d1 = 0;
@@ -1169,7 +1170,7 @@ public class CommandDeveloper implements DecreeExecutor {
size = tmp.length();
start = System.currentTimeMillis();
CountingDataInputStream din = createInput(tmp, algorithm);
new TectonicPlate(height, din, true);
TectonicPlate.read(height, din, true, IrisEngineMantle.createRuntimeDataAdapter(), IrisEngineMantle.createRuntimeHooks());
din.close();
d2 += System.currentTimeMillis() - start;
tmp.delete();

View File

@@ -21,7 +21,7 @@ package art.arcane.iris.core.commands;
import art.arcane.iris.Iris;
import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.engine.object.*;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
@@ -31,7 +31,7 @@ import java.awt.*;
@Director(name = "edit", origin = DirectorOrigin.PLAYER, studio = true, description = "Edit something")
public class CommandEdit implements DecreeExecutor {
public class CommandEdit implements DirectorExecutor {
private boolean noStudio() {
if (!sender().isPlayer()) {

View File

@@ -22,15 +22,15 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.decree.specialhandlers.ObjectHandler;
import art.arcane.iris.util.director.specialhandlers.ObjectHandler;
import art.arcane.iris.util.format.C;
@Director(name = "find", origin = DirectorOrigin.PLAYER, description = "Iris Find commands", aliases = "goto")
public class CommandFind implements DecreeExecutor {
public class CommandFind implements DirectorExecutor {
@Director(description = "Find a biome")
public void biome(
@Param(description = "The biome to look for")

View File

@@ -29,24 +29,25 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.decree.DecreeContext;
import art.arcane.iris.util.director.DirectorContext;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException;
import art.arcane.iris.util.decree.specialhandlers.NullablePlayerHandler;
import art.arcane.iris.util.director.specialhandlers.NullablePlayerHandler;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.io.IO;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.iris.util.parallel.SyncExecutor;
import art.arcane.iris.util.misc.ServerProperties;
import art.arcane.iris.util.misc.RegenRuntime;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.iris.util.matter.TileWrapper;
import art.arcane.iris.util.plugin.VolmitSender;
import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.matter.Matter;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.World;
@@ -89,7 +90,7 @@ import static art.arcane.iris.util.misc.ServerProperties.BUKKIT_YML;
import static org.bukkit.Bukkit.getServer;
@Director(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command")
public class CommandIris implements DecreeExecutor {
public class CommandIris implements DirectorExecutor {
private static final long REGEN_HEARTBEAT_MS = 5000L;
private static final int REGEN_MAX_ATTEMPTS = 2;
private static final int REGEN_STACK_LIMIT = 20;
@@ -777,7 +778,7 @@ public class CommandIris implements DecreeExecutor {
try {
setRegenSetupPhase(setupPhase, setupPhaseSince, "touch-context", world, runId);
updateRegenSetupDisplay(display, mode, "Touching command context", 1, 6);
DecreeContext.touch(sender);
DirectorContext.touch(sender);
if (mode.usesMaintenance()) {
setRegenSetupPhase(setupPhase, setupPhaseSince, "enter-maintenance", world, runId);
updateRegenSetupDisplay(display, mode, "Entering maintenance", 2, 6);
@@ -886,7 +887,7 @@ public class CommandIris implements DecreeExecutor {
if (!displayTerminal) {
closeRegenDisplay(display, REGEN_DISPLAY_FINAL_TICKS);
}
DecreeContext.remove();
DirectorContext.remove();
Iris.info("Regen run closed: id=" + runId + " world=" + world.getName() + " totalMs=" + (System.currentTimeMillis() - runStart));
}
}
@@ -1179,7 +1180,7 @@ public class CommandIris implements DecreeExecutor {
double overallProgress = ((safePassIndex - 1) + passProgress) / safePassCount;
int percent = (int) Math.round(overallProgress * 100.0D);
String bar = buildRegenProgressBar(overallProgress);
String statusColor = failed ? C.RED : terminal ? C.GREEN : stalled ? C.RED : C.AQUA;
C statusColor = failed ? C.RED : terminal ? C.GREEN : stalled ? C.RED : C.AQUA;
String statusLabel = failed ? "FAILED" : terminal ? "DONE" : stalled ? "STALLED" : "RUN";
BarColor bossColor = failed ? BarColor.RED : terminal ? BarColor.GREEN : stalled ? BarColor.RED : BarColor.BLUE;
String title = C.GOLD + "Regen " + mode.id()
@@ -1202,7 +1203,8 @@ public class CommandIris implements DecreeExecutor {
}
if (sender.isPlayer()) {
J.runEntity(sender.player(), () -> sender.sendAction(action));
String actionText = action;
J.runEntity(sender.player(), () -> sender.sendAction(actionText));
}
return now;
}
@@ -1464,7 +1466,7 @@ public class CommandIris implements DecreeExecutor {
}
private RegenMantleChunkState inspectRegenMantleChunk(PlatformChunkGenerator platform, int chunkX, int chunkZ) {
MantleChunk chunk = platform.getEngine().getMantle().getMantle().getChunk(chunkX, chunkZ).use();
MantleChunk<Matter> chunk = platform.getEngine().getMantle().getMantle().getChunk(chunkX, chunkZ).use();
try {
AtomicInteger blockDataEntries = new AtomicInteger();
AtomicInteger stringEntries = new AtomicInteger();
@@ -1528,7 +1530,7 @@ public class CommandIris implements DecreeExecutor {
boolean scheduled = J.runRegion(world, chunkX, chunkZ, () -> {
try {
Chunk chunk = world.getChunkAt(chunkX, chunkZ);
MantleChunk mantleChunk = platform.getEngine().getMantle().getMantle().getChunk(chunkX, chunkZ).use();
MantleChunk<Matter> mantleChunk = platform.getEngine().getMantle().getMantle().getChunk(chunkX, chunkZ).use();
try {
mantleChunk.iterate(String.class, (x, y, z, value) -> {
if (value != null && !value.isEmpty() && value.indexOf('@') > 0) {
@@ -1705,7 +1707,7 @@ public class CommandIris implements DecreeExecutor {
long total = (long) (toX - fromX + 1) * (long) (toZ - fromZ + 1);
long started = System.currentTimeMillis();
int resetCount = 0;
art.arcane.iris.util.mantle.Mantle mantle = platform.getEngine().getMantle().getMantle();
art.arcane.volmlib.util.mantle.runtime.Mantle mantle = platform.getEngine().getMantle().getMantle();
AtomicReference<Thread> deleteThread = new AtomicReference<>();
ThreadFactory deleteFactory = runnable -> {
Thread thread = new Thread(runnable, "Iris-Regen-Reset-" + runId);

View File

@@ -27,11 +27,11 @@ import art.arcane.iris.engine.object.IrisJigsawPiece;
import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.decree.specialhandlers.ObjectHandler;
import art.arcane.iris.util.director.specialhandlers.ObjectHandler;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.RNG;
@@ -41,7 +41,7 @@ import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import java.io.File;
@Director(name = "jigsaw", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris jigsaw commands")
public class CommandJigsaw implements DecreeExecutor {
public class CommandJigsaw implements DirectorExecutor {
@Director(description = "Edit a jigsaw piece")
public void edit(
@Param(description = "The jigsaw piece to edit")

View File

@@ -24,11 +24,11 @@ import art.arcane.iris.core.gui.PregeneratorJob;
import art.arcane.iris.core.pregenerator.LazyPregenerator;
import art.arcane.iris.core.pregenerator.PregenTask;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.util.Vector;
@@ -37,7 +37,7 @@ import java.io.File;
import java.io.IOException;
@Director(name = "lazypregen", aliases = "lazy", description = "Pregenerate your Iris worlds!")
public class CommandLazyPregen implements DecreeExecutor {
public class CommandLazyPregen implements DirectorExecutor {
public String worldName;
@Director(description = "Pregenerate a world")
public void start(

View File

@@ -30,11 +30,11 @@ import art.arcane.iris.engine.object.*;
import art.arcane.volmlib.util.data.Cuboid;
import art.arcane.iris.util.data.IrisCustomData;
import art.arcane.iris.util.data.registry.Materials;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.decree.specialhandlers.ObjectHandler;
import art.arcane.iris.util.director.specialhandlers.ObjectHandler;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.math.Direction;
import art.arcane.volmlib.util.math.RNG;
@@ -50,7 +50,7 @@ import java.text.NumberFormat;
import java.util.*;
@Director(name = "object", aliases = "o", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris object manipulation")
public class CommandObject implements DecreeExecutor {
public class CommandObject implements DirectorExecutor {
private static final Set<Material> skipBlocks = Set.of(Materials.GRASS, Material.SNOW, Material.VINE, Material.TORCH, Material.DEAD_BUSH,
Material.POPPY, Material.DANDELION);

View File

@@ -22,16 +22,16 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.gui.PregeneratorJob;
import art.arcane.iris.core.pregenerator.PregenTask;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import org.bukkit.World;
import org.bukkit.util.Vector;
@Director(name = "pregen", aliases = "pregenerate", description = "Pregenerate your Iris worlds!")
public class CommandPregen implements DecreeExecutor {
public class CommandPregen implements DirectorExecutor {
@Director(description = "Pregenerate a world")
public void start(
@Param(description = "The radius of the pregen in blocks", aliases = "size")

View File

@@ -18,8 +18,8 @@
package art.arcane.iris.core.commands;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
public class CommandSettings implements DecreeExecutor {
public class CommandSettings implements DirectorExecutor {
}

View File

@@ -33,10 +33,10 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet;
import art.arcane.iris.util.decree.DecreeContext;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.decree.handlers.DimensionHandler;
import art.arcane.iris.util.decree.specialhandlers.NullableDimensionHandler;
import art.arcane.iris.util.director.DirectorContext;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.iris.util.director.handlers.DimensionHandler;
import art.arcane.iris.util.director.specialhandlers.NullableDimensionHandler;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
@@ -48,9 +48,9 @@ import art.arcane.iris.util.interpolation.InterpolationMethod;
import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.json.JSONArray;
import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.iris.util.noise.CNG;
@@ -84,7 +84,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
@Director(name = "studio", aliases = {"std", "s"}, description = "Studio Commands", studio = true)
public class CommandStudio implements DecreeExecutor {
public class CommandStudio implements DirectorExecutor {
private CommandFind find;
private CommandEdit edit;
//private CommandDeepSearch deepSearch;
@@ -188,7 +188,7 @@ public class CommandStudio implements DecreeExecutor {
Thread orchestrator = new Thread(() -> {
PlatformChunkGenerator plat = IrisToolbelt.access(world);
Engine engine = plat.getEngine();
DecreeContext.touch(sender);
DirectorContext.touch(sender);
IrisToolbelt.beginWorldMaintenance(world, "studio-regen");
try (SyncExecutor executor = new SyncExecutor(20);
var service = Executors.newFixedThreadPool(threadCount)
@@ -256,7 +256,7 @@ public class CommandStudio implements DecreeExecutor {
e.printStackTrace();
} finally {
IrisToolbelt.endWorldMaintenance(world, "studio-regen");
DecreeContext.remove();
DirectorContext.remove();
}
}, orchestratorName);
orchestrator.setDaemon(true);

View File

@@ -22,7 +22,7 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.pregenerator.LazyPregenerator;
import art.arcane.iris.core.pregenerator.TurboPregenerator;
import art.arcane.iris.core.pregenerator.TurboPregenerator;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C;
@@ -34,7 +34,7 @@ import java.io.File;
import java.io.IOException;
@Director(name = "turbopregen", aliases = "turbo", description = "Pregenerate your Iris worlds!")
public class CommandTurboPregen implements DecreeExecutor {
public class CommandTurboPregen implements DirectorExecutor {
public String worldName;
@Director(description = "Pregenerate a world")
public void start(

View File

@@ -24,7 +24,7 @@ import org.bukkit.World;
import art.arcane.iris.Iris;
import art.arcane.iris.core.pregenerator.ChunkUpdater;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
@@ -32,7 +32,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
@Director(name = "updater", origin = DirectorOrigin.BOTH, description = "Iris World Updater")
public class CommandUpdater implements DecreeExecutor {
public class CommandUpdater implements DirectorExecutor {
private final Object lock = new Object();
private transient ChunkUpdater chunkUpdater;

View File

@@ -26,7 +26,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.util.data.B;
import art.arcane.iris.util.decree.DecreeExecutor;
import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param;
@@ -43,7 +43,7 @@ import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
@Director(name = "what", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris What?")
public class CommandWhat implements DecreeExecutor {
public class CommandWhat implements DirectorExecutor {
@Director(description = "What is in my hand?", origin = DirectorOrigin.PLAYER)
public void hand() {
try {

View File

@@ -29,9 +29,10 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.format.MemoryMonitor;
import art.arcane.volmlib.util.function.Consumer2;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J;
import org.bukkit.World;

View File

@@ -21,8 +21,7 @@ package art.arcane.iris.core.gui.components;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisBiomeGeneratorLink;
import art.arcane.iris.util.interpolation.IrisInterpolation;
import art.arcane.iris.util.interpolation.IrisInterpolation;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.function.BiFunction;

View File

@@ -27,7 +27,8 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.Vector3d;
import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer;
import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess;
@@ -109,7 +110,7 @@ public interface INMSBinding {
MCAPaletteAccess createPalette();
void injectBiomesFromMantle(Chunk e, Mantle mantle);
void injectBiomesFromMantle(Chunk e, Mantle<Matter> mantle);
ItemStack applyCustomNbt(ItemStack itemStack, KMap<String, Object> customNbt) throws IllegalArgumentException;

View File

@@ -29,7 +29,8 @@ import art.arcane.iris.core.nms.container.StructurePlacement;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.Vector3d;
import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer;
import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess;
@@ -87,7 +88,7 @@ public class NMSBinding1X implements INMSBinding {
@Override
public void injectBiomesFromMantle(Chunk e, Mantle mantle) {
public void injectBiomesFromMantle(Chunk e, Mantle<Matter> mantle) {
}

View File

@@ -8,7 +8,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RollingSequence;
import art.arcane.iris.util.plugin.chunk.TicketHolder;
import art.arcane.iris.util.profile.LoadBalancer;

View File

@@ -10,7 +10,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.volmlib.util.scheduling.ChronoLatch;

View File

@@ -24,9 +24,10 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KSet;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RollingSequence;
import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J;

View File

@@ -6,7 +6,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.volmlib.util.scheduling.ChronoLatch;

View File

@@ -20,7 +20,7 @@ package art.arcane.iris.core.pregenerator;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.Spiraled;
import art.arcane.volmlib.util.math.Spiraler;
import lombok.Builder;

View File

@@ -18,7 +18,8 @@
package art.arcane.iris.core.pregenerator;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
/**
* Represents something that is capable of generating in chunks or regions, or both

View File

@@ -8,7 +8,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.iris.util.parallel.BurstExecutor;

View File

@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import io.papermc.lib.PaperLib;
import org.bukkit.World;

View File

@@ -23,7 +23,8 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.scheduling.J;

View File

@@ -5,7 +5,8 @@ import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.pregenerator.cache.PregenCache;
import art.arcane.iris.core.service.GlobalCacheSVC;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import lombok.AllArgsConstructor;
@AllArgsConstructor

View File

@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
public class DummyPregenMethod implements PregeneratorMethod {
@Override

View File

@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import org.bukkit.World;
public class HybridPregenMethod implements PregeneratorMethod {

View File

@@ -24,7 +24,8 @@ import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.scheduling.J;
import org.bukkit.Bukkit;

View File

@@ -4,7 +4,7 @@ import art.arcane.iris.core.loader.IrisRegistrant;
import art.arcane.iris.core.scripting.func.UpdateExecutor;
import art.arcane.iris.core.scripting.kotlin.environment.IrisExecutionEnvironment;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import lombok.NonNull;
import org.bukkit.Chunk;
import org.bukkit.Location;
@@ -26,5 +26,5 @@ public interface EngineEnvironment extends PackEnvironment {
void preprocessObject(@NonNull String script, @NonNull IrisRegistrant object);
void updateChunk(@NonNull String script, @NonNull MantleChunk mantleChunk, @NonNull Chunk chunk, @NonNull UpdateExecutor executor);
}
void updateChunk(@NonNull String script, @NonNull MantleChunk<?> mantleChunk, @NonNull Chunk chunk, @NonNull UpdateExecutor executor);
}

View File

@@ -23,9 +23,9 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.commands.CommandIris;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.util.decree.DecreeContext;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.decree.DecreeSystem;
import art.arcane.iris.util.director.DirectorContext;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.director.DirectorSystem;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.plugin.IrisService;
import art.arcane.iris.util.plugin.VolmitSender;
@@ -100,14 +100,14 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
buildDirectorContexts(),
this::dispatchDirector,
this,
DecreeSystem.handlers
DirectorSystem.handlers
));
}
private DirectorContextRegistry buildDirectorContexts() {
DirectorContextRegistry contexts = new DirectorContextRegistry();
for (Map.Entry<Class<?>, DecreeContextHandler<?>> entry : DecreeContextHandler.contextHandlers.entrySet()) {
for (Map.Entry<Class<?>, DirectorContextHandler<?>> entry : DirectorContextHandler.contextHandlers.entrySet()) {
registerContextHandler(contexts, entry.getKey(), entry.getValue());
}
@@ -115,10 +115,10 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
}
@SuppressWarnings({"rawtypes", "unchecked"})
private void registerContextHandler(DirectorContextRegistry contexts, Class<?> type, DecreeContextHandler<?> handler) {
private void registerContextHandler(DirectorContextRegistry contexts, Class<?> type, DirectorContextHandler<?> handler) {
contexts.register((Class) type, (invocation, map) -> {
if (invocation.getSender() instanceof BukkitDirectorSender sender) {
return ((DecreeContextHandler) handler).handle(new VolmitSender(sender.sender()));
return ((DirectorContextHandler) handler).handle(new VolmitSender(sender.sender()));
}
return null;
@@ -136,13 +136,13 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
@Override
public void beforeInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) {
if (invocation.getSender() instanceof BukkitDirectorSender sender) {
DecreeContext.touch(new VolmitSender(sender.sender()));
DirectorContext.touch(new VolmitSender(sender.sender()));
}
}
@Override
public void afterInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) {
DecreeContext.remove();
DirectorContext.remove();
}
@Nullable
@@ -201,7 +201,7 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
}
VolmitSender volmitSender = new VolmitSender(sender);
volmitSender.sendDecreeHelp(request.get().command(), request.get().page());
volmitSender.sendDirectorHelp(request.get().command(), request.get().page());
return true;
}

View File

@@ -279,7 +279,7 @@ public class IrisEngineSVC implements IrisService {
if (engine == null
|| engine.isClosed()
|| engine.getMantle().getMantle().isClosed()
|| !engine.getMantle().getMantle().shouldReduce(engine))
|| !shouldReduce(engine))
return;
World engineWorld = engine.getWorld().realWorld();
if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) {
@@ -306,7 +306,7 @@ public class IrisEngineSVC implements IrisService {
if (engine == null
|| engine.isClosed()
|| engine.getMantle().getMantle().isClosed()
|| !engine.getMantle().getMantle().shouldReduce(engine))
|| !shouldReduce(engine))
return;
World engineWorld = engine.getWorld().realWorld();
if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) {
@@ -357,5 +357,9 @@ public class IrisEngineSVC implements IrisService {
if (closed) return null;
return access.getEngine();
}
private boolean shouldReduce(Engine engine) {
return !engine.isStudio() || IrisSettings.get().getPerformance().isTrimMantleInStudio();
}
}
}

View File

@@ -28,7 +28,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.data.Cuboid;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.matter.Matter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.matter.WorldMatter;
import art.arcane.iris.util.plugin.IrisService;
import art.arcane.iris.util.plugin.VolmitSender;

View File

@@ -47,8 +47,8 @@ import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterStructurePOI;
import art.arcane.iris.util.matter.slices.container.JigsawStructureContainer;
import art.arcane.volmlib.util.matter.MatterStructurePOI;
import art.arcane.volmlib.util.matter.slices.container.JigsawStructureContainer;
import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
@@ -236,7 +236,7 @@ public class IrisEngine implements Engine {
@Override
public IrisJigsawStructure getStructureAt(int x, int y, int z) {
var container = getMantle().getMantle().get(x, y, z, JigsawStructureContainer.class);
return container == null ? null : container.load(getData());
return container == null ? null : getData().getJigsawStructureLoader().load(container.getLoadKey());
}
private void warmupChunk(int x, int z) {

View File

@@ -18,6 +18,10 @@
package art.arcane.iris.engine;
import art.arcane.iris.Iris;
import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.EnginePanic;
import art.arcane.iris.core.nms.container.Pair;
import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.engine.framework.Engine;
@@ -29,11 +33,29 @@ import art.arcane.iris.engine.mantle.components.MantleJigsawComponent;
import art.arcane.iris.engine.mantle.components.MantleObjectComponent;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.mantle.io.Lz4IOWorkerCodecSupport;
import art.arcane.volmlib.util.mantle.runtime.IOWorker;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleDataAdapter;
import art.arcane.volmlib.util.mantle.runtime.MantleHooks;
import art.arcane.volmlib.util.mantle.runtime.TectonicPlate;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.matter.IrisMatterSupport;
import art.arcane.volmlib.util.matter.IrisMatter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterSlice;
import art.arcane.iris.util.parallel.HyperLock;
import art.arcane.iris.util.parallel.MultiBurst;
import lombok.*;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -44,7 +66,7 @@ import java.util.Set;
@ToString(exclude = "engine")
public class IrisEngineMantle implements EngineMantle {
private final Engine engine;
private final Mantle mantle;
private final Mantle<Matter> mantle;
@Getter(AccessLevel.NONE)
private final KMap<Integer, KList<MantleComponent>> components;
private final KMap<MantleFlag, MantleComponent> registeredComponents = new KMap<>();
@@ -55,7 +77,7 @@ public class IrisEngineMantle implements EngineMantle {
public IrisEngineMantle(Engine engine) {
this.engine = engine;
this.mantle = new Mantle(new File(engine.getWorld().worldFolder(), "mantle"), engine.getTarget().getHeight());
this.mantle = createMantle(engine);
components = new KMap<>();
registerComponent(new MantleCarvingComponent(this));
registerComponent(new MantleFluidBodyComponent(this));
@@ -147,4 +169,239 @@ public class IrisEngineMantle implements EngineMantle {
public MantleObjectComponent getObjectComponent() {
return object;
}
private static Mantle<Matter> createMantle(Engine engine) {
IrisMatterSupport.ensureRegistered();
File dataFolder = new File(engine.getWorld().worldFolder(), "mantle");
int worldHeight = engine.getTarget().getHeight();
MantleDataAdapter<Matter> adapter = createRuntimeDataAdapter();
MantleHooks hooks = createRuntimeHooks();
art.arcane.volmlib.util.mantle.Mantle.RegionIO<TectonicPlate<Matter>> regionIO =
createRegionIO(dataFolder, worldHeight, adapter, hooks);
return new Mantle<>(
dataFolder,
worldHeight,
Short.MAX_VALUE,
new HyperLock(),
MultiBurst.ioBurst,
regionIO,
adapter,
hooks
);
}
public static MantleDataAdapter<Matter> createRuntimeDataAdapter() {
return createDataAdapter();
}
public static MantleHooks createRuntimeHooks() {
return createHooks();
}
private static MantleDataAdapter<Matter> createDataAdapter() {
return new MantleDataAdapter<>() {
@Override
public Matter createSection() {
return new IrisMatter(16, 16, 16);
}
@Override
public Matter readSection(art.arcane.volmlib.util.io.CountingDataInputStream din) throws IOException {
return Matter.readDin(din);
}
@Override
public void writeSection(Matter section, java.io.DataOutputStream dos) throws IOException {
section.writeDos(dos);
}
@Override
public void trimSection(Matter section) {
section.trimSlices();
}
@Override
public boolean isSectionEmpty(Matter section) {
return section.getSliceMap().isEmpty();
}
@Override
public Class<?> classifyValue(Object value) {
if (value instanceof World) {
return World.class;
}
if (value instanceof BlockData) {
return BlockData.class;
}
if (value instanceof Entity) {
return Entity.class;
}
return value.getClass();
}
@Override
@SuppressWarnings("unchecked")
public <T> void set(Matter section, int x, int y, int z, Class<?> type, T value) {
MatterSlice<T> slice = (MatterSlice<T>) section.slice(type);
slice.set(x, y, z, value);
}
@Override
public <T> void remove(Matter section, int x, int y, int z, Class<T> type) {
MatterSlice<T> slice = section.slice(type);
slice.set(x, y, z, null);
}
@Override
public <T> T get(Matter section, int x, int y, int z, Class<T> type) {
MatterSlice<T> slice = section.slice(type);
return slice.get(x, y, z);
}
@Override
public <T> void iterate(Matter section, Class<T> type, art.arcane.volmlib.util.function.Consumer4<Integer, Integer, Integer, T> iterator) {
MatterSlice<T> slice = section.getSlice(type);
if (slice != null) {
slice.iterateSync(iterator);
}
}
@Override
public boolean hasSlice(Matter section, Class<?> type) {
return section.hasSlice(type);
}
@Override
public void deleteSlice(Matter section, Class<?> type) {
section.deleteSlice(type);
}
};
}
private static MantleHooks createHooks() {
return new MantleHooks() {
@Override
public void onBeforeReadSection(int index) {
Iris.addPanic("read.section", "Section[" + index + "]");
}
@Override
public void onReadSectionFailure(int index,
long start,
long end,
art.arcane.volmlib.util.io.CountingDataInputStream din,
IOException error) {
Iris.error("Failed to read chunk section, skipping it.");
Iris.addPanic("read.byte.range", start + " " + end);
Iris.addPanic("read.byte.current", din.count() + "");
Iris.reportError(error);
error.printStackTrace();
Iris.panic();
TectonicPlate.addError();
}
@Override
public void onBeforeReadChunk(int index) {
Iris.addPanic("read-chunk", "Chunk[" + index + "]");
}
@Override
public void onAfterReadChunk(int index) {
EnginePanic.saveLast();
}
@Override
public void onReadChunkFailure(int index,
long start,
long end,
art.arcane.volmlib.util.io.CountingDataInputStream din,
Throwable error) {
Iris.error("Failed to read chunk, creating a new chunk instead.");
Iris.addPanic("read.byte.range", start + " " + end);
Iris.addPanic("read.byte.current", din.count() + "");
Iris.reportError(error);
error.printStackTrace();
Iris.panic();
}
@Override
public boolean shouldRetainSlice(Class<?> sliceType) {
return IrisToolbelt.isRetainingMantleDataForSlice(sliceType.getCanonicalName());
}
@Override
public String formatDuration(double millis) {
return Form.duration(millis, 0);
}
@Override
public void onDebug(String message) {
Iris.debug(message);
}
@Override
public void onWarn(String message) {
Iris.warn(message);
}
@Override
public void onError(Throwable throwable) {
Iris.reportError(throwable);
}
};
}
private static art.arcane.volmlib.util.mantle.Mantle.RegionIO<TectonicPlate<Matter>> createRegionIO(File root,
int worldHeight,
MantleDataAdapter<Matter> adapter,
MantleHooks hooks) {
IOWorker<TectonicPlate<Matter>> worker = new IOWorker<>(
root,
new Lz4IOWorkerCodecSupport(),
128,
(name, millis) -> {
String threadName = Thread.currentThread().getName();
String message = "Acquired Channel for " + C.DARK_GREEN + name + C.RED + " in " + Form.duration(millis, 2)
+ C.GRAY + " thread=" + threadName;
if (millis >= 1000L) {
Iris.warn(message);
} else {
Iris.debug(message);
}
}
);
return new art.arcane.volmlib.util.mantle.Mantle.RegionIO<>() {
@Override
public TectonicPlate<Matter> read(String name) throws Exception {
PrecisionStopwatch stopwatch = PrecisionStopwatch.start();
try {
return worker.read(name, (regionName, in) ->
TectonicPlate.read(worldHeight, in, regionName.startsWith("pv."), adapter, hooks));
} finally {
if (TectonicPlate.hasError() && IrisSettings.get().getGeneral().isDumpMantleOnError()) {
File dump = Iris.instance.getDataFolder("dump", name + ".bin");
worker.dumpDecoded(name, dump.toPath());
} else {
Iris.debug("Read Tectonic Plate " + C.DARK_GREEN + name + C.RED + " in " + Form.duration(stopwatch.getMilliseconds(), 2));
}
}
}
@Override
public void write(String name, TectonicPlate<Matter> region) throws Exception {
PrecisionStopwatch stopwatch = PrecisionStopwatch.start();
worker.write(name, "iris", ".bin", region, TectonicPlate::write);
Iris.debug("Saved Tectonic Plate " + C.DARK_GREEN + name + C.RED + " in " + Form.duration(stopwatch.getMilliseconds(), 2));
}
@Override
public void close() throws Exception {
worker.close();
}
};
}
}

View File

@@ -33,11 +33,13 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet;
import art.arcane.volmlib.util.format.Form;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterMarker;
import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.plugin.Chunks;
@@ -245,7 +247,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() -> {
try {
Mantle mantle = getMantle();
Mantle<Matter> mantle = getMantle();
if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.DISCOVERED)) {
mantle.flag(chunkX, chunkZ, MantleFlag.DISCOVERED, true);
}
@@ -352,7 +354,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() -> {
boolean raised = false;
try {
Mantle mantle = getMantle();
Mantle<Matter> mantle = getMantle();
if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER)) {
mantle.flag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER, true);
raised = true;
@@ -680,7 +682,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
Chunk chunkRef = world.getChunkAt(chunkX, chunkZ);
var mantleChunk = getMantle().getChunk(chunkRef).use();
MantleChunk<Matter> mantleChunk = getMantle().getChunk(chunkRef).use();
try {
mantleChunk.raiseFlagUnchecked(MantleFlag.CUSTOM, () -> {
mantleChunk.iterate(Identifier.class, (x, y, z, v) -> {
@@ -731,7 +733,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
spawn(block, ss);
}
public Mantle getMantle() {
public Mantle<Matter> getMantle() {
return getEngine().getMantle().getMantle();
}

View File

@@ -27,8 +27,8 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterBiomeInject;
import art.arcane.iris.util.matter.slices.BiomeInjectMatter;
import art.arcane.volmlib.util.matter.MatterBiomeInject;
import art.arcane.volmlib.util.matter.slices.BiomeInjectMatter;
import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import org.bukkit.block.Biome;

View File

@@ -18,8 +18,9 @@
package art.arcane.iris.engine.framework;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import org.bukkit.Chunk;
import org.bukkit.block.data.BlockData;
@@ -29,5 +30,5 @@ public interface BlockUpdater {
void updateChunk(Chunk c);
void update(int x, int y, int z, Chunk c, MantleChunk mc, RNG rf);
void update(int x, int y, int z, Chunk c, MantleChunk<Matter> mc, RNG rf);
}

View File

@@ -49,16 +49,17 @@ import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.function.Function2;
import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.BlockPosition;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.volmlib.util.matter.MatterUpdate;
import art.arcane.iris.util.matter.TileWrapper;
import art.arcane.iris.util.matter.slices.container.JigsawPieceContainer;
import art.arcane.volmlib.util.matter.slices.container.JigsawPieceContainer;
import art.arcane.iris.util.parallel.BurstExecutor;
import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.reflect.W;
@@ -400,7 +401,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates
@Override
default void update(int x, int y, int z, Chunk c, MantleChunk mc, RNG rf) {
default void update(int x, int y, int z, Chunk c, MantleChunk<Matter> mc, RNG rf) {
Block block = c.getBlock(x, y, z);
BlockData data = block.getBlockData();
blockUpdatedMetric();
@@ -483,7 +484,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates
@Override
default KList<IrisLootTable> getLootTables(RNG rng, Block b) {
MantleChunk mc = getMantle().getMantle().getChunk(b.getChunk()).use();
MantleChunk<Matter> mc = getMantle().getMantle().getChunk(b.getChunk()).use();
try {
return getLootTables(rng, b, mc);
} finally {
@@ -492,7 +493,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
@BlockCoordinates
default KList<IrisLootTable> getLootTables(RNG rng, Block b, MantleChunk mc) {
default KList<IrisLootTable> getLootTables(RNG rng, Block b, MantleChunk<Matter> mc) {
int rx = b.getX();
int rz = b.getZ();
int ry = b.getY() - getWorld().minHeight();
@@ -822,7 +823,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
default PlacedObject getObjectPlacement(int x, int y, int z) {
MantleChunk chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use();
MantleChunk<Matter> chunk = getMantle().getMantle().getChunk(x >> 4, z >> 4).use();
try {
return getObjectPlacement(x, y, z, chunk);
} finally {
@@ -830,7 +831,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
}
default PlacedObject getObjectPlacement(int x, int y, int z, MantleChunk chunk) {
default PlacedObject getObjectPlacement(int x, int y, int z, MantleChunk<Matter> chunk) {
String objectAt = chunk.get(x & 15, y, z & 15, String.class);
if (objectAt == null || objectAt.isEmpty()) {
return null;
@@ -843,7 +844,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
JigsawPieceContainer container = chunk.get(x & 15, y, z & 15, JigsawPieceContainer.class);
if (container != null) {
IrisJigsawPiece piece = container.load(getData());
IrisJigsawPiece piece = getData().getJigsawPieceLoader().load(container.getLoadKey());
if (piece.getObject().equals(object))
return new PlacedObject(piece.getPlacementOptions(), getData().getObjectLoader().load(object), id, x, z);
}

View File

@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk;
public interface EngineActuator<O> extends EngineComponent {
@BlockCoordinates
void actuate(int x, int z, Hunk<O> output, boolean multicore, ChunkContext context);

View File

@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedActuator<T> extends EngineAssignedComponent implements EngineActuator<T> {
public EngineAssignedActuator(Engine engine, String name) {
super(engine, name);

View File

@@ -20,7 +20,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedBiModifier<A, B> extends EngineAssignedComponent implements EngineBiModifier<A, B> {
public EngineAssignedBiModifier(Engine engine, String name) {
super(engine, name);

View File

@@ -22,7 +22,6 @@ import art.arcane.iris.Iris;
import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent implements EngineModifier<T> {
public EngineAssignedModifier(Engine engine, String name) {
super(engine, name);

View File

@@ -22,7 +22,7 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.events.IrisEngineHotloadEvent;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.format.C;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.iris.util.plugin.VolmitSender;
import art.arcane.iris.util.scheduling.J;
import org.bukkit.*;

View File

@@ -20,7 +20,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.hunk.Hunk;
public interface EngineBiModifier<A, B> extends EngineComponent {
void modify(int x, int z, Hunk<A> a, Hunk<B> b);
}

View File

@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk;
public interface EngineModifier<T> extends EngineComponent {
@BlockCoordinates
void modify(int x, int z, Hunk<T> t, boolean multicore, ChunkContext context);

View File

@@ -30,7 +30,7 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.M;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.parallel.BurstExecutor;

View File

@@ -4,7 +4,7 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.iris.util.parallel.BurstExecutor;
import art.arcane.iris.util.parallel.MultiBurst;

View File

@@ -25,12 +25,13 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.placer.WorldObjectPlacer;
import art.arcane.iris.engine.object.*;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.slices.container.JigsawPieceContainer;
import art.arcane.iris.util.matter.slices.container.JigsawStructureContainer;
import art.arcane.iris.util.matter.slices.container.JigsawStructuresContainer;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.slices.container.JigsawPieceContainer;
import art.arcane.volmlib.util.matter.slices.container.JigsawStructureContainer;
import art.arcane.volmlib.util.matter.slices.container.JigsawStructuresContainer;
import art.arcane.iris.util.scheduling.J;
import lombok.Data;
import org.bukkit.Axis;
@@ -78,7 +79,7 @@ public class PlannedStructure {
}
}
public boolean place(IObjectPlacer placer, Mantle e, Engine eng) {
public boolean place(IObjectPlacer placer, Mantle<Matter> e, Engine eng) {
IrisObjectPlacement options = new IrisObjectPlacement();
options.setRotation(IrisObjectRotation.of(0,0,0));
int startHeight = pieces.get(0).getPosition().getY();
@@ -93,13 +94,13 @@ public class PlannedStructure {
Position2 regionPos = new Position2(chunkPos.getX() >> 5, chunkPos.getZ() >> 5);
JigsawStructuresContainer slice = e.get(regionPos.getX(), 0, regionPos.getZ(), JigsawStructuresContainer.class);
if (slice == null) slice = new JigsawStructuresContainer();
slice.add(structure, chunkPos);
slice.add(structure.getLoadKey(), chunkPos);
e.set(regionPos.getX(), 0, regionPos.getZ(), slice);
}
return placed;
}
public boolean place(PlannedPiece i, int startHeight, IrisObjectPlacement o, IObjectPlacer placer, Mantle e, Engine eng) {
public boolean place(PlannedPiece i, int startHeight, IrisObjectPlacement o, IObjectPlacer placer, Mantle<Matter> e, Engine eng) {
IrisObjectPlacement options = o;
if (i.getPiece().getPlacementOptions() != null) {
@@ -150,8 +151,8 @@ public class PlannedStructure {
}
int id = rng.i(0, Integer.MAX_VALUE);
JigsawPieceContainer piece = JigsawPieceContainer.toContainer(i.getPiece());
JigsawStructureContainer structure = JigsawStructureContainer.toContainer(getStructure());
JigsawPieceContainer piece = new JigsawPieceContainer(i.getPiece().getLoadKey());
JigsawStructureContainer structure = new JigsawStructureContainer(getStructure().getLoadKey());
i.setRealPositions(xx, height, zz, placer);
return v.place(xx, height, zz, placer, options, rng, (b, data) -> {
placer.setData(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id);

View File

@@ -33,14 +33,14 @@ import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.volmlib.util.matter.MatterFluidBody;
import art.arcane.volmlib.util.matter.MatterMarker;
import art.arcane.iris.util.matter.*;
import art.arcane.iris.util.matter.slices.UpdateMatter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.slices.UpdateMatter;
import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.scheduling.J;
import org.bukkit.World;
@@ -54,7 +54,7 @@ import java.util.concurrent.TimeUnit;
public interface EngineMantle extends MatterGenerator {
BlockData AIR = B.get("AIR");
Mantle getMantle();
Mantle<Matter> getMantle();
Engine getEngine();
@@ -248,7 +248,7 @@ public interface EngineMantle extends MatterGenerator {
default void cleanupChunk(int x, int z) {
if (!isCovered(x, z)) return;
MantleChunk chunk = getMantle().getChunk(x, z).use();
MantleChunk<Matter> chunk = getMantle().getChunk(x, z).use();
try {
chunk.raiseFlagUnchecked(MantleFlag.CLEANED, () -> {
chunk.deleteSlices(BlockData.class);

View File

@@ -23,8 +23,9 @@ import art.arcane.iris.engine.IrisComplex;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.parallel.BurstExecutor;
import org.jetbrains.annotations.NotNull;
@@ -55,7 +56,7 @@ public interface MantleComponent extends Comparable<MantleComponent> {
EngineMantle getEngineMantle();
default Mantle getMantle() {
default Mantle<Matter> getMantle() {
return getEngineMantle().getMantle();
}

View File

@@ -35,10 +35,10 @@ import art.arcane.iris.util.data.B;
import art.arcane.iris.util.data.IrisCustomData;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.function.Function3;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.Matter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.TileWrapper;
import art.arcane.iris.util.noise.CNG;
@@ -55,13 +55,13 @@ import static art.arcane.iris.engine.mantle.EngineMantle.AIR;
@Data
public class MantleWriter implements IObjectPlacer, AutoCloseable {
private final EngineMantle engineMantle;
private final Mantle mantle;
private final Map<Long, MantleChunk> cachedChunks;
private final Mantle<Matter> mantle;
private final Map<Long, MantleChunk<Matter>> cachedChunks;
private final int radius;
private final int x;
private final int z;
public MantleWriter(EngineMantle engineMantle, Mantle mantle, int x, int z, int radius, boolean multicore) {
public MantleWriter(EngineMantle engineMantle, Mantle<Matter> mantle, int x, int z, int radius, boolean multicore) {
this.engineMantle = engineMantle;
this.mantle = mantle;
this.radius = radius * 2;
@@ -76,7 +76,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
if (foliaMaintenance && IrisSettings.get().getGeneral().isDebug()) {
Iris.info("MantleWriter using sequential chunk prefetch for maintenance regen at " + x + "," + z + ".");
}
final var map = multicore ? cachedChunks : new KMap<Long, MantleChunk>(d * d, 1f, parallelism);
final var map = multicore ? cachedChunks : new KMap<Long, MantleChunk<Matter>>(d * d, 1f, parallelism);
mantle.getChunks(
x - radius,
x + radius,
@@ -163,7 +163,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
return;
}
MantleChunk chunk = acquireChunk(cx, cz);
MantleChunk<Matter> chunk = acquireChunk(cx, cz);
if (chunk == null) return;
Matter matter = chunk.getOrCreate(y >> 4);
@@ -178,7 +178,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
return null;
}
MantleChunk chunk = acquireChunk(cx, cz);
MantleChunk<Matter> chunk = acquireChunk(cx, cz);
if (chunk == null) {
return null;
}
@@ -189,14 +189,14 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
}
@ChunkCoordinates
public MantleChunk acquireChunk(int cx, int cz) {
public MantleChunk<Matter> acquireChunk(int cx, int cz) {
if (cx < this.x - radius || cx > this.x + radius
|| cz < this.z - radius || cz > this.z + radius) {
Iris.error("Mantle Writer Accessed chunk out of bounds" + cx + "," + cz);
return null;
}
final Long key = Cache.key(cx, cz);
MantleChunk chunk = cachedChunks.get(key);
MantleChunk<Matter> chunk = cachedChunks.get(key);
if (chunk == null) {
chunk = mantle.getChunk(cx, cz).use();
var old = cachedChunks.put(key, chunk);

View File

@@ -31,9 +31,9 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.mantle.flag.ReservedFlag;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.slices.container.JigsawStructuresContainer;
import art.arcane.volmlib.util.matter.slices.container.JigsawStructuresContainer;
import art.arcane.iris.util.noise.CNG;
import org.jetbrains.annotations.Nullable;
@@ -68,7 +68,7 @@ public class MantleJigsawComponent extends IrisMantleComponent {
for (Position2 pos : poss) {
if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) {
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(getDimension().getStronghold());
place(writer, pos.toIris(), structure, new RNG(seed), true);
place(writer, new IrisPosition(pos.getX(), 23, pos.getZ()), structure, new RNG(seed), true);
return;
}
}
@@ -113,7 +113,8 @@ public class MantleJigsawComponent extends IrisMantleComponent {
JigsawStructuresContainer container = getMantle().get(pos.getX(), 0, pos.getZ(), JigsawStructuresContainer.class);
if (container == null) continue;
for (String key : container.getStructures()) {
cache.computeIfAbsent(key, k -> new KSet<>()).addAll(container.getPositions(key));
KSet<Position2> positions = cache.computeIfAbsent(key, k -> new KSet<>());
container.getPositions(key).forEach(p -> positions.add(new Position2(p.getX(), p.getZ())));
}
}
}

View File

@@ -37,7 +37,7 @@ import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.mantle.flag.ReservedFlag;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterStructurePOI;
import art.arcane.volmlib.util.matter.MatterStructurePOI;
import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.noise.NoiseType;
import art.arcane.iris.util.parallel.BurstExecutor;

View File

@@ -30,12 +30,13 @@ import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.function.Consumer4;
import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.math.M;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.slices.MarkerMatter;
import art.arcane.volmlib.util.matter.slices.MarkerMatter;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import lombok.Data;
import org.bukkit.Material;
@@ -57,8 +58,8 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
@ChunkCoordinates
public void onModify(int x, int z, Hunk<BlockData> output, boolean multicore, ChunkContext context) {
PrecisionStopwatch p = PrecisionStopwatch.start();
Mantle mantle = getEngine().getMantle().getMantle();
MantleChunk mc = mantle.getChunk(x, z).use();
Mantle<Matter> mantle = getEngine().getMantle().getMantle();
MantleChunk<Matter> mc = mantle.getChunk(x, z).use();
KMap<Long, KList<Integer>> positions = new KMap<>();
KMap<IrisPosition, MatterCavern> walls = new KMap<>();
Consumer4<Integer, Integer, Integer, MatterCavern> iterator = (xx, yy, zz, c) -> {
@@ -170,7 +171,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
mc.release();
}
private void processZone(Hunk<BlockData> output, MantleChunk mc, Mantle mantle, CaveZone zone, int rx, int rz, int xx, int zz) {
private void processZone(Hunk<BlockData> output, MantleChunk<Matter> mc, Mantle<Matter> mantle, CaveZone zone, int rx, int rz, int xx, int zz) {
boolean decFloor = B.isSolid(output.getClosest(rx, zone.floor - 1, rz));
boolean decCeiling = B.isSolid(output.getClosest(rx, zone.ceiling + 1, rz));
int center = (zone.floor + zone.ceiling) / 2;

View File

@@ -25,7 +25,7 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.data.HeightMap;
import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.MantleChunk;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.parallel.BurstExecutor;

View File

@@ -21,7 +21,6 @@ package art.arcane.iris.engine.object;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.stream.ProceduralStream;
import art.arcane.iris.util.stream.interpolation.Interpolated;
import java.util.List;
public interface IRare {

View File

@@ -36,9 +36,9 @@ import art.arcane.iris.util.data.DataProvider;
import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -24,7 +24,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.data.Cuboid.CuboidDirection;
import art.arcane.volmlib.util.math.DOP;
import art.arcane.iris.util.math.VectorMath;
import art.arcane.volmlib.util.math.VectorMath;
import org.bukkit.Axis;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.type.Jigsaw;

View File

@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.slices.CavernMatter;
import art.arcane.volmlib.util.matter.slices.CavernMatter;
import lombok.Data;
@Snippet("carving-elipsoid")

View File

@@ -21,7 +21,6 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.annotations.Desc;
import art.arcane.iris.util.stream.ProceduralStream;
import java.util.function.Function;
@Desc("Represents a stream from the engine")

View File

@@ -27,7 +27,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.math.Vector3d;
import art.arcane.volmlib.util.matter.MatterMarker;
import art.arcane.iris.util.matter.slices.MarkerMatter;
import art.arcane.volmlib.util.matter.slices.MarkerMatter;
import art.arcane.iris.util.scheduling.J;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -30,7 +30,7 @@ import art.arcane.iris.util.data.B;
import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.noise.CNG;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@@ -35,6 +35,7 @@ import art.arcane.volmlib.util.format.Form;
import art.arcane.iris.util.interpolation.IrisInterpolation;
import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.volmlib.util.math.BlockPosition;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.math.*;
import art.arcane.volmlib.util.matter.MatterMarker;

View File

@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.slices.CavernMatter;
import art.arcane.volmlib.util.matter.slices.CavernMatter;
import lombok.Data;
@Snippet("carving-pyramid")

View File

@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.slices.CavernMatter;
import art.arcane.volmlib.util.matter.slices.CavernMatter;
import lombok.Data;
@Snippet("carving-sphere")

View File

@@ -4,7 +4,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.EngineAssignedComponent;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.math.Position2;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.noise.CNG;
import org.jetbrains.annotations.Nullable;

View File

@@ -24,7 +24,6 @@ import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.noise.CNGFactory;
import art.arcane.iris.util.noise.NoiseType;
import art.arcane.iris.util.stream.ProceduralStream;
@Desc("Styles of noise")
public enum NoiseStyle {
@Desc("White Noise is like static. Useful for block scattering but not terrain.")

View File

@@ -2,9 +2,10 @@ package art.arcane.iris.engine.object.matter;
import art.arcane.iris.core.loader.IrisRegistrant;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.util.matter.IrisMatterSupport;
import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.iris.util.matter.IrisMatter;
import art.arcane.iris.util.matter.Matter;
import art.arcane.volmlib.util.matter.IrisMatter;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.plugin.VolmitSender;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -22,21 +23,28 @@ public class IrisMatterObject extends IrisRegistrant {
}
public IrisMatterObject(int w, int h, int d) {
this(new IrisMatter(w, h, d));
this(createMatter(w, h, d));
}
public IrisMatterObject(Matter matter) {
IrisMatterSupport.ensureRegistered();
this.matter = matter;
}
public static IrisMatterObject from(IrisObject object) {
return new IrisMatterObject(Matter.from(object));
return new IrisMatterObject(IrisMatterSupport.from(object));
}
public static IrisMatterObject from(File j) throws IOException, ClassNotFoundException {
IrisMatterSupport.ensureRegistered();
return new IrisMatterObject(Matter.read(j));
}
private static Matter createMatter(int w, int h, int d) {
IrisMatterSupport.ensureRegistered();
return new IrisMatter(w, h, d);
}
@Override
public String getFolderName() {
return "matter";

View File

@@ -24,9 +24,10 @@ import art.arcane.iris.engine.object.IRare;
import art.arcane.iris.engine.object.IrisStyledRange;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.mantle.Mantle;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterSlice;
import art.arcane.volmlib.util.matter.MatterSlice;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

View File

@@ -37,7 +37,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.data.IrisBiomeStorage;
import art.arcane.iris.util.hunk.view.BiomeGridHunkHolder;
import art.arcane.iris.util.hunk.view.ChunkDataHunkHolder;
import art.arcane.iris.util.io.ReactiveFolder;
import art.arcane.volmlib.util.io.ReactiveFolder;
import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.scheduling.Looper;
@@ -103,7 +103,13 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
this.studio = studio;
this.dataLocation = dataLocation;
this.dimensionKey = dimensionKey;
this.folder = new ReactiveFolder(dataLocation, (_a, _b, _c) -> hotload());
this.folder = new ReactiveFolder(
dataLocation,
(_a, _b, _c) -> hotload(),
new KList<>(".iob", ".json", ".kts"),
new KList<>(".iris"),
new KList<>(".gradle.kts")
);
Bukkit.getServer().getPluginManager().registerEvents(this, Iris.instance);
}

View File

@@ -1,34 +0,0 @@
package art.arcane.iris.util.cache;
import art.arcane.volmlib.util.cache.ChunkCache2D;
import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;
import art.arcane.iris.engine.data.cache.Cache;
import art.arcane.volmlib.util.function.Function2;
public class WorldCache2D<T> {
private final ConcurrentLinkedHashMap<Long, ChunkCache2D<T>> chunks;
private final Function2<Integer, Integer, T> resolver;
public WorldCache2D(Function2<Integer, Integer, T> resolver, int size) {
this.resolver = resolver;
chunks = new ConcurrentLinkedHashMap.Builder<Long, ChunkCache2D<T>>()
.initialCapacity(size)
.maximumWeightedCapacity(size)
.concurrencyLevel(Math.max(32, Runtime.getRuntime().availableProcessors() * 4))
.build();
}
public T get(int x, int z) {
ChunkCache2D<T> chunk = chunks.computeIfAbsent(Cache.key(x >> 4, z >> 4), $ -> new ChunkCache2D<>("iris"));
return chunk.get(x, z, resolver);
}
public long getSize() {
return chunks.size() * 256L;
}
public long getMaxSize() {
return chunks.capacity() * 256L;
}
}

View File

@@ -1,23 +0,0 @@
package art.arcane.iris.util.decree;
import art.arcane.volmlib.util.director.context.DirectorContextHandlers;
import art.arcane.volmlib.util.director.context.DirectorContextHandlerType;
import art.arcane.iris.Iris;
import art.arcane.iris.util.plugin.VolmitSender;
import java.util.Map;
public interface DecreeContextHandler<T> extends DirectorContextHandlerType<T, VolmitSender> {
Map<Class<?>, DecreeContextHandler<?>> contextHandlers = buildContextHandlers();
static Map<Class<?>, DecreeContextHandler<?>> buildContextHandlers() {
return DirectorContextHandlers.buildOrEmpty(
Iris.initialize("art.arcane.iris.util.decree.context"),
DecreeContextHandler.class,
h -> ((DecreeContextHandler<?>) h).getType(),
e -> {
Iris.reportError(e);
e.printStackTrace();
});
}
}

View File

@@ -1,5 +0,0 @@
package art.arcane.iris.util.decree;
public interface DirectorParameterHandler<T>
extends DecreeExecutor, art.arcane.volmlib.util.director.DirectorParameterHandler<T> {
}

View File

@@ -1,9 +1,9 @@
package art.arcane.iris.util.decree;
package art.arcane.iris.util.director;
import art.arcane.volmlib.util.director.context.DirectorContextBase;
import art.arcane.iris.util.plugin.VolmitSender;
public class DecreeContext {
public class DirectorContext {
private static final DirectorContextBase<VolmitSender> context = new DirectorContextBase<>();
public static VolmitSender get() {

View File

@@ -0,0 +1,23 @@
package art.arcane.iris.util.director;
import art.arcane.volmlib.util.director.context.DirectorContextHandlers;
import art.arcane.volmlib.util.director.context.DirectorContextHandlerType;
import art.arcane.iris.Iris;
import art.arcane.iris.util.plugin.VolmitSender;
import java.util.Map;
public interface DirectorContextHandler<T> extends DirectorContextHandlerType<T, VolmitSender> {
Map<Class<?>, DirectorContextHandler<?>> contextHandlers = buildContextHandlers();
static Map<Class<?>, DirectorContextHandler<?>> buildContextHandlers() {
return DirectorContextHandlers.buildOrEmpty(
Iris.initialize("art.arcane.iris.util.director.context"),
DirectorContextHandler.class,
h -> ((DirectorContextHandler<?>) h).getType(),
e -> {
Iris.reportError(e);
e.printStackTrace();
});
}
}

View File

@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree;
package art.arcane.iris.util.director;
import art.arcane.volmlib.util.director.DirectorExecutorBase;
import art.arcane.iris.core.loader.IrisData;
@@ -26,9 +26,9 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.entity.Player;
public interface DecreeExecutor extends DirectorExecutorBase {
public interface DirectorExecutor extends DirectorExecutorBase {
default VolmitSender sender() {
return DecreeContext.get();
return DirectorContext.get();
}
default Player player() {

View File

@@ -0,0 +1,5 @@
package art.arcane.iris.util.director;
public interface DirectorParameterHandler<T>
extends DirectorExecutor, art.arcane.volmlib.util.director.DirectorParameterHandler<T> {
}

View File

@@ -16,15 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree;
package art.arcane.iris.util.director;
import art.arcane.volmlib.util.director.DirectorSystemSupport;
import art.arcane.iris.Iris;
import art.arcane.volmlib.util.collection.KList;
public final class DecreeSystem {
public static final KList<DirectorParameterHandler<?>> handlers = Iris.initialize("art.arcane.iris.util.decree.handlers", null).convert((i) -> (DirectorParameterHandler<?>) i);
public final class DirectorSystem {
public static final KList<art.arcane.volmlib.util.director.DirectorParameterHandler<?>> handlers = Iris.initialize("art.arcane.iris.util.director.handlers", null).convert((i) -> (art.arcane.volmlib.util.director.DirectorParameterHandler<?>) i);
private DecreeSystem() {
private DirectorSystem() {
}
/**
@@ -33,8 +33,8 @@ public final class DecreeSystem {
* @param type The type to handle
* @return The corresponding {@link DirectorParameterHandler}, or null
*/
public static DirectorParameterHandler<?> getHandler(Class<?> type) {
DirectorParameterHandler<?> handler = DirectorSystemSupport.getHandler(handlers, type, (h, t) -> h.supports(t));
public static art.arcane.volmlib.util.director.DirectorParameterHandler<?> getHandler(Class<?> type) {
art.arcane.volmlib.util.director.DirectorParameterHandler<?> handler = DirectorSystemSupport.getHandler(handlers, type, (h, t) -> h.supports(t));
if (handler != null) {
return handler;
}

View File

@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
public class BiomeContextHandler implements DecreeContextHandler<IrisBiome> {
public class BiomeContextHandler implements DirectorContextHandler<IrisBiome> {
public Class<IrisBiome> getType() {
return IrisBiome.class;
}

View File

@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
public class DimensionContextHandler implements DecreeContextHandler<IrisDimension> {
public class DimensionContextHandler implements DirectorContextHandler<IrisDimension> {
public Class<IrisDimension> getType() {
return IrisDimension.class;
}

View File

@@ -16,15 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisGenerator;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
public class GeneratorContextHandler implements DecreeContextHandler<IrisGenerator> {
public class GeneratorContextHandler implements DirectorContextHandler<IrisGenerator> {
@Override
public Class<IrisGenerator> getType() {
return IrisGenerator.class;

View File

@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
public class RegionContextHandler implements DecreeContextHandler<IrisRegion> {
public class RegionContextHandler implements DirectorContextHandler<IrisRegion> {
public Class<IrisRegion> getType() {
return IrisRegion.class;
}

View File

@@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.util.Vector;
public class VectorContextHandler implements DecreeContextHandler<Vector> {
public class VectorContextHandler implements DirectorContextHandler<Vector> {
public Class<Vector> getType() {
return Vector.class;
}

View File

@@ -1,11 +1,11 @@
package art.arcane.iris.util.decree.context;
package art.arcane.iris.util.director.context;
import art.arcane.volmlib.util.director.context.WorldContextHandlerBase;
import art.arcane.iris.util.decree.DecreeContextHandler;
import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.World;
public class WorldContextHandler extends WorldContextHandlerBase<VolmitSender> implements DecreeContextHandler<World> {
public class WorldContextHandler extends WorldContextHandlerBase<VolmitSender> implements DirectorContextHandler<World> {
@Override
protected boolean isPlayer(VolmitSender sender) {
return sender.isPlayer();

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
public class BiomeHandler extends RegistrantHandler<IrisBiome> {
public BiomeHandler() {

View File

@@ -1,8 +1,8 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.util.decree.DecreeContext;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.iris.util.decree.DecreeSystem;
import art.arcane.iris.util.director.DirectorContext;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
import art.arcane.iris.util.director.DirectorSystem;
import art.arcane.volmlib.util.director.handlers.base.BlockVectorHandlerBase;
import art.arcane.volmlib.util.format.Form;
import org.bukkit.FluidCollisionMode;
@@ -14,22 +14,22 @@ import java.util.List;
public class BlockVectorHandler extends BlockVectorHandlerBase implements DirectorParameterHandler<BlockVector> {
@Override
protected boolean isSenderPlayer() {
return DecreeContext.get().isPlayer();
return DirectorContext.get().isPlayer();
}
@Override
protected BlockVector getSenderBlockVector() {
return DecreeContext.get().player().getLocation().toVector().toBlockVector();
return DirectorContext.get().player().getLocation().toVector().toBlockVector();
}
@Override
protected BlockVector getLookBlockVector() {
return DecreeContext.get().player().getTargetBlockExact(256, FluidCollisionMode.NEVER).getLocation().toVector().toBlockVector();
return DirectorContext.get().player().getTargetBlockExact(256, FluidCollisionMode.NEVER).getLocation().toVector().toBlockVector();
}
@Override
protected List<?> playerPossibilities(String query) {
return DecreeSystem.getHandler(Player.class).getPossibilities(query);
return DirectorSystem.getHandler(Player.class).getPossibilities(query);
}
@Override

View File

@@ -1,7 +1,7 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.volmlib.util.director.handlers.base.BooleanHandlerBase;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
public class BooleanHandler extends BooleanHandlerBase implements DirectorParameterHandler<Boolean> {
}

View File

@@ -1,7 +1,7 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.volmlib.util.director.handlers.base.ByteHandlerBase;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
public class ByteHandler extends ByteHandlerBase implements DirectorParameterHandler<Byte> {
}

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.engine.object.IrisCave;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
public class CaveHandler extends RegistrantHandler<IrisCave> {
public CaveHandler() {

View File

@@ -1,8 +1,8 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.core.nms.datapack.DataVersion;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException;
public class DataVersionHandler implements DirectorParameterHandler<DataVersion> {

View File

@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
import java.util.Locale;

View File

@@ -1,7 +1,7 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.volmlib.util.director.handlers.base.DoubleHandlerBase;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
public class DoubleHandler extends DoubleHandlerBase implements DirectorParameterHandler<Double> {
}

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.engine.object.IrisEntity;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
public class EntityHandler extends RegistrantHandler<IrisEntity> {

View File

@@ -1,7 +1,7 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.volmlib.util.director.handlers.base.FloatHandlerBase;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
public class FloatHandler extends FloatHandlerBase implements DirectorParameterHandler<Float> {
}

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.engine.object.IrisGenerator;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
public class GeneratorHandler extends RegistrantHandler<IrisGenerator> {
public GeneratorHandler() {

View File

@@ -1,7 +1,7 @@
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.volmlib.util.director.handlers.base.IntegerHandlerBase;
import art.arcane.iris.util.decree.DirectorParameterHandler;
import art.arcane.volmlib.util.director.DirectorParameterHandler;
public class IntegerHandler extends IntegerHandlerBase implements DirectorParameterHandler<Integer> {
}

View File

@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.util.decree.handlers;
package art.arcane.iris.util.director.handlers;
import art.arcane.iris.engine.object.IrisJigsawPiece;
import art.arcane.iris.util.decree.specialhandlers.RegistrantHandler;
import art.arcane.iris.util.director.specialhandlers.RegistrantHandler;
public class JigsawPieceHandler extends RegistrantHandler<IrisJigsawPiece> {
public JigsawPieceHandler() {

Some files were not shown because too many files have changed in this diff Show More