This commit is contained in:
Elias Fleckenstein 2021-01-29 19:43:24 +01:00
commit b61ae6a61f
6 changed files with 101 additions and 30 deletions

View file

@ -270,7 +270,7 @@ function settlements.place_schematics_lvm(settlement_info, pr)
local platform_material = settlement_info[i]["surface_mat"] local platform_material = settlement_info[i]["surface_mat"]
platform_material_name = minetest.get_name_from_content_id(platform_material) platform_material_name = minetest.get_name_from_content_id(platform_material)
-- pick random material -- pick random material
local material = wallmaterial[pr:next(1,#wallmaterial)] --local material = wallmaterial[pr:next(1,#wallmaterial)]
-- --
local building = building_all_info["mts"] local building = building_all_info["mts"]
local replace_wall = building_all_info["rplc"] local replace_wall = building_all_info["rplc"]
@ -280,7 +280,27 @@ function settlements.place_schematics_lvm(settlement_info, pr)
{lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)"
-- replace material -- replace material
if replace_wall == "y" then if replace_wall == "y" then
schem_lua = schem_lua:gsub("mcl_core:cobble", material) --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs.
-- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled.
if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then
schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree")
schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood")
--schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence")
--schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood")
--schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off")
elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then
schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved")
schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone")
schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth")
--schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence")
--schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood")
--schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone")
--schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth")
schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone")
end
end end
schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material_name) schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material_name)
@ -321,7 +341,7 @@ function settlements.place_schematics(settlement_info, pr)
local platform_material = settlement_info[i]["surface_mat"] local platform_material = settlement_info[i]["surface_mat"]
--platform_material_name = minetest.get_name_from_content_id(platform_material) --platform_material_name = minetest.get_name_from_content_id(platform_material)
-- pick random material -- pick random material
local material = wallmaterial[pr:next(1,#wallmaterial)] --local material = wallmaterial[pr:next(1,#wallmaterial)]
-- --
local building = building_all_info["mts"] local building = building_all_info["mts"]
local replace_wall = building_all_info["rplc"] local replace_wall = building_all_info["rplc"]
@ -331,7 +351,27 @@ function settlements.place_schematics(settlement_info, pr)
{lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)"
-- replace material -- replace material
if replace_wall == "y" then if replace_wall == "y" then
schem_lua = schem_lua:gsub("mcl_core:cobble", material) --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs.
-- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled.
if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then
schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree")
schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood")
--schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence")
--schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood")
--schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off")
elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then
schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved")
schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone")
schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth")
--schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence")
--schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood")
--schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off")
--schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone")
--schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth")
schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone")
end
end end
schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material) schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material)

View file

@ -10,6 +10,7 @@ settlements.lvm = false
settlements.last_settlement = os.time() settlements.last_settlement = os.time()
--[[ Manually set in 'buildings.lua'
-- material to replace cobblestone with -- material to replace cobblestone with
wallmaterial = { wallmaterial = {
"mcl_core:junglewood", "mcl_core:junglewood",
@ -23,6 +24,7 @@ wallmaterial = {
"mcl_core:sandstone", "mcl_core:sandstone",
"mcl_core:sandstonesmooth2" "mcl_core:sandstonesmooth2"
} }
--]]
settlements.surface_mat = {} settlements.surface_mat = {}
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Set array to list -- Set array to list
@ -38,7 +40,7 @@ function settlements.grundstellungen()
"mcl_core:sand", "mcl_core:sand",
"mcl_core:redsand", "mcl_core:redsand",
--"mcl_core:silver_sand", --"mcl_core:silver_sand",
"mcl_core:snowblock" "mcl_core:snow"
} }
end end
-- --
@ -52,7 +54,24 @@ schem_path = settlements.modpath.."/schematics/"
-- --
-- list of schematics -- list of schematics
-- --
schematic_table = { local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", false)
if basic_pseudobiome_villages == true then
schematic_table = {
{name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "y"},
{name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "y"},
{name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "y"},
{name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "y"},
{name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "y"},
{name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"},
{name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "y"},
{name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "y"},
{name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "y"},
{name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "y"},
{name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "y"},
}
else
schematic_table = {
{name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "n"}, {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "n"},
{name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "n"}, {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "n"},
{name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "n"}, {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "n"},
@ -64,7 +83,8 @@ schematic_table = {
{name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "n"}, {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "n"},
{name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "n"}, {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "n"},
{name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "n"}, {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "n"},
} }
end
-- --
-- list of settlements, load on server start up -- list of settlements, load on server start up
-- --

View file

@ -113,6 +113,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
if maxp.y < 0 then return end if maxp.y < 0 then return end
-- don't build settlements too close to each other -- don't build settlements too close to each other
--[[
local center_of_chunk = { local center_of_chunk = {
x=maxp.x-half_map_chunk_size, x=maxp.x-half_map_chunk_size,
y=maxp.y-half_map_chunk_size, y=maxp.y-half_map_chunk_size,
@ -120,6 +121,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
} }
local dist_ok = settlements.check_distance_other_settlements(center_of_chunk) local dist_ok = settlements.check_distance_other_settlements(center_of_chunk)
if dist_ok == false then return end if dist_ok == false then return end
]]
-- don't build settlements on (too) uneven terrain -- don't build settlements on (too) uneven terrain
local height_difference = settlements.evaluate_heightmap(minp, maxp) local height_difference = settlements.evaluate_heightmap(minp, maxp)

View file

@ -164,7 +164,11 @@ function settlements.paths(settlement_info)
-- replace surface node with mcl_core:grass_path -- replace surface node with mcl_core:grass_path
if surface_point if surface_point
then then
if surface_mat == "mcl_core:sand" or surface_mat == "mcl_core:redsand" then
minetest.swap_node(surface_point,{name="mcl_core:sandstonesmooth2"})
else
minetest.swap_node(surface_point,{name="mcl_core:grass_path"}) minetest.swap_node(surface_point,{name="mcl_core:grass_path"})
end
-- don't set y coordinate, surface might be too low or high -- don't set y coordinate, surface might be too low or high
starting_point.x = surface_point.x starting_point.x = surface_point.x
starting_point.z = surface_point.z starting_point.z = surface_point.z

View file

@ -9,7 +9,7 @@ local c_desert_sand = minetest.get_content_id("mcl_core:redsand"
--local c_silver_sand = minetest.get_content_id("mcl_core:silver_sand") --local c_silver_sand = minetest.get_content_id("mcl_core:silver_sand")
-- --
local c_air = minetest.get_content_id("air") local c_air = minetest.get_content_id("air")
local c_snow = minetest.get_content_id("mcl_core:snowblock") local c_snow = minetest.get_content_id("mcl_core:snow")
local c_fern_1 = minetest.get_content_id("mcl_flowers:fern") local c_fern_1 = minetest.get_content_id("mcl_flowers:fern")
local c_fern_2 = minetest.get_content_id("mcl_flowers:fern") local c_fern_2 = minetest.get_content_id("mcl_flowers:fern")
local c_fern_3 = minetest.get_content_id("mcl_flowers:fern") local c_fern_3 = minetest.get_content_id("mcl_flowers:fern")
@ -55,7 +55,8 @@ function settlements.find_surface_lvm(pos, minp)
--c_dirt_with_dry_grass, --c_dirt_with_dry_grass,
c_podzol, c_podzol,
c_sand, c_sand,
c_desert_sand c_desert_sand,
c_snow
} }
local cnt = 0 local cnt = 0
local itter -- count up or down local itter -- count up or down
@ -208,17 +209,19 @@ end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- check distance to other settlements -- check distance to other settlements
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
--[[
function settlements.check_distance_other_settlements(center_new_chunk) function settlements.check_distance_other_settlements(center_new_chunk)
-- local min_dist_settlements = 300 -- local min_dist_settlements = 300
for i, pos in ipairs(settlements_in_world) do for i, pos in ipairs(settlements_in_world) do
local distance = vector.distance(center_new_chunk, pos) local distance = vector.distance(center_new_chunk, pos)
-- minetest.chat_send_all("dist ".. distance) -- minetest.chat_send_all("dist ".. distance)
if distance < settlements.min_dist_settlements then if distance < settlements.min_dist_settlements then
return false return false
end end
end end
return true return true
end end
]]
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- fill chests -- fill chests
------------------------------------------------------------------------------- -------------------------------------------------------------------------------

View file

@ -130,6 +130,8 @@ mcl_superflat_classic (Classic superflat map generation) bool false
# game by a lot. # game by a lot.
mcl_node_particles (Block particles detail level) enum none high,medium,low,none mcl_node_particles (Block particles detail level) enum none high,medium,low,none
# If enabled, this will substitute a few blocks in village schematics so they blend into normal, snowy, and sandy areas. Defaults to false.
basic_pseudobiome_villages (Enables very basic, and experimental "pseudobiome-based" villages) bool false
# If enabled, will run an LBM to fix the top 1/2 of double plants in mcimported worlds; defaults to true. # If enabled, will run an LBM to fix the top 1/2 of double plants in mcimported worlds; defaults to true.
fix_doubleplants (Mcimport double plant fixes) bool true fix_doubleplants (Mcimport double plant fixes) bool true