World Changes

This commit is contained in:
Brian Neumann-Fopiano committed 2026-07-12 17:06:30 -04:00
1 parent e42ab6fae6
commit cd05fd1bca
58 files changed
+668 -313

No files matched your search

@@ -0,0 +1,51 @@
package art.arcane.iris.core;
import org.bukkit.NamespacedKey;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
public class IrisWorldStorageTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void derivesPaperDimensionRootFromNamespacedKey() throws Exception {
File levelRoot = temporaryFolder.newFolder("world");
NamespacedKey key = new NamespacedKey("iris", "runtime/studio");
File dimensionRoot = IrisWorldStorage.dimensionRoot(levelRoot, key);
assertEquals(new File(levelRoot, "dimensions/iris/runtime/studio").getAbsoluteFile(), dimensionRoot);
assertEquals(key, IrisWorldStorage.keyFromDimensionRoot(levelRoot, dimensionRoot).orElseThrow());
}
@Test
public void separatesLevelRootFromDimensionRoot() throws Exception {
File levelRoot = temporaryFolder.newFolder("world");
File dimensionRoot = new File(levelRoot, "dimensions/minecraft/overworld");
assertEquals(levelRoot.getAbsoluteFile(), IrisWorldStorage.levelRoot(dimensionRoot));
}
@Test
public void mapsLegacyBukkitNamesToPaperKeys() {
assertEquals(NamespacedKey.minecraft("overworld"), IrisWorldStorage.keyFromLegacyName("world", "world"));
assertEquals(NamespacedKey.minecraft("the_nether"), IrisWorldStorage.keyFromLegacyName("world_nether", "world"));
assertEquals(NamespacedKey.minecraft("the_end"), IrisWorldStorage.keyFromLegacyName("world_the_end", "world"));
assertEquals(NamespacedKey.minecraft("iris_world"), IrisWorldStorage.keyFromLegacyName("Iris World", "world"));
}
@Test
public void rejectsKeysThatEscapeNamespaceStorage() throws Exception {
File levelRoot = temporaryFolder.newFolder("world");
NamespacedKey key = NamespacedKey.minecraft("../outside");
assertThrows(IllegalArgumentException.class, () -> IrisWorldStorage.dimensionRoot(levelRoot, key));
}
}
@@ -1,5 +1,6 @@
package art.arcane.iris.core.lifecycle;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.junit.Test;
@@ -15,7 +16,7 @@ public class WorldLifecycleDiagnosticsTest {
@Test
public void studioCreateSelectionFailurePrintsFullStacktrace() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, false));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
ByteArrayOutputStream output = new ByteArrayOutputStream();
PrintStream originalErr = System.err;
@@ -5,6 +5,7 @@ import art.arcane.iris.core.nms.INMSBinding;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.EngineTarget;
import art.arcane.iris.engine.platform.PlatformChunkGenerator;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.generator.ChunkGenerator;
import org.junit.Test;
@@ -26,6 +27,7 @@ public class WorldLifecycleRuntimeLevelStemTest {
CapabilitySnapshot capabilities = CapabilitySnapshot.forTestingRuntimeRegistries(ServerFamily.PURPUR, false, datapackDimensions, serverRegistryAccess);
WorldLifecycleRequest request = new WorldLifecycleRequest(
"studio",
NamespacedKey.minecraft("studio"),
World.Environment.NORMAL,
new TestingPlatformChunkGenerator(),
null,
@@ -1,5 +1,6 @@
package art.arcane.iris.core.lifecycle;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.junit.Test;
@@ -9,7 +10,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void studioSelectsPaperLikeBackendOnPaper() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PAPER, false, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -17,7 +18,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void studioSelectsPaperLikeBackendOnPurpur() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -25,7 +26,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void studioSelectsPaperLikeBackendOnCanvas() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.CANVAS, true, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -33,7 +34,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void studioSelectsPaperLikeBackendOnFolia() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, true, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -41,7 +42,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void studioSelectsBukkitBackendOnSpigot() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.SPIGOT, false, false, false));
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
WorldLifecycleRequest request = new WorldLifecycleRequest("studio", NamespacedKey.minecraft("studio"), World.Environment.NORMAL, null, null, null, true, false, 1337L, true, false, WorldLifecycleCaller.STUDIO);
assertEquals("bukkit_public", service.selectCreateBackend(request).backendName());
}
@@ -49,7 +50,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void persistentCreatePrefersBukkitBackendOnPaperLikeServers() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
assertEquals("bukkit_public", service.selectCreateBackend(request).backendName());
}
@@ -57,7 +58,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void persistentCreateSelectsPaperLikeBackendOnFolia() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, true, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -65,7 +66,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void persistentCreateSelectsPaperLikeBackendOnCanvas() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.CANVAS, true, false, true));
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
assertEquals("paper_like_runtime", service.selectCreateBackend(request).backendName());
}
@@ -73,7 +74,7 @@ public class WorldLifecycleSelectionTest {
@Test
public void persistentCreateFallsBackToBukkitBackendOnFoliaWithoutRuntime() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.FOLIA, true, false, false));
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
WorldLifecycleRequest request = new WorldLifecycleRequest("persistent", NamespacedKey.minecraft("persistent"), World.Environment.NORMAL, null, null, null, true, false, 1337L, false, false, WorldLifecycleCaller.CREATE);
assertEquals("bukkit_public", service.selectCreateBackend(request).backendName());
}
@@ -82,7 +83,7 @@ public class WorldLifecycleSelectionTest {
public void unloadUsesRememberedBackendFamily() {
WorldLifecycleService service = new WorldLifecycleService(CapabilitySnapshot.forTesting(ServerFamily.PURPUR, false, false, true));
service.rememberBackend("studio", "paper_like_runtime");
assertEquals("paper_like_runtime", service.selectUnloadBackend("studio").backendName());
service.rememberBackend(NamespacedKey.minecraft("studio"), "paper_like_runtime");
assertEquals("paper_like_runtime", service.selectUnloadBackend("minecraft:studio").backendName());
}
}
@@ -39,10 +39,11 @@ public class TransientWorldCleanupSupportTest {
public void collectsOnlyTransientStudioWorldFamiliesFromContainer() throws IOException {
File container = Files.createTempDirectory("transient-world-cleanup-test").toFile();
String baseName = "iris-123e4567-e89b-12d3-a456-426614174000";
File baseFolder = new File(container, baseName);
File netherFolder = new File(container, baseName + "_nether");
File smokeFolder = new File(container, "iris-smoke-studio-deadbeef");
File regularFolder = new File(container, "overworld");
File namespace = new File(container, "dimensions/minecraft");
File baseFolder = new File(namespace, baseName);
File netherFolder = new File(namespace, baseName + "_nether");
File smokeFolder = new File(namespace, "iris-smoke-studio-deadbeef");
File regularFolder = new File(namespace, "overworld");
baseFolder.mkdirs();
netherFolder.mkdirs();
smokeFolder.mkdirs();
@@ -57,6 +58,8 @@ public class TransientWorldCleanupSupportTest {
Files.deleteIfExists(netherFolder.toPath());
Files.deleteIfExists(smokeFolder.toPath());
Files.deleteIfExists(regularFolder.toPath());
Files.deleteIfExists(namespace.toPath());
Files.deleteIfExists(namespace.getParentFile().toPath());
Files.deleteIfExists(container.toPath());
}
}
@@ -1,13 +1,24 @@
package art.arcane.iris.core.tools;
import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.spi.IrisServices;
import org.bukkit.World;
import org.junit.After;
import org.junit.Test;
import java.lang.reflect.Proxy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class IrisToolbeltPackReferenceTest {
@After
public void cleanServices() {
IrisServices.remove(StudioSVC.class);
}
@Test
public void plainPackUsesMatchingDimensionKey() {
IrisToolbelt.PackReference reference = IrisToolbelt.parsePackReference("overworld");
@@ -34,4 +45,16 @@ public class IrisToolbeltPackReferenceTest {
assertNull(IrisToolbelt.parsePackReference("pack:"));
assertNull(IrisToolbelt.parsePackReference(":dimension"));
}
@Test
public void accessReturnsNullAfterStudioServiceIsRemoved() {
IrisServices.remove(StudioSVC.class);
World world = (World) Proxy.newProxyInstance(
World.class.getClassLoader(),
new Class<?>[]{World.class},
(proxy, method, args) -> null
);
assertNull(IrisToolbelt.access(world));
}
}
@@ -0,0 +1,27 @@
package art.arcane.iris.engine.object;
import org.bukkit.NamespacedKey;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class IrisWorldIdentityTest {
@Test
public void usesBukkitKeyBeforePlatformIdentity() {
IrisWorld world = IrisWorld.builder()
.key(new NamespacedKey("iris", "bukkit"))
.platformIdentity("iris:modded")
.build();
assertEquals("iris:bukkit", world.identity());
}
@Test
public void usesPlatformIdentityWithoutBukkitKey() {
IrisWorld world = IrisWorld.builder()
.platformIdentity("minecraft:the_nether")
.build();
assertEquals("minecraft:the_nether", world.identity());
}
}