[VERY VERY VERY BAD IDEA]

This commit is contained in:
Brian Neumann-Fopiano committed 2026-09-20 04:24:42 -04:00
1 parent f0e7fea13b
commit 2fa0853e42
892 files changed
+13482 -53554

No files matched your search

@@ -56,7 +56,7 @@ import art.arcane.volmlib.util.director.help.DirectorMiniMenu;
import art.arcane.volmlib.util.localization.BukkitLanguageSwitcher;
import art.arcane.iris.integration.MultiverseCoreLink;
import art.arcane.iris.platform.bukkit.nms.INMS;
import art.arcane.iris.platform.bukkit.nms.ServerShutdownBoundary;
import art.arcane.volmlib.nativelib.terrain.ServerShutdownBoundary;
import art.arcane.iris.studio.view.BukkitGuiHost;
import art.arcane.iris.studio.view.PregeneratorJob;
import art.arcane.iris.platform.bukkit.BoardSVC;
@@ -782,7 +782,7 @@ public class Iris extends VolmitPlugin implements Listener, ReloadAware {
reconcileStartupWorlds();
}
IrisToolbelt.retainMantleDataForSlice(String.class.getCanonicalName());
// The mantle stores block values as PlatformBlockState, so a BlockData retention can never
// The mantle stores block values as NativeBlockState, so a BlockData retention can never
// match a slice type; the block-state slice is deliberately never retainable (regenerable, huge).
IrisToolbelt.retainMantleDataForSlice(TreeBlockMaterial.class.getCanonicalName());
});
@@ -1270,6 +1270,7 @@ public class Iris extends VolmitPlugin implements Listener, ReloadAware {
} else {
try {
INMS.get().releasePluginClassLoaderClose();
SlimJar.closeNativeProviders();
} catch (Throwable failure) {
SHUTDOWN_ERRORS.println("[Iris] Failed to release the plugin class loader after runtime cleanup.");
failure.printStackTrace(SHUTDOWN_ERRORS);
@@ -9,7 +9,7 @@ import art.arcane.iris.world.lifecycle.WorldReplacementBootstrap;
import art.arcane.iris.world.lifecycle.WorldReplacementBootstrapMarker;
import art.arcane.iris.pack.DefaultPackBootstrapProvisioner;
import art.arcane.iris.pack.DefaultPackBootstrapProvisioner.BootstrapRequest;
import art.arcane.iris.platform.bukkit.nms.datapack.DataVersion;
import art.arcane.iris.pack.datapack.DataVersion;
import io.papermc.paper.ServerBuildInfo;
import art.arcane.iris.pack.DefaultPackBootstrapProvisioner.ProvisionResult;
import art.arcane.iris.platform.bootstrap.SlimJar;
@@ -46,6 +46,7 @@ public final class IrisBootstrap implements PluginBootstrap {
private static void loadRuntimeLibraries(BootstrapContext context) {
SlimJar.loadBootstrap(
context.getDataDirectory().resolve("cache").resolve("libraries"),
ServerBuildInfo.buildInfo().minecraftVersionId(),
new SlimJar.BootstrapLogger() {
@Override
public void info(String message) {
@@ -1,6 +1,7 @@
package art.arcane.iris;
import art.arcane.iris.platform.bootstrap.SlimJar;
import io.papermc.paper.ServerBuildInfo;
import io.papermc.paper.plugin.bootstrap.PluginProviderContext;
import io.papermc.paper.plugin.loader.PluginClasspathBuilder;
import io.papermc.paper.plugin.loader.PluginLoader;
@@ -18,7 +19,7 @@ public final class IrisPluginLoader implements PluginLoader {
public void classloader(PluginClasspathBuilder classpathBuilder) {
PluginProviderContext context = classpathBuilder.getContext();
Path libraryRoot = context.getDataDirectory().resolve("cache").resolve("libraries");
SlimJar.loadBootstrap(libraryRoot, new SlimJar.BootstrapLogger() {
SlimJar.loadBootstrap(libraryRoot, ServerBuildInfo.buildInfo().minecraftVersionId(), new SlimJar.BootstrapLogger() {
@Override
public void info(String message) {
context.getLogger().info(message);
@@ -35,7 +36,9 @@ public final class IrisPluginLoader implements PluginLoader {
}
});
for (Path library : relocatedLibraries(libraryRoot)) {
classpathBuilder.addLibrary(new JarLibrary(library));
if (!library.startsWith(libraryRoot.resolve("com/github/VolmitSoftware/VolmLib"))) {
classpathBuilder.addLibrary(new JarLibrary(library));
}
}
}
@@ -21,7 +21,7 @@ package art.arcane.iris.command;
import com.google.gson.JsonObject;
import art.arcane.iris.Iris;
import art.arcane.iris.pack.datapack.ServerConfigurator;
import art.arcane.iris.platform.bukkit.nms.datapack.DataVersion;
import art.arcane.iris.pack.datapack.DataVersion;
import art.arcane.iris.world.runtime.ChunkClearer;
import art.arcane.iris.generation.validation.GoldenHashScanner;
import art.arcane.iris.world.runtime.InPlaceChunkRegenerator;
@@ -44,7 +44,7 @@ import art.arcane.iris.generation.block.TileData;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.IrisLogging;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.volmlib.nativelib.terrain.NativeBlockState;
import art.arcane.volmlib.util.data.Cuboid;
import art.arcane.iris.generation.block.IrisCustomData;
import art.arcane.iris.command.specialhandlers.NullableDimensionHandler;
@@ -218,7 +218,7 @@ public class CommandObject implements DirectorExecutor {
}
@Override
public void set(int x, int y, int z, PlatformBlockState s) {
public void set(int x, int y, int z, NativeBlockState s) {
BlockData d = (BlockData) s.nativeHandle();
Block block = world.getBlockAt(x, y, z);
@@ -242,7 +242,7 @@ public class CommandObject implements DirectorExecutor {
}
@Override
public PlatformBlockState get(int x, int y, int z) {
public NativeBlockState get(int x, int y, int z) {
return BukkitBlockState.of(world.getBlockAt(x, y, z).getBlockData());
}
@@ -20,7 +20,7 @@ package art.arcane.iris.command;
import art.arcane.iris.Iris;
import art.arcane.iris.configuration.IrisSettings;
import art.arcane.iris.generation.cache.AtomicCache;
import art.arcane.volmlib.util.cache.AtomicCache;
import art.arcane.iris.localization.C;
import art.arcane.iris.platform.bukkit.plugin.IrisService;
import art.arcane.iris.platform.bukkit.plugin.VolmitSender;
@@ -111,7 +111,7 @@ public class CommandWhat implements DirectorExecutor {
if (key == null || key.getKey().equals("custom")) {
try {
commandSender.sendMessage(IrisLanguage.text(BukkitCommandMessagesExtended.COMMAND_WHAT_DATA_PACK_BIOME_ID, MessageArgument.untrusted("value", INMS.get().getTrueBiomeBaseKey(location)), MessageArgument.untrusted("value2", INMS.get().getTrueBiomeBaseId(INMS.get().getTrueBiomeBase(location)))));
commandSender.sendMessage(IrisLanguage.text(BukkitCommandMessagesExtended.COMMAND_WHAT_DATA_PACK_BIOME_ID, MessageArgument.untrusted("value", INMS.get().getTrueBiomeBaseKey(location)), MessageArgument.untrusted("value2", INMS.get().getBiomeId(location))));
} catch (Throwable ee) {
Iris.reportError(ee);
}
@@ -18,6 +18,8 @@
package art.arcane.iris.studio.view;
import art.arcane.volmlib.nativelib.view.WorldMarker;
import art.arcane.iris.generation.runtime.IrisComplex;
import art.arcane.iris.generation.runtime.Engine;
import art.arcane.iris.studio.render.RenderType;
@@ -45,7 +47,7 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import static art.arcane.iris.platform.bukkit.registry.Attributes.MAX_HEALTH;
import static art.arcane.iris.platform.registry.Attributes.MAX_HEALTH;
public final class BukkitVisionOverlay implements GuiOverlay {
private final Engine engine;
@@ -54,7 +56,7 @@ public final class BukkitVisionOverlay implements GuiOverlay {
private final AtomicBoolean playerRefreshQueued = new AtomicBoolean();
private final AtomicLong teleportSequence = new AtomicLong();
private final AtomicReference<VisionTeleportRequest> latestTeleport = new AtomicReference<>();
private volatile List<GuiMarker> playerMarkers = List.of();
private volatile List<WorldMarker> playerMarkers = List.of();
public BukkitVisionOverlay(Engine engine, UUID openerId) {
this.engine = engine;
@@ -66,7 +68,7 @@ public final class BukkitVisionOverlay implements GuiOverlay {
* built by a server thread.
*/
@Override
public List<GuiMarker> players() {
public List<WorldMarker> players() {
queuePlayerRefresh();
return playerMarkers;
}
@@ -78,10 +80,10 @@ public final class BukkitVisionOverlay implements GuiOverlay {
boolean scheduled = J.runGlobal(() -> {
try {
List<GuiMarker> markers = new ArrayList<>();
List<WorldMarker> markers = new ArrayList<>();
for (Player player : BukkitWorldBinding.players(engine.getWorld())) {
Location at = player.getLocation();
markers.add(GuiMarker.player(player.getName(), at.getX(), at.getZ()));
markers.add(WorldMarker.player(player.getName(), at.getX(), at.getZ()));
}
playerMarkers = List.copyOf(markers);
} finally {
@@ -95,7 +97,7 @@ public final class BukkitVisionOverlay implements GuiOverlay {
}
@Override
public void requestEntities(Consumer<List<GuiMarker>> sink) {
public void requestEntities(Consumer<List<WorldMarker>> sink) {
J.runGlobal(() -> {
IrisWorld target = engine.getWorld();
World world = BukkitWorldBinding.world(target);
@@ -116,7 +118,7 @@ public final class BukkitVisionOverlay implements GuiOverlay {
return;
}
List<GuiMarker> collected = Collections.synchronizedList(new ArrayList<>(living.size()));
List<WorldMarker> collected = Collections.synchronizedList(new ArrayList<>(living.size()));
AtomicInteger pending = new AtomicInteger(living.size());
Runnable complete = () -> {
if (pending.decrementAndGet() == 0) {
@@ -142,14 +144,14 @@ public final class BukkitVisionOverlay implements GuiOverlay {
});
}
private GuiMarker marker(LivingEntity entity, Location at) {
private WorldMarker marker(LivingEntity entity, Location at) {
String label = Form.capitalizeWords(entity.getType().name().toLowerCase(Locale.ROOT).replaceAll("\\Q_\\E", " "));
double maxHealth = 0;
try {
maxHealth = entity.getAttribute(MAX_HEALTH).getValue();
} catch (Throwable ignored) {
}
return GuiMarker.entity(label, at.getX(), at.getY(), at.getZ(), entity.getHealth(), maxHealth);
return WorldMarker.entity(label, at.getX(), at.getY(), at.getZ(), entity.getHealth(), maxHealth);
}
@Override
@@ -67,8 +67,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import static art.arcane.iris.platform.bukkit.registry.Particles.CRIT_MAGIC;
import static art.arcane.iris.platform.bukkit.registry.Particles.REDSTONE;
import static art.arcane.iris.platform.registry.Particles.CRIT_MAGIC;
import static art.arcane.iris.platform.registry.Particles.REDSTONE;
public class WandSVC implements IrisService {
private static final int MS_PER_TICK = Integer.parseInt(System.getProperty("iris.ms_per_tick", "30"));
@@ -26,7 +26,7 @@ import org.bukkit.entity.Player;
import java.awt.Color;
import static art.arcane.iris.platform.bukkit.registry.Particles.REDSTONE;
import static art.arcane.iris.platform.registry.Particles.REDSTONE;
public class WandSelection {
private static final double STEP = 0.10;
@@ -18,6 +18,8 @@
package art.arcane.iris.world;
import art.arcane.volmlib.nativelib.NativeAdapters;
import art.arcane.volmlib.nativelib.server.NativeServerDiagnostics;
import art.arcane.iris.pack.datapack.ServerConfigurator;
import art.arcane.iris.Iris;
@@ -413,19 +415,8 @@ public final class BukkitWorldReconciler {
}
private static boolean containsCreateWorldUnsupportedOperation(Throwable throwable) {
Throwable cursor = throwable;
while (cursor != null) {
if (cursor instanceof UnsupportedOperationException || cursor instanceof IllegalStateException) {
for (StackTraceElement element : cursor.getStackTrace()) {
if ("org.bukkit.craftbukkit.CraftServer".equals(element.getClassName())
&& "createWorld".equals(element.getMethodName())) {
return true;
}
}
}
cursor = cursor.getCause();
}
return false;
return NativeAdapters.find(NativeServerDiagnostics.class)
.map(diagnostics -> diagnostics.isRejectedWorldCreation(throwable)).orElse(false);
}
interface Backend {
@@ -36,7 +36,7 @@ import art.arcane.iris.world.history.SavedTerrainChunk;
import java.util.concurrent.CompletableFuture;
import art.arcane.iris.generation.runtime.EngineMode;
import art.arcane.iris.generation.runtime.EnginePlatformHooks;
import art.arcane.iris.structure.nativegen.NativeStructureVolume;
import art.arcane.volmlib.nativelib.terrain.structure.NativeStructureVolume;
import art.arcane.iris.generation.terrain.IrisDimension;
import art.arcane.iris.generation.terrain.IrisDimensionRuntimeContract;
import art.arcane.iris.world.IrisWorld;