Make ShiftExistingBiomes available via API
Fixes bug with wrong new_y_min when shifting a biome below the nether floor, and makes the ShiftExistingBiomes function available to other mods via the nether global, since it's not a simple function and biomes would also need to be shifted if another mod wants to add a second nether layer.
This commit is contained in:
parent
54613d673a
commit
db68df3596
19
mapgen.lua
19
mapgen.lua
|
@ -81,7 +81,8 @@ local math_max, math_min, math_abs, math_floor = math.max, math.min, math.abs, m
|
||||||
|
|
||||||
-- Inject nether_caverns biome
|
-- Inject nether_caverns biome
|
||||||
|
|
||||||
local function override_underground_biomes()
|
-- Move any existing biomes out of the y-range specified by 'floor' and 'ceiling'
|
||||||
|
mapgen.ShiftExistingBiomes = function(floor, ceiling)
|
||||||
-- https://forum.minetest.net/viewtopic.php?p=257522#p257522
|
-- https://forum.minetest.net/viewtopic.php?p=257522#p257522
|
||||||
-- Q: Is there a way to override an already-registered biome so I can get it out of the
|
-- Q: Is there a way to override an already-registered biome so I can get it out of the
|
||||||
-- way of my own underground biomes without disturbing the other biomes registered by
|
-- way of my own underground biomes without disturbing the other biomes registered by
|
||||||
|
@ -124,21 +125,21 @@ local function override_underground_biomes()
|
||||||
if type(new_biome_def.y_min) == 'number' then biome_y_min = new_biome_def.y_min end
|
if type(new_biome_def.y_min) == 'number' then biome_y_min = new_biome_def.y_min end
|
||||||
if type(new_biome_def.y_max) == 'number' then biome_y_max = new_biome_def.y_max end
|
if type(new_biome_def.y_max) == 'number' then biome_y_max = new_biome_def.y_max end
|
||||||
|
|
||||||
if biome_y_max > NETHER_FLOOR and biome_y_min < NETHER_CEILING then
|
if biome_y_max > floor and biome_y_min < ceiling then
|
||||||
-- This biome occupies some or all of the depth of the Nether, shift/crop it.
|
-- This biome occupies some or all of the depth of the Nether, shift/crop it.
|
||||||
local new_y_min, new_y_max
|
local new_y_min, new_y_max
|
||||||
local spaceOccupiedAbove = biome_y_max - NETHER_CEILING
|
local spaceOccupiedAbove = biome_y_max - ceiling
|
||||||
local spaceOccupiedBelow = NETHER_FLOOR - biome_y_min
|
local spaceOccupiedBelow = floor - biome_y_min
|
||||||
if spaceOccupiedAbove >= spaceOccupiedBelow or biome_y_min <= -30000 then
|
if spaceOccupiedAbove >= spaceOccupiedBelow or biome_y_min <= -30000 then
|
||||||
-- place the biome above the Nether
|
-- place the biome above the Nether
|
||||||
-- We also shift biomes which extend to the bottom of the map above the Nether, since they
|
-- We also shift biomes which extend to the bottom of the map above the Nether, since they
|
||||||
-- likely only extend that deep as a catch-all, and probably have a role nearer the surface.
|
-- likely only extend that deep as a catch-all, and probably have a role nearer the surface.
|
||||||
new_y_min = NETHER_CEILING + 1
|
new_y_min = ceiling + 1
|
||||||
new_y_max = math_max(biome_y_max, NETHER_CEILING + 2)
|
new_y_max = math_max(biome_y_max, ceiling + 2)
|
||||||
else
|
else
|
||||||
-- shift the biome to below the Nether
|
-- shift the biome to below the Nether
|
||||||
new_y_max = NETHER_FLOOR - 1
|
new_y_max = floor - 1
|
||||||
new_y_min = math_min(biome_y_min, NETHER_CEILING - 2)
|
new_y_min = math_min(biome_y_min, floor - 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
debugf("Moving biome \"%s\" from %s..%s to %s..%s", new_biome_def.name, new_biome_def.y_min, new_biome_def.y_max, new_y_min, new_y_max)
|
debugf("Moving biome \"%s\" from %s..%s to %s..%s", new_biome_def.name, new_biome_def.y_min, new_biome_def.y_max, new_y_min, new_y_max)
|
||||||
|
@ -162,7 +163,7 @@ local function override_underground_biomes()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Shift any overlapping biomes out of the way before we create the Nether biomes
|
-- Shift any overlapping biomes out of the way before we create the Nether biomes
|
||||||
override_underground_biomes()
|
mapgen.ShiftExistingBiomes(NETHER_FLOOR, NETHER_CEILING)
|
||||||
|
|
||||||
-- nether:native_mapgen is used to prevent ores and decorations being generated according
|
-- nether:native_mapgen is used to prevent ores and decorations being generated according
|
||||||
-- to landforms created by the native mapgen.
|
-- to landforms created by the native mapgen.
|
||||||
|
|
Loading…
Reference in New Issue