forked from VoxeLibre/VoxeLibre
Make flat layers configurable
This commit is contained in:
parent
19e2d5f09e
commit
c25d3e574a
|
@ -24,13 +24,40 @@ else
|
|||
if not ground then
|
||||
ground = 8
|
||||
end
|
||||
mcl_vars.mg_overworld_min = ground - 1
|
||||
mcl_vars.mg_overworld_max = mcl_vars.mg_overworld_min + minecraft_height_limit
|
||||
local layer_setting = minetest.get_mapgen_setting("mcl_superflat_layers")
|
||||
local layers
|
||||
if layer_setting then
|
||||
layers = {}
|
||||
local s_version, s_layers, _, _ = string.split(layer_setting, ";", true, 4)
|
||||
if tonumber(s_version) == 3 then
|
||||
local split_layers = string.split(s_layers, ",")
|
||||
if split_layers then
|
||||
for s=1, #split_layers do
|
||||
local node, repetitions = string.match(split_layers[s], "([0-9a-zA-Z:]+)%*([0-9]+)")
|
||||
if not node then
|
||||
node = string.match(split_layers[s], "([0-9a-zA-Z:]+)")
|
||||
repetitions = 1
|
||||
end
|
||||
for r=1, repetitions do
|
||||
table.insert(layers, node)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not layers then
|
||||
layers = {
|
||||
"mcl_core:bedrock",
|
||||
"mcl_core:dirt",
|
||||
"mcl_core:dirt",
|
||||
"mcl_core:dirt_with_grass",
|
||||
}
|
||||
end
|
||||
|
||||
-- 1 perfectly flat bedrock layer
|
||||
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min - 2
|
||||
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min
|
||||
mcl_vars.mg_bedrock_is_rough = false
|
||||
mcl_vars.mg_flat_layers = layers
|
||||
|
||||
mcl_vars.mg_overworld_min = ground - #layers + 1
|
||||
mcl_vars.mg_overworld_max = mcl_vars.mg_overworld_min + minecraft_height_limit
|
||||
end
|
||||
|
||||
-- Set default stack sizes
|
||||
|
|
|
@ -74,7 +74,7 @@ skycolor = {
|
|||
players = skycolor.utils.get_players(players)
|
||||
for _, player in ipairs(players) do
|
||||
local pos = player:getpos()
|
||||
if pos.y >= mcl_vars.mg_bedrock_overworld_max then
|
||||
if pos.y >= mcl_vars.mg_overworld_min then
|
||||
player:set_sky(color, "plain", nil)
|
||||
end
|
||||
end
|
||||
|
@ -112,7 +112,7 @@ skycolor = {
|
|||
local players = skycolor.utils.get_players(nil)
|
||||
for _, player in ipairs(players) do
|
||||
local pos = player:getpos()
|
||||
if pos.y >= mcl_vars.mg_bedrock_overworld_max then
|
||||
if pos.y >= mcl_vars.mg_overworld_min then
|
||||
player:set_sky(color, "plain", nil)
|
||||
end
|
||||
end
|
||||
|
@ -125,7 +125,7 @@ skycolor = {
|
|||
local players = skycolor.utils.get_players(players)
|
||||
for _, player in ipairs(players) do
|
||||
local pos = player:getpos()
|
||||
if pos.y >= mcl_vars.mg_bedrock_overworld_max then
|
||||
if pos.y >= mcl_vars.mg_overworld_min then
|
||||
player:set_sky(nil, "regular", nil)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -255,5 +255,5 @@ elseif mg_name == "flat" then
|
|||
minetest.clear_registered_biomes()
|
||||
minetest.clear_registered_decorations()
|
||||
minetest.clear_registered_schematics()
|
||||
register_classic_superflat_biome()
|
||||
-- register_classic_superflat_biome()
|
||||
end
|
||||
|
|
|
@ -888,14 +888,63 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
end)
|
||||
|
||||
|
||||
local mg_name = minetest.get_mapgen_setting("mg_name")
|
||||
|
||||
-- Generate bedrock layer or layers
|
||||
local BEDROCK_MIN = mcl_vars.mg_bedrock_overworld_min
|
||||
local BEDROCK_MAX = mcl_vars.mg_bedrock_overworld_max
|
||||
|
||||
-- Below the bedrock, generate air/void
|
||||
|
||||
|
||||
|
||||
minetest.register_on_generated(function(minp, maxp)
|
||||
if minp.y <= BEDROCK_MAX then
|
||||
if mg_name == "flat" then
|
||||
if minp.y <= mcl_vars.mg_overworld_max then--and minp.y <= (mcl_vars.mg_overworld_min + mcl_vars.mg_flat_layer_count) then
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local data = vm:get_data()
|
||||
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
|
||||
|
||||
local c_void = minetest.get_content_id("mcl_core:void")
|
||||
|
||||
local node_ids = {}
|
||||
local get_content_id = function(nodename)
|
||||
if not node_ids[nodename] then
|
||||
node_ids[nodename] = minetest.get_content_id(nodename)
|
||||
end
|
||||
return node_ids[nodename]
|
||||
end
|
||||
|
||||
local layer_counter = 1
|
||||
local repeat_counter = 1
|
||||
|
||||
local max = math.min(maxp.y, mcl_vars.mg_overworld_max)
|
||||
max = math.min(max, mcl_vars.mg_overworld_min + #mcl_vars.mg_flat_layers)
|
||||
for y = minp.y, max do
|
||||
for x = minp.x, maxp.x do
|
||||
for z = minp.z, maxp.z do
|
||||
local p_pos = area:index(x, y, z)
|
||||
|
||||
if y < mcl_vars.mg_overworld_min then
|
||||
data[p_pos] = c_void
|
||||
else
|
||||
local layer = mcl_util.y_to_layer(y)
|
||||
local nodename = mcl_vars.mg_flat_layers[layer+1]
|
||||
if nodename then
|
||||
data[p_pos] = get_content_id(nodename)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vm:set_data(data)
|
||||
vm:calc_lighting()
|
||||
vm:update_liquids()
|
||||
vm:write_to_map()
|
||||
|
||||
end
|
||||
elseif minp.y <= BEDROCK_MAX then
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local data = vm:get_data()
|
||||
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
|
||||
|
@ -951,7 +1000,6 @@ minetest.register_on_generated(function(minp, maxp)
|
|||
end)
|
||||
|
||||
-- Apply mapgen-specific mapgen code
|
||||
local mg_name = minetest.get_mapgen_setting("mg_name")
|
||||
if mg_name == "v6" then
|
||||
register_mgv6_decorations()
|
||||
end
|
||||
|
|
|
@ -121,7 +121,7 @@ minetest.register_globalstep(function(dtime)
|
|||
end
|
||||
|
||||
-- Apply black sky in the Void and deal Void damage
|
||||
if pos.y < mcl_vars.mg_bedrock_overworld_max then
|
||||
if pos.y < mcl_vars.mg_overworld_min then
|
||||
-- Player reached the void, set black sky box
|
||||
player:set_sky("#000000", "plain")
|
||||
-- FIXME: Sky handling in MCL2 is held together with lots of duct tape.
|
||||
|
|
Loading…
Reference in New Issue