From 44575dfd96df88cf28da289df0ee7f41f1f32a23 Mon Sep 17 00:00:00 2001 From: kay27 Date: Wed, 16 Feb 2022 04:57:38 +0400 Subject: [PATCH] #204 Register village as a structure --- mods/MAPGEN/mcl_villages/init.lua | 24 +++++++++++++++---- .../mcl_villages/locale/mcl_villages.ru.tr | 1 + mods/MAPGEN/mcl_villages/locale/template.txt | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/mods/MAPGEN/mcl_villages/init.lua b/mods/MAPGEN/mcl_villages/init.lua index 6f9cca5ab..9f7a1d334 100644 --- a/mods/MAPGEN/mcl_villages/init.lua +++ b/mods/MAPGEN/mcl_villages/init.lua @@ -7,7 +7,7 @@ local chance_per_chunk = 1 local noise_multiplier = 1 local random_offset = 1 local random_multiply = 19 -local struct_threshold = chance_per_chunk - 1 +local struct_threshold = chance_per_chunk local noise_params = { offset = 0, scale = 2, @@ -387,11 +387,18 @@ minetest.register_node("mcl_villages:stonebrickcarved", { -- -- on map generation, try to build a settlement -- -local function build_a_settlement(minp, maxp, pr) +local function build_a_village(minp, maxp, pr, placer) minetest.log("action","[mcl_villages] Building village at mapchunk " .. minetest.pos_to_string(minp) .. "..." .. minetest.pos_to_string(maxp)) local pr = pr or PseudoRandom(mcl_mapgen.get_block_seed3(minp)) local plan = create_site_plan(minp, maxp, pr) - if not plan then return end + if not plan then + if placer then + if placer:is_player() then + minetest.chat_send_player(placer:get_player_name(), S("Map chunk @1 to @2 is not suitable for placing villages.", minetest.pos_to_string(minp), minetest.pos_to_string(maxp))) + end + end + return + end paths(plan, minp, maxp) terraform(plan, minp, maxp, pr) place_schematics(plan, pr) @@ -432,7 +439,7 @@ if mg_name ~= "singlenode" then end local height_difference = max - min if height_difference > max_height_difference then return end - build_a_settlement(minp, maxp, chunkkseed) + build_a_village(minp, maxp, chunkkseed) end, mcl_mapgen.order.VILLAGES) end @@ -474,6 +481,15 @@ for k, v in pairs(schematic_table) do }) end +mcl_structures.register_structure({ + name = "village", + place_function = function(pos, rotation, pr, placer) + local minp = mcl_mapgen.get_chunk_beginning(pos) + local maxp = mcl_mapgen.get_chunk_ending(pos) + build_a_village(minp, maxp, pr, placer) + end +}) + function mcl_villages.get_villages() return villages end diff --git a/mods/MAPGEN/mcl_villages/locale/mcl_villages.ru.tr b/mods/MAPGEN/mcl_villages/locale/mcl_villages.ru.tr index 467f31121..325d3b191 100644 --- a/mods/MAPGEN/mcl_villages/locale/mcl_villages.ru.tr +++ b/mods/MAPGEN/mcl_villages/locale/mcl_villages.ru.tr @@ -1,2 +1,3 @@ # textdomain: mcl_villages Chiseled Stone Village Bricks=Точёный каменный блок из деревни +Map chunk @1 to @2 is not suitable for placing villages.=Чанк с @1 по @2 непригоден для размещения деревень. \ No newline at end of file diff --git a/mods/MAPGEN/mcl_villages/locale/template.txt b/mods/MAPGEN/mcl_villages/locale/template.txt index e396a8b08..7d9fcb43b 100644 --- a/mods/MAPGEN/mcl_villages/locale/template.txt +++ b/mods/MAPGEN/mcl_villages/locale/template.txt @@ -1,2 +1,3 @@ # textdomain: mcl_villages Chiseled Stone Village Bricks= +Map chunk @1 to @2 is not suitable for placing villages.=