From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sat, 18 Jul 2020 11:27:43 -0500 Subject: [PATCH] Populator seed controls diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java index 5e672a0660d0aceffcdb26d185590ca18aa4f023..4b171a2a60e24947e884f8988920f335bd99a471 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java @@ -293,7 +293,7 @@ public class TimingsExport extends Thread { JSONObject object = new JSONObject(); for (String key : config.getKeys(false)) { String fullKey = (parentKey != null ? parentKey + "." + key : key); - if (fullKey.equals("database") || fullKey.equals("settings.bungeecord-addresses") || TimingsManager.hiddenConfigs.contains(fullKey) || key.startsWith("seed-") || key.equals("worldeditregentempworld")) { + if (fullKey.equals("database") || fullKey.equals("settings.bungeecord-addresses") || TimingsManager.hiddenConfigs.contains(fullKey) || key.startsWith("seed-") || key.equals("worldeditregentempworld") || fullKey.contains("worldgen.seeds.populator")) { // Tuinity continue; } final Object val = config.get(key); diff --git a/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java index e1dc7c1025e19f7393a45719af8fe7aae016184d..dd45a896998e4d5637ef0dd08f2b72d6b6f891de 100644 --- a/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java +++ b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java @@ -1,5 +1,6 @@ package com.tuinity.tuinity.config; +import co.aikar.timings.TimingsManager; import com.destroystokyo.paper.util.SneakyThrow; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.TicketType; @@ -410,6 +411,19 @@ public final class TuinityConfig { this.spawnLimitAmbient = this.getInt(path + ".ambient", -1); } + public Long populatorSeed; + public boolean useRandomPopulatorSeed; + + private void populatorSeed() { + final String seedString = this.getString("worldgen.seeds.populator", "default"); + if (seedString.equalsIgnoreCase("random")) { + this.useRandomPopulatorSeed = true; + } else if (!seedString.equalsIgnoreCase("default")) { + this.populatorSeed = Long.parseLong(seedString); + } + if (!TimingsManager.hiddenConfigs.contains("worldgen.seeds.populator")) TimingsManager.hiddenConfigs.add("worldgen.seeds.populator"); + } + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/world/level/biome/BiomeBase.java b/src/main/java/net/minecraft/world/level/biome/BiomeBase.java index 9bbd175f7e20591bbefdbddcb5e998e7098c5adb..c4fb051739c1c186c1574185e0653f513755987d 100644 --- a/src/main/java/net/minecraft/world/level/biome/BiomeBase.java +++ b/src/main/java/net/minecraft/world/level/biome/BiomeBase.java @@ -23,7 +23,9 @@ import net.minecraft.core.SectionPosition; import net.minecraft.data.RegistryGeneration; import net.minecraft.resources.MinecraftKey; import net.minecraft.resources.RegistryFileCodec; +import net.minecraft.server.level.ChunkProviderServer; import net.minecraft.server.level.RegionLimitedWorldAccess; +import net.minecraft.server.level.WorldServer; import net.minecraft.util.INamable; import net.minecraft.world.level.ChunkCoordIntPair; import net.minecraft.world.level.EnumSkyBlock; @@ -257,6 +259,10 @@ public final class BiomeBase { return this.k; } + // Tuinity start - populator seed control + private static final java.security.SecureRandom SECURE_RANDOM = new java.security.SecureRandom(); + // Tuinity end - populator seed control + public void a(StructureManager structuremanager, ChunkGenerator chunkgenerator, RegionLimitedWorldAccess regionlimitedworldaccess, long i, SeededRandom seededrandom, BlockPosition blockposition) { List>>> list = this.k.c(); int j = WorldGenStage.Decoration.values().length; @@ -293,12 +299,24 @@ public final class BiomeBase { } } + // Tuinity start - populator seed control + long populatorSeed; + WorldServer world = (WorldServer)((ChunkProviderServer)regionlimitedworldaccess.getChunkProvider()).getWorld(); + if (world.tuinityConfig.useRandomPopulatorSeed) { + populatorSeed = SECURE_RANDOM.nextLong(); + } else if (world.tuinityConfig.populatorSeed != null) { + populatorSeed = world.tuinityConfig.populatorSeed.longValue(); + } else { + populatorSeed = i; + } + // Tuinity end - populator seed control + if (list.size() > k) { for (Iterator iterator1 = ((List) list.get(k)).iterator(); iterator1.hasNext(); ++l) { Supplier> supplier = (Supplier) iterator1.next(); WorldGenFeatureConfigured worldgenfeatureconfigured = (WorldGenFeatureConfigured) supplier.get(); - seededrandom.b(i, l, k); + seededrandom.b(populatorSeed, l, k); // Tuinity - populator seed control - move i up into default branch try { worldgenfeatureconfigured.a(regionlimitedworldaccess, chunkgenerator, seededrandom, blockposition);