66 lines
3.1 KiB
Java
66 lines
3.1 KiB
Java
import java.util.List;
|
|
import java.util.stream.Stream;
|
|
|
|
import net.minecraft.SharedConstants;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.server.Bootstrap;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.util.valueproviders.ClampedNormalInt;
|
|
import net.minecraft.util.valueproviders.TrapezoidInt;
|
|
import net.minecraft.world.level.levelgen.LegacyRandomSource;
|
|
import net.minecraft.world.level.levelgen.WorldgenRandom;
|
|
import net.minecraft.world.level.levelgen.XoroshiroRandomSource;
|
|
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
|
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
|
|
import net.minecraft.world.level.levelgen.placement.RandomOffsetPlacement;
|
|
|
|
// Emits placement stream vectors from the official 26.1.2 runtime. These
|
|
// modifiers do not read PlacementContext, so no world or registry is required.
|
|
public final class VanillaPlacementVectors {
|
|
public static void main(String[] args) {
|
|
SharedConstants.tryDetectVersion();
|
|
Bootstrap.bootStrap();
|
|
|
|
RandomSource offsetRandom = new LegacyRandomSource(12345L);
|
|
List<PlacementModifier> modifiers = List.of(
|
|
CountPlacement.of(3),
|
|
RandomOffsetPlacement.of(
|
|
TrapezoidInt.of(-4, 4, 0),
|
|
TrapezoidInt.of(-2, 2, 0)));
|
|
Stream<BlockPos> positions = Stream.of(new BlockPos(32, 10, -16));
|
|
for (PlacementModifier modifier : modifiers) {
|
|
positions = positions.flatMap(position -> modifier.getPositions(null, offsetRandom, position));
|
|
}
|
|
System.out.println("offset=" + positions.map(VanillaPlacementVectors::position).toList());
|
|
|
|
RandomSource normalRandom = new LegacyRandomSource(12345L);
|
|
ClampedNormalInt normal = ClampedNormalInt.of(0.0F, 3.0F, -10, 10);
|
|
StringBuilder samples = new StringBuilder();
|
|
for (int i = 0; i < 8; i++) {
|
|
if (i > 0) samples.append(',');
|
|
samples.append(normal.sample(normalRandom));
|
|
}
|
|
System.out.println("normal=" + samples);
|
|
|
|
WorldgenRandom decoration = new WorldgenRandom(new LegacyRandomSource(0L));
|
|
long decorationSeed = decoration.setDecorationSeed(12345L, 0, 0);
|
|
decoration.setFeatureSeed(decorationSeed, 10, 6);
|
|
System.out.println("legacy.decoration.seed=" + decorationSeed);
|
|
System.out.println("legacy.feature10.stage6=" + randomVector(decoration));
|
|
|
|
WorldgenRandom xoroshiro = new WorldgenRandom(new XoroshiroRandomSource(0L));
|
|
long xoroshiroSeed = xoroshiro.setDecorationSeed(12345L, 0, 0);
|
|
xoroshiro.setFeatureSeed(xoroshiroSeed, 10, 6);
|
|
System.out.println("xoroshiro.decoration.seed=" + xoroshiroSeed);
|
|
System.out.println("xoroshiro.feature10.stage6=" + randomVector(xoroshiro));
|
|
}
|
|
|
|
private static String randomVector(RandomSource random) {
|
|
return random.nextInt(16) + "," + random.nextInt(16) + "," + random.nextInt(65)
|
|
+ "," + random.nextFloat() + "," + random.nextDouble();
|
|
}
|
|
|
|
private static String position(BlockPos position) {
|
|
return position.getX() + ":" + position.getY() + ":" + position.getZ();
|
|
}
|
|
}
|