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
+13 -1
View File
@@ -527,6 +527,7 @@ public class Iris extends VolmitPlugin implements Listener {
public void checkForBukkitWorlds(Predicate<String> filter) { public void checkForBukkitWorlds(Predicate<String> filter) {
try { try {
KList<String> deferredStartupWorlds = new KList<>();
IrisWorlds.readBukkitWorlds().forEach((s, generator) -> { IrisWorlds.readBukkitWorlds().forEach((s, generator) -> {
try { try {
if (Bukkit.getWorld(s) != null || !filter.test(s)) return; if (Bukkit.getWorld(s) != null || !filter.test(s)) return;
@@ -543,16 +544,27 @@ public class Iris extends VolmitPlugin implements Listener {
INMS.get().createWorld(c); INMS.get().createWorld(c);
Iris.info(C.LIGHT_PURPLE + "Loaded " + s + "!"); Iris.info(C.LIGHT_PURPLE + "Loaded " + s + "!");
} catch (Throwable e) { } catch (Throwable e) {
Iris.error("Failed to load world " + s + "!");
if (containsCreateWorldUnsupportedOperation(e)) { 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("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."); Iris.error("Ensure Iris is loaded at STARTUP and restart after staging worlds in bukkit.yml.");
reportError(e); reportError(e);
return; return;
} }
Iris.error("Failed to load world " + s + "!");
e.printStackTrace(); 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) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
reportError(e); reportError(e);
@@ -31,6 +31,7 @@ import art.arcane.iris.core.service.IrisEngineSVC;
import art.arcane.iris.core.service.StudioSVC; import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.core.tools.IrisPackBenchmarking; import art.arcane.iris.core.tools.IrisPackBenchmarking;
import art.arcane.iris.core.tools.IrisToolbelt; 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.framework.Engine;
import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisPosition; 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.util.context.IrisContext;
import art.arcane.iris.engine.object.IrisJigsawStructurePlacement; import art.arcane.iris.engine.object.IrisJigsawStructurePlacement;
import art.arcane.volmlib.util.collection.KList; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.CountingDataInputStream; import art.arcane.volmlib.util.io.CountingDataInputStream;
import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.io.IO;
import art.arcane.iris.util.mantle.TectonicPlate; import art.arcane.volmlib.util.mantle.runtime.TectonicPlate;
import art.arcane.iris.util.math.Position2; import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.M; 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.MCAFile;
import art.arcane.iris.util.nbt.mca.MCAUtil; import art.arcane.iris.util.nbt.mca.MCAUtil;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
@@ -82,7 +83,7 @@ import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
@Director(name = "Developer", origin = DirectorOrigin.BOTH, description = "Iris World Manager", aliases = {"dev"}) @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 long DELETE_CHUNK_HEARTBEAT_MS = 5000L;
private static final int DELETE_CHUNK_MAX_ATTEMPTS = 2; private static final int DELETE_CHUNK_MAX_ATTEMPTS = 2;
private static final int DELETE_CHUNK_STACK_LIMIT = 20; private static final int DELETE_CHUNK_STACK_LIMIT = 20;
@@ -313,7 +314,7 @@ public class CommandDeveloper implements DecreeExecutor {
if (plate) { if (plate) {
try (var in = CountingDataInputStream.wrap(new BufferedInputStream(new FileInputStream(base)))) { 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) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -561,7 +562,7 @@ public class CommandDeveloper implements DecreeExecutor {
return; 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(); 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)."); 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( private void runDeleteChunkOrchestrator(
VolmitSender sender, VolmitSender sender,
World world, World world,
art.arcane.iris.util.mantle.Mantle mantle, art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
List<Position2> targets, List<Position2> targets,
int threadCount, int threadCount,
String runId, String runId,
@@ -682,7 +683,7 @@ public class CommandDeveloper implements DecreeExecutor {
private DeleteChunkSummary executeDeleteChunkQueue( private DeleteChunkSummary executeDeleteChunkQueue(
World world, World world,
art.arcane.iris.util.mantle.Mantle mantle, art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
List<Position2> targets, List<Position2> targets,
ThreadPoolExecutor pool, ThreadPoolExecutor pool,
Set<Thread> workerThreads, Set<Thread> workerThreads,
@@ -822,7 +823,7 @@ public class CommandDeveloper implements DecreeExecutor {
private DeleteChunkResult runDeleteChunkTask( private DeleteChunkResult runDeleteChunkTask(
DeleteChunkTask task, DeleteChunkTask task,
World world, World world,
art.arcane.iris.util.mantle.Mantle mantle, art.arcane.volmlib.util.mantle.runtime.Mantle mantle,
ConcurrentMap<String, DeleteChunkActiveTask> activeTasks ConcurrentMap<String, DeleteChunkActiveTask> activeTasks
) { ) {
String worker = Thread.currentThread().getName(); String worker = Thread.currentThread().getName();
@@ -1150,7 +1151,7 @@ public class CommandDeveloper implements DecreeExecutor {
service.submit(() -> { service.submit(() -> {
try { try {
CountingDataInputStream raw = CountingDataInputStream.wrap(new FileInputStream(file)); 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(); raw.close();
double d1 = 0; double d1 = 0;
@@ -1169,7 +1170,7 @@ public class CommandDeveloper implements DecreeExecutor {
size = tmp.length(); size = tmp.length();
start = System.currentTimeMillis(); start = System.currentTimeMillis();
CountingDataInputStream din = createInput(tmp, algorithm); CountingDataInputStream din = createInput(tmp, algorithm);
new TectonicPlate(height, din, true); TectonicPlate.read(height, din, true, IrisEngineMantle.createRuntimeDataAdapter(), IrisEngineMantle.createRuntimeHooks());
din.close(); din.close();
d2 += System.currentTimeMillis() - start; d2 += System.currentTimeMillis() - start;
tmp.delete(); tmp.delete();
@@ -21,7 +21,7 @@ package art.arcane.iris.core.commands;
import art.arcane.iris.Iris; import art.arcane.iris.Iris;
import art.arcane.iris.core.service.StudioSVC; import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.engine.object.*; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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") @Director(name = "edit", origin = DirectorOrigin.PLAYER, studio = true, description = "Edit something")
public class CommandEdit implements DecreeExecutor { public class CommandEdit implements DirectorExecutor {
private boolean noStudio() { private boolean noStudio() {
if (!sender().isPlayer()) { if (!sender().isPlayer()) {
@@ -22,15 +22,15 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisRegion; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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.format.C;
@Director(name = "find", origin = DirectorOrigin.PLAYER, description = "Iris Find commands", aliases = "goto") @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") @Director(description = "Find a biome")
public void biome( public void biome(
@Param(description = "The biome to look for") @Param(description = "The biome to look for")
@@ -29,24 +29,25 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList; 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.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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; 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.iris.util.format.C;
import art.arcane.volmlib.util.io.IO; 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.parallel.SyncExecutor;
import art.arcane.iris.util.misc.ServerProperties; import art.arcane.iris.util.misc.ServerProperties;
import art.arcane.iris.util.misc.RegenRuntime; 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.matter.TileWrapper;
import art.arcane.iris.util.plugin.VolmitSender; import art.arcane.iris.util.plugin.VolmitSender;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.matter.Matter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
@@ -89,7 +90,7 @@ import static art.arcane.iris.util.misc.ServerProperties.BUKKIT_YML;
import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getServer;
@Director(name = "iris", aliases = {"ir", "irs"}, description = "Basic Command") @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 long REGEN_HEARTBEAT_MS = 5000L;
private static final int REGEN_MAX_ATTEMPTS = 2; private static final int REGEN_MAX_ATTEMPTS = 2;
private static final int REGEN_STACK_LIMIT = 20; private static final int REGEN_STACK_LIMIT = 20;
@@ -777,7 +778,7 @@ public class CommandIris implements DecreeExecutor {
try { try {
setRegenSetupPhase(setupPhase, setupPhaseSince, "touch-context", world, runId); setRegenSetupPhase(setupPhase, setupPhaseSince, "touch-context", world, runId);
updateRegenSetupDisplay(display, mode, "Touching command context", 1, 6); updateRegenSetupDisplay(display, mode, "Touching command context", 1, 6);
DecreeContext.touch(sender); DirectorContext.touch(sender);
if (mode.usesMaintenance()) { if (mode.usesMaintenance()) {
setRegenSetupPhase(setupPhase, setupPhaseSince, "enter-maintenance", world, runId); setRegenSetupPhase(setupPhase, setupPhaseSince, "enter-maintenance", world, runId);
updateRegenSetupDisplay(display, mode, "Entering maintenance", 2, 6); updateRegenSetupDisplay(display, mode, "Entering maintenance", 2, 6);
@@ -886,7 +887,7 @@ public class CommandIris implements DecreeExecutor {
if (!displayTerminal) { if (!displayTerminal) {
closeRegenDisplay(display, REGEN_DISPLAY_FINAL_TICKS); closeRegenDisplay(display, REGEN_DISPLAY_FINAL_TICKS);
} }
DecreeContext.remove(); DirectorContext.remove();
Iris.info("Regen run closed: id=" + runId + " world=" + world.getName() + " totalMs=" + (System.currentTimeMillis() - runStart)); 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; double overallProgress = ((safePassIndex - 1) + passProgress) / safePassCount;
int percent = (int) Math.round(overallProgress * 100.0D); int percent = (int) Math.round(overallProgress * 100.0D);
String bar = buildRegenProgressBar(overallProgress); 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"; String statusLabel = failed ? "FAILED" : terminal ? "DONE" : stalled ? "STALLED" : "RUN";
BarColor bossColor = failed ? BarColor.RED : terminal ? BarColor.GREEN : stalled ? BarColor.RED : BarColor.BLUE; BarColor bossColor = failed ? BarColor.RED : terminal ? BarColor.GREEN : stalled ? BarColor.RED : BarColor.BLUE;
String title = C.GOLD + "Regen " + mode.id() String title = C.GOLD + "Regen " + mode.id()
@@ -1202,7 +1203,8 @@ public class CommandIris implements DecreeExecutor {
} }
if (sender.isPlayer()) { if (sender.isPlayer()) {
J.runEntity(sender.player(), () -> sender.sendAction(action)); String actionText = action;
J.runEntity(sender.player(), () -> sender.sendAction(actionText));
} }
return now; return now;
} }
@@ -1464,7 +1466,7 @@ public class CommandIris implements DecreeExecutor {
} }
private RegenMantleChunkState inspectRegenMantleChunk(PlatformChunkGenerator platform, int chunkX, int chunkZ) { 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 { try {
AtomicInteger blockDataEntries = new AtomicInteger(); AtomicInteger blockDataEntries = new AtomicInteger();
AtomicInteger stringEntries = new AtomicInteger(); AtomicInteger stringEntries = new AtomicInteger();
@@ -1528,7 +1530,7 @@ public class CommandIris implements DecreeExecutor {
boolean scheduled = J.runRegion(world, chunkX, chunkZ, () -> { boolean scheduled = J.runRegion(world, chunkX, chunkZ, () -> {
try { try {
Chunk chunk = world.getChunkAt(chunkX, chunkZ); 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 { try {
mantleChunk.iterate(String.class, (x, y, z, value) -> { mantleChunk.iterate(String.class, (x, y, z, value) -> {
if (value != null && !value.isEmpty() && value.indexOf('@') > 0) { 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 total = (long) (toX - fromX + 1) * (long) (toZ - fromZ + 1);
long started = System.currentTimeMillis(); long started = System.currentTimeMillis();
int resetCount = 0; 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<>(); AtomicReference<Thread> deleteThread = new AtomicReference<>();
ThreadFactory deleteFactory = runnable -> { ThreadFactory deleteFactory = runnable -> {
Thread thread = new Thread(runnable, "Iris-Regen-Reset-" + runId); Thread thread = new Thread(runnable, "Iris-Regen-Reset-" + runId);
@@ -27,11 +27,11 @@ import art.arcane.iris.engine.object.IrisJigsawPiece;
import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisObject; import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisPosition; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
@@ -41,7 +41,7 @@ import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import java.io.File; import java.io.File;
@Director(name = "jigsaw", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris jigsaw commands") @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") @Director(description = "Edit a jigsaw piece")
public void edit( public void edit(
@Param(description = "The jigsaw piece to edit") @Param(description = "The jigsaw piece to edit")
@@ -24,11 +24,11 @@ import art.arcane.iris.core.gui.PregeneratorJob;
import art.arcane.iris.core.pregenerator.LazyPregenerator; import art.arcane.iris.core.pregenerator.LazyPregenerator;
import art.arcane.iris.core.pregenerator.PregenTask; import art.arcane.iris.core.pregenerator.PregenTask;
import art.arcane.iris.core.tools.IrisToolbelt; 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.Director;
import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C; 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.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@@ -37,7 +37,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
@Director(name = "lazypregen", aliases = "lazy", description = "Pregenerate your Iris worlds!") @Director(name = "lazypregen", aliases = "lazy", description = "Pregenerate your Iris worlds!")
public class CommandLazyPregen implements DecreeExecutor { public class CommandLazyPregen implements DirectorExecutor {
public String worldName; public String worldName;
@Director(description = "Pregenerate a world") @Director(description = "Pregenerate a world")
public void start( public void start(
@@ -30,11 +30,11 @@ import art.arcane.iris.engine.object.*;
import art.arcane.volmlib.util.data.Cuboid; import art.arcane.volmlib.util.data.Cuboid;
import art.arcane.iris.util.data.IrisCustomData; import art.arcane.iris.util.data.IrisCustomData;
import art.arcane.iris.util.data.registry.Materials; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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.format.C;
import art.arcane.iris.util.math.Direction; import art.arcane.iris.util.math.Direction;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
@@ -50,7 +50,7 @@ import java.text.NumberFormat;
import java.util.*; import java.util.*;
@Director(name = "object", aliases = "o", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris object manipulation") @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, private static final Set<Material> skipBlocks = Set.of(Materials.GRASS, Material.SNOW, Material.VINE, Material.TORCH, Material.DEAD_BUSH,
Material.POPPY, Material.DANDELION); Material.POPPY, Material.DANDELION);
@@ -22,16 +22,16 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.gui.PregeneratorJob; import art.arcane.iris.core.gui.PregeneratorJob;
import art.arcane.iris.core.pregenerator.PregenTask; import art.arcane.iris.core.pregenerator.PregenTask;
import art.arcane.iris.core.tools.IrisToolbelt; 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.Director;
import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C; 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.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@Director(name = "pregen", aliases = "pregenerate", description = "Pregenerate your Iris worlds!") @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") @Director(description = "Pregenerate a world")
public void start( public void start(
@Param(description = "The radius of the pregen in blocks", aliases = "size") @Param(description = "The radius of the pregen in blocks", aliases = "size")
@@ -18,8 +18,8 @@
package art.arcane.iris.core.commands; 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 {
} }
@@ -33,10 +33,10 @@ import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.collection.KSet;
import art.arcane.iris.util.decree.DecreeContext; import art.arcane.iris.util.director.DirectorContext;
import art.arcane.iris.util.decree.DecreeExecutor; import art.arcane.iris.util.director.DirectorExecutor;
import art.arcane.iris.util.decree.handlers.DimensionHandler; import art.arcane.iris.util.director.handlers.DimensionHandler;
import art.arcane.iris.util.decree.specialhandlers.NullableDimensionHandler; import art.arcane.iris.util.director.specialhandlers.NullableDimensionHandler;
import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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.io.IO;
import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONArray;
import art.arcane.volmlib.util.json.JSONObject; 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.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.RNG;
import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.iris.util.noise.CNG; import art.arcane.iris.util.noise.CNG;
@@ -84,7 +84,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier; import java.util.function.Supplier;
@Director(name = "studio", aliases = {"std", "s"}, description = "Studio Commands", studio = true) @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 CommandFind find;
private CommandEdit edit; private CommandEdit edit;
//private CommandDeepSearch deepSearch; //private CommandDeepSearch deepSearch;
@@ -188,7 +188,7 @@ public class CommandStudio implements DecreeExecutor {
Thread orchestrator = new Thread(() -> { Thread orchestrator = new Thread(() -> {
PlatformChunkGenerator plat = IrisToolbelt.access(world); PlatformChunkGenerator plat = IrisToolbelt.access(world);
Engine engine = plat.getEngine(); Engine engine = plat.getEngine();
DecreeContext.touch(sender); DirectorContext.touch(sender);
IrisToolbelt.beginWorldMaintenance(world, "studio-regen"); IrisToolbelt.beginWorldMaintenance(world, "studio-regen");
try (SyncExecutor executor = new SyncExecutor(20); try (SyncExecutor executor = new SyncExecutor(20);
var service = Executors.newFixedThreadPool(threadCount) var service = Executors.newFixedThreadPool(threadCount)
@@ -256,7 +256,7 @@ public class CommandStudio implements DecreeExecutor {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
IrisToolbelt.endWorldMaintenance(world, "studio-regen"); IrisToolbelt.endWorldMaintenance(world, "studio-regen");
DecreeContext.remove(); DirectorContext.remove();
} }
}, orchestratorName); }, orchestratorName);
orchestrator.setDaemon(true); orchestrator.setDaemon(true);
@@ -22,7 +22,7 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.pregenerator.LazyPregenerator; 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.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.Director;
import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.annotations.Param;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
@@ -34,7 +34,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
@Director(name = "turbopregen", aliases = "turbo", description = "Pregenerate your Iris worlds!") @Director(name = "turbopregen", aliases = "turbo", description = "Pregenerate your Iris worlds!")
public class CommandTurboPregen implements DecreeExecutor { public class CommandTurboPregen implements DirectorExecutor {
public String worldName; public String worldName;
@Director(description = "Pregenerate a world") @Director(description = "Pregenerate a world")
public void start( public void start(
@@ -24,7 +24,7 @@ import org.bukkit.World;
import art.arcane.iris.Iris; import art.arcane.iris.Iris;
import art.arcane.iris.core.pregenerator.ChunkUpdater; import art.arcane.iris.core.pregenerator.ChunkUpdater;
import art.arcane.iris.core.tools.IrisToolbelt; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; 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; import art.arcane.volmlib.util.format.Form;
@Director(name = "updater", origin = DirectorOrigin.BOTH, description = "Iris World Updater") @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 final Object lock = new Object();
private transient ChunkUpdater chunkUpdater; private transient ChunkUpdater chunkUpdater;
@@ -26,7 +26,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisRegion; import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.util.data.B; 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.DirectorOrigin;
import art.arcane.volmlib.util.director.annotations.Director; import art.arcane.volmlib.util.director.annotations.Director;
import art.arcane.volmlib.util.director.annotations.Param; import art.arcane.volmlib.util.director.annotations.Param;
@@ -43,7 +43,7 @@ import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@Director(name = "what", origin = DirectorOrigin.PLAYER, studio = true, description = "Iris What?") @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) @Director(description = "What is in my hand?", origin = DirectorOrigin.PLAYER)
public void hand() { public void hand() {
try { try {
@@ -29,9 +29,10 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.format.MemoryMonitor; import art.arcane.volmlib.util.format.MemoryMonitor;
import art.arcane.volmlib.util.function.Consumer2; 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.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.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import org.bukkit.World; import org.bukkit.World;
@@ -21,8 +21,7 @@ package art.arcane.iris.core.gui.components;
import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisBiomeGeneratorLink; 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.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.function.BiFunction; import java.util.function.BiFunction;
@@ -27,7 +27,8 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.platform.PlatformChunkGenerator; import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; 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.math.Vector3d;
import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer; import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer;
import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess; import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess;
@@ -109,7 +110,7 @@ public interface INMSBinding {
MCAPaletteAccess createPalette(); 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; ItemStack applyCustomNbt(ItemStack itemStack, KMap<String, Object> customNbt) throws IllegalArgumentException;
@@ -29,7 +29,8 @@ import art.arcane.iris.core.nms.container.StructurePlacement;
import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.Engine;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; 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.math.Vector3d;
import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer; import art.arcane.volmlib.util.nbt.mca.palette.MCABiomeContainer;
import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess; import art.arcane.volmlib.util.nbt.mca.palette.MCAPaletteAccess;
@@ -87,7 +88,7 @@ public class NMSBinding1X implements INMSBinding {
@Override @Override
public void injectBiomesFromMantle(Chunk e, Mantle mantle) { public void injectBiomesFromMantle(Chunk e, Mantle<Matter> mantle) {
} }
@@ -8,7 +8,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M; 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.RollingSequence;
import art.arcane.iris.util.plugin.chunk.TicketHolder; import art.arcane.iris.util.plugin.chunk.TicketHolder;
import art.arcane.iris.util.profile.LoadBalancer; import art.arcane.iris.util.profile.LoadBalancer;
@@ -10,7 +10,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M; 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.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.volmlib.util.scheduling.ChronoLatch; import art.arcane.volmlib.util.scheduling.ChronoLatch;
@@ -24,9 +24,10 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.collection.KSet;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; 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.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.RollingSequence;
import art.arcane.volmlib.util.scheduling.ChronoLatch; import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
@@ -6,7 +6,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M; 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.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.volmlib.util.scheduling.ChronoLatch; import art.arcane.volmlib.util.scheduling.ChronoLatch;
@@ -20,7 +20,7 @@ package art.arcane.iris.core.pregenerator;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; 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.Spiraled;
import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.math.Spiraler;
import lombok.Builder; import lombok.Builder;
@@ -18,7 +18,8 @@
package art.arcane.iris.core.pregenerator; 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 * Represents something that is capable of generating in chunks or regions, or both
@@ -8,7 +8,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.math.M; 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.RollingSequence;
import art.arcane.volmlib.util.math.Spiraler; import art.arcane.volmlib.util.math.Spiraler;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener; import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; 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 io.papermc.lib.PaperLib;
import org.bukkit.World; import org.bukkit.World;
@@ -23,7 +23,8 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.pregenerator.PregenListener; import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.tools.IrisToolbelt; 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.volmlib.util.math.M;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
@@ -5,7 +5,8 @@ import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.pregenerator.cache.PregenCache; import art.arcane.iris.core.pregenerator.cache.PregenCache;
import art.arcane.iris.core.service.GlobalCacheSVC; 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; import lombok.AllArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener; import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; 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 { public class DummyPregenMethod implements PregeneratorMethod {
@Override @Override
@@ -20,7 +20,8 @@ package art.arcane.iris.core.pregenerator.methods;
import art.arcane.iris.core.pregenerator.PregenListener; import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; 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; import org.bukkit.World;
public class HybridPregenMethod implements PregeneratorMethod { public class HybridPregenMethod implements PregeneratorMethod {
@@ -24,7 +24,8 @@ import art.arcane.iris.core.pregenerator.PregenListener;
import art.arcane.iris.core.pregenerator.PregeneratorMethod; import art.arcane.iris.core.pregenerator.PregeneratorMethod;
import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.volmlib.util.collection.KList; 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.volmlib.util.math.M;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -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.func.UpdateExecutor;
import art.arcane.iris.core.scripting.kotlin.environment.IrisExecutionEnvironment; import art.arcane.iris.core.scripting.kotlin.environment.IrisExecutionEnvironment;
import art.arcane.iris.engine.framework.Engine; 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 lombok.NonNull;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
@@ -26,5 +26,5 @@ public interface EngineEnvironment extends PackEnvironment {
void preprocessObject(@NonNull String script, @NonNull IrisRegistrant object); 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);
} }
@@ -23,9 +23,9 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.core.commands.CommandIris; import art.arcane.iris.core.commands.CommandIris;
import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.util.decree.DecreeContext; import art.arcane.iris.util.director.DirectorContext;
import art.arcane.iris.util.decree.DecreeContextHandler; import art.arcane.iris.util.director.DirectorContextHandler;
import art.arcane.iris.util.decree.DecreeSystem; import art.arcane.iris.util.director.DirectorSystem;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.iris.util.plugin.IrisService; import art.arcane.iris.util.plugin.IrisService;
import art.arcane.iris.util.plugin.VolmitSender; import art.arcane.iris.util.plugin.VolmitSender;
@@ -100,14 +100,14 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
buildDirectorContexts(), buildDirectorContexts(),
this::dispatchDirector, this::dispatchDirector,
this, this,
DecreeSystem.handlers DirectorSystem.handlers
)); ));
} }
private DirectorContextRegistry buildDirectorContexts() { private DirectorContextRegistry buildDirectorContexts() {
DirectorContextRegistry contexts = new DirectorContextRegistry(); 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()); registerContextHandler(contexts, entry.getKey(), entry.getValue());
} }
@@ -115,10 +115,10 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
} }
@SuppressWarnings({"rawtypes", "unchecked"}) @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) -> { contexts.register((Class) type, (invocation, map) -> {
if (invocation.getSender() instanceof BukkitDirectorSender sender) { if (invocation.getSender() instanceof BukkitDirectorSender sender) {
return ((DecreeContextHandler) handler).handle(new VolmitSender(sender.sender())); return ((DirectorContextHandler) handler).handle(new VolmitSender(sender.sender()));
} }
return null; return null;
@@ -136,13 +136,13 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
@Override @Override
public void beforeInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) { public void beforeInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) {
if (invocation.getSender() instanceof BukkitDirectorSender sender) { if (invocation.getSender() instanceof BukkitDirectorSender sender) {
DecreeContext.touch(new VolmitSender(sender.sender())); DirectorContext.touch(new VolmitSender(sender.sender()));
} }
} }
@Override @Override
public void afterInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) { public void afterInvoke(DirectorInvocation invocation, DirectorRuntimeNode node) {
DecreeContext.remove(); DirectorContext.remove();
} }
@Nullable @Nullable
@@ -201,7 +201,7 @@ public class CommandSVC implements IrisService, CommandExecutor, TabCompleter, D
} }
VolmitSender volmitSender = new VolmitSender(sender); VolmitSender volmitSender = new VolmitSender(sender);
volmitSender.sendDecreeHelp(request.get().command(), request.get().page()); volmitSender.sendDirectorHelp(request.get().command(), request.get().page());
return true; return true;
} }
@@ -279,7 +279,7 @@ public class IrisEngineSVC implements IrisService {
if (engine == null if (engine == null
|| engine.isClosed() || engine.isClosed()
|| engine.getMantle().getMantle().isClosed() || engine.getMantle().getMantle().isClosed()
|| !engine.getMantle().getMantle().shouldReduce(engine)) || !shouldReduce(engine))
return; return;
World engineWorld = engine.getWorld().realWorld(); World engineWorld = engine.getWorld().realWorld();
if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) { if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) {
@@ -306,7 +306,7 @@ public class IrisEngineSVC implements IrisService {
if (engine == null if (engine == null
|| engine.isClosed() || engine.isClosed()
|| engine.getMantle().getMantle().isClosed() || engine.getMantle().getMantle().isClosed()
|| !engine.getMantle().getMantle().shouldReduce(engine)) || !shouldReduce(engine))
return; return;
World engineWorld = engine.getWorld().realWorld(); World engineWorld = engine.getWorld().realWorld();
if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) { if (engineWorld != null && IrisToolbelt.isWorldMaintenanceActive(engineWorld)) {
@@ -357,5 +357,9 @@ public class IrisEngineSVC implements IrisService {
if (closed) return null; if (closed) return null;
return access.getEngine(); return access.getEngine();
} }
private boolean shouldReduce(Engine engine) {
return !engine.isStudio() || IrisSettings.get().getPerformance().isTrimMantleInStudio();
}
} }
} }
@@ -28,7 +28,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.data.Cuboid; import art.arcane.volmlib.util.data.Cuboid;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.math.M; 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.matter.WorldMatter;
import art.arcane.iris.util.plugin.IrisService; import art.arcane.iris.util.plugin.IrisService;
import art.arcane.iris.util.plugin.VolmitSender; import art.arcane.iris.util.plugin.VolmitSender;
@@ -47,8 +47,8 @@ import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.mantle.flag.MantleFlag; import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.math.M;
import art.arcane.volmlib.util.math.RNG; 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.matter.slices.container.JigsawStructureContainer; import art.arcane.volmlib.util.matter.slices.container.JigsawStructureContainer;
import art.arcane.volmlib.util.scheduling.ChronoLatch; import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
@@ -236,7 +236,7 @@ public class IrisEngine implements Engine {
@Override @Override
public IrisJigsawStructure getStructureAt(int x, int y, int z) { public IrisJigsawStructure getStructureAt(int x, int y, int z) {
var container = getMantle().getMantle().get(x, y, z, JigsawStructureContainer.class); 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) { private void warmupChunk(int x, int z) {
@@ -18,6 +18,10 @@
package art.arcane.iris.engine; 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.core.nms.container.Pair;
import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.engine.framework.Engine; 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.iris.engine.mantle.components.MantleObjectComponent;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; 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.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 lombok.*;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -44,7 +66,7 @@ import java.util.Set;
@ToString(exclude = "engine") @ToString(exclude = "engine")
public class IrisEngineMantle implements EngineMantle { public class IrisEngineMantle implements EngineMantle {
private final Engine engine; private final Engine engine;
private final Mantle mantle; private final Mantle<Matter> mantle;
@Getter(AccessLevel.NONE) @Getter(AccessLevel.NONE)
private final KMap<Integer, KList<MantleComponent>> components; private final KMap<Integer, KList<MantleComponent>> components;
private final KMap<MantleFlag, MantleComponent> registeredComponents = new KMap<>(); private final KMap<MantleFlag, MantleComponent> registeredComponents = new KMap<>();
@@ -55,7 +77,7 @@ public class IrisEngineMantle implements EngineMantle {
public IrisEngineMantle(Engine engine) { public IrisEngineMantle(Engine engine) {
this.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<>(); components = new KMap<>();
registerComponent(new MantleCarvingComponent(this)); registerComponent(new MantleCarvingComponent(this));
registerComponent(new MantleFluidBodyComponent(this)); registerComponent(new MantleFluidBodyComponent(this));
@@ -147,4 +169,239 @@ public class IrisEngineMantle implements EngineMantle {
public MantleObjectComponent getObjectComponent() { public MantleObjectComponent getObjectComponent() {
return object; 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();
}
};
}
} }
@@ -33,11 +33,13 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.collection.KSet;
import art.arcane.volmlib.util.format.Form; 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.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.M; 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.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterMarker; import art.arcane.volmlib.util.matter.MatterMarker;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.plugin.Chunks; import art.arcane.iris.util.plugin.Chunks;
@@ -245,7 +247,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() -> { J.a(() -> {
try { try {
Mantle mantle = getMantle(); Mantle<Matter> mantle = getMantle();
if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.DISCOVERED)) { if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.DISCOVERED)) {
mantle.flag(chunkX, chunkZ, MantleFlag.DISCOVERED, true); mantle.flag(chunkX, chunkZ, MantleFlag.DISCOVERED, true);
} }
@@ -352,7 +354,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
J.a(() -> { J.a(() -> {
boolean raised = false; boolean raised = false;
try { try {
Mantle mantle = getMantle(); Mantle<Matter> mantle = getMantle();
if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER)) { if (!mantle.hasFlag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER)) {
mantle.flag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER, true); mantle.flag(chunkX, chunkZ, MantleFlag.INITIAL_SPAWNED_MARKER, true);
raised = true; raised = true;
@@ -680,7 +682,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
} }
Chunk chunkRef = world.getChunkAt(chunkX, chunkZ); Chunk chunkRef = world.getChunkAt(chunkX, chunkZ);
var mantleChunk = getMantle().getChunk(chunkRef).use(); MantleChunk<Matter> mantleChunk = getMantle().getChunk(chunkRef).use();
try { try {
mantleChunk.raiseFlagUnchecked(MantleFlag.CUSTOM, () -> { mantleChunk.raiseFlagUnchecked(MantleFlag.CUSTOM, () -> {
mantleChunk.iterate(Identifier.class, (x, y, z, v) -> { mantleChunk.iterate(Identifier.class, (x, y, z, v) -> {
@@ -731,7 +733,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
spawn(block, ss); spawn(block, ss);
} }
public Mantle getMantle() { public Mantle<Matter> getMantle() {
return getEngine().getMantle().getMantle(); return getEngine().getMantle().getMantle();
} }
@@ -27,8 +27,8 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterBiomeInject; import art.arcane.volmlib.util.matter.MatterBiomeInject;
import art.arcane.iris.util.matter.slices.BiomeInjectMatter; import art.arcane.volmlib.util.matter.slices.BiomeInjectMatter;
import art.arcane.volmlib.util.scheduling.ChronoLatch; import art.arcane.volmlib.util.scheduling.ChronoLatch;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
@@ -18,8 +18,9 @@
package art.arcane.iris.engine.framework; 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.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
@@ -29,5 +30,5 @@ public interface BlockUpdater {
void updateChunk(Chunk c); 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);
} }
@@ -49,16 +49,17 @@ import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.function.Function2; import art.arcane.volmlib.util.function.Function2;
import art.arcane.iris.util.hunk.Hunk; 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.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.BlockPosition;
import art.arcane.volmlib.util.math.M; 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.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern; import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.volmlib.util.matter.MatterUpdate; import art.arcane.volmlib.util.matter.MatterUpdate;
import art.arcane.iris.util.matter.TileWrapper; 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.BurstExecutor;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.reflect.W; import art.arcane.iris.util.reflect.W;
@@ -400,7 +401,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates @BlockCoordinates
@Override @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); Block block = c.getBlock(x, y, z);
BlockData data = block.getBlockData(); BlockData data = block.getBlockData();
blockUpdatedMetric(); blockUpdatedMetric();
@@ -483,7 +484,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@BlockCoordinates @BlockCoordinates
@Override @Override
default KList<IrisLootTable> getLootTables(RNG rng, Block b) { 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 { try {
return getLootTables(rng, b, mc); return getLootTables(rng, b, mc);
} finally { } finally {
@@ -492,7 +493,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
} }
@BlockCoordinates @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 rx = b.getX();
int rz = b.getZ(); int rz = b.getZ();
int ry = b.getY() - getWorld().minHeight(); 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) { 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 { try {
return getObjectPlacement(x, y, z, chunk); return getObjectPlacement(x, y, z, chunk);
} finally { } 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); String objectAt = chunk.get(x & 15, y, z & 15, String.class);
if (objectAt == null || objectAt.isEmpty()) { if (objectAt == null || objectAt.isEmpty()) {
return null; 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); JigsawPieceContainer container = chunk.get(x & 15, y, z & 15, JigsawPieceContainer.class);
if (container != null) { if (container != null) {
IrisJigsawPiece piece = container.load(getData()); IrisJigsawPiece piece = getData().getJigsawPieceLoader().load(container.getLoadKey());
if (piece.getObject().equals(object)) if (piece.getObject().equals(object))
return new PlacedObject(piece.getPlacementOptions(), getData().getObjectLoader().load(object), id, x, z); return new PlacedObject(piece.getPlacementOptions(), getData().getObjectLoader().load(object), id, x, z);
} }
@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext; import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public interface EngineActuator<O> extends EngineComponent { public interface EngineActuator<O> extends EngineComponent {
@BlockCoordinates @BlockCoordinates
void actuate(int x, int z, Hunk<O> output, boolean multicore, ChunkContext context); void actuate(int x, int z, Hunk<O> output, boolean multicore, ChunkContext context);
@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext; import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedActuator<T> extends EngineAssignedComponent implements EngineActuator<T> { public abstract class EngineAssignedActuator<T> extends EngineAssignedComponent implements EngineActuator<T> {
public EngineAssignedActuator(Engine engine, String name) { public EngineAssignedActuator(Engine engine, String name) {
super(engine, name); super(engine, name);
@@ -20,7 +20,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedBiModifier<A, B> extends EngineAssignedComponent implements EngineBiModifier<A, B> { public abstract class EngineAssignedBiModifier<A, B> extends EngineAssignedComponent implements EngineBiModifier<A, B> {
public EngineAssignedBiModifier(Engine engine, String name) { public EngineAssignedBiModifier(Engine engine, String name) {
super(engine, name); super(engine, name);
@@ -22,7 +22,6 @@ import art.arcane.iris.Iris;
import art.arcane.iris.util.context.ChunkContext; import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent implements EngineModifier<T> { public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent implements EngineModifier<T> {
public EngineAssignedModifier(Engine engine, String name) { public EngineAssignedModifier(Engine engine, String name) {
super(engine, name); super(engine, name);
@@ -22,7 +22,7 @@ import art.arcane.iris.Iris;
import art.arcane.iris.core.events.IrisEngineHotloadEvent; import art.arcane.iris.core.events.IrisEngineHotloadEvent;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.format.C; 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.plugin.VolmitSender;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import org.bukkit.*; import org.bukkit.*;
@@ -20,7 +20,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public interface EngineBiModifier<A, B> extends EngineComponent { public interface EngineBiModifier<A, B> extends EngineComponent {
void modify(int x, int z, Hunk<A> a, Hunk<B> b); void modify(int x, int z, Hunk<A> a, Hunk<B> b);
} }
@@ -21,7 +21,6 @@ package art.arcane.iris.engine.framework;
import art.arcane.iris.util.context.ChunkContext; import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
public interface EngineModifier<T> extends EngineComponent { public interface EngineModifier<T> extends EngineComponent {
@BlockCoordinates @BlockCoordinates
void modify(int x, int z, Hunk<T> t, boolean multicore, ChunkContext context); void modify(int x, int z, Hunk<T> t, boolean multicore, ChunkContext context);
@@ -30,7 +30,7 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.M; 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.math.Spiraler;
import art.arcane.volmlib.util.matter.MatterCavern; import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
@@ -4,7 +4,7 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.engine.object.IrisJigsawStructure; import art.arcane.iris.engine.object.IrisJigsawStructure;
import art.arcane.iris.engine.object.IrisObject; import art.arcane.iris.engine.object.IrisObject;
import art.arcane.volmlib.util.collection.KList; 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.volmlib.util.math.Spiraler;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
@@ -25,12 +25,13 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.placer.WorldObjectPlacer; import art.arcane.iris.engine.framework.placer.WorldObjectPlacer;
import art.arcane.iris.engine.object.*; import art.arcane.iris.engine.object.*;
import art.arcane.volmlib.util.collection.KList; 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.iris.util.math.Position2; import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.slices.container.JigsawPieceContainer; import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.matter.slices.container.JigsawStructureContainer; import art.arcane.volmlib.util.matter.slices.container.JigsawPieceContainer;
import art.arcane.iris.util.matter.slices.container.JigsawStructuresContainer; 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 art.arcane.iris.util.scheduling.J;
import lombok.Data; import lombok.Data;
import org.bukkit.Axis; 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(); IrisObjectPlacement options = new IrisObjectPlacement();
options.setRotation(IrisObjectRotation.of(0,0,0)); options.setRotation(IrisObjectRotation.of(0,0,0));
int startHeight = pieces.get(0).getPosition().getY(); int startHeight = pieces.get(0).getPosition().getY();
@@ -93,13 +94,13 @@ public class PlannedStructure {
Position2 regionPos = new Position2(chunkPos.getX() >> 5, chunkPos.getZ() >> 5); Position2 regionPos = new Position2(chunkPos.getX() >> 5, chunkPos.getZ() >> 5);
JigsawStructuresContainer slice = e.get(regionPos.getX(), 0, regionPos.getZ(), JigsawStructuresContainer.class); JigsawStructuresContainer slice = e.get(regionPos.getX(), 0, regionPos.getZ(), JigsawStructuresContainer.class);
if (slice == null) slice = new JigsawStructuresContainer(); if (slice == null) slice = new JigsawStructuresContainer();
slice.add(structure, chunkPos); slice.add(structure.getLoadKey(), chunkPos);
e.set(regionPos.getX(), 0, regionPos.getZ(), slice); e.set(regionPos.getX(), 0, regionPos.getZ(), slice);
} }
return placed; 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; IrisObjectPlacement options = o;
if (i.getPiece().getPlacementOptions() != null) { if (i.getPiece().getPlacementOptions() != null) {
@@ -150,8 +151,8 @@ public class PlannedStructure {
} }
int id = rng.i(0, Integer.MAX_VALUE); int id = rng.i(0, Integer.MAX_VALUE);
JigsawPieceContainer piece = JigsawPieceContainer.toContainer(i.getPiece()); JigsawPieceContainer piece = new JigsawPieceContainer(i.getPiece().getLoadKey());
JigsawStructureContainer structure = JigsawStructureContainer.toContainer(getStructure()); JigsawStructureContainer structure = new JigsawStructureContainer(getStructure().getLoadKey());
i.setRealPositions(xx, height, zz, placer); i.setRealPositions(xx, height, zz, placer);
return v.place(xx, height, zz, placer, options, rng, (b, data) -> { return v.place(xx, height, zz, placer, options, rng, (b, data) -> {
placer.setData(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id); placer.setData(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id);
@@ -33,14 +33,14 @@ import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.Mantle; import art.arcane.volmlib.util.mantle.runtime.Mantle;
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.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.matter.MatterCavern; import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.volmlib.util.matter.MatterFluidBody; import art.arcane.volmlib.util.matter.MatterFluidBody;
import art.arcane.volmlib.util.matter.MatterMarker; import art.arcane.volmlib.util.matter.MatterMarker;
import art.arcane.iris.util.matter.*; import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.matter.slices.UpdateMatter; import art.arcane.volmlib.util.matter.slices.UpdateMatter;
import art.arcane.iris.util.parallel.MultiBurst; import art.arcane.iris.util.parallel.MultiBurst;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import org.bukkit.World; import org.bukkit.World;
@@ -54,7 +54,7 @@ import java.util.concurrent.TimeUnit;
public interface EngineMantle extends MatterGenerator { public interface EngineMantle extends MatterGenerator {
BlockData AIR = B.get("AIR"); BlockData AIR = B.get("AIR");
Mantle getMantle(); Mantle<Matter> getMantle();
Engine getEngine(); Engine getEngine();
@@ -248,7 +248,7 @@ public interface EngineMantle extends MatterGenerator {
default void cleanupChunk(int x, int z) { default void cleanupChunk(int x, int z) {
if (!isCovered(x, z)) return; if (!isCovered(x, z)) return;
MantleChunk chunk = getMantle().getChunk(x, z).use(); MantleChunk<Matter> chunk = getMantle().getChunk(x, z).use();
try { try {
chunk.raiseFlagUnchecked(MantleFlag.CLEANED, () -> { chunk.raiseFlagUnchecked(MantleFlag.CLEANED, () -> {
chunk.deleteSlices(BlockData.class); chunk.deleteSlices(BlockData.class);
@@ -23,8 +23,9 @@ import art.arcane.iris.engine.IrisComplex;
import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.util.context.ChunkContext; import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; 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.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -55,7 +56,7 @@ public interface MantleComponent extends Comparable<MantleComponent> {
EngineMantle getEngineMantle(); EngineMantle getEngineMantle();
default Mantle getMantle() { default Mantle<Matter> getMantle() {
return getEngineMantle().getMantle(); return getEngineMantle().getMantle();
} }
@@ -35,10 +35,10 @@ import art.arcane.iris.util.data.B;
import art.arcane.iris.util.data.IrisCustomData; import art.arcane.iris.util.data.IrisCustomData;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.function.Function3; import art.arcane.volmlib.util.function.Function3;
import art.arcane.iris.util.mantle.Mantle; import art.arcane.volmlib.util.mantle.runtime.Mantle;
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.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.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.matter.TileWrapper; import art.arcane.iris.util.matter.TileWrapper;
import art.arcane.iris.util.noise.CNG; import art.arcane.iris.util.noise.CNG;
@@ -55,13 +55,13 @@ import static art.arcane.iris.engine.mantle.EngineMantle.AIR;
@Data @Data
public class MantleWriter implements IObjectPlacer, AutoCloseable { public class MantleWriter implements IObjectPlacer, AutoCloseable {
private final EngineMantle engineMantle; private final EngineMantle engineMantle;
private final Mantle mantle; private final Mantle<Matter> mantle;
private final Map<Long, MantleChunk> cachedChunks; private final Map<Long, MantleChunk<Matter>> cachedChunks;
private final int radius; private final int radius;
private final int x; private final int x;
private final int z; 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.engineMantle = engineMantle;
this.mantle = mantle; this.mantle = mantle;
this.radius = radius * 2; this.radius = radius * 2;
@@ -76,7 +76,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
if (foliaMaintenance && IrisSettings.get().getGeneral().isDebug()) { if (foliaMaintenance && IrisSettings.get().getGeneral().isDebug()) {
Iris.info("MantleWriter using sequential chunk prefetch for maintenance regen at " + x + "," + z + "."); 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( mantle.getChunks(
x - radius, x - radius,
x + radius, x + radius,
@@ -163,7 +163,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
return; return;
} }
MantleChunk chunk = acquireChunk(cx, cz); MantleChunk<Matter> chunk = acquireChunk(cx, cz);
if (chunk == null) return; if (chunk == null) return;
Matter matter = chunk.getOrCreate(y >> 4); Matter matter = chunk.getOrCreate(y >> 4);
@@ -178,7 +178,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
return null; return null;
} }
MantleChunk chunk = acquireChunk(cx, cz); MantleChunk<Matter> chunk = acquireChunk(cx, cz);
if (chunk == null) { if (chunk == null) {
return null; return null;
} }
@@ -189,14 +189,14 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable {
} }
@ChunkCoordinates @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 if (cx < this.x - radius || cx > this.x + radius
|| cz < this.z - radius || cz > this.z + radius) { || cz < this.z - radius || cz > this.z + radius) {
Iris.error("Mantle Writer Accessed chunk out of bounds" + cx + "," + cz); Iris.error("Mantle Writer Accessed chunk out of bounds" + cx + "," + cz);
return null; return null;
} }
final Long key = Cache.key(cx, cz); final Long key = Cache.key(cx, cz);
MantleChunk chunk = cachedChunks.get(key); MantleChunk<Matter> chunk = cachedChunks.get(key);
if (chunk == null) { if (chunk == null) {
chunk = mantle.getChunk(cx, cz).use(); chunk = mantle.getChunk(cx, cz).use();
var old = cachedChunks.put(key, chunk); var old = cachedChunks.put(key, chunk);
@@ -31,9 +31,9 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.mantle.flag.ReservedFlag; 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.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 art.arcane.iris.util.noise.CNG;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -68,7 +68,7 @@ public class MantleJigsawComponent extends IrisMantleComponent {
for (Position2 pos : poss) { for (Position2 pos : poss) {
if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) { if (x == pos.getX() >> 4 && z == pos.getZ() >> 4) {
IrisJigsawStructure structure = getData().getJigsawStructureLoader().load(getDimension().getStronghold()); 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; return;
} }
} }
@@ -113,7 +113,8 @@ public class MantleJigsawComponent extends IrisMantleComponent {
JigsawStructuresContainer container = getMantle().get(pos.getX(), 0, pos.getZ(), JigsawStructuresContainer.class); JigsawStructuresContainer container = getMantle().get(pos.getX(), 0, pos.getZ(), JigsawStructuresContainer.class);
if (container == null) continue; if (container == null) continue;
for (String key : container.getStructures()) { 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())));
} }
} }
} }
@@ -37,7 +37,7 @@ import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.mantle.flag.ReservedFlag; import art.arcane.volmlib.util.mantle.flag.ReservedFlag;
import art.arcane.volmlib.util.math.RNG; 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.CNG;
import art.arcane.iris.util.noise.NoiseType; import art.arcane.iris.util.noise.NoiseType;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
@@ -30,12 +30,13 @@ import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates;
import art.arcane.volmlib.util.function.Consumer4; import art.arcane.volmlib.util.function.Consumer4;
import art.arcane.iris.util.hunk.Hunk; import art.arcane.iris.util.hunk.Hunk;
import art.arcane.iris.util.mantle.Mantle; import art.arcane.volmlib.util.mantle.runtime.Mantle;
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.volmlib.util.math.M;
import art.arcane.volmlib.util.math.RNG; 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.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 art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import lombok.Data; import lombok.Data;
import org.bukkit.Material; import org.bukkit.Material;
@@ -57,8 +58,8 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
@ChunkCoordinates @ChunkCoordinates
public void onModify(int x, int z, Hunk<BlockData> output, boolean multicore, ChunkContext context) { public void onModify(int x, int z, Hunk<BlockData> output, boolean multicore, ChunkContext context) {
PrecisionStopwatch p = PrecisionStopwatch.start(); PrecisionStopwatch p = PrecisionStopwatch.start();
Mantle mantle = getEngine().getMantle().getMantle(); Mantle<Matter> mantle = getEngine().getMantle().getMantle();
MantleChunk mc = mantle.getChunk(x, z).use(); MantleChunk<Matter> mc = mantle.getChunk(x, z).use();
KMap<Long, KList<Integer>> positions = new KMap<>(); KMap<Long, KList<Integer>> positions = new KMap<>();
KMap<IrisPosition, MatterCavern> walls = new KMap<>(); KMap<IrisPosition, MatterCavern> walls = new KMap<>();
Consumer4<Integer, Integer, Integer, MatterCavern> iterator = (xx, yy, zz, c) -> { Consumer4<Integer, Integer, Integer, MatterCavern> iterator = (xx, yy, zz, c) -> {
@@ -170,7 +171,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<BlockData> {
mc.release(); 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 decFloor = B.isSolid(output.getClosest(rx, zone.floor - 1, rz));
boolean decCeiling = B.isSolid(output.getClosest(rx, zone.ceiling + 1, rz)); boolean decCeiling = B.isSolid(output.getClosest(rx, zone.ceiling + 1, rz));
int center = (zone.floor + zone.ceiling) / 2; int center = (zone.floor + zone.ceiling) / 2;
@@ -25,7 +25,7 @@ import art.arcane.iris.util.context.ChunkContext;
import art.arcane.iris.util.data.B; import art.arcane.iris.util.data.B;
import art.arcane.volmlib.util.data.HeightMap; import art.arcane.volmlib.util.data.HeightMap;
import art.arcane.iris.util.hunk.Hunk; 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.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern; import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.iris.util.parallel.BurstExecutor; import art.arcane.iris.util.parallel.BurstExecutor;
@@ -21,7 +21,6 @@ package art.arcane.iris.engine.object;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.iris.util.stream.ProceduralStream; import art.arcane.iris.util.stream.ProceduralStream;
import art.arcane.iris.util.stream.interpolation.Interpolated; import art.arcane.iris.util.stream.interpolation.Interpolated;
import java.util.List; import java.util.List;
public interface IRare { public interface IRare {
@@ -36,9 +36,9 @@ import art.arcane.iris.util.data.DataProvider;
import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.io.IO;
import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.volmlib.util.mantle.flag.MantleFlag; 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.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 art.arcane.iris.util.plugin.VolmitSender;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@@ -24,7 +24,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.data.Cuboid.CuboidDirection; import art.arcane.volmlib.util.data.Cuboid.CuboidDirection;
import art.arcane.volmlib.util.math.DOP; 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.Axis;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.data.type.Jigsaw; import org.bukkit.block.data.type.Jigsaw;
@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern; 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; import lombok.Data;
@Snippet("carving-elipsoid") @Snippet("carving-elipsoid")
@@ -21,7 +21,6 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Desc;
import art.arcane.iris.util.stream.ProceduralStream; import art.arcane.iris.util.stream.ProceduralStream;
import java.util.function.Function; import java.util.function.Function;
@Desc("Represents a stream from the engine") @Desc("Represents a stream from the engine")
@@ -27,7 +27,7 @@ import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.math.Vector3d; import art.arcane.volmlib.util.math.Vector3d;
import art.arcane.volmlib.util.matter.MatterMarker; 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 art.arcane.iris.util.scheduling.J;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@@ -30,7 +30,7 @@ import art.arcane.iris.util.data.B;
import art.arcane.iris.util.format.C; import art.arcane.iris.util.format.C;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import art.arcane.volmlib.util.math.RNG; 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.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -35,6 +35,7 @@ import art.arcane.volmlib.util.format.Form;
import art.arcane.iris.util.interpolation.IrisInterpolation; import art.arcane.iris.util.interpolation.IrisInterpolation;
import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.volmlib.util.math.BlockPosition; import art.arcane.volmlib.util.math.BlockPosition;
import art.arcane.volmlib.util.math.Position2;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.util.math.*; import art.arcane.iris.util.math.*;
import art.arcane.volmlib.util.matter.MatterMarker; import art.arcane.volmlib.util.matter.MatterMarker;
@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern; 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; import lombok.Data;
@Snippet("carving-pyramid") @Snippet("carving-pyramid")
@@ -24,7 +24,7 @@ import art.arcane.iris.engine.mantle.MantleWriter;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern; 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; import lombok.Data;
@Snippet("carving-sphere") @Snippet("carving-sphere")
@@ -4,7 +4,7 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.EngineAssignedComponent; import art.arcane.iris.engine.framework.EngineAssignedComponent;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.documentation.ChunkCoordinates; 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.volmlib.util.math.RNG;
import art.arcane.iris.util.noise.CNG; import art.arcane.iris.util.noise.CNG;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -24,7 +24,6 @@ import art.arcane.iris.util.noise.CNG;
import art.arcane.iris.util.noise.CNGFactory; import art.arcane.iris.util.noise.CNGFactory;
import art.arcane.iris.util.noise.NoiseType; import art.arcane.iris.util.noise.NoiseType;
import art.arcane.iris.util.stream.ProceduralStream; import art.arcane.iris.util.stream.ProceduralStream;
@Desc("Styles of noise") @Desc("Styles of noise")
public enum NoiseStyle { public enum NoiseStyle {
@Desc("White Noise is like static. Useful for block scattering but not terrain.") @Desc("White Noise is like static. Useful for block scattering but not terrain.")
@@ -2,9 +2,10 @@ package art.arcane.iris.engine.object.matter;
import art.arcane.iris.core.loader.IrisRegistrant; import art.arcane.iris.core.loader.IrisRegistrant;
import art.arcane.iris.engine.object.IrisObject; import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.util.matter.IrisMatterSupport;
import art.arcane.volmlib.util.json.JSONObject; import art.arcane.volmlib.util.json.JSONObject;
import art.arcane.iris.util.matter.IrisMatter; import art.arcane.volmlib.util.matter.IrisMatter;
import art.arcane.iris.util.matter.Matter; import art.arcane.volmlib.util.matter.Matter;
import art.arcane.iris.util.plugin.VolmitSender; import art.arcane.iris.util.plugin.VolmitSender;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -22,21 +23,28 @@ public class IrisMatterObject extends IrisRegistrant {
} }
public IrisMatterObject(int w, int h, int d) { public IrisMatterObject(int w, int h, int d) {
this(new IrisMatter(w, h, d)); this(createMatter(w, h, d));
} }
public IrisMatterObject(Matter matter) { public IrisMatterObject(Matter matter) {
IrisMatterSupport.ensureRegistered();
this.matter = matter; this.matter = matter;
} }
public static IrisMatterObject from(IrisObject object) { 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 { public static IrisMatterObject from(File j) throws IOException, ClassNotFoundException {
IrisMatterSupport.ensureRegistered();
return new IrisMatterObject(Matter.read(j)); 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 @Override
public String getFolderName() { public String getFolderName() {
return "matter"; return "matter";
@@ -24,9 +24,10 @@ import art.arcane.iris.engine.object.IRare;
import art.arcane.iris.engine.object.IrisStyledRange; import art.arcane.iris.engine.object.IrisStyledRange;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.collection.KList; 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.volmlib.util.math.RNG;
import art.arcane.iris.util.matter.MatterSlice; import art.arcane.volmlib.util.matter.MatterSlice;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -37,7 +37,7 @@ import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.data.IrisBiomeStorage; import art.arcane.volmlib.util.data.IrisBiomeStorage;
import art.arcane.iris.util.hunk.view.BiomeGridHunkHolder; import art.arcane.iris.util.hunk.view.BiomeGridHunkHolder;
import art.arcane.iris.util.hunk.view.ChunkDataHunkHolder; 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.volmlib.util.scheduling.ChronoLatch;
import art.arcane.iris.util.scheduling.J; import art.arcane.iris.util.scheduling.J;
import art.arcane.volmlib.util.scheduling.Looper; import art.arcane.volmlib.util.scheduling.Looper;
@@ -103,7 +103,13 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
this.studio = studio; this.studio = studio;
this.dataLocation = dataLocation; this.dataLocation = dataLocation;
this.dimensionKey = dimensionKey; 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); Bukkit.getServer().getPluginManager().registerEvents(this, Iris.instance);
} }
@@ -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;
}
}
@@ -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();
});
}
}
@@ -1,5 +0,0 @@
package art.arcane.iris.util.decree;
public interface DirectorParameterHandler<T>
extends DecreeExecutor, art.arcane.volmlib.util.director.DirectorParameterHandler<T> {
}
@@ -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.volmlib.util.director.context.DirectorContextBase;
import art.arcane.iris.util.plugin.VolmitSender; import art.arcane.iris.util.plugin.VolmitSender;
public class DecreeContext { public class DirectorContext {
private static final DirectorContextBase<VolmitSender> context = new DirectorContextBase<>(); private static final DirectorContextBase<VolmitSender> context = new DirectorContextBase<>();
public static VolmitSender get() { public static VolmitSender get() {
@@ -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();
});
}
}
@@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.volmlib.util.director.DirectorExecutorBase;
import art.arcane.iris.core.loader.IrisData; 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 art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public interface DecreeExecutor extends DirectorExecutorBase { public interface DirectorExecutor extends DirectorExecutorBase {
default VolmitSender sender() { default VolmitSender sender() {
return DecreeContext.get(); return DirectorContext.get();
} }
default Player player() { default Player player() {
@@ -0,0 +1,5 @@
package art.arcane.iris.util.director;
public interface DirectorParameterHandler<T>
extends DirectorExecutor, art.arcane.volmlib.util.director.DirectorParameterHandler<T> {
}
@@ -16,15 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.volmlib.util.director.DirectorSystemSupport;
import art.arcane.iris.Iris; import art.arcane.iris.Iris;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
public final class DecreeSystem { public final class DirectorSystem {
public static final KList<DirectorParameterHandler<?>> handlers = Iris.initialize("art.arcane.iris.util.decree.handlers", null).convert((i) -> (DirectorParameterHandler<?>) i); 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 * @param type The type to handle
* @return The corresponding {@link DirectorParameterHandler}, or null * @return The corresponding {@link DirectorParameterHandler}, or null
*/ */
public static DirectorParameterHandler<?> getHandler(Class<?> type) { public static art.arcane.volmlib.util.director.DirectorParameterHandler<?> getHandler(Class<?> type) {
DirectorParameterHandler<?> handler = DirectorSystemSupport.getHandler(handlers, type, (h, t) -> h.supports(t)); art.arcane.volmlib.util.director.DirectorParameterHandler<?> handler = DirectorSystemSupport.getHandler(handlers, type, (h, t) -> h.supports(t));
if (handler != null) { if (handler != null) {
return handler; return handler;
} }
@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisBiome; 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; import art.arcane.iris.util.plugin.VolmitSender;
public class BiomeContextHandler implements DecreeContextHandler<IrisBiome> { public class BiomeContextHandler implements DirectorContextHandler<IrisBiome> {
public Class<IrisBiome> getType() { public Class<IrisBiome> getType() {
return IrisBiome.class; return IrisBiome.class;
} }
@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisDimension; 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; import art.arcane.iris.util.plugin.VolmitSender;
public class DimensionContextHandler implements DecreeContextHandler<IrisDimension> { public class DimensionContextHandler implements DirectorContextHandler<IrisDimension> {
public Class<IrisDimension> getType() { public Class<IrisDimension> getType() {
return IrisDimension.class; return IrisDimension.class;
} }
@@ -16,15 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.core.tools.IrisToolbelt;
import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisGenerator; 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; import art.arcane.iris.util.plugin.VolmitSender;
public class GeneratorContextHandler implements DecreeContextHandler<IrisGenerator> { public class GeneratorContextHandler implements DirectorContextHandler<IrisGenerator> {
@Override @Override
public Class<IrisGenerator> getType() { public Class<IrisGenerator> getType() {
return IrisGenerator.class; return IrisGenerator.class;
@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisRegion; 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; import art.arcane.iris.util.plugin.VolmitSender;
public class RegionContextHandler implements DecreeContextHandler<IrisRegion> { public class RegionContextHandler implements DirectorContextHandler<IrisRegion> {
public Class<IrisRegion> getType() { public Class<IrisRegion> getType() {
return IrisRegion.class; return IrisRegion.class;
} }
@@ -16,13 +16,13 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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 art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
public class VectorContextHandler implements DecreeContextHandler<Vector> { public class VectorContextHandler implements DirectorContextHandler<Vector> {
public Class<Vector> getType() { public Class<Vector> getType() {
return Vector.class; return Vector.class;
} }
@@ -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.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 art.arcane.iris.util.plugin.VolmitSender;
import org.bukkit.World; import org.bukkit.World;
public class WorldContextHandler extends WorldContextHandlerBase<VolmitSender> implements DecreeContextHandler<World> { public class WorldContextHandler extends WorldContextHandlerBase<VolmitSender> implements DirectorContextHandler<World> {
@Override @Override
protected boolean isPlayer(VolmitSender sender) { protected boolean isPlayer(VolmitSender sender) {
return sender.isPlayer(); return sender.isPlayer();
@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.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 class BiomeHandler extends RegistrantHandler<IrisBiome> {
public BiomeHandler() { public BiomeHandler() {
@@ -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.director.DirectorContext;
import art.arcane.iris.util.decree.DirectorParameterHandler; import art.arcane.volmlib.util.director.DirectorParameterHandler;
import art.arcane.iris.util.decree.DecreeSystem; import art.arcane.iris.util.director.DirectorSystem;
import art.arcane.volmlib.util.director.handlers.base.BlockVectorHandlerBase; import art.arcane.volmlib.util.director.handlers.base.BlockVectorHandlerBase;
import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.format.Form;
import org.bukkit.FluidCollisionMode; import org.bukkit.FluidCollisionMode;
@@ -14,22 +14,22 @@ import java.util.List;
public class BlockVectorHandler extends BlockVectorHandlerBase implements DirectorParameterHandler<BlockVector> { public class BlockVectorHandler extends BlockVectorHandlerBase implements DirectorParameterHandler<BlockVector> {
@Override @Override
protected boolean isSenderPlayer() { protected boolean isSenderPlayer() {
return DecreeContext.get().isPlayer(); return DirectorContext.get().isPlayer();
} }
@Override @Override
protected BlockVector getSenderBlockVector() { protected BlockVector getSenderBlockVector() {
return DecreeContext.get().player().getLocation().toVector().toBlockVector(); return DirectorContext.get().player().getLocation().toVector().toBlockVector();
} }
@Override @Override
protected BlockVector getLookBlockVector() { 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 @Override
protected List<?> playerPossibilities(String query) { protected List<?> playerPossibilities(String query) {
return DecreeSystem.getHandler(Player.class).getPossibilities(query); return DirectorSystem.getHandler(Player.class).getPossibilities(query);
} }
@Override @Override
@@ -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.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> { public class BooleanHandler extends BooleanHandlerBase implements DirectorParameterHandler<Boolean> {
} }
@@ -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.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> { public class ByteHandler extends ByteHandlerBase implements DirectorParameterHandler<Byte> {
} }
@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.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 class CaveHandler extends RegistrantHandler<IrisCave> {
public CaveHandler() { public CaveHandler() {
@@ -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.iris.core.nms.datapack.DataVersion;
import art.arcane.volmlib.util.collection.KList; 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; import art.arcane.volmlib.util.director.exceptions.DirectorParsingException;
public class DataVersionHandler implements DirectorParameterHandler<DataVersion> { public class DataVersionHandler implements DirectorParameterHandler<DataVersion> {
@@ -16,14 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.IrisSettings;
import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.core.tools.IrisToolbelt;
import art.arcane.iris.engine.object.IrisDimension; import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException; 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; import java.util.Locale;
@@ -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.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> { public class DoubleHandler extends DoubleHandlerBase implements DirectorParameterHandler<Double> {
} }
@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.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> { public class EntityHandler extends RegistrantHandler<IrisEntity> {
@@ -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.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> { public class FloatHandler extends FloatHandlerBase implements DirectorParameterHandler<Float> {
} }
@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.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 class GeneratorHandler extends RegistrantHandler<IrisGenerator> {
public GeneratorHandler() { public GeneratorHandler() {
@@ -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.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> { public class IntegerHandler extends IntegerHandlerBase implements DirectorParameterHandler<Integer> {
} }
@@ -16,10 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * 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.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 class JigsawPieceHandler extends RegistrantHandler<IrisJigsawPiece> {
public JigsawPieceHandler() { public JigsawPieceHandler() {

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