mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-26 05:50:39 +00:00
Test- 26.3
This commit is contained in:
1 parent
edadd14f4b
commit
f0e7fea13b
107 files changed
+25110
-86
No files matched your search
@@ -1,5 +1,7 @@
|
||||
package art.arcane.iris.pack;
|
||||
|
||||
import art.arcane.iris.platform.bukkit.nms.datapack.DataVersion;
|
||||
|
||||
import art.arcane.iris.world.lifecycle.BukkitStartupPaths;
|
||||
import art.arcane.iris.world.history.GenerationRegistryContractFactory;
|
||||
import art.arcane.iris.generation.biome.IrisBiomeCustom;
|
||||
@@ -49,6 +51,28 @@ public class DefaultPackBootstrapProvisionerTest {
|
||||
assertTrue(DefaultPackBootstrapProvisioner.defaultPacks().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bootstrapUsesTheSelectedRuntimeBiomeSchema() throws Exception {
|
||||
Path root = Files.createTempDirectory("iris-bootstrap-runtime");
|
||||
try {
|
||||
Path dataDirectory = root.resolve("plugins/Iris");
|
||||
writePack(dataDirectory.resolve("packs/overworld"), "overworld", "runtime");
|
||||
BukkitStartupPaths startupPaths = BukkitStartupPaths.resolve(root, new String[0]);
|
||||
for (DataVersion version : new DataVersion[]{DataVersion.V26_1_2, DataVersion.V26_2, DataVersion.V26_3}) {
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult result = DefaultPackBootstrapProvisioner.provision(
|
||||
new DefaultPackBootstrapProvisioner.BootstrapRequest(dataDirectory, ignored -> {}, startupPaths, version));
|
||||
Path biomeRoot = result.datapackRoot().resolve("data/iris/worldgen/biome/biomes");
|
||||
try (Stream<Path> paths = Files.list(biomeRoot)) {
|
||||
String json = Files.readString(paths.findFirst().orElseThrow());
|
||||
assertEquals(version != DataVersion.V26_3, json.contains("\"spawners\""));
|
||||
assertEquals(version == DataVersion.V26_3, json.contains("minecraft:gameplay/natural_mob_spawns"));
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
delete(root);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emptyInstallPublishesValidDatapackWithoutNetworkRequests() throws Exception {
|
||||
AtomicInteger requests = new AtomicInteger();
|
||||
@@ -66,7 +90,8 @@ public class DefaultPackBootstrapProvisionerTest {
|
||||
1,
|
||||
Duration.ZERO,
|
||||
8L * 1024L * 1024L,
|
||||
root
|
||||
root,
|
||||
DataVersion.getLatest()
|
||||
);
|
||||
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult result = DefaultPackBootstrapProvisioner.provision(
|
||||
@@ -648,8 +673,8 @@ public class DefaultPackBootstrapProvisionerTest {
|
||||
BukkitStartupPaths startupPaths = BukkitStartupPaths.resolve(serverRoot, new String[0]);
|
||||
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult installed =
|
||||
DefaultPackBootstrapProvisioner.provision(dataDirectory, ignored -> {
|
||||
}, startupPaths);
|
||||
DefaultPackBootstrapProvisioner.provision(new DefaultPackBootstrapProvisioner.BootstrapRequest(dataDirectory, ignored -> {
|
||||
}, startupPaths, DataVersion.getLatest()));
|
||||
|
||||
Path levelStem = installed.datapackRoot().resolve("data/iris/dimension/moon.json");
|
||||
assertEquals(DefaultPackBootstrapProvisioner.ProvisionStatus.INSTALLED, installed.status());
|
||||
@@ -661,8 +686,8 @@ public class DefaultPackBootstrapProvisionerTest {
|
||||
StandardCharsets.UTF_8
|
||||
);
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult updated =
|
||||
DefaultPackBootstrapProvisioner.provision(dataDirectory, ignored -> {
|
||||
}, startupPaths);
|
||||
DefaultPackBootstrapProvisioner.provision(new DefaultPackBootstrapProvisioner.BootstrapRequest(dataDirectory, ignored -> {
|
||||
}, startupPaths, DataVersion.getLatest()));
|
||||
|
||||
assertEquals(DefaultPackBootstrapProvisioner.ProvisionStatus.UPDATED, updated.status());
|
||||
assertTrue(Files.readString(levelStem).contains("\"type\": \"iris:underworld\""));
|
||||
@@ -709,7 +734,8 @@ public class DefaultPackBootstrapProvisionerTest {
|
||||
1,
|
||||
Duration.ZERO,
|
||||
8L * 1024L * 1024L,
|
||||
serverRoot
|
||||
serverRoot,
|
||||
DataVersion.getLatest()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -170,14 +170,16 @@ public class IrisDatapackCompilerTest {
|
||||
int maxFormat = pack.getInt("max_format");
|
||||
|
||||
assertEquals(101, minFormat);
|
||||
assertEquals(107, maxFormat);
|
||||
assertEquals(121, maxFormat);
|
||||
assertEquals(maxFormat, pack.getInt("pack_format"));
|
||||
|
||||
// One artifact serves both runtimes: each supported DataVersion's format must be in range.
|
||||
// One artifact serves supported runtimes: each supported DataVersion's format must be in range.
|
||||
assertTrue(minFormat <= DataVersion.V26_1_2.getPackFormat()
|
||||
&& DataVersion.V26_1_2.getPackFormat() <= maxFormat);
|
||||
assertTrue(minFormat <= DataVersion.V26_2.getPackFormat()
|
||||
&& DataVersion.V26_2.getPackFormat() <= maxFormat);
|
||||
assertTrue(minFormat <= DataVersion.V26_3.getPackFormat()
|
||||
&& DataVersion.V26_3.getPackFormat() <= maxFormat);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -496,14 +498,14 @@ public class IrisDatapackCompilerTest {
|
||||
Path dataDirectory = server.resolve("plugins/Iris");
|
||||
BukkitStartupPaths startupPaths = BukkitStartupPaths.resolve(server, new String[0]);
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult installed =
|
||||
DefaultPackBootstrapProvisioner.provision(dataDirectory, ignored -> {
|
||||
}, startupPaths);
|
||||
DefaultPackBootstrapProvisioner.provision(new DefaultPackBootstrapProvisioner.BootstrapRequest(dataDirectory, ignored -> {
|
||||
}, startupPaths, DataVersion.getLatest()));
|
||||
assertEquals(DefaultPackBootstrapProvisioner.ProvisionStatus.INSTALLED, installed.status());
|
||||
assertTrue(Files.isRegularFile(installed.datapackRoot().resolve("data/iris/dimension_type/upper.json")));
|
||||
assertEquals(2, regularFileCount(installed.datapackRoot().resolve("data/iris/worldgen/biome/biomes")));
|
||||
DefaultPackBootstrapProvisioner.ProvisionResult unchanged =
|
||||
DefaultPackBootstrapProvisioner.provision(dataDirectory, ignored -> {
|
||||
}, startupPaths);
|
||||
DefaultPackBootstrapProvisioner.provision(new DefaultPackBootstrapProvisioner.BootstrapRequest(dataDirectory, ignored -> {
|
||||
}, startupPaths, DataVersion.getLatest()));
|
||||
assertEquals(DefaultPackBootstrapProvisioner.ProvisionStatus.UNCHANGED, unchanged.status());
|
||||
assertFalse(IrisPlatforms.isBound());
|
||||
}
|
||||
|
||||
@@ -7,6 +7,12 @@ import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class NmsBindingSelectorTest {
|
||||
@Test
|
||||
public void selects263Revision() {
|
||||
assertEquals("v26_3_R1", NmsBindingSelector.select(MinecraftVersion.fromBukkitVersion("26.3-R0.1-SNAPSHOT")));
|
||||
assertEquals("v26_3_R1", NmsBindingSelector.select(MinecraftVersion.fromBukkitVersion("26.3.0-R0.1-SNAPSHOT")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectsOnlyTheExactSupportedRevision() {
|
||||
MinecraftVersion version = MinecraftVersion.fromBukkitVersion("26.2-R0.1-SNAPSHOT");
|
||||
@@ -23,12 +29,12 @@ public class NmsBindingSelectorTest {
|
||||
|
||||
@Test
|
||||
public void rejectsUnsupportedVersionsWithoutProbingAnotherRevision() {
|
||||
MinecraftVersion version = MinecraftVersion.fromBukkitVersion("26.3-R0.1-SNAPSHOT");
|
||||
MinecraftVersion version = MinecraftVersion.fromBukkitVersion("26.4-R0.1-SNAPSHOT");
|
||||
|
||||
IllegalStateException failure = assertThrows(IllegalStateException.class,
|
||||
() -> NmsBindingSelector.select(version));
|
||||
|
||||
assertTrue(failure.getMessage().contains("26.3"));
|
||||
assertTrue(failure.getMessage().contains("26.4"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+12
-1
@@ -7,15 +7,26 @@ import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
|
||||
public class DataVersionTest {
|
||||
@Test
|
||||
public void runtimeSelectionPreservesEverySupportedVersion() {
|
||||
assertSame(DataVersion.V26_1_2, DataVersion.forMinecraftVersion("26.1.2"));
|
||||
assertSame(DataVersion.V26_2, DataVersion.forMinecraftVersion("26.2"));
|
||||
assertSame(DataVersion.V26_2, DataVersion.forMinecraftVersion("26.2.0"));
|
||||
assertSame(DataVersion.V26_3, DataVersion.forMinecraftVersion("26.3"));
|
||||
assertSame(DataVersion.V26_3, DataVersion.forMinecraftVersion("26.3.0"));
|
||||
assertSame(DataVersion.UNSUPPORTED, DataVersion.forMinecraftVersion("26.4"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void latestRemainsNewestSupportedRelease() {
|
||||
assertSame(DataVersion.V26_2, DataVersion.getLatest());
|
||||
assertSame(DataVersion.V26_3, DataVersion.getLatest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void packFormatsMatchServerVersionJson() {
|
||||
assertEquals(101, DataVersion.V26_1_2.getPackFormat());
|
||||
assertEquals(107, DataVersion.V26_2.getPackFormat());
|
||||
assertEquals(121, DataVersion.V26_3.getPackFormat());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+17
@@ -15,6 +15,10 @@ import art.arcane.iris.structure.object.IrisObject;
|
||||
import art.arcane.iris.structure.placement.IrisStructure;
|
||||
import art.arcane.iris.structure.object.ObjectPlaceMode;
|
||||
import art.arcane.iris.spi.PlatformBlockState;
|
||||
import art.arcane.iris.spi.IrisPlatform;
|
||||
import art.arcane.iris.spi.IrisPlatforms;
|
||||
import org.junit.Before;
|
||||
import org.junit.After;
|
||||
import art.arcane.volmlib.util.collection.KList;
|
||||
import art.arcane.volmlib.util.nbt.io.NBTUtil;
|
||||
import art.arcane.volmlib.util.nbt.tag.CompoundTag;
|
||||
@@ -41,6 +45,19 @@ public class VillageImporterConnectorRoundTripTest {
|
||||
@Rule
|
||||
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||
|
||||
@Before
|
||||
public void bindPlatform() {
|
||||
IrisPlatforms.unbind();
|
||||
IrisPlatform platform = mock(IrisPlatform.class);
|
||||
when(platform.minecraftVersion()).thenReturn("26.2");
|
||||
IrisPlatforms.bind(platform);
|
||||
}
|
||||
|
||||
@After
|
||||
public void unbindPlatform() {
|
||||
IrisPlatforms.unbind();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void vanillaNbtMetadataSurvivesIrisPieceAndVanillaExport() throws Exception {
|
||||
FakeJigsawBlockInfo jigsaw = new FakeJigsawBlockInfo(-29, -17);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package art.arcane.iris.structure.export;
|
||||
|
||||
import art.arcane.volmlib.util.nbt.tag.CompoundTag;
|
||||
import art.arcane.volmlib.util.nbt.mca.MCABlockStateCodecSupport;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -9,6 +10,16 @@ import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class VanillaBlockStateTest {
|
||||
@Test
|
||||
public void writes263NamesWithoutChangingTheOlderFormat() {
|
||||
CompoundTag state = VanillaBlockState.parse("minecraft:oak_stairs[facing=north]")
|
||||
.toNbt(MCABlockStateCodecSupport.Format.LOWERCASE);
|
||||
assertEquals("minecraft:oak_stairs", state.getString("id"));
|
||||
assertEquals("north", state.getCompoundTag("properties").getString("facing"));
|
||||
assertNull(state.get("Name"));
|
||||
assertNull(state.get("Properties"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aBareBlockKeepsItsNameAndNoProperties() {
|
||||
VanillaBlockState state = VanillaBlockState.parse(" minecraft:stone ");
|
||||
@@ -35,8 +46,8 @@ public class VanillaBlockStateTest {
|
||||
|
||||
@Test
|
||||
public void theNbtFormCarriesTheNameAndOnlyRealProperties() {
|
||||
CompoundTag bare = VanillaBlockState.parse("minecraft:air").toNbt();
|
||||
CompoundTag stairs = VanillaBlockState.parse("minecraft:oak_stairs[facing=north]").toNbt();
|
||||
CompoundTag bare = VanillaBlockState.parse("minecraft:air").toNbt(MCABlockStateCodecSupport.Format.CAPITALIZED);
|
||||
CompoundTag stairs = VanillaBlockState.parse("minecraft:oak_stairs[facing=north]").toNbt(MCABlockStateCodecSupport.Format.CAPITALIZED);
|
||||
|
||||
assertEquals("minecraft:air", bare.getString("Name"));
|
||||
assertNull(bare.get("Properties"));
|
||||
|
||||
+25
@@ -71,6 +71,7 @@ public class VanillaJigsawDatapackExporterTest {
|
||||
when(registries.block(anyString())).thenReturn(stone);
|
||||
IrisPlatform platform = mock(IrisPlatform.class);
|
||||
when(platform.registries()).thenReturn(registries);
|
||||
when(platform.minecraftVersion()).thenReturn("26.2");
|
||||
IrisPlatforms.bind(platform);
|
||||
}
|
||||
|
||||
@@ -141,6 +142,30 @@ public class VanillaJigsawDatapackExporterTest {
|
||||
assertEquals("north_up", paletteEntry.getCompoundTag("Properties").getString("orientation"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void exports26_3RuntimeBlockStatesAndPackFormat() throws Exception {
|
||||
when(IrisPlatforms.get().minecraftVersion()).thenReturn("26.3.0");
|
||||
try {
|
||||
Path output = temporaryFolder.getRoot().toPath().resolve("village-263");
|
||||
VanillaJigsawExportResult result = new VanillaJigsawDatapackExporter().export(
|
||||
request(connectorGraph(), output).namespace("studio").resourcePath("village/test").build());
|
||||
assertTrue(result.diagnostics().toString(), result.isSuccess());
|
||||
JsonObject pack = json(output.resolve("pack.mcmeta")).getAsJsonObject("pack");
|
||||
assertEquals(121, pack.get("min_format").getAsJsonArray().get(0).getAsInt());
|
||||
assertEquals(0, pack.get("min_format").getAsJsonArray().get(1).getAsInt());
|
||||
assertEquals(121, pack.get("max_format").getAsInt());
|
||||
CompoundTag template = (CompoundTag) NBTUtil.read(output.resolve(
|
||||
"data/studio/structure/village/test/piece/pieces/start.nbt").toFile()).getTag();
|
||||
assertEquals(5023, template.getInt("DataVersion"));
|
||||
CompoundTag palette = (CompoundTag) template.getListTag("palette").get(0);
|
||||
assertEquals("minecraft:jigsaw", palette.getString("id"));
|
||||
assertEquals("north_up", palette.getCompoundTag("properties").getString("orientation"));
|
||||
assertFalse(palette.containsKey("Name"));
|
||||
} finally {
|
||||
when(IrisPlatforms.get().minecraftVersion()).thenReturn("26.2");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void exportsZipWithPackFilesAtArchiveRoot() throws Exception {
|
||||
TestGraph graph = terminalGraph();
|
||||
|
||||
@@ -5,6 +5,12 @@ import art.arcane.volmlib.util.nbt.tag.CompoundTag;
|
||||
import art.arcane.volmlib.util.nbt.tag.ListTag;
|
||||
import art.arcane.volmlib.util.nbt.tag.StringTag;
|
||||
import net.jpountz.lz4.LZ4BlockOutputStream;
|
||||
import art.arcane.iris.spi.IrisPlatforms;
|
||||
import art.arcane.iris.spi.IrisPlatform;
|
||||
import art.arcane.iris.spi.PlatformBlockState;
|
||||
import art.arcane.iris.spi.PlatformRegistries;
|
||||
import org.junit.Before;
|
||||
import org.junit.After;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
@@ -18,6 +24,8 @@ import java.nio.file.Path;
|
||||
import java.util.zip.DeflaterOutputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
@@ -27,6 +35,76 @@ public final class SavedTerrainChunkTest {
|
||||
@Rule
|
||||
public final TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||
|
||||
@Before
|
||||
public void bindPlatform() {
|
||||
IrisPlatforms.unbind();
|
||||
IrisPlatform platform = mock(IrisPlatform.class);
|
||||
PlatformRegistries registries = mock(PlatformRegistries.class);
|
||||
when(platform.registries()).thenReturn(registries);
|
||||
for (String state : new String[]{"minecraft:stone", "minecraft:water[level=0]",
|
||||
"minecraft:sea_pickle[pickles=1,waterlogged=true]"}) {
|
||||
PlatformBlockState block = mock(PlatformBlockState.class);
|
||||
when(block.key()).thenReturn(state);
|
||||
when(registries.blockOrNull(state.split("\\[")[0])).thenReturn(block);
|
||||
}
|
||||
IrisPlatforms.bind(platform);
|
||||
}
|
||||
|
||||
@After
|
||||
public void unbindPlatform() {
|
||||
IrisPlatforms.unbind();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reads263LowercasePaletteAtTerrainStatus() throws Exception {
|
||||
Path world = temporaryFolder.newFolder("terrain-263").toPath();
|
||||
CompoundTag saved = root("minecraft:terrain");
|
||||
saved.putInt("DataVersion", 5023);
|
||||
CompoundTag section = (CompoundTag) saved.getListTag("sections").get(0);
|
||||
ListTag<?> palette = section.getCompoundTag("block_states").getListTag("palette");
|
||||
for (int index = 0; index < palette.size(); index++) {
|
||||
CompoundTag state = (CompoundTag) palette.get(index);
|
||||
state.put("id", state.remove("Name"));
|
||||
if (state.containsKey("Properties")) {
|
||||
state.put("properties", state.remove("Properties"));
|
||||
}
|
||||
}
|
||||
writeChunk(world, saved, 2, false);
|
||||
SavedTerrainChunk chunk = SavedTerrainChunk.read(world, -1, -2, -16, 16);
|
||||
assertEquals("minecraft:terrain", chunk.nativeStatus());
|
||||
assertEquals("minecraft:water[level=0]", chunk.column(-16, -32).geometry().voxelAt(-15).stateKey());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reads263StringAndWrappedPaletteEntries() throws Exception {
|
||||
for (String name : new String[]{"minecraft:stone", "minecraft:water", "minecraft:sea_pickle"}) {
|
||||
for (boolean wrapped : new boolean[]{false, true}) {
|
||||
Path world = temporaryFolder.newFolder("terrain-string-" + name.substring(10) + "-" + wrapped).toPath();
|
||||
CompoundTag saved = root("minecraft:full");
|
||||
saved.putInt("DataVersion", 5023);
|
||||
CompoundTag section = (CompoundTag) saved.getListTag("sections").get(0);
|
||||
CompoundTag blocks = section.getCompoundTag("block_states");
|
||||
blocks.remove("data");
|
||||
if (wrapped) {
|
||||
ListTag<CompoundTag> palette = new ListTag<>(CompoundTag.class);
|
||||
CompoundTag state = new CompoundTag();
|
||||
state.putString("", name);
|
||||
palette.add(state);
|
||||
blocks.put("palette", palette);
|
||||
} else {
|
||||
ListTag<StringTag> palette = new ListTag<>(StringTag.class);
|
||||
palette.add(new StringTag(name));
|
||||
blocks.put("palette", palette);
|
||||
}
|
||||
writeChunk(world, saved, 2, false);
|
||||
SavedTerrainChunk chunk = SavedTerrainChunk.read(world, -1, -2, -16, 16);
|
||||
BoundaryColumnGeometry.Voxel voxel = chunk.column(-16, -32).geometry().voxelAt(-16);
|
||||
assertEquals(IrisPlatforms.get().registries().blockOrNull(name).key(), voxel.stateKey());
|
||||
assertEquals(name.equals("minecraft:stone") ? "" : "minecraft:water[level=0]", voxel.fluidStateKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void readsModernPaletteAtNegativeCoordinatesWithEveryCompression() throws Exception {
|
||||
for (int compression = 1; compression <= 4; compression++) {
|
||||
|
||||
Reference in new issue
Block a user