Reworked terrain transitions

- New terrain heights meet saved boundaries while retaining local relief
- Surface water levels approach saved fluid heights across the band
- Cave and physical biome matching use a four-block seam patch
- Terrain generates once without speculative neighbor containment
- Bounded caches serve transition membership and boundary lookups
- Saved biome writes honor the selected durability policy
- Release labels and presentation code leave generation identity unchanged
- Unfinished objects retain blocks and metadata across pack changes
- Whole structure assemblies preserve pending excavation and foundations
- New placements keep pending historical pieces clear
- Transition probes cover cutovers and retained object fragments
This commit is contained in:
Brian Neumann-Fopiano committed 2026-09-27 15:31:31 -04:00
1 parent 9eb05fd987
commit 8c3e5d547b
159 files changed
+6092 -1905

No files matched your search

@@ -33,6 +33,31 @@ public class GenerationBuildRevisionTest {
GenerationBuildRevision.fingerprint(GenerationBuildRevision.capture(fixture.options(), fixture.dependencies())));
}
@Test
public void dependencyReleaseNamesAndMavenMetadataDoNotChangeGenerationIdentity() throws Exception {
Fixture fixture = fixture();
String original = GenerationBuildRevision.fingerprint(GenerationBuildRevision.read(fixture.revision()));
Path released = fixture.root().resolve("math-2.0.jar");
try (ZipOutputStream output = new ZipOutputStream(Files.newOutputStream(released))) {
for (Map.Entry<String, String> entry : Map.of(
"META-INF/MANIFEST.MF", "Manifest-Version: 1.0\r\nImplementation-Version: 2.0\r\nBuild-Time: 12345\r\n\r\n",
"META-INF/maven/example/math/pom.properties", "groupId=example\nartifactId=math\nversion=2.0\n",
"META-INF/maven/example/math/pom.xml", "<project><version>2.0</version></project>",
"example/Math.class", "same code").entrySet()) {
ZipEntry archiveEntry = new ZipEntry(entry.getKey());
archiveEntry.setTime(1_700_000_000_000L);
output.putNextEntry(archiveEntry);
output.write(entry.getValue().getBytes(StandardCharsets.UTF_8));
output.closeEntry();
}
}
Map<String, Path> dependencies = Map.of("math", released);
GenerationBuildRevision.verifySnapshot(fixture.root(), fixture.revision(), dependencies);
assertEquals(original, GenerationBuildRevision.fingerprint(
GenerationBuildRevision.capture(fixture.options(), dependencies)));
}
@Test
public void rejectsChangedAddedAndDeletedGenerationSources() throws Exception {
Fixture fixture = fixture();