Further Seed Customisation
Allow server admins that really want to to customise the seeds used in world generation even further. By: md_5 <git@md-5.net>
This commit is contained in:
@@ -1,5 +1,16 @@
|
||||
--- a/net/minecraft/world/level/chunk/ChunkGenerator.java
|
||||
+++ b/net/minecraft/world/level/chunk/ChunkGenerator.java
|
||||
@@ -108,8 +108,8 @@
|
||||
|
||||
protected abstract MapCodec<? extends ChunkGenerator> codec();
|
||||
|
||||
- public ChunkGeneratorStructureState createState(HolderLookup<StructureSet> structureSetRegistry, RandomState noiseConfig, long seed) {
|
||||
- return ChunkGeneratorStructureState.createForNormal(noiseConfig, seed, this.biomeSource, structureSetRegistry);
|
||||
+ public ChunkGeneratorStructureState createState(HolderLookup<StructureSet> holderlookup, RandomState randomstate, long i, org.spigotmc.SpigotWorldConfig conf) { // Spigot
|
||||
+ return ChunkGeneratorStructureState.createForNormal(randomstate, i, this.biomeSource, holderlookup, conf); // Spigot
|
||||
}
|
||||
|
||||
public Optional<ResourceKey<MapCodec<? extends ChunkGenerator>>> getTypeNameForDataFixer() {
|
||||
@@ -312,29 +312,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,3 +5,105 @@
|
||||
package net.minecraft.world.level.chunk;
|
||||
|
||||
import com.google.common.base.Stopwatch;
|
||||
@@ -33,6 +34,11 @@
|
||||
import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
+// Spigot start
|
||||
+import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
|
||||
+import org.spigotmc.SpigotWorldConfig;
|
||||
+// Spigot end
|
||||
+
|
||||
public class ChunkGeneratorStructureState {
|
||||
|
||||
private static final Logger LOGGER = LogUtils.getLogger();
|
||||
@@ -45,21 +51,81 @@
|
||||
private boolean hasGeneratedPositions;
|
||||
private final List<Holder<StructureSet>> possibleStructureSets;
|
||||
|
||||
- public static ChunkGeneratorStructureState createForFlat(RandomState noiseConfig, long seed, BiomeSource biomeSource, Stream<Holder<StructureSet>> structureSets) {
|
||||
- List<Holder<StructureSet>> list = structureSets.filter((holder) -> {
|
||||
- return ChunkGeneratorStructureState.hasBiomesForStructureSet((StructureSet) holder.value(), biomeSource);
|
||||
+ public static ChunkGeneratorStructureState createForFlat(RandomState randomstate, long i, BiomeSource worldchunkmanager, Stream<Holder<StructureSet>> stream, SpigotWorldConfig conf) { // Spigot
|
||||
+ List<Holder<StructureSet>> list = stream.filter((holder) -> {
|
||||
+ return ChunkGeneratorStructureState.hasBiomesForStructureSet((StructureSet) holder.value(), worldchunkmanager);
|
||||
}).toList();
|
||||
|
||||
- return new ChunkGeneratorStructureState(noiseConfig, biomeSource, seed, 0L, list);
|
||||
+ return new ChunkGeneratorStructureState(randomstate, worldchunkmanager, i, 0L, ChunkGeneratorStructureState.injectSpigot(list, conf)); // Spigot
|
||||
}
|
||||
|
||||
- public static ChunkGeneratorStructureState createForNormal(RandomState noiseConfig, long seed, BiomeSource biomeSource, HolderLookup<StructureSet> structureSetRegistry) {
|
||||
- List<Holder<StructureSet>> list = (List) structureSetRegistry.listElements().filter((holder_c) -> {
|
||||
- return ChunkGeneratorStructureState.hasBiomesForStructureSet((StructureSet) holder_c.value(), biomeSource);
|
||||
+ public static ChunkGeneratorStructureState createForNormal(RandomState randomstate, long i, BiomeSource worldchunkmanager, HolderLookup<StructureSet> holderlookup, SpigotWorldConfig conf) { // Spigot
|
||||
+ List<Holder<StructureSet>> list = (List) holderlookup.listElements().filter((holder_c) -> {
|
||||
+ return ChunkGeneratorStructureState.hasBiomesForStructureSet((StructureSet) holder_c.value(), worldchunkmanager);
|
||||
}).collect(Collectors.toUnmodifiableList());
|
||||
|
||||
- return new ChunkGeneratorStructureState(noiseConfig, biomeSource, seed, seed, list);
|
||||
+ return new ChunkGeneratorStructureState(randomstate, worldchunkmanager, i, i, ChunkGeneratorStructureState.injectSpigot(list, conf)); // Spigot
|
||||
+ }
|
||||
+
|
||||
+ // Spigot start
|
||||
+ private static List<Holder<StructureSet>> injectSpigot(List<Holder<StructureSet>> list, SpigotWorldConfig conf) {
|
||||
+ return list.stream().map((holder) -> {
|
||||
+ StructureSet structureset = holder.value();
|
||||
+ if (structureset.placement() instanceof RandomSpreadStructurePlacement randomConfig) {
|
||||
+ String name = holder.unwrapKey().orElseThrow().location().getPath();
|
||||
+ int seed = randomConfig.salt;
|
||||
+
|
||||
+ switch (name) {
|
||||
+ case "desert_pyramids":
|
||||
+ seed = conf.desertSeed;
|
||||
+ break;
|
||||
+ case "end_cities":
|
||||
+ seed = conf.endCitySeed;
|
||||
+ break;
|
||||
+ case "nether_complexes":
|
||||
+ seed = conf.netherSeed;
|
||||
+ break;
|
||||
+ case "igloos":
|
||||
+ seed = conf.iglooSeed;
|
||||
+ break;
|
||||
+ case "jungle_temples":
|
||||
+ seed = conf.jungleSeed;
|
||||
+ break;
|
||||
+ case "woodland_mansions":
|
||||
+ seed = conf.mansionSeed;
|
||||
+ break;
|
||||
+ case "ocean_monuments":
|
||||
+ seed = conf.monumentSeed;
|
||||
+ break;
|
||||
+ case "nether_fossils":
|
||||
+ seed = conf.fossilSeed;
|
||||
+ break;
|
||||
+ case "ocean_ruins":
|
||||
+ seed = conf.oceanSeed;
|
||||
+ break;
|
||||
+ case "pillager_outposts":
|
||||
+ seed = conf.outpostSeed;
|
||||
+ break;
|
||||
+ case "ruined_portals":
|
||||
+ seed = conf.portalSeed;
|
||||
+ break;
|
||||
+ case "shipwrecks":
|
||||
+ seed = conf.shipwreckSeed;
|
||||
+ break;
|
||||
+ case "swamp_huts":
|
||||
+ seed = conf.swampSeed;
|
||||
+ break;
|
||||
+ case "villages":
|
||||
+ seed = conf.villageSeed;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ structureset = new StructureSet(structureset.structures(), new RandomSpreadStructurePlacement(randomConfig.locateOffset, randomConfig.frequencyReductionMethod, randomConfig.frequency, seed, randomConfig.exclusionZone, randomConfig.spacing(), randomConfig.separation(), randomConfig.spreadType()));
|
||||
+ }
|
||||
+ return Holder.direct(structureset);
|
||||
+ }).collect(Collectors.toUnmodifiableList());
|
||||
}
|
||||
+ // Spigot end
|
||||
|
||||
private static boolean hasBiomesForStructureSet(StructureSet structureSet, BiomeSource biomeSource) {
|
||||
Stream<Holder<Biome>> stream = structureSet.structures().stream().flatMap((structureset_a) -> {
|
||||
|
||||
Reference in New Issue
Block a user