mirror of
https://github.com/minetest-mods/nether.git
synced 2025-07-18 00:00:41 +02:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
22
mapgen.lua
22
mapgen.lua
@ -113,7 +113,7 @@ override_underground_biomes()
|
||||
|
||||
-- nether:native_mapgen is used to prevent ores and decorations being generated according
|
||||
-- to landforms created by the native mapgen.
|
||||
-- Ores and decorations are registered against "nether:rack" instead, and the lua
|
||||
-- Ores and decorations can be registered against "nether:rack" instead, and the lua
|
||||
-- on_generate() callback will carve the Nether with nether:rack before invoking
|
||||
-- generate_decorations and generate_ores.
|
||||
minetest.register_node("nether:native_mapgen", {})
|
||||
@ -160,7 +160,7 @@ minetest.register_ore({
|
||||
ore_type = "scatter",
|
||||
ore = "default:lava_source",
|
||||
wherein = "nether:rack",
|
||||
clust_scarcity = 32 * 32 * 32,
|
||||
clust_scarcity = 36 * 36 * 36,
|
||||
clust_num_ores = 4,
|
||||
clust_size = 2,
|
||||
y_max = NETHER_CEILING,
|
||||
@ -465,10 +465,15 @@ end
|
||||
|
||||
|
||||
-- use knowledge of the nether mapgen algorithm to return a suitable ground level for placing a portal.
|
||||
function nether.find_nether_ground_y(target_x, target_z, start_y)
|
||||
-- player_name is optional, allowing a player to spawn a remote portal in their own protected areas.
|
||||
function nether.find_nether_ground_y(target_x, target_z, start_y, player_name)
|
||||
local nobj_cave_point = minetest.get_perlin(np_cave)
|
||||
local air = 0 -- Consecutive air nodes found
|
||||
|
||||
local minp_schem, maxp_schem = nether.get_schematic_volume({x = target_x, y = 0, z = target_z}, nil, "nether_portal")
|
||||
local minp = {x = minp_schem.x, y = 0, z = minp_schem.z}
|
||||
local maxp = {x = maxp_schem.x, y = 0, z = maxp_schem.z}
|
||||
|
||||
for y = start_y, math_max(NETHER_FLOOR + BLEND, start_y - 4096), -1 do
|
||||
local nval_cave = nobj_cave_point:get3d({x = target_x, y = y, z = target_z})
|
||||
|
||||
@ -476,13 +481,14 @@ function nether.find_nether_ground_y(target_x, target_z, start_y)
|
||||
air = air + 1
|
||||
else -- Not cavern, check if 4 nodes of space above
|
||||
if air >= 4 then
|
||||
local portal_y = y + 1
|
||||
-- Check volume for non-natural nodes
|
||||
local minp = {x = target_x - 1, y = y , z = target_z - 2}
|
||||
local maxp = {x = target_x + 2, y = y + 4, z = target_z + 2}
|
||||
if nether.volume_is_natural(minp, maxp) then
|
||||
return y + 1
|
||||
minp.y = minp_schem.y + portal_y
|
||||
maxp.y = maxp_schem.y + portal_y
|
||||
if nether.volume_is_natural_and_unprotected(minp, maxp, player_name) then
|
||||
return portal_y
|
||||
else -- Restart search a little lower
|
||||
nether.find_nether_ground_y(target_x, target_z, y - 16)
|
||||
nether.find_nether_ground_y(target_x, target_z, y - 16, player_name)
|
||||
end
|
||||
else -- Not enough space, reset air to zero
|
||||
air = 0
|
||||
|
Reference in New Issue
Block a user