d
This commit is contained in:
Brian Neumann-Fopiano
2026-08-05 15:45:08 -06:00
parent 70d355621c
commit ce8c4ff578
18 changed files with 1958 additions and 180 deletions
@@ -1,5 +1,6 @@
package art.arcane.iris.core.nms.v26_2_R1;
import art.arcane.iris.nativegen.NativeStructureGenerationKeys;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
@@ -12,7 +13,6 @@ import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.levelgen.structure.Structure;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -74,18 +74,7 @@ final class VanillaStructureBiomes {
if (level == null) {
throw new IllegalStateException("Minecraft server level is unavailable");
}
Set<String> reachable = new LinkedHashSet<>();
Set<String> possible = possibleBiomeKeys(source);
Registry<Structure> registry = level.registryAccess().lookupOrThrow(Registries.STRUCTURE);
for (Map.Entry<ResourceKey<Structure>, Structure> entry : registry.entrySet()) {
for (Holder<Biome> holder : entry.getValue().biomes()) {
Optional<ResourceKey<Biome>> key = holder.unwrapKey();
if (key.isPresent() && possible.contains(key.get().identifier().toString())) {
reachable.add(entry.getKey().identifier().toString());
break;
}
}
}
return reachable;
return NativeStructureGenerationKeys.reachable(level, possible);
}
}
@@ -0,0 +1,60 @@
package art.arcane.iris.nativegen;
import net.minecraft.SharedConstants;
import net.minecraft.core.Vec3i;
import net.minecraft.server.Bootstrap;
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class NativeStructureGenerationKeysContractTest {
@BeforeClass
public static void bootstrapMinecraft() {
SharedConstants.tryDetectVersion();
Bootstrap.bootStrap();
}
@Test
public void reachabilityUsesEnabledActiveStructureSetsWithoutLazyPlacementGeneration() throws IOException {
String source = Files.readString(Path.of(
System.getProperty("iris.nativeStructureGenerationKeysSource")));
assertTrue(source.contains("getWorldGenSettings().options().generateStructures()"));
assertTrue(source.contains("getGeneratorState().possibleStructureSets()"));
assertTrue(source.contains("isEnabledPlacement(structureSet.placement())"));
assertTrue(source.contains("StructurePlacement.class.getDeclaredMethods()"));
assertTrue(source.contains("entry.weight() <= 0"));
assertTrue(source.contains("hasPossibleBiome(entry.structure().value(), possibleBiomes)"));
assertFalse(source.contains("getPlacementsForStructure("));
}
@Test
public void frequencyGateUsesMappedAccessorAndRejectsNonPositivePlacements() {
assertFalse(NativeStructureGenerationKeys.isEnabledPlacement(placement(0.0F)));
assertFalse(NativeStructureGenerationKeys.isEnabledPlacement(placement(-0.1F)));
assertFalse(NativeStructureGenerationKeys.isEnabledPlacement(placement(Float.NaN)));
assertTrue(NativeStructureGenerationKeys.isEnabledPlacement(placement(0.25F)));
}
private static RandomSpreadStructurePlacement placement(float frequency) {
return new RandomSpreadStructurePlacement(
Vec3i.ZERO,
StructurePlacement.FrequencyReductionMethod.DEFAULT,
frequency,
1,
Optional.empty(),
2,
1,
RandomSpreadType.LINEAR);
}
}