Don't generate bedrock and lava in singlenode
This commit is contained in:
parent
44e756cc8d
commit
d4708c804a
1 changed files with 151 additions and 148 deletions
|
@ -1689,166 +1689,168 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
-- Realm barrier between the Overworld void and the End
|
-- Realm barrier between the Overworld void and the End
|
||||||
lvm_used = set_layers(c_realm_barrier, nil, mcl_vars.mg_realm_barrier_overworld_end_min, mcl_vars.mg_realm_barrier_overworld_end_max, minp, maxp, lvm_used)
|
lvm_used = set_layers(c_realm_barrier, nil, mcl_vars.mg_realm_barrier_overworld_end_min, mcl_vars.mg_realm_barrier_overworld_end_max, minp, maxp, lvm_used)
|
||||||
|
|
||||||
-- Bedrock
|
if mg_name ~= "singlenode" then
|
||||||
local bedrock_check
|
-- Bedrock
|
||||||
if mcl_vars.mg_bedrock_is_rough then
|
local bedrock_check
|
||||||
bedrock_check = function(pos)
|
if mcl_vars.mg_bedrock_is_rough then
|
||||||
local y = pos.y
|
bedrock_check = function(pos)
|
||||||
-- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer
|
local y = pos.y
|
||||||
-- This code assumes a bedrock height of 5 layers.
|
-- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer
|
||||||
|
-- This code assumes a bedrock height of 5 layers.
|
||||||
|
|
||||||
local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock
|
local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock
|
||||||
local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom
|
local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom
|
||||||
local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling
|
local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling
|
||||||
|
|
||||||
local top
|
local top
|
||||||
if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then
|
if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then
|
||||||
-- 50% bedrock chance
|
-- 50% bedrock chance
|
||||||
top = 2
|
top = 2
|
||||||
elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then
|
elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then
|
||||||
-- 66.666...%
|
-- 66.666...%
|
||||||
top = 3
|
top = 3
|
||||||
elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then
|
elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then
|
||||||
-- 75%
|
-- 75%
|
||||||
top = 4
|
top = 4
|
||||||
elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then
|
elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then
|
||||||
-- 90%
|
-- 90%
|
||||||
top = 10
|
top = 10
|
||||||
elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then
|
elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then
|
||||||
-- 100%
|
-- 100%
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
-- Not in bedrock layer
|
-- Not in bedrock layer
|
||||||
return false
|
return false
|
||||||
end
|
|
||||||
|
|
||||||
return math.random(1, top) <= top-1
|
|
||||||
end
|
|
||||||
else
|
|
||||||
bedrock_check = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_overworld_min, mcl_vars.mg_bedrock_overworld_max, minp, maxp, lvm_used)
|
|
||||||
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_bottom_max, minp, maxp, lvm_used)
|
|
||||||
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_top_min, mcl_vars.mg_bedrock_nether_top_max, minp, maxp, lvm_used)
|
|
||||||
|
|
||||||
-- Flat Nether
|
|
||||||
if mg_name == "flat" then
|
|
||||||
lvm_used = set_layers(c_air, nil, mcl_vars.mg_bedrock_nether_bottom_max + 4, mcl_vars.mg_bedrock_nether_bottom_max + 52, minp, maxp, lvm_used)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Big lava seas by replacing air below a certain height
|
|
||||||
if mcl_vars.mg_lava then
|
|
||||||
lvm_used = set_layers(c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, minp, maxp, lvm_used)
|
|
||||||
lvm_used = set_layers(c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, minp, maxp, lvm_used)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Clay, vines, cocoas
|
|
||||||
lvm_used = generate_clay(minp, maxp, seed, data, area, lvm_used)
|
|
||||||
|
|
||||||
local biomemap = minetest.get_mapgen_object("biomemap")
|
|
||||||
lvm_used = generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used)
|
|
||||||
|
|
||||||
----- Interactive block fixing section -----
|
|
||||||
----- The section to perform basic block overrides of the core mapgen generated world. -----
|
|
||||||
|
|
||||||
-- Snow and sand fixes. This code implements snow consistency
|
|
||||||
-- and fixes floating sand.
|
|
||||||
-- A snowy grass block must be below a top snow or snow block at all times.
|
|
||||||
if minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min then
|
|
||||||
-- v6 mapgen:
|
|
||||||
-- Put top snow on snowy grass blocks. The mapgen does not generate the top snow on its own.
|
|
||||||
if mg_name == "v6" then
|
|
||||||
local snowdirt = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:dirt_with_grass_snow")
|
|
||||||
for n = 1, #snowdirt do
|
|
||||||
-- CHECKME: What happens at chunk borders?
|
|
||||||
local p_pos = area:index(snowdirt[n].x, snowdirt[n].y + 1, snowdirt[n].z)
|
|
||||||
if p_pos then
|
|
||||||
data[p_pos] = c_top_snow
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
if #snowdirt > 1 then
|
|
||||||
lvm_used = true
|
|
||||||
end
|
|
||||||
|
|
||||||
|
return math.random(1, top) <= top-1
|
||||||
-- Non-v6 mapgens:
|
end
|
||||||
-- Clear snowy grass blocks without snow above to ensure consistency.
|
|
||||||
-- Solidify floating sand to sandstone (both colors).
|
|
||||||
else
|
else
|
||||||
--local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass_snow"})
|
bedrock_check = nil
|
||||||
local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass_snow", "mcl_core:sand", "mcl_core:redsand"})
|
end
|
||||||
for n=1, #nodes do
|
|
||||||
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_overworld_min, mcl_vars.mg_bedrock_overworld_max, minp, maxp, lvm_used)
|
||||||
local p_pos_above = area:index(nodes[n].x, nodes[n].y+1, nodes[n].z)
|
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_bottom_max, minp, maxp, lvm_used)
|
||||||
local p_pos_below = area:index(nodes[n].x, nodes[n].y-1, nodes[n].z)
|
lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_top_min, mcl_vars.mg_bedrock_nether_top_max, minp, maxp, lvm_used)
|
||||||
if data[p_pos] == c_dirt_with_grass_snow and p_pos_above and data[p_pos_above] ~= c_top_snow and data[p_pos_above] ~= c_snow_block then
|
|
||||||
data[p_pos] = c_dirt_with_grass
|
-- Flat Nether
|
||||||
|
if mg_name == "flat" then
|
||||||
|
lvm_used = set_layers(c_air, nil, mcl_vars.mg_bedrock_nether_bottom_max + 4, mcl_vars.mg_bedrock_nether_bottom_max + 52, minp, maxp, lvm_used)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Big lava seas by replacing air below a certain height
|
||||||
|
if mcl_vars.mg_lava then
|
||||||
|
lvm_used = set_layers(c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, minp, maxp, lvm_used)
|
||||||
|
lvm_used = set_layers(c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, minp, maxp, lvm_used)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Clay, vines, cocoas
|
||||||
|
lvm_used = generate_clay(minp, maxp, seed, data, area, lvm_used)
|
||||||
|
|
||||||
|
local biomemap = minetest.get_mapgen_object("biomemap")
|
||||||
|
lvm_used = generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used)
|
||||||
|
|
||||||
|
----- Interactive block fixing section -----
|
||||||
|
----- The section to perform basic block overrides of the core mapgen generated world. -----
|
||||||
|
|
||||||
|
-- Snow and sand fixes. This code implements snow consistency
|
||||||
|
-- and fixes floating sand.
|
||||||
|
-- A snowy grass block must be below a top snow or snow block at all times.
|
||||||
|
if minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min then
|
||||||
|
-- v6 mapgen:
|
||||||
|
-- Put top snow on snowy grass blocks. The mapgen does not generate the top snow on its own.
|
||||||
|
if mg_name == "v6" then
|
||||||
|
local snowdirt = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:dirt_with_grass_snow")
|
||||||
|
for n = 1, #snowdirt do
|
||||||
|
-- CHECKME: What happens at chunk borders?
|
||||||
|
local p_pos = area:index(snowdirt[n].x, snowdirt[n].y + 1, snowdirt[n].z)
|
||||||
|
if p_pos then
|
||||||
|
data[p_pos] = c_top_snow
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if #snowdirt > 1 then
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
elseif p_pos_below and data[p_pos_below] == c_air or data[p_pos_below] == c_water then
|
end
|
||||||
if data[p_pos] == c_sand then
|
|
||||||
data[p_pos] = c_sandstone
|
|
||||||
lvm_used = true
|
-- Non-v6 mapgens:
|
||||||
elseif data[p_pos] == c_redsand then
|
-- Clear snowy grass blocks without snow above to ensure consistency.
|
||||||
-- Note: This is the only place in which red sandstone is generatd
|
-- Solidify floating sand to sandstone (both colors).
|
||||||
data[p_pos] = c_redsandstone
|
else
|
||||||
|
--local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass_snow"})
|
||||||
|
local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass_snow", "mcl_core:sand", "mcl_core:redsand"})
|
||||||
|
for n=1, #nodes do
|
||||||
|
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
||||||
|
local p_pos_above = area:index(nodes[n].x, nodes[n].y+1, nodes[n].z)
|
||||||
|
local p_pos_below = area:index(nodes[n].x, nodes[n].y-1, nodes[n].z)
|
||||||
|
if data[p_pos] == c_dirt_with_grass_snow and p_pos_above and data[p_pos_above] ~= c_top_snow and data[p_pos_above] ~= c_snow_block then
|
||||||
|
data[p_pos] = c_dirt_with_grass
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
|
elseif p_pos_below and data[p_pos_below] == c_air or data[p_pos_below] == c_water then
|
||||||
|
if data[p_pos] == c_sand then
|
||||||
|
data[p_pos] = c_sandstone
|
||||||
|
lvm_used = true
|
||||||
|
elseif data[p_pos] == c_redsand then
|
||||||
|
-- Note: This is the only place in which red sandstone is generatd
|
||||||
|
data[p_pos] = c_redsandstone
|
||||||
|
lvm_used = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- Nether block fixes:
|
-- Nether block fixes:
|
||||||
-- * Replace water with Nether lava.
|
-- * Replace water with Nether lava.
|
||||||
-- * Replace stone, sand dirt in v6 so the Nether works in v6.
|
-- * Replace stone, sand dirt in v6 so the Nether works in v6.
|
||||||
elseif minp.y <= mcl_vars.mg_nether_max and maxp.y >= mcl_vars.mg_nether_min then
|
elseif minp.y <= mcl_vars.mg_nether_max and maxp.y >= mcl_vars.mg_nether_min then
|
||||||
local nodes
|
local nodes
|
||||||
if mg_name == "v6" then
|
if mg_name == "v6" then
|
||||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
||||||
else
|
else
|
||||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source"})
|
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source"})
|
||||||
end
|
|
||||||
for n=1, #nodes do
|
|
||||||
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
|
||||||
if data[p_pos] == c_water then
|
|
||||||
data[p_pos] = c_nether_lava
|
|
||||||
lvm_used = true
|
|
||||||
elseif data[p_pos] == c_stone then
|
|
||||||
data[p_pos] = c_netherrack
|
|
||||||
lvm_used = true
|
|
||||||
elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then
|
|
||||||
data[p_pos] = c_soul_sand
|
|
||||||
lvm_used = true
|
|
||||||
end
|
end
|
||||||
end
|
for n=1, #nodes do
|
||||||
|
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
||||||
-- End block fixes:
|
if data[p_pos] == c_water then
|
||||||
-- * Replace water with end stone or air (depending on height).
|
data[p_pos] = c_nether_lava
|
||||||
-- * Remove stone, sand, dirt in v6 so our End map generator works in v6.
|
|
||||||
elseif minp.y <= mcl_vars.mg_end_max and maxp.y >= mcl_vars.mg_end_min then
|
|
||||||
local nodes
|
|
||||||
if mg_name == "v6" then
|
|
||||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
|
||||||
else
|
|
||||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source"})
|
|
||||||
end
|
|
||||||
for n=1, #nodes do
|
|
||||||
local y = nodes[n].y
|
|
||||||
local p_pos = area:index(nodes[n].x, y, nodes[n].z)
|
|
||||||
|
|
||||||
if data[p_pos] == c_water then
|
|
||||||
if y <= mcl_vars.mg_end_min + 104 and y >= mcl_vars.mg_end_min + 40 then
|
|
||||||
data[p_pos] = c_end_stone
|
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
else
|
elseif data[p_pos] == c_stone then
|
||||||
|
data[p_pos] = c_netherrack
|
||||||
|
lvm_used = true
|
||||||
|
elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then
|
||||||
|
data[p_pos] = c_soul_sand
|
||||||
|
lvm_used = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- End block fixes:
|
||||||
|
-- * Replace water with end stone or air (depending on height).
|
||||||
|
-- * Remove stone, sand, dirt in v6 so our End map generator works in v6.
|
||||||
|
elseif minp.y <= mcl_vars.mg_end_max and maxp.y >= mcl_vars.mg_end_min then
|
||||||
|
local nodes
|
||||||
|
if mg_name == "v6" then
|
||||||
|
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
||||||
|
else
|
||||||
|
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source"})
|
||||||
|
end
|
||||||
|
for n=1, #nodes do
|
||||||
|
local y = nodes[n].y
|
||||||
|
local p_pos = area:index(nodes[n].x, y, nodes[n].z)
|
||||||
|
|
||||||
|
if data[p_pos] == c_water then
|
||||||
|
if y <= mcl_vars.mg_end_min + 104 and y >= mcl_vars.mg_end_min + 40 then
|
||||||
|
data[p_pos] = c_end_stone
|
||||||
|
lvm_used = true
|
||||||
|
else
|
||||||
|
data[p_pos] = c_air
|
||||||
|
lvm_used = true
|
||||||
|
end
|
||||||
|
elseif data[p_pos] == c_stone or data[p_pos] == c_dirt or data[p_pos] == c_sand then
|
||||||
data[p_pos] = c_air
|
data[p_pos] = c_air
|
||||||
lvm_used = true
|
lvm_used = true
|
||||||
end
|
end
|
||||||
elseif data[p_pos] == c_stone or data[p_pos] == c_dirt or data[p_pos] == c_sand then
|
|
||||||
data[p_pos] = c_air
|
|
||||||
lvm_used = true
|
|
||||||
end
|
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1873,11 +1875,12 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
vm:update_liquids()
|
vm:update_liquids()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if mg_name ~= "singlenode" then
|
||||||
-- Generate special decorations
|
-- Generate special decorations
|
||||||
generate_underground_mushrooms(minp, maxp, seed)
|
generate_underground_mushrooms(minp, maxp, seed)
|
||||||
generate_nether_decorations(minp, maxp, seed)
|
generate_nether_decorations(minp, maxp, seed)
|
||||||
generate_structures(minp, maxp, seed, biomemap)
|
generate_structures(minp, maxp, seed, biomemap)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue