Temperature Bands

Modifies world generation to place biomes into repeating temperature bands. Compatible with most worldgen mods. Now with humidity based on proximity to river and/or ocean too!
Before/After on 1.21.1 with default 2.0 config

Before/After on 1.21.1 with default 2.0 config

Vanilla world reference on MC 1.21.1

Vanilla world reference on MC 1.21.1

Same world with mod, MC 1.21.1 with default config

Same world with mod, MC 1.21.1 with default config

Same world with mod, MC 1.21.1 with "simple" (perpendicular bands) humidity

Same world with mod, MC 1.21.1 with "simple" (perpendicular bands) humidity

Description

🌡️ About

Don't like how cold and hot or wet and dry biomes are kinda randomly placed? This mod changes world generation to place biomes into repeating temperature bands, or "climate zones" if you prefer. Automatically compatible with most worldgen mods (see Compatibility section for details). 2.0 adds an advanced humidity algorithm to make wetter biomes appear closer to rivers and/or oceans, or a simpler/faster humidity bands option that are perpendicular to the temperature bands.




📜 Changelogs (Update history)

 

2.0.x
- NEW: Humidity settings that modify biome placement even more. The default (for 1.20.1 and later only, see FAQ for why) is the "advanced" algorithm that calculates humidity based on proximity to rivers and/or oceans. The other "simple" option generates bands that are perpendicular to temperature bands. Existing worlds will keep their vanilla humidity, see the "Upgrading" section on mod description page for more info.
- OPTIMIZED: The core system was completely rewritten to replace the temperature/humidity density functions and check for success/failure instead of dynamically modifying them and assuming they worked. More robust, more reliable, more gooder. Most of the below changes are made possible thanks to this rewrite.
- NEW: Ability to blacklist/whitelist dimensions. The default config will exclude The Nether and The End. This new default will only apply to NEW worlds, see the "Upgrading" section on mod description page for more info.
- NEW: Benchmark option if World Preview is installed. See config for usage, results are written to log/console.
- IMPROVED: When recreating a world, the Temperature Bands config will now properly copy from the old world by default. This function can be disabled to make world recreation use the current mod defaults, see the "Upgrading" section on mod description page for more info.
- IMPROVED: Better compatibility with worldgen mods. Tested with Larion, Tectonic and Lithosphere - they *really* work now, and it should work with every worldgen mod (assuming they still use Density Functions that are named "temperature" and "humidity").
- IMPROVED: Solved compatibility with C2ME, and probably other performance mods.
- IMPROVED: More config options, better comments and reworked defaults.
- VERSION: Latest branch moved to 26.1.2, dropping 1.21.5 (was previous latest) and 1.18.2 versions (too much backport work and no longer popular anyway)
- [2.0.2] FIX: Solved crash caused by trying to process "fake" levels (from e.g. Supplementaries mod and/or Moonlight Lib)
- [2.0.2] FIX: Properly handle dimension data for runtime-generated dimensions that re-use the overworld noise router
- [2.0.3] FIX: Improved support for naughty mods that replace the Overworld BiomeSource with one that doesn't inherit from the original MultiNoise type (e.g. Blueprint library)
- [2.0.3] FIX: Skip World Preview benchmarks for in-game preview screen (eliminates log spam)
- [2.0.4] Further improve compatibility with mods that change vanilla BiomeSource (especially when C2ME is installed)
- [2.0.4] Crash fix for dedicated servers


1.0.0
- Initial release

 





⭐ Highlights

- Modifies worldgen to place biomes into repeating temperature bands from coldest through to hottest, back to coldest, and so on;
- NEW: Additionally modifies biome placement to put high humidity biomes closer to rivers and/or oceans (default, configurable, only for 1.20.1+) or in bands that run perpendicular to temperature bands (default for 1.19.2);
- NEW: Dimension blacklist/whitelist. By default, The Nether and The End are blacklisted;
- Compatible with most worldgen mods (see Compatibility section for details);
- Each world will remember its own settings, mod config will only apply to new worlds;
- Configurable band size, choice of vertical bands, many more config options;
- By default the world spawn (near origin; i.e. block X,Z coordinates 0,0) will act like a "northern hemisphere temperate zone start", meaning cold is North and hot is South (NOTE: Only guaranteed on vanilla worldgen, some mods e.g. Larion and Tectonic are much more random with origin - see Tips section to solve this with another mod);
- Ability to benchmark chunk generation if World Preview is installed.

Example pictures of a 1.21.1 world before and after mod (with default mod config):

Picture of Example world before mod        Picture of same world after mod (notice the cold at the top, hot at the bottom)

(Screenshots taken with World Preview mod, highly recommended if you want to test any config changes. 1.20(.1) is here on CF, port for NeoForge 1.21.1 can be found on Modrinth)





🏷️ Usage & Config

After installing the mod, simply start Minecraft to let the config generate. Jump into a NEW world if you're happy with the default config, as detailed below. By default each band is about 2048 blocks wide on average, and the player will start "above the equator" with cold biomes North and warm biomes South, but this can all be changed in config.

The config is very extensive with lengthy comments that detail all features and worthwhile considerations. It's highly recommended to read it all once. Also note that some features and config settings, namely anything related to advanced humidity, are only available on 1.20.1 and later. See the FAQ for why.

temperaturebands-common.toml:

 

[global] settings are not world-specific. These will apply to all worlds and will not
    save per-world since they don't affect world generation.
    
    [doBenchmark] will, if World Preview is installed, do a benchmark when opening the
        'Preview' tab (and after closing the World Preview settings menu, i.e. whenever
        chunk previews start to generate).
        - Do not scroll or resize the window while World Preview is active, it will 
          cause the benchmark to fail or never complete. To restart benchmark, simply
          enter the World Preview settings menu then exit out. Wait for all visible 
          chunks to generate to see the results in the log/console.
        - If Humidity algorithm is not advanced, or the climate sampler cache is 
          disabled, the 'cache hit-rate' part of results will be incorrect - ignore it.
    doBenchmark = false
    
    [copyConfigOnRecreateWorld] will, when true, copy the previous world Temperature 
        Bands config to the new world when "Recreate" is being done.
        - Set this to false if you want to "upgrade" your world with new features and
          defaults after updating the mod. You will still need to Recreate the world.
        - Relevant for client only. Servers will need to manually recreate their 
          worlds (e.g. set the same seed/settings in server config and delete old world).
    copyConfigOnRecreateWorld = true
    
    [ignoreDimensionFailures] is a list of dimensions to ignore logging errors about
        when replacing their temperature/humidity functions fail.
        - Separate with commas. Trailing comma doesn't matter.
        - The default entry of The End is there since vanilla End uses a constant 0.0
          for temperature (for some reason, though it doesn't use any humidity noise 
          at all) and the mod will try to replace temperature anyway, giving a false 
          'report if you want support for this custom dimension' error. Please don't 
          report that error :)
    ignoreDimensionFailures = "minecraft:the_end,"
    
    [dumpRiverAndOceanBiomes] will, if set to true, dump a list of all biomes with 
        'minecraft:is_river' and 'minecraft:is_ocean' tags from each dimension to 
        console/log.
        - Might be useful for modpack creators (in relation to humidity algorithms)
    dumpRiverAndOceanBiomes = false


[climatesampler-performance]
    [climatesampler-performance] are global climate sampler settings related to 
        performance (shared by all worlds, not saved per-world).
        - A custom climate sampler is used when calculating humidity based on proximity
          to rivers and/or oceans. These settings are currently only relevant if the 
          'advanced' humidity algorithm is enabled (which is the default for new worlds,
          but left disabled for existing worlds).
    --------
    
    [climateSamplerCacheSize] is the size of our custom climate sampler, in megabytes.
        - The default of 5Mb can hold almost 50 thousand samples which should be more
          than enough for any environment.
        - Setting to zero will disable caching, which is NOT recommended - you will
          have much higher CPU *and* memory usage without the cache.
    Default: 5
    Range: 0 ~ 128
    climateSamplerCacheSize = 5
    
    [climateSamplerCachePrefetchRadius] is, if non-zero (along with 
        climateSamplerCacheSize also being non-zero), the rough radius to perform 
        additional sampling (and caching) while sampling. This will be done 
        asynchronously as units of 'climateSamplerResolution' (which is in the 
        climatesampler-world section).
        - Negative numbers refer to a fraction of available CPU threads; the default 
          of -8 will use one-eighth of threads as radius (actual thread count will be 
          higher but they're very short-lived - a few MS - and modern Java handles this
          well).
        - Highly recommended to leave enabled as it drastically improves world generation
          speed with advanced humidity, but there are diminishing returns if set too high.
        - If you experience 'can't keep up' warnings while exploring new chunks, try
          reducing this value. A low fixed number like 1 should still be better than 0 
          (off).
        - Result is rounded-down, meaning setting it too far negative could result in 0
          which will disable prefetching. The default of -8 will do this if your CPU has 
          *less* than 8 threads, which seems appropriate based on my testing. Even on a 
          24-thread CPU, this default would only result in a radius of 3, so keep that in
          mind if manually setting to a positive number - there are sharply diminishing
          returns if this is set too high (relative to your available threads).
        - Do note that World Preview (and new world creation) will be a bit slower at the
          very start, but the speed will improve over time and actually generate quicker
          overall (compared to a disabled sampler cache), especially in high resolutions
          of World Preview and/or high chunk rendering distances. World Preview will remain
          slower overall but World Preview is only doing initial chunk generation which is
          practically never the bottleneck in actual gameplay, even for heavy modpacks 
          (that main bottleneck is chunk carving and decoration, i.e. digging-out caves 
          and placing of trees/structures/etc.).
        - Finally, if you want to stress-test your CPU, disable this completely with 0 and
          keep max-1 (or max) threads in World Preview.
    Default: -8
    Range: -32 ~ 32
    climateSamplerCachePrefetchRadius = -8
    
    [climateSamplerMax] specifies the hard limit on maximum active climate samplers.
        - This setting is only really necessary for World Preview; without this limit, 
          prefetching ends up with too much backpressure which results in a large memory
          "leak".
    Default: 100
    Range: 1 ~ 10000
    climateSamplerMax = 100
    
    [climateSamplerCacheDelay] will, when above zero, delay sampler caching/prefetching
        until the game world has ticked this many times.
        - The default value of zero means no delay.
        - If you experience 'cant keep up' warnings in the log but only during the first few
          seconds of loading a world, increasing this value can help.
        - If you're using World Preview, this value is ignored and prefetch is always active
          since it significantly improves preview speed and doesn't cause any issues.
    Default: 0
    Range: > 0
    climateSamplerCacheDelay = 0
    
    [climateSamplerWarmupMsg] will, when true, show a message on the loading screen about the
        Climate Sampler needing to warm up.
        - Only shown if advanced humidity is active for the overworld dimension (not relevant
          for simple humidity)
        - The message is just some QoL because the progress will seem to be stuck on 0% for a
          few seconds while initial climate sampling occurs
        - Config is here to disable it just in case you use a custom loading screen that 
          causes a crash or something.
    climateSamplerWarmupMsg = true


[world]
    [world] are general defaults for new worlds. These will apply to newly-generated worlds 
        only, existing worlds will remember their own settings.
    --------
    
    [bandSize] is the average size of each temperature band, in blocks.
        - Vanilla Minecraft generation has 5 temperature zones - Freezing, Cool, Temperate,
          Warm and Hot - every biome fits into one of these five temperature ranges. For an
          example, when this value is 2048, the distance from the *center* of one one Hot 
          band to the next Hot band center will be about 16384 (2048 * 8) blocks; Hot through
          to Freezing then back again.
        - If there are any worldgen mods that add biomes with a different 'temperature range'
          for placement, they should be incorporated within existing bands normally.
        - If you want to maintain as much performance as possible, keep this as a power of two.
    Default: 2048
    Range: 512 ~ 32768
    bandSize = 512
    
    [useVerticalBands] will, if true, use vertical instead of horizontal.
    useVerticalBands = false
    
    [bandPositionShift] will shift the bands by the given percentage.
        - Normally the Hot band (Desert and such) will generate at origin (0,0) so the default
          shift of 25% will make the origin temperate (middle temp) instead, shifted downwards
          to simulate a 'Northern hemisphere' start (Colder will be North, or East if Vertical
          bands, and Hotter will be South or West). A value of 0.75 would simulate a southern
          hemisphere start instead.
        - Note that some world gen mods like Tectonic and Larion seem to have their own idea
          about initial world spawn and don't use world origin, in these cases you might want 
          to use a mod like 'Biome Spawn Point' too.
    Default: 0.25
    Range: 0.0 ~ 1.0
    bandPositionShift = 0.25
    
    [tempRange] is the absolute min/max temperature range.
        - Increasing will make the coldest and hottest bands larger while reducing others, 
          lowering will have the opposite effect.
        - The default value makes hottest/coldest bands a tiny bit smaller than the others.
          Setting this value too high or low might result in some bands not generating at all.
    Default: 0.65
    Range: 0.3 ~ 1.0
    tempRange = 0.65
    
    [tempGradeShift] is used to make the hottest and coldest bands roughly the same size.
        - Vanilla temperature has a bias towards cold, this solves that. If e.g. you set it to 
          zero, the coldest band will be larger than all other bands and the hottest would be
          smaller than all others.
    Default: -0.05
    Range: -0.5 ~ 0.5
    tempGradeShift = -0.05
    
    [bandAlgorithm] is the algorithm to use for temperature bands.
        - You can configure and read more about each algorithm in their own section below. 
          Recommended to use World Preview if you want to change things.
        - Note that there is only 1 algorithm currently, this config is here just in case I add
          more later.
    Default: 1
    Range: 1 ~ 1
    bandAlgorithm = 1
    
    [noiseFactor] will, when above zero, incorporate original noise generation into temperature
        bands to help make the shape and edges of bands a bit nicer.
        - HIGHLY recommended to keep it on.
        - See each algorithm for details on how noiseFactor is used. The unit is arbitrary and 
          very dependent on bandSize. For e.g. 100 is nice for a bandSize of 2048 but might be 
          too wild if bandSize is decreased, or too tame if bandSize is increased.
    Default: 100
    Range: 0 ~ 1000
    noiseFactor = 100
    
    [distanceFunction] provides a choice in algorithm for calculating distances (currently only
        used by the default/advanced humidity stuff).
        - A value of 1 is the default and uses "octile" distance which is reasonably fast and 
          accurate.
        - A value of 0 uses "Manhattan" (or "taxi cab") distance which is faster but a bit
          inaccurate.
        - A value of 2 uses "real" or "Euclidean" distance via hypotenuse calculation, which is
          a bit slower but gives maximum accuracy.
        - Recommended to leave on 1 (octile). While Euclidean distance is only about 3% slower,
          it doesn't look any better - just "different". Although Euclidean might give better
          smoothness if you're using very high accuracy for humidity and climate sampler. 
          Manhattan distance is about 5% faster than octile but looks kinda bad - can be very 
          "noisy" and regularly "skips" biome transitions.
    Default: 1
    Range: 0 ~ 2
    distanceFunction = 1
    
    [dimBlacklist] specifies a blacklist of dimensions to exclude from *all* modifications.
        - Separate with commas. Trailing comma doesn't matter.
        - Default excludes the_nether and the_end.
        - Adding minecraft:overworld won't do anything, it is always whitelisted.
    dimBlacklist = "minecraft:the_nether,minecraft:the_end,"
    
    [dimBlacklistAsWhitelist] will, when true, use the above blacklist as a whitelist instead.
        - Adding minecraft:overworld is not necessary, it is always whitelisted.
    dimBlacklistAsWhitelist = false
    
    [vanillaNoiseOverride] is used to override the base noise with vanilla-like Shifted Noise.
        I.e. the noise used with noiseFactor and humidityBaseNoisePercent.
        - The default value of 1 will only replace the noise if it's not already a ShiftedNoise
          type. Recommended.
        - A value of 2 will always replace the noise. Only recommended if you're using a world
          gen mod that happens to keep ShiftedNoise for temperature and humidity, but NOT 
          recommended for vanilla world generation (see second-last point for why).
        - A value of 0 will disable this function. Not recommended (see next point why).
        - This is implemented to help re-introduce some variation to various worldgen mods, and
          usually improves performance a little. Without it, biomes can become extremely large
          and boring, and sometimes extremely slow to generate. Lithosphere is the best example
          of this (though Lithosphere is honestly not recommended in general because of how
          slow it is).
        - Setting to 2 (to always replace) is only recommended for non-vanilla worldgen because 
          the replacement is *not* a 1:1 recreation of vanilla noise given the same seed.
        - This function is particularly useful for many world gen mods like Larion where their 
          original temperature/humidity noises are very "gentle" which results in extremely 
          straight bands. For some mods you may want to increase noiseFactor above the
          defaults.
    Default: 1
    Range: 0 ~ 2
    vanillaNoiseOverride = 1


[algorithm1]
    [algorithm1] are settings for temperature algorithm 1, the 'standard bands' algorithm.
        - As before, these settings are only the defaults for new worlds - each world will 
          remember its own settings.
        - This algorithm is quite simple and produces jaggy lines that aren't too random or 
          natural looking alone, but they look quite good as long as you keep noiseFactor.
        - Keeping the variance low but noiseFactor a decent amount (around 100 or so) will
          produce some decent looking curves/waves in the bands with some randomness, but if 
          you want something more predictable you can reduce noiseFactor while optionally 
          increasing variance.
    --------
    
    [configAlgo1BandVariance] is the band variance in blocks (roughly). If below 10, each band 
        will have a completely straight edge across the world and will disable all remaining 
        algo1 features.
        - You will want to keep this a fairly small value. Making it too large will result in 
          weirdness, especially if it's too close to the bandSize.
        - If you want to maintain as much performance as possible, keep this as a power of two.
    Default: 32
    Range: 0 ~ 16384
    bandVariance = 32
    
    [algo1bandVarianceSteepness] is the "steepness" of band variance.
        - Unit is arbitrary, you'll want to experiment and test if you change it. Probably best 
          left alone, though.
    Default: 0.2
    Range: 0.1 ~ 10.0
    algo1bandVarianceSteepness = 0.2


[humidity-world]
    [humidity-world] are the world-specific settings for humidity (aka vegetation).
        - As before, these settings are only the defaults for new worlds - each world will 
          remember its own settings.
    --------
    
    [humidityAlgorithm] is the algorithm to use for humidity (aka vegetation).
        - You can configure and read more about each algorithm in their own section below.
          Recommended to use World Preview if you want to change things around.
        - A value of 2 (default) uses a "realistic" humidity calculation based on proximity to
          rivers and/or oceans. Can be a little slow, but still not as slow as many worldgen
          mods, and it's definitely worth it (in my opinion).
        - A value of 1 uses a much simpler 'humidity bands' algorithm that run perpendicular to
          temperature bands.
        - A value of 0 will disable humidity feature entirely, keeping vanilla random noise 
          humidity.
        - Do note that with advanced humidity, some worldgen mods may become extremely slow. 
          One example of this is Lithosphere. In these cases it might be best to use simple 
          humidity, or at least turning off river influence (Lithosphere in particular doesn't 
          generate many rivers anyway).
    Default: 2
    Range: 0 ~ 2
    humidityAlgorithm = 2
    
    [humidityTempWeight] is how much the temperature will additionally influence humidity.
        - Applies to all humidity algorithms, and is the final adjustment to the humidity
          value.
        - For humidity algorithm 2 (advanced) it introduces some biome variation between the
          warmer and cooler sides of the temperate (middle temperature) bands.
        - For humidity algorithm 1 (bands perpendicular to temperature), it applies some angle
          via narrowing/widening on the humidity bands - as you approach the cold band, 
          lower-humidity biomes will become wider; as you approach the hot band, higher-
          humidity biomes will become wider.
        - Setting to 0.0 will disable this function.
    Default: 0.4
    Range: 0.0 ~ 1.0
    humidityTempWeight = 0.4


[humidity-algorithm1]
    [humidity-algorithm1] are world-specific settings for the 'simple' banding humidity 
        algorithm, i.e. humidity bands that run perpendicular to temperature.
    --------
    
    [humidityAlgo1MimicScale] will scale the humidity bands, in relation to temperature bands.
        - The default of 0.5 for e.g. means that humidity bands will be half as big and twice
          as frequent as temperature bands (on average).
    Default: 0.5
    Range: 0.1 ~ 1.0
    humidityAlgo1MimicScale = 0.5


[humidity-algorithm2]
    [sectionHumidityAlgo2] are the world-specific settings for the 'advanced' humidity 
        algorithm, i.e. humidity based on proximity to rivers and/or oceans.
    --------
    
    [humidityResolution] is the accuracy or "resolution" for calculating the distance from
        river and/or ocean for a given area, where lower values means more accuracy.
        - Represented as a square root, i.e. the default of 3 means each 9x9 area will use the
          same distance values.
        - This is a performance vs accuracy choice but the default of 3 seems decently 
          balanced; values below 3 start to become extremely expensive on CPU/worldgen time 
          with only small improvements in smoothness, and values above 3 get a bit too 
          "chunky". The max value of 8 (each 64x64 area having same humidity) results in a 
          silly checkerboard look (but is very fast).
        - If you change this, be sure to check out "climateSamplerResolution" in the 
          "[climatesampler-world]" section too - these two settings are closely related.
    Default: 3
    Range: 1 ~ 8
    humidityResolution = 3
    
    [humidityRiverInfluence] determines how much rivers should contribute to final humidity 
        value.
        - The default of 0.4 means 40% of river closeness will be added to the base humidity
          that was determined by ocean closeness.
        - Setting to 0 will disable any river influence on humidity (only oceans will count) 
          and give a whopping ~40% speed increase due to our ability to take some shortcuts
          when only searching for oceans (only needs to compute continentalness), but it does
          make worldgen quite a bit more boring and less realistic.
        - Values higher than the default makes biome placement very 'noisy' (until approaching
          1.0), i.e. lots of scattered 'dots' of tiny biomes around where ocean and river 
          distance thresholds intersect. The default 0.4 does this a bit too but not
          excessively, and it's actually kinda cool :)
        - Values at/above 1.0 will effectively double/multiply humidity values. Might be 
          useful if you want a world where rivers count for "more humidity" than oceans.
        - Regardless of the value, keeping this enabled has the same cost in performance - so
          the choice of what influence to use, if any, is purely up to personal taste.
    Default: 0.4
    Range: 0.0 ~ 5.0
    humidityRiverInfluence = 0.4
    
    [humiditySearchDistance] is the maximal distance in blocks (on XZ/horizontal axes) from
        rivers and/or oceans to be considered as 'absolutely dry' (the lowest humidity). In 
        other words, higher numbers will make humidity drop slower as distance increases from
        river and/or ocean biomes.
        - In plain terms, it is how far we will search for rivers and/or oceans from any given
          point, with final humidity being based on actualDistance/searchDistance.
        - Higher values are more expensive on CPU/worldgen time, though it can be mitigated by 
          increasing the humidityResolution value and/or climateSamplerResolution at the
          expense of worldgen quality (you'll see more "chunkyness" in biome borders). 
          Alternatively, you can try adjusting climatesampler-performance settings to *maybe* 
          improve efficiency at the expense of increased CPU/RAM load, which may actually end
          up reducing throughput/worldgen speed anyway.
        - The default value seems decent, but for worldgen mods that create larger landmasses 
          and/or fewer rivers you will probably want to increase this.
    Default: 600
    Range: 16 ~ 16384
    humiditySearchDistance = 600
    
    [humidityBaseNoisePercent] is how much the original humidity noise will contribute to 
        calculated proximity-based humidity. Default value of 0.1 means 10%.
        - Setting to 0.0 will disable use of the base noise, and provide a *very small* 
          performance improvement (probably not even measurable).
        - This is not based on the resolution of humidity nor sampler so helps to provide a 
          little random variation to the final result.
        - You'll probably want to keep this either fairly low (close to 0.0) or fairly high 
          (close to 1.0), otherwise biome placement becomes very 'noisy', though setting higher
          values might defeat the purpose of using this algorithm at all.
    Default: 0.1
    Range: 0.0 ~ 1.0
    humidityBaseNoisePercent = 0.1
    
    [humidityMiddleWeight] is how much the near-final humidity value will be pulled towards the
        center.
        - The default value of 0.2 provides some nicer transitions between biomes while 
          slightly reducing the sizes of the extreme-humidity biomes for middle temperatures 
          (e.g. Dark Forest).
        - This adjustment happens before humidityTempWeight but after everything else.
        - Setting to 0.0 will disable this function, though it won't provide any performance 
          benefit and biome transitions will be (subjectively) worse.
    Default: 0.3
    Range: 0.0 ~ 1.0
    humidityMiddleWeight = 0.3


[climatesampler-world]
    [climatesampler-world] are the world-specific settings for the climate sampler. Currently 
        only used by humidity. Unlike the climatesampler-performance settings, these DO affect
        worldgen.
    --------
    
    [climateSamplerResolution] is the accuracy or "resolution" for sampling the climate.
        - Currently only used by ocean/river search in the advanced humidity algorithm.
        - The default of -1 means automatic, which is the cube of humidityResolution. This
          seems to be the most logical balance between quality and performance - biome edges
          look natural with sporadic patches of other biomes potential to the nearby 
          humidity/temperature values to make blending a bit more exciting.
        - Setting this to a value equal to humidityResolution will provide maximum accuracy 
          but will become VERY expensive on CPU/worldgen time, though that might be desirable 
          if you want all biome edges to be smoother and defined with minimal biome 'patches'.
        - If you've raised humidityResolution (meaning less accuracy) for some performance, it 
          might be useful to manually set this value to something closer to the new 
          humidityResolution rather than leaving on automatic; such a change could result in 
          better overall smoothness without significant efficiency loss. Do note that it's 
          pointless to have this value lower than humidityResolution, though - all that will 
          do is burn CPU time for no reason.
    Default: -1
    Range: -1 ~ 64
    climateSamplerResolution = -1

 




💡 Tips

  • World Preview mod allows you to preview settings before making the world. Highly recommended if you want to tune configs. (Note: A port for NeoForge 1.21.1 can be found on Modrinth)
  • World Preview Temperature Addon adds a "heatmap" view to World Preview, providing some focused detail to changed configs.
  • Biome Spawn Point might be desired if using some worldgen mods like Tectonic or Larion, which have their own idea about initial world spawn (rather than origin).




⤴️ Upgrading

New versions of the mod may add new features, these new features will be configurable but WILL NOT apply to existing worlds (to avoid world generation issues). Easiest way to "upgrade" is to simply set the config "copyConfigOnRecreateWorld" to false, (re)start Minecraft, and Recreate your old world. In some cases, however, you may want to retroactively apply the new changes to the old world. Here's the easiest way to do that (be sure to read this whole section before starting):

  1. Upgrade to the new version of Temperature Bands;
  2. Start Minecraft, generate a new world, then Save and Quit (no need to quit the whole game);
  3. Browse to your instance Save folder. If you don't know how to do this, I can't help sorry - do a web search;
  4. Each folder here are your worlds. Inside, there will be a 'temperaturebands.prop' file - this is a plain text file with the Temperature Bands config for that world;
  5. You can "simply" open these files with Notepad (or whatever) and compare the prop file contents from the newly-generated world with your old world, and copy-and-paste the appropriate new lines over.


You can of course backup your existing world if you want to be careful. Now, sometimes you don't need to copy the lines EXACTLY, you might want to change them. You may have already noticed that each line in this prop file already corresponds to a setting in the usual (default world) config, so it's important not to change anything in the prop unless you're absolutely sure. Here I will detail new config options and any tips regarding them:

2.0.0

Added config entries "configDimBlacklist" and "configDimBlacklistAsWhitelist". You can read about these in the Usage & Config section above, but they should be mostly self-explanatory. A couple important notes regarding these, though:

  • The "configDimBlacklist" lists blacklisted dimensions, with each dimension entry separated by commas. Do NOT remove the '\' characters, these are necessary. I.e. the default of "configDimBlacklist=minecraft\:the_nether,minecraft\:the_end" is correct.
  • If you do end up moving the blacklist over to your old world, you may need to delete those dimensions or chunks so they regenerate correctly. You can delete the whole dimensions by deleting the "DIM1" and "DIM-1" folders inside your save folder (make sure you've saved and quit your world first).
  • The "configDimBlacklistAsWhitelist" option is not strictly necessary to copy if you want to keep it as a blacklist, since the default is already false.
  • You can verify the blacklist worked by looking at the log after loading into a world - you'll see something like "Using dimension blacklist: minecraft:the_nether,minecraft:the_end" (or whitelist instead of blacklist if you set configDimBlacklistAsWhitelist to true).




✔️ Compatibility and Known Issues

The mod should be compatible with most world generator mods, since in modern Minecraft they are often based on datapacks which still use the vanilla-style temperature noise function. This includes the following (personally tested, confirmed working in 2.0):

  • Tectonic and/or Terralith;
  • Larion World Generation;
  • Lithosphere;

...everything should work with most worldgen mods, as long as they still use DensityFunctions that are named "temperature" and "humidity". Do note that the default mod config might not be ideal for some mods, though - read the config comments for details. Most notable is vanillaNoiseOverride.

The following are examples of worldgen mods that are NOT compatible, because they completely replace Minecraft generation with their own system (i.e. they don't use the vanilla NoiseRouter and/or vanilla DensityFunctions):

  • TerraFirmaCraft;


No support will be added for these incompatible mods. Please report any and all other issues not mentioned so I can improve the mod 😁

Other mods

  • C2ME is supported, at least with my testing on the latest versions of the mods (0.4.x+ for NeoForge and Fabric). HOWEVER, abandoned and outdated forks of C2ME (such as the 0.2.x versions for Forge 1.20.1) cannot be supported with advanced humidity - you will likely experience extremely slow worldgen speed. Either remove C2ME, or disable advanced humidity to restore normal operation.




🛎️ Support

Hopefully, the mod is simple enough to use, but you are encouraged to:

  • Report any bugs you find;
  • Report any incompatibilities with other mods;
  • Request any features you want to see

...so I can keep improving the mod 😊 be sure to mention your loader (e.g. Forge, Fabric) and Minecraft version too!




⁉️ FAQ / Troubleshooting

Q. Can I use this in my modpack?

A. Of course! As long as you consider reporting any mod compatibility issues, and feature/config requests too 😁

 

Q. Does this mod slow down world generation?

A. Yes and No. If you've turned off advanced humidity, the performance impact is negligible. If you are using advanced humidity, the *initial* phase of chunk generation will be significantly slower, as can be seen in World Preview. HOWEVER, in modern Minecraft, this initial noise-generation and biome placement is highly multi-threaded and is very rarely the bottleneck in actual gameplay. The final phases of chunk generation - decoration and carving - generally remain the bottleneck since the final part still runs on the main (server) thread. Also note that, even though World Preview seems much slower, if you enable to benchmark config you'll see that chunk generation is still quite fast - on my 3900X I'm able to achieve over 7000 chunks per second. Still, if you want it to be faster, see the next question.

 

Q. Can I make World Preview faster?

A. Yes, assuming you're keeping advanced humidity enabled, which is the main reason for slowing it down. In the World Preview settings menu (wrench icon on Preview tab), go to the "Resolution" tab and change the bottom bar, "samples per chunk", to the maximum value (farthest right). The preview will be a bit more pixelated, but it will significantly improve the speed.

 

Q. The "Climate Sampler is warming up" screen (or world load on server) takes to long, how to speed up?

A. Set the config "climateSamplerCacheDelay" to 1 or higher. I might make this default in later versions, feedback is appreciated (just a simple comment saying it's too slow or it's fine)

 

Q. Is X worldgen mod compatible?

A. If it only adds new biomes, yes. If it actually changes worldgen and is not listed above in Compatibility, probably - try it out! Would appreciate reporting your results 😊 remember you can use World Preview mod to make testing quicker, though that's only for 1.20.x at time of writing (there is also an unofficial port for NeoForge 1.21.1 on Modrinth). You should see log messages when temperature/humidity function replacement succeeds or fails for a given dimension.

 

Q. Can you make the border between bands more organic rather than with the lines they currently are?

A. Not really, no. Doing so would require a separate mod/datapack that actually changes biome parameters to fit into those transition zones (and/or adds new biomes that go between them). This *might* be something I am working on, though 😉 Note regarding Oceans, there is no such biome as "Warm Deep Ocean" but Warm Oceans can still get as deep as the non-Warm deep variants.

 

Q. There's too much Dark Forest! How to fix?

A. I've noticed this. Try increasing "humidityMiddleWeight" a little. I might be able to "fix" this properly with a separate mod that adjusts biome parameters (see the Q just above this one).

 

Q. Why is advanced humidity only available on 1.20.1 and later?

A. Minecraft 1.20.1 added significant performance improvements to biome decoration which make it possible, namely the generation of Strongholds and other large structures through multithreading. In 1.19.2 and below, this structure generation is still single threaded. The process in both versions requires locating biomes since structures have preferred biomes, and this in turn requires climate sampling. But with advanced humidity, climate sampling itself also requires locating biomes. This results in several levels or "nested" climate sampling processes, and because 1.19.2 still uses single threads for generating these structures it becomes practically impossible to finish with the chunk generation seeming stuck.

There is no mod that I know of that "backports" multi-threaded structure generation to older versions, not even C2ME, so I've prevented it from being used in these older versions. It is also beyond the scope of Temperature Bands to solve this - I looked into it and it requires significant changes to the MC codebase which may introduce more problems. The only solution I can give is to update your modpack to 1.20.1 or later.

 

Q. It's still too slow, or my PC freezes!

A. Advanced humidity is a bit expensive if you don't have a high-end CPU, or you have a lot of players on a server. Try adding C2ME and Fast Noise mods. If these don't help, consider disabling climate prefetch radius and/or setting prefetch delay to something above 0. Last resort is to disable advanced humidity entirely. Alternatively, another modder has made a similar mod (though it's closed source/proprietary) called 'Natural Temperature', you can try that.

 

Q. Can you add a port for Minecraft version X?

A. I will only support popular modding versions since it's a lot of work to maintain so many versions. If I've missed a version, please let me know in the comments (along with some examples of major content mods or modpacks that exist for this version). Otherwise, another modder has made a similar mod (though it's closed source/proprietary) called 'Natural Temperature' which has more version support, you can try that.

 

Q. I have another question...

A. ...ask away in the comments :)




🕹️ CosmicDan's Mods

Sleeping Overhaul 2
Replaces skip-to-day on sleep with a time lapse, and more!

Simple Day Length Extender
A simple, highly-compatible mod to extend the length of day and/or night.

Temperature Bands
Modifies world generation to place biomes into repeating temperature bands. Compatible with most worldgen mods.




The Temperature Bands Team

profile avatar
  • 10
    Followers
  • 6
    Projects
  • 2.4M
    Downloads
Donate

More from CosmicDanView all

  • Simple Day Length Extender project image

    Simple Day Length Extender

    • 24.0K
    • Mods

    A simple, highly-compatible mod to extend the length of day and/or night. Special support for TFC.

    • 24.0K
    • June 15, 2026
    • Mods
  • Sleeping Overhaul 2 project image

    Sleeping Overhaul 2

    • 415.6K
    • Mods

    Replaces skip-to-day on sleep with a time lapse, and more!

    • 415.6K
    • May 13, 2025
    • Mods
  • NoCubes project image

    NoCubes

    • 970.9K
    • Mods

    A mod for 1.12.2+ that creates smooth terrain in Minecraft

    • 970.9K
    • August 20, 2024
    • Mods
  • SleepingOverhaul project image

    SleepingOverhaul

    • 961.4K
    • Mods

    Replaces the vanilla "skip-to-day" function of sleep with a cool and immersive time-lapse sleep (speeds up time), among other configurable sleep enhancements.

    • 961.4K
    • December 6, 2018
    • Mods
  • Simple Day Length Extender project image

    Simple Day Length Extender

    • 24.0K
    • Mods

    A simple, highly-compatible mod to extend the length of day and/or night. Special support for TFC.

    • 24.0K
    • June 15, 2026
    • Mods
  • Sleeping Overhaul 2 project image

    Sleeping Overhaul 2

    • 415.6K
    • Mods

    Replaces skip-to-day on sleep with a time lapse, and more!

    • 415.6K
    • May 13, 2025
    • Mods
  • NoCubes project image

    NoCubes

    • 970.9K
    • Mods

    A mod for 1.12.2+ that creates smooth terrain in Minecraft

    • 970.9K
    • August 20, 2024
    • Mods
  • SleepingOverhaul project image

    SleepingOverhaul

    • 961.4K
    • Mods

    Replaces the vanilla "skip-to-day" function of sleep with a cool and immersive time-lapse sleep (speeds up time), among other configurable sleep enhancements.

    • 961.4K
    • December 6, 2018
    • Mods