Skip to main content

steel_worldgen/biomes/
mod.rs

1mod biome_source;
2mod climate_sampler;
3mod nether_climate_sampler;
4
5use sha2::{Digest, Sha256};
6
7pub use biome_source::{
8    BiomeSourceKind, ChunkBiomeSampler, EndBiomeSource, NetherBiomeSource, OverworldBiomeSource,
9};
10pub use climate_sampler::OverworldClimateSampler;
11pub use nether_climate_sampler::NetherClimateSampler;
12
13/// Matches vanilla `BiomeManager.obfuscateSeed(long)`.
14#[must_use]
15pub fn obfuscate_biome_seed(seed: i64) -> i64 {
16    let mut hasher = Sha256::new();
17    hasher.update(seed.to_le_bytes());
18    let result = hasher.finalize();
19    let mut bytes = [0; 8];
20    bytes.copy_from_slice(&result[..8]);
21    i64::from_le_bytes(bytes)
22}
23
24#[cfg(test)]
25mod tests {
26    use super::obfuscate_biome_seed;
27
28    #[test]
29    fn obfuscate_biome_seed_matches_guava_hash_long() {
30        assert_eq!(obfuscate_biome_seed(0), 8_794_265_229_978_523_055);
31        assert_eq!(obfuscate_biome_seed(1), -6_467_378_160_175_308_932);
32        assert_eq!(obfuscate_biome_seed(12_345), 293_737_985_876_514_017);
33        assert_eq!(obfuscate_biome_seed(-1), 6_759_447_113_877_070_610);
34    }
35}