Add flat Nether; fix portals in flat world

Wuzzy 2017-08-21 18:30:37 +02:00
parent 2e63dd0a3d
commit 8d9e46b535
3 changed files with 27 additions and 3 deletions

@ -6,6 +6,8 @@ local nobj_cave = nil
local SPAWN_MIN = mcl_vars.mg_end_min+70 local SPAWN_MIN = mcl_vars.mg_end_min+70
local SPAWN_MAX = mcl_vars.mg_end_min+98 local SPAWN_MAX = mcl_vars.mg_end_min+98
local mg_name = minetest.get_mapgen_setting("mg_name")
-- 3D noise -- 3D noise
local np_cave = { local np_cave = {
@ -169,7 +171,10 @@ local function build_end_portal(pos, target3)
minetest.remove_node(newp) minetest.remove_node(newp)
end end
else else
if minetest.get_node(newp).name == "air" then -- Build obsidian platform if floating
local newp_below = table.copy(newp)
newp_below.y = newp.y - 1
if minetest.get_node(newp).name == "air" and minetest.get_node(newp_below).name == "air" then
minetest.set_node(newp, {name="mcl_core:obsidian"}) minetest.set_node(newp, {name="mcl_core:obsidian"})
end end
@ -301,7 +306,11 @@ local function make_end_portal(pos)
local target3 = {x = p1.x, y = p1.y, z = p1.z} local target3 = {x = p1.x, y = p1.y, z = p1.z}
target3.x = target3.x + 1 target3.x = target3.x + 1
if target3.y < mcl_vars.mg_end_max and target3.y > mcl_vars.mg_end_min then if target3.y < mcl_vars.mg_end_max and target3.y > mcl_vars.mg_end_min then
if mg_name == "flat" then
target3.y = mcl_vars.mg_bedrock_overworld_max + 5
else
target3.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96) target3.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96)
end
else else
target3.y = find_end_target3_y2(target3.x, target3.z) target3.y = find_end_target3_y2(target3.x, target3.z)
end end

@ -9,6 +9,8 @@ local FRAME_SIZE_Y_MIN = 5
local FRAME_SIZE_X_MAX = 23 local FRAME_SIZE_X_MAX = 23
local FRAME_SIZE_Y_MAX = 23 local FRAME_SIZE_Y_MAX = 23
local mg_name = minetest.get_mapgen_setting("mg_name")
-- 3D noise -- 3D noise
local np_cave = { local np_cave = {
offset = 0, offset = 0,
@ -180,6 +182,9 @@ local function build_portal(pos, target, is_rebuilding)
end end
local function find_nether_target_y(target_x, target_z) local function find_nether_target_y(target_x, target_z)
if mg_name == "flat" then
return mcl_vars.mg_bedrock_nether_bottom_max + 5
end
local start_y = mcl_vars.mg_nether_min + math.random(38, 117) -- Search start local start_y = mcl_vars.mg_nether_min + math.random(38, 117) -- Search start
if not nobj_cave then if not nobj_cave then
nobj_cave = minetest.get_perlin(np_cave) nobj_cave = minetest.get_perlin(np_cave)
@ -306,7 +311,11 @@ local function make_portal(pos)
local target = {x = p1.x, y = p1.y, z = p1.z} local target = {x = p1.x, y = p1.y, z = p1.z}
target.x = target.x + 1 target.x = target.x + 1
if target.y < mcl_vars.mg_nether_max and target.y > mcl_vars.mg_nether_min then if target.y < mcl_vars.mg_nether_max and target.y > mcl_vars.mg_nether_min then
if mg_name == "flat" then
target.y = mcl_vars.mg_bedrock_overworld_max + 5
else
target.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96) target.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96)
end
else else
target.y = find_nether_target_y(target.x, target.z) target.y = find_nether_target_y(target.x, target.z)
end end

@ -1307,9 +1307,11 @@ minetest.register_on_generated(function(minp, maxp)
end end
end end
-- Bedrock, defined above
if setdata then if setdata then
data[p_pos] = setdata data[p_pos] = setdata
lvm_used = true lvm_used = true
-- The void
elseif mcl_util.is_in_void({x=x,y=y,z=z}) then elseif mcl_util.is_in_void({x=x,y=y,z=z}) then
data[p_pos] = c_void data[p_pos] = c_void
lvm_used = true lvm_used = true
@ -1341,6 +1343,10 @@ minetest.register_on_generated(function(minp, maxp)
elseif y >= mcl_vars.mg_realm_barrier_overworld_end_min and y <= mcl_vars.mg_realm_barrier_overworld_end_max then elseif y >= mcl_vars.mg_realm_barrier_overworld_end_min and y <= mcl_vars.mg_realm_barrier_overworld_end_max then
data[p_pos] = c_realm_barrier data[p_pos] = c_realm_barrier
lvm_used = true lvm_used = true
-- Flat Nether
elseif mg_name == "flat" and y >= mcl_vars.mg_bedrock_nether_bottom_max + 4 and y <= mcl_vars.mg_bedrock_nether_bottom_max + 52 then
data[p_pos] = c_air
lvm_used = true
-- Nether and End support for v6 because v6 does not support the biomes API -- Nether and End support for v6 because v6 does not support the biomes API
elseif mg_name == "v6" then elseif mg_name == "v6" then
if y <= mcl_vars.mg_nether_max and y >= mcl_vars.mg_nether_min then if y <= mcl_vars.mg_nether_max and y >= mcl_vars.mg_nether_min then