mirror of
https://hub.spigotmc.org/stash/scm/spigot/spigot.git
synced 2025-09-18 21:33:01 +00:00
215 lines
10 KiB
Diff
215 lines
10 KiB
Diff
From 6f44c14a796203a2939994aebed438941b1f24b5 Mon Sep 17 00:00:00 2001
|
|
From: md_5 <git@md-5.net>
|
|
Date: Fri, 4 Jul 2014 13:28:45 +1000
|
|
Subject: [PATCH] Further Seed Customisation
|
|
|
|
Allow server admins that really want to to customise the seeds used in world generation even further.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
|
index 9116f1719..ce6026880 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
|
|
@@ -323,7 +323,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
|
}
|
|
|
|
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(blockposition);
|
|
- boolean flag = SeededRandom.a(chunkcoordintpair.x, chunkcoordintpair.z, ((GeneratorAccessSeed) generatoraccess).getSeed(), 987234911L).nextInt(10) == 0;
|
|
+ boolean flag = SeededRandom.a(chunkcoordintpair.x, chunkcoordintpair.z, ((GeneratorAccessSeed) generatoraccess).getSeed(), generatoraccess.getMinecraftWorld().spigotConfig.slimeSeed).nextInt(10) == 0; // Spigot
|
|
|
|
if (random.nextInt(10) == 0 && flag && blockposition.getY() < 40) {
|
|
return a(entitytypes, generatoraccess, enummobspawn, blockposition, random);
|
|
diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java
|
|
index 961b9e17d..7ffe8eae6 100644
|
|
--- a/src/main/java/net/minecraft/world/level/StructureManager.java
|
|
+++ b/src/main/java/net/minecraft/world/level/StructureManager.java
|
|
@@ -69,4 +69,10 @@ public class StructureManager {
|
|
}) : structurestart.c().b((BaseBlockPosition) blockposition);
|
|
}).findFirst(), StructureStart.INVALID_START);
|
|
}
|
|
+
|
|
+ // Spigot start
|
|
+ public World getWorld() {
|
|
+ return this.level.getMinecraftWorld();
|
|
+ }
|
|
+ // Spigot end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
index 11145a549..f9acbe5af 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
|
|
@@ -211,6 +211,7 @@ public abstract class ChunkGenerator {
|
|
|
|
return blockposition1;
|
|
} else {
|
|
+ updateStructureSettings(worldserver, settings); // Spigot
|
|
StructureSettingsFeature structuresettingsfeature = this.settings.a(structuregenerator);
|
|
|
|
return structuresettingsfeature == null ? null : structuregenerator.getNearestGeneratedFeature(worldserver, worldserver.getStructureManager(), blockposition, i, flag, worldserver.getSeed(), structuresettingsfeature);
|
|
@@ -288,6 +289,7 @@ public abstract class ChunkGenerator {
|
|
SectionPosition sectionposition = SectionPosition.a(ichunkaccess);
|
|
StructureStart<?> structurestart = structuremanager.a(sectionposition, structurefeature.feature, ichunkaccess);
|
|
int j = structurestart != null ? structurestart.i() : 0;
|
|
+ updateStructureSettings(structuremanager.getWorld(), settings); // Spigot
|
|
StructureSettingsFeature structuresettingsfeature = this.settings.a(structurefeature.feature);
|
|
|
|
if (structuresettingsfeature != null) {
|
|
@@ -298,6 +300,83 @@ public abstract class ChunkGenerator {
|
|
|
|
}
|
|
|
|
+ // Spigot start
|
|
+ private volatile boolean injected;
|
|
+ private void updateStructureSettings(net.minecraft.world.level.World world, StructureSettings settings) {
|
|
+ if (injected) {
|
|
+ return;
|
|
+ }
|
|
+ synchronized (settings) {
|
|
+ if (injected) {
|
|
+ return;
|
|
+ }
|
|
+ java.util.Map<StructureGenerator<?>, StructureSettingsFeature> original = settings.a();
|
|
+ java.util.Map<StructureGenerator<?>, StructureSettingsFeature> updated = new java.util.HashMap<>();
|
|
+ org.spigotmc.SpigotWorldConfig conf = world.spigotConfig;
|
|
+
|
|
+ for (java.util.Map.Entry<StructureGenerator<?>, StructureSettingsFeature> entry : original.entrySet()) {
|
|
+ String name = IRegistry.STRUCTURE_FEATURE.getKey(entry.getKey()).getKey();
|
|
+ StructureSettingsFeature feature = entry.getValue();
|
|
+ int seed = feature.c();
|
|
+
|
|
+ switch (name) {
|
|
+ case "bastion_remnant":
|
|
+ seed = conf.bastionSeed;
|
|
+ break;
|
|
+ case "desert_pyramid":
|
|
+ seed = conf.desertSeed;
|
|
+ break;
|
|
+ case "endcity":
|
|
+ seed = conf.endCitySeed;
|
|
+ break;
|
|
+ case "fortress":
|
|
+ seed = conf.fortressSeed;
|
|
+ break;
|
|
+ case "igloo":
|
|
+ seed = conf.iglooSeed;
|
|
+ break;
|
|
+ case "jungle_pyramid":
|
|
+ seed = conf.jungleSeed;
|
|
+ break;
|
|
+ case "mansion":
|
|
+ seed = conf.mansionSeed;
|
|
+ break;
|
|
+ case "monument":
|
|
+ seed = conf.monumentSeed;
|
|
+ break;
|
|
+ case "nether_fossil":
|
|
+ seed = conf.fossilSeed;
|
|
+ break;
|
|
+ case "ocean_ruin":
|
|
+ seed = conf.oceanSeed;
|
|
+ break;
|
|
+ case "pillager_outpost":
|
|
+ seed = conf.outpostSeed;
|
|
+ break;
|
|
+ case "ruined_portal":
|
|
+ seed = conf.portalSeed;
|
|
+ break;
|
|
+ case "shipwreck":
|
|
+ seed = conf.shipwreckSeed;
|
|
+ break;
|
|
+ case "swamp_hut":
|
|
+ seed = conf.swampSeed;
|
|
+ break;
|
|
+ case "village":
|
|
+ seed = conf.villageSeed;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ updated.put(entry.getKey(), new StructureSettingsFeature(feature.a(), feature.b(), seed));
|
|
+ }
|
|
+
|
|
+ original.clear();
|
|
+ original.putAll(updated);
|
|
+ injected = true;
|
|
+ }
|
|
+ }
|
|
+ // Spigot end
|
|
+
|
|
public void storeStructures(GeneratorAccessSeed generatoraccessseed, StructureManager structuremanager, IChunkAccess ichunkaccess) {
|
|
boolean flag = true;
|
|
ChunkCoordIntPair chunkcoordintpair = ichunkaccess.getPos();
|
|
diff --git a/src/main/java/net/minecraft/world/level/levelgen/StructureSettings.java b/src/main/java/net/minecraft/world/level/levelgen/StructureSettings.java
|
|
index c7c2f3d22..8804ec67c 100644
|
|
--- a/src/main/java/net/minecraft/world/level/levelgen/StructureSettings.java
|
|
+++ b/src/main/java/net/minecraft/world/level/levelgen/StructureSettings.java
|
|
@@ -32,7 +32,7 @@ public class StructureSettings {
|
|
|
|
public StructureSettings(Optional<StructureSettingsStronghold> optional, Map<StructureGenerator<?>, StructureSettingsFeature> map) {
|
|
this.stronghold = (StructureSettingsStronghold) optional.orElse(null); // CraftBukkit - decompile error
|
|
- this.structureConfig = map;
|
|
+ this.structureConfig = Maps.newHashMap(map); // Spigot
|
|
}
|
|
|
|
public StructureSettings(boolean flag) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
index 19a8d2ef9..b0793d4a1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
@@ -161,7 +161,7 @@ public class CraftChunk implements Chunk {
|
|
@Override
|
|
public boolean isSlimeChunk() {
|
|
// 987234911L is deterimined in EntitySlime when seeing if a slime can spawn in a chunk
|
|
- return SeededRandom.a(getX(), getZ(), getWorld().getSeed(), 987234911L).nextInt(10) == 0;
|
|
+ return SeededRandom.a(getX(), getZ(), getWorld().getSeed(), worldServer.spigotConfig.slimeSeed).nextInt(10) == 0;
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index b99aa36b6..924fea23d 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -269,4 +269,42 @@ public class SpigotWorldConfig
|
|
{
|
|
endPortalSoundRadius = getInt( "end-portal-sound-radius", 0 );
|
|
}
|
|
+
|
|
+ public int villageSeed;
|
|
+ public int desertSeed;
|
|
+ public int iglooSeed;
|
|
+ public int jungleSeed;
|
|
+ public int swampSeed;
|
|
+ public int monumentSeed;
|
|
+ public int oceanSeed;
|
|
+ public int outpostSeed;
|
|
+ public int shipwreckSeed;
|
|
+ public int slimeSeed;
|
|
+ public int endCitySeed;
|
|
+ public int bastionSeed;
|
|
+ public int fortressSeed;
|
|
+ public int mansionSeed;
|
|
+ public int fossilSeed;
|
|
+ public int portalSeed;
|
|
+ private void initWorldGenSeeds()
|
|
+ {
|
|
+ villageSeed = getInt( "seed-village", 10387312 );
|
|
+ desertSeed = getInt( "seed-desert", 14357617 );
|
|
+ iglooSeed = getInt( "seed-igloo", 14357618 );
|
|
+ jungleSeed = getInt( "seed-jungle", 14357619 );
|
|
+ swampSeed = getInt( "seed-swamp", 14357620 );
|
|
+ monumentSeed = getInt( "seed-monument", 10387313 );
|
|
+ shipwreckSeed = getInt( "seed-shipwreck", 165745295 );
|
|
+ oceanSeed = getInt( "seed-ocean", 14357621 );
|
|
+ outpostSeed = getInt( "seed-outpost", 165745296 );
|
|
+ endCitySeed = getInt( "seed-endcity", 10387313 );
|
|
+ slimeSeed = getInt( "seed-slime", 987234911 );
|
|
+ bastionSeed = getInt( "seed-bastion", 30084232 );
|
|
+ fortressSeed = getInt( "seed-fortress", 30084232 );
|
|
+ mansionSeed = getInt( "seed-mansion", 10387319 );
|
|
+ fossilSeed = getInt( "seed-fossil", 14357921 );
|
|
+ portalSeed = getInt( "seed-portal", 34222645 );
|
|
+ log( "Custom Map Seeds: Village: " + villageSeed + " Desert: " + desertSeed + " Igloo: " + iglooSeed + " Jungle: " + jungleSeed + " Swamp: " + swampSeed + " Monument: " + monumentSeed
|
|
+ + " Ocean: " + oceanSeed + " Shipwreck: " + shipwreckSeed + " End City: " + endCitySeed + " Slime: " + slimeSeed + " Bastion: " + bastionSeed + " Fortress: " + fortressSeed + " Mansion: " + mansionSeed + " Fossil: " + fossilSeed + " Portal: " + portalSeed );
|
|
+ }
|
|
}
|
|
--
|
|
2.25.1
|
|
|