Merge branch 'master' into mcl_bamboo_too

# Conflicts:
#	mods/ITEMS/mcl_bamboo/init.lua
This commit is contained in:
Michieal 2022-12-20 23:19:29 -05:00
commit b14f055154
33 changed files with 353 additions and 210 deletions

12
.editorconfig Normal file

@ -0,0 +1,12 @@
root = true
[*]
end_of_line = lf
[*.lua]
charset = utf8
indent_style = tab
insert_final_newline = true
trim_trailing_whitespace = true
keep_one_space_between_table_and_bracket = false
spaces_around_operators = true

@ -8,12 +8,13 @@
## Maintainers ## Maintainers
* AncientMariner
* Nicu * Nicu
* cora
## Previous Maintainers ## Previous Maintainers
* Fleckenstein * Fleckenstein
* jordan4ibanez * jordan4ibanez
* cora
## Developers ## Developers
* bzoss * bzoss
@ -35,7 +36,6 @@
* MrRar * MrRar
* talamh * talamh
* Faerraven * Faerraven
* AncientMariner
## Contributors ## Contributors
* Laurent Rocher * Laurent Rocher

@ -74,6 +74,8 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `coral_species=X`: Specifies the species of a coral; equal X means equal species * `coral_species=X`: Specifies the species of a coral; equal X means equal species
* `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching * `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching
* `compostability=X`: Item can be used on a composter block; X (1-100) is the % chance of adding a level of compost * `compostability=X`: Item can be used on a composter block; X (1-100) is the % chance of adding a level of compost
* `leaves=X`: Node will spotaneously decay if no tree trunk nodes remain within 6 blocks distance.
* `leaves_orphan`: See above, these nodes are in the process of decayed.
#### Footnotes #### Footnotes

19
RELEASE.md Normal file

@ -0,0 +1,19 @@
#File to document release steps with a view to evolving into a script
#Update CREDITS.md
#Update version in README.md (soon to be game.conf from of 0.82.0)
lua tools/generate_ingame_credits.lua
git add CREDITS.md
git add mods/HUD/mcl_credits/people.lua
git add README.md
# To uncomment when applicable
#git add game.conf
git commit -m "Pre-release update credits and set version 0.81.1"
git tag 0.81.1
git push origin 0.81.1

@ -102,6 +102,7 @@ function check_events(dtime)
for _,e in pairs(mcl_events.registered_events) do for _,e in pairs(mcl_events.registered_events) do
local pp = e.cond_start() local pp = e.cond_start()
if pp then if pp then
--minetest.log("It's gonna start the raid maybe")
for _,p in pairs(pp) do for _,p in pairs(pp) do
local start = true local start = true
if e.exclusive_to_area then if e.exclusive_to_area then
@ -110,11 +111,14 @@ function check_events(dtime)
end end
end end
if start then if start then
--minetest.log("It's gonna start the raid definitely")
start_event(p,e) start_event(p,e)
elseif DBG then elseif DBG then
mcl_log("[mcl_events] Event "..e.readable_name.." already active at "..minetest.pos_to_string(vector.round(p.pos))) mcl_log("[mcl_events] Event "..e.readable_name.." already active at "..minetest.pos_to_string(vector.round(p.pos)))
end end
end end
else
--minetest.log("Do not start this raid")
end end
end end
for idx,ae in pairs(active_events) do for idx,ae in pairs(active_events) do

@ -1397,7 +1397,7 @@ function mob_class:check_smooth_rotation(dtime)
yaw = yaw + (math.random() * 2 - 1) * 5 * dtime yaw = yaw + (math.random() * 2 - 1) * 5 * dtime
end end
self.object:set_yaw(yaw) self.object:set_yaw(yaw)
self:update_roll() --self:update_roll()
end end
-- end rotation -- end rotation
end end

@ -354,7 +354,7 @@ function mob_class:set_yaw(yaw, delay, dtime)
if self.shaking and dtime then if self.shaking and dtime then
yaw = yaw + (math.random() * 2 - 1) * 5 * dtime yaw = yaw + (math.random() * 2 - 1) * 5 * dtime
end end
self:update_roll() --self:update_roll()
return yaw return yaw
end end

@ -218,7 +218,7 @@ function mcl_raids.find_villager(pos)
end end
function mcl_raids.find_bed(pos) function mcl_raids.find_bed(pos)
return minetest.find_node_near(pos,128,{"mcl_beds:bed_red_bottom"}) return minetest.find_node_near(pos,32,{"mcl_beds:bed_red_bottom"})
end end
function mcl_raids.find_village(pos) function mcl_raids.find_village(pos)
@ -293,11 +293,13 @@ mcl_events.register_event("raid",{
exclusive_to_area = 128, exclusive_to_area = 128,
enable_bossbar = true, enable_bossbar = true,
cond_start = function(self) cond_start = function(self)
--minetest.log("Cond start raid")
local r = {} local r = {}
for _,p in pairs(minetest.get_connected_players()) do for _,p in pairs(minetest.get_connected_players()) do
if mcl_potions.player_has_effect(p,"bad_omen") then if mcl_potions.player_has_effect(p,"bad_omen") then
local raid_pos = mcl_raids.find_village(p:get_pos()) local raid_pos = mcl_raids.find_village(p:get_pos())
if raid_pos then if raid_pos then
--minetest.log("We have a raid position. Start raid")
table.insert(r,{ player = p:get_player_name(), pos = raid_pos }) table.insert(r,{ player = p:get_player_name(), pos = raid_pos })
end end
end end

@ -13,8 +13,8 @@ function mcl_weather.set_sky_box_clear(player)
day_horizon = "#B4D0FF", day_horizon = "#B4D0FF",
dawn_sky = "#B4BAFA", dawn_sky = "#B4BAFA",
dawn_horizon = "#BAC1F0", dawn_horizon = "#BAC1F0",
night_sky = "#006AFF", night_sky = "#000000",
night_horizon = "#4090FF", night_horizon = "#4A6790",
}, },
clouds = true, clouds = true,
}) })

@ -10,10 +10,14 @@ local function spawn_zombies(self)
local p = vector.offset(nn[i%#nn],0,1,0) local p = vector.offset(nn[i%#nn],0,1,0)
if check_spawn_pos(p) then if check_spawn_pos(p) then
local m = mcl_mobs.spawn(p,"mobs_mc:zombie") local m = mcl_mobs.spawn(p,"mobs_mc:zombie")
if m then
local l = m:get_luaentity() local l = m:get_luaentity()
l:gopath(self.pos) l:gopath(self.pos)
table.insert(self.mobs, m) table.insert(self.mobs, m)
self.health_max = self.health_max + l.health self.health_max = self.health_max + l.health
else
--minetest.log("Failed to spawn zombie at location: " .. minetest.pos_to_string(p))
end
end end
end end
end end
@ -26,16 +30,25 @@ mcl_events.register_event("zombie_siege",{
exclusive_to_area = 128, exclusive_to_area = 128,
enable_bossbar = false, enable_bossbar = false,
cond_start = function(self) cond_start = function(self)
--minetest.log("Cond start zs")
local r = {}
local t = minetest.get_timeofday()
local pr = PseudoRandom(minetest.get_day_count()) local pr = PseudoRandom(minetest.get_day_count())
local rnd = pr:next(1,10) local rnd = pr:next(1,10)
local t = minetest.get_timeofday()
local r = {} if t < 0.04 and rnd == 1 then
--minetest.log("Well, it's siege time")
for _,p in pairs(minetest.get_connected_players()) do for _,p in pairs(minetest.get_connected_players()) do
local village = mcl_raids.find_village(p:get_pos()) local village = mcl_raids.find_village(p:get_pos())
if t < 0.04 and village and rnd == 1 then if village then
--minetest.log("Found village")
table.insert(r,{ player = p:get_player_name(), pos = village}) table.insert(r,{ player = p:get_player_name(), pos = village})
end end
end end
else
--minetest.log("Not night for a siege, or not success")
end
if #r > 0 then return r end if #r > 0 then return r end
end, end,
on_start = function(self) on_start = function(self)

@ -9,12 +9,13 @@ return {
"Wuzzy", "Wuzzy",
}}, }},
{S("Maintainers"), 0xFF51D5, { {S("Maintainers"), 0xFF51D5, {
"AncientMariner",
"Nicu", "Nicu",
"cora",
}}, }},
{S("Previous Maintainers"), 0xFFFFFF, { {S("Previous Maintainers"), 0xFFFFFF, {
"Fleckenstein", "Fleckenstein",
"jordan4ibanez", "jordan4ibanez",
"cora",
}}, }},
{S("Developers"), 0xF84355, { {S("Developers"), 0xF84355, {
"bzoss", "bzoss",
@ -36,7 +37,6 @@ return {
"MrRar", "MrRar",
"talamh", "talamh",
"Faerraven", "Faerraven",
"AncientMariner",
}}, }},
{S("Contributors"), 0x52FF00, { {S("Contributors"), 0x52FF00, {
"Laurent Rocher", "Laurent Rocher",

@ -8,6 +8,12 @@
local modname = minetest.get_current_modname() local modname = minetest.get_current_modname()
local S = minetest.get_translator(modname) local S = minetest.get_translator(modname)
local bamboo = "mcl_bamboo:bamboo" local bamboo = "mcl_bamboo:bamboo"
local adj_nodes = {
vector.new(0, 0, 1),
vector.new(0, 0, -1),
vector.new(1, 0, 0),
vector.new(-1, 0, 0),
}
local node_sound = mcl_sounds.node_sound_wood_defaults() local node_sound = mcl_sounds.node_sound_wood_defaults()
-- CONSTS -- CONSTS
@ -20,6 +26,25 @@ local USE_END_CAPS = false
local BROKEN_DOORS = true local BROKEN_DOORS = true
-- LOCAL FUNCTIONS -- LOCAL FUNCTIONS
-- Add Groups function, courtesy of Warr1024.
function addgroups(name, ...)
local def = minetest.registered_items[name] or error(name .. " not found")
local groups = {}
for k, v in pairs(def.groups) do
groups[k] = v
end
local function addall(x, ...)
if not x then
return
end
groups[x] = 1
return addall(...)
end
addall(...)
return minetest.override_item(name, {groups = groups})
end
local function create_nodes() local function create_nodes()
local bamboo_def = { local bamboo_def = {
@ -104,7 +129,6 @@ local function create_nodes()
-- Node destructor; called before removing node. -- Node destructor; called before removing node.
local new_pos = vector.offset(pos, 0, 1, 0) local new_pos = vector.offset(pos, 0, 1, 0)
local node_above = minetest.get_node(new_pos) local node_above = minetest.get_node(new_pos)
if node_above and node_above.name == "mcl_bamboo:bamboo" then
if node_above and node_above.name == "mcl_bamboo:bamboo" then if node_above and node_above.name == "mcl_bamboo:bamboo" then
local sound_params = { local sound_params = {
pos = new_pos, pos = new_pos,
@ -117,7 +141,6 @@ local function create_nodes()
local istack = ItemStack("mcl_bamboo:bamboo") local istack = ItemStack("mcl_bamboo:bamboo")
minetest.add_item(new_pos, istack) minetest.add_item(new_pos, istack)
end end
end
end, end,
} }
minetest.register_node("mcl_bamboo:bamboo", bamboo_def) minetest.register_node("mcl_bamboo:bamboo", bamboo_def)
@ -170,7 +193,7 @@ local function create_nodes()
local bamboo_block_def = { local bamboo_block_def = {
description = "Bamboo Block", description = "Bamboo Block",
tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block.png"}, tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block.png"},
groups = {handy = 1, building_block = 1, axey = 1, flammable = 2, material_wood = 1, fire_encouragement = 5, fire_flammability = 5}, groups = {handy = 1, building_block = 1, axey = 1, flammable = 2, material_wood = 1, bamboo_block = 1, fire_encouragement = 5, fire_flammability = 5},
sounds = node_sound, sounds = node_sound,
paramtype2 = "facedir", paramtype2 = "facedir",
drops = "mcl_bamboo:bamboo_block", drops = "mcl_bamboo:bamboo_block",
@ -204,7 +227,7 @@ local function create_nodes()
minetest.register_node("mcl_bamboo:bamboo_block", bamboo_block_def) minetest.register_node("mcl_bamboo:bamboo_block", bamboo_block_def)
local bamboo_stripped_block = table.copy(bamboo_block_def) local bamboo_stripped_block = table.copy(bamboo_block_def)
bamboo_stripped_block.on_rightclick = nil bamboo_stripped_block.on_rightclick = nil
bamboo_stripped_block.description = "Bamboo Block" bamboo_stripped_block.description = S("Stripped Bamboo Block")
bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block_stripped.png"} bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block_stripped.png"}
minetest.register_node("mcl_bamboo:bamboo_block_stripped", bamboo_stripped_block) minetest.register_node("mcl_bamboo:bamboo_block_stripped", bamboo_stripped_block)
minetest.register_node("mcl_bamboo:bamboo_plank", { minetest.register_node("mcl_bamboo:bamboo_plank", {
@ -335,6 +358,22 @@ local function create_nodes()
S("Bamboo Plank Slab"), S("Bamboo Plank Slab"),
S("Double Bamboo Plank Slab") S("Double Bamboo Plank Slab")
) )
-- let's add plank slabs to the wood_slab group.
local bamboo_plank_slab = "mcl_stairs:slab_bamboo_plank"
local node_groups = {
wood_slab = 1,
building_block = 1,
slab = 1,
axey = 1,
handy = 1,
stair = 1,
flammable = 1,
fire_encouragement = 5,
fire_flammability = 20
}
minetest.override_item(bamboo_plank_slab, {groups = node_groups})
end end
end end
end end
@ -394,7 +433,7 @@ local function create_nodes()
-- Bamboo Signs... -- Bamboo Signs...
mcl_signs.register_sign_custom("mcl_bamboo", "_bamboo", "mcl_signs_sign_greyscale.png", mcl_signs.register_sign_custom("mcl_bamboo", "_bamboo", "mcl_signs_sign_greyscale.png",
"#f6dc91", "default_sign_greyscale.png", "default_sign_greyscale.png", "#f6dc91", "default_sign_greyscale.png", "default_sign_greyscale.png",
S("Bamboo Sign")) "Bamboo Sign")
mcl_signs.register_sign_craft("mcl_bamboo", "mcl_bamboo:bamboo_plank", "_bamboo") mcl_signs.register_sign_craft("mcl_bamboo", "mcl_bamboo:bamboo_plank", "_bamboo")
minetest.register_alias("bamboo_sign", "mcl_signs:wall_sign_bamboo") minetest.register_alias("bamboo_sign", "mcl_signs:wall_sign_bamboo")
end end
@ -447,7 +486,7 @@ local function create_nodes()
"mcl_bamboo_bamboo_plank.png", "mcl_bamboo_bamboo_plank.png",
"mcl_bamboo:bamboo_plank", "mcl_bamboo:bamboo_plank",
node_sound, node_sound,
{material_wood = 1, handy = 1, pickaxey = 1}, {material_wood = 1, handy = 1, pickaxey = 1, flammable = 3, fire_flammability = 20, fire_encouragement = 5, },
1, 1,
false, false,
S("A bamboo button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second."), S("A bamboo button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second."),
@ -534,7 +573,6 @@ local function create_nodes()
-- Node destructor; called before removing node. -- Node destructor; called before removing node.
local new_pos = vector.offset(pos, 0, 1, 0) local new_pos = vector.offset(pos, 0, 1, 0)
local node_above = minetest.get_node(new_pos) local node_above = minetest.get_node(new_pos)
if node_above and node_above.name == "mcl_bamboo:scaffolding" then
if node_above and node_above.name == "mcl_bamboo:scaffolding" then if node_above and node_above.name == "mcl_bamboo:scaffolding" then
local sound_params = { local sound_params = {
pos = new_pos, pos = new_pos,
@ -547,7 +585,6 @@ local function create_nodes()
local istack = ItemStack("mcl_bamboo:scaffolding") local istack = ItemStack("mcl_bamboo:scaffolding")
minetest.add_item(new_pos, istack) minetest.add_item(new_pos, istack)
end end
end
end, end,
}) })
@ -573,6 +610,13 @@ local function register_craftings()
} }
}) })
minetest.register_craft({
output = bamboo .. "_plank 2",
recipe = {
{bamboo .. "_block_stripped"},
}
})
minetest.register_craft({ minetest.register_craft({
output = "mcl_core:stick", output = "mcl_core:stick",
recipe = { recipe = {
@ -647,6 +691,29 @@ local function register_craftings()
recipe = "mcl_bamboo:scaffolding", recipe = "mcl_bamboo:scaffolding",
burntime = 20 burntime = 20
}) })
minetest.register_craft({
type = "fuel",
recipe = "mcl_stairs:slab_bamboo_plank",
burntime = 7.5,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_stairs:slab_bamboo_block",
burntime = 7.5,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_stairs:slab_bamboo_stripped",
burntime = 7.5,
})
minetest.register_craft({
type = "fuel",
recipe = "mesecons_button:button_bamboo_off",
burntime = 5,
})
end end
create_nodes() create_nodes()
@ -661,6 +728,8 @@ dofile(minetest.get_modpath(modname) .. "/bambootoo.lua")
-- BAMBOO EXTRAS -- BAMBOO EXTRAS
dofile(minetest.get_modpath(modname) .. "/extras.lua") dofile(minetest.get_modpath(modname) .. "/extras.lua")
local BAMBOO_MAX_HEIGHT_CHECK = -16
--ABMs --ABMs
minetest.register_abm({ minetest.register_abm({
nodenames = {"mcl_bamboo:bamboo"}, nodenames = {"mcl_bamboo:bamboo"},
@ -672,7 +741,7 @@ minetest.register_abm({
return return
end end
local found_soil = false local found_soil = false
for py = -1, -16, -1 do for py = -1, BAMBOO_MAX_HEIGHT_CHECK, -1 do
local chk_pos = vector.offset(pos, 0, py, 0) local chk_pos = vector.offset(pos, 0, py, 0)
local name = minetest.get_node(chk_pos).name local name = minetest.get_node(chk_pos).name
if minetest.get_item_group(name, "soil") ~= 0 then if minetest.get_item_group(name, "soil") ~= 0 then
@ -732,4 +801,8 @@ todo: Added a new "Mosaic" plank variant that is unique to Bamboo called Bamboo
You can craft Stair and Slab variants of Bamboo Mosaic You can craft Stair and Slab variants of Bamboo Mosaic
Bamboo Mosaic blocks cannot be used as a crafting ingredient where other wooden blocks are used, but they can be Bamboo Mosaic blocks cannot be used as a crafting ingredient where other wooden blocks are used, but they can be
used as fuel. used as fuel.
todo -- add in fuel recipes for:
[-] bamboo slab + stripped bamboo slab
[-] bamboo stair + stripped bamboo stair + bamboo plank stair
--]] --]]

@ -6,27 +6,6 @@ local S = minetest.get_translator(minetest.get_current_modname())
--local mod_doc = minetest.get_modpath("doc") -> maybe add documentation ? --local mod_doc = minetest.get_modpath("doc") -> maybe add documentation ?
for i=0,4 do for i=0,4 do
local nodebox_uncharged = { --Reused the composter nodebox, since it is basicly the same
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, -- Left wall
{ 0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Right wall
{-0.375, -0.5, 0.375, 0.375, 0.5, 0.5}, -- Back wall
{-0.375, -0.5, -0.5, 0.375, 0.5, -0.375}, -- Front wall
{-0.5, -0.5, -0.5, 0.5, -0.47, 0.5}, -- Bottom level, -0.47 because -0.5 is so low that you can see the texture of the block below through
}
}
local nodebox_charged = { --Reused the composter nodebox, since it is basicly the same
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, -- Left wall
{ 0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Right wall
{-0.375, -0.5, 0.375, 0.375, 0.5, 0.5}, -- Back wall
{-0.375, -0.5, -0.5, 0.375, 0.5, -0.375}, -- Front wall
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Bottom level
}
}
local function rightclick(pos, node, player, itemstack) local function rightclick(pos, node, player, itemstack)
if itemstack.get_name(itemstack) == "mcl_nether:glowstone" and i ~= 4 then if itemstack.get_name(itemstack) == "mcl_nether:glowstone" and i ~= 4 then
@ -54,8 +33,6 @@ for i=0,4 do
"respawn_anchor_bottom.png", "respawn_anchor_bottom.png",
"respawn_anchor_side0.png" "respawn_anchor_side0.png"
}, },
drawtype = "nodebox",
node_box = nodebox_uncharged,
on_rightclick = rightclick, on_rightclick = rightclick,
groups = {pickaxey=1, material_stone=1}, groups = {pickaxey=1, material_stone=1},
_mcl_hardness = 22.5, _mcl_hardness = 22.5,
@ -68,14 +45,12 @@ for i=0,4 do
description=S("Respawn Anchor"), description=S("Respawn Anchor"),
tiles = { tiles = {
{ {
image="respawn_anchor_top_on.png", image="respawn_anchor_top_on.png^[noalpha",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0} animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
}, },
"respawn_anchor_bottom.png", "respawn_anchor_bottom.png",
"respawn_anchor_side"..i ..".png" "respawn_anchor_side"..i ..".png"
}, },
drawtype = "nodebox",
node_box = nodebox_charged,
on_rightclick = rightclick, on_rightclick = rightclick,
groups = {pickaxey=1, material_stone=1, not_in_creative_inventory=1}, groups = {pickaxey=1, material_stone=1, not_in_creative_inventory=1},
_mcl_hardness = 22.5, _mcl_hardness = 22.5,

@ -9,7 +9,7 @@ end
--Blocks --Blocks
minetest.register_node("mcl_blackstone:blackstone", { minetest.register_node("mcl_blackstone:blackstone", {
description = S("Blackstone"), description = S("Blackstone"),
tiles = {"mcl_blackstone.png"}, tiles = {"mcl_blackstone_top.png", "mcl_blackstone_top.png", "mcl_blackstone_side.png"},
sounds = mcl_sounds.node_sound_stone_defaults(), sounds = mcl_sounds.node_sound_stone_defaults(),
is_ground_content = false, is_ground_content = false,
groups = {cracky = 3, pickaxey=2, material_stone=1, cobble=1}, groups = {cracky = 3, pickaxey=2, material_stone=1, cobble=1},
@ -18,7 +18,7 @@ minetest.register_node("mcl_blackstone:blackstone", {
}) })
minetest.register_node("mcl_blackstone:blackstone_gilded", { minetest.register_node("mcl_blackstone:blackstone_gilded", {
description = S("Gilded Blackstone"), description = S("Gilded Blackstone"),
tiles = {"mcl_blackstone.png^mcl_blackstone_gilded_side.png"}, tiles = {"mcl_blackstone_gilded.png"},
sounds = mcl_sounds.node_sound_stone_defaults(), sounds = mcl_sounds.node_sound_stone_defaults(),
is_ground_content = false, is_ground_content = false,
groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1}, groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1},
@ -40,7 +40,7 @@ minetest.register_node("mcl_blackstone:blackstone_gilded", {
}) })
minetest.register_node("mcl_blackstone:nether_gold", { minetest.register_node("mcl_blackstone:nether_gold", {
description = S("Nether Gold Ore"), description = S("Nether Gold Ore"),
tiles = {"mcl_nether_netherrack.png^mcl_blackstone_gilded_side.png"}, tiles = {"mcl_nether_gold_ore.png"},
sounds = mcl_sounds.node_sound_stone_defaults(), sounds = mcl_sounds.node_sound_stone_defaults(),
is_ground_content = false, is_ground_content = false,
groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1}, groups = {cracky = 3, pickaxey=2, material_stone=1, xp=1},

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -1367,90 +1367,29 @@ function mcl_core.supports_vines(nodename)
end end
-- Leaf Decay -- Leaf Decay
-- To enable leaf decay for a node, add it to the "leafdecay" group.
-- --
-- The rating of the group determines how far from a node in the group "tree" -- Whenever a tree trunk node is removed, all `group:leaves` nodes in a radius
-- the node can be without decaying. -- of 6 blocks are checked from the trunk node's `after_destruct` handler.
-- Any such nodes within that radius that has no trunk node present within a
-- distance of 6 blocks is replaced with a `group:orphan_leaves` node.
-- --
-- If param2 of the node is ~= 0, the node will always be preserved. Thus, if -- The `group:orphan_leaves` nodes are gradually decayed in this ABM.
-- the player places a node of that kind, you will want to set param2=1 or so.
--
mcl_core.leafdecay_trunk_cache = {}
mcl_core.leafdecay_enable_cache = true
-- Spread the load of finding trunks
mcl_core.leafdecay_trunk_find_allow_accumulator = 0
minetest.register_globalstep(function(dtime)
--local finds_per_second = 5000
mcl_core.leafdecay_trunk_find_allow_accumulator = math.floor(dtime * 5000)
end)
minetest.register_abm({ minetest.register_abm({
label = "Leaf decay", label = "Leaf decay",
nodenames = {"group:leafdecay"}, nodenames = {"group:orphan_leaves"},
neighbors = {"air", "group:liquid"}, interval = 5,
-- A low interval and a high inverse chance spreads the load chance = 10,
interval = 2, action = function(pos, node)
chance = 5, -- Spawn item entities for any of the leaf's drops
local itemstacks = minetest.get_node_drops(node.name)
action = function(p0, node, _, _)
local do_preserve = false
local d = minetest.registered_nodes[node.name].groups.leafdecay
if not d or d == 0 then
return
end
local n0 = minetest.get_node(p0)
if n0.param2 ~= 0 then
-- Prevent leafdecay for player-placed leaves.
-- param2 is set to 1 after it was placed by the player
return
end
local p0_hash = nil
if mcl_core.leafdecay_enable_cache then
p0_hash = minetest.hash_node_position(p0)
local trunkp = mcl_core.leafdecay_trunk_cache[p0_hash]
if trunkp then
local n = minetest.get_node(trunkp)
local reg = minetest.registered_nodes[n.name]
-- Assume ignore is a trunk, to make the thing work at the border of the active area
if n.name == "ignore" or (reg and reg.groups.tree and reg.groups.tree ~= 0) then
return
end
-- Cache is invalid
table.remove(mcl_core.leafdecay_trunk_cache, p0_hash)
end
end
if mcl_core.leafdecay_trunk_find_allow_accumulator <= 0 then
return
end
mcl_core.leafdecay_trunk_find_allow_accumulator =
mcl_core.leafdecay_trunk_find_allow_accumulator - 1
-- Assume ignore is a trunk, to make the thing work at the border of the active area
local p1 = minetest.find_node_near(p0, d, {"ignore", "group:tree"})
if p1 then
do_preserve = true
if mcl_core.leafdecay_enable_cache then
-- Cache the trunk
mcl_core.leafdecay_trunk_cache[p0_hash] = p1
end
end
if not do_preserve then
-- Drop stuff other than the node itself
local itemstacks = minetest.get_node_drops(n0.name)
for _, itemname in pairs(itemstacks) do for _, itemname in pairs(itemstacks) do
local p_drop = { local p_drop = vector.offset(pos, math.random() - 0.5, math.random() - 0.5, math.random() - 0.5)
x = p0.x - 0.5 + math.random(),
y = p0.y - 0.5 + math.random(),
z = p0.z - 0.5 + math.random(),
}
minetest.add_item(p_drop, itemname) minetest.add_item(p_drop, itemname)
end end
-- Remove node -- Remove the decayed node
minetest.remove_node(p0) minetest.remove_node(pos)
leafdecay_particles(p0, n0) leafdecay_particles(pos, node)
minetest.check_for_falling(p0) minetest.check_for_falling(pos)
-- Kill depending vines immediately to skip the vines decay delay -- Kill depending vines immediately to skip the vines decay delay
local surround = { local surround = {
@ -1461,7 +1400,7 @@ minetest.register_abm({
{ x = 0, y = -1, z = -1 }, { x = 0, y = -1, z = -1 },
} }
for s=1, #surround do for s=1, #surround do
local spos = vector.add(p0, surround[s]) local spos = vector.add(pos, surround[s])
local maybe_vine = minetest.get_node(spos) local maybe_vine = minetest.get_node(spos)
--local surround_inverse = vector.multiply(surround[s], -1) --local surround_inverse = vector.multiply(surround[s], -1)
if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then
@ -1471,7 +1410,6 @@ minetest.register_abm({
end end
end end
end end
end
}) })
-- Remove vines which are not supported by anything, similar to leaf decay. -- Remove vines which are not supported by anything, similar to leaf decay.

@ -8,6 +8,40 @@ if mod_screwdriver then
on_rotate = screwdriver.rotate_3way on_rotate = screwdriver.rotate_3way
end end
-- Check dug/destroyed tree trunks for orphaned leaves.
--
-- This function is meant to be called by the `after_destruct` handler of
-- treetrunk nodes.
--
-- Whenever a trunk node is removed, all `group:leaves` nodes in a sphere
-- with radius 6 are checked. Every such node that does not have a trunk
-- node within a distance of 6 blocks is converted into a orphan leaf node.
-- An ABM will gradually decay these nodes.
--
-- If param2 of the node is set to a nonzero value, the node will always
-- be preserved. This is set automatically when leaves are placed manually.
--
-- @param pos the position of the removed trunk node.
-- @param oldnode the node table of the removed trunk node.
function mcl_core.update_leaves(pos, oldnode)
local pos1, pos2 = vector.offset(pos, -6, -6, -6), vector.offset(pos, 6, 6, 6)
local lnode
local leaves = minetest.find_nodes_in_area(pos1, pos2, "group:leaves")
for _, lpos in pairs(leaves) do
lnode = minetest.get_node(lpos)
-- skip already decaying leaf nodes
if minetest.get_item_group(lnode.name, "orphan_leaves") ~= 1 then
if not minetest.find_node_near(lpos, 6, "group:tree") then
-- manually placed leaf nodes have param2
-- set and will never decay automatically
if lnode.param2 == 0 then
minetest.swap_node(lpos, {name = lnode.name .. "_orphan"})
end
end
end
end
end
-- Register tree trunk (wood) and bark -- Register tree trunk (wood) and bark
local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant) local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant)
minetest.register_node("mcl_core:"..subname, { minetest.register_node("mcl_core:"..subname, {
@ -17,6 +51,7 @@ local function register_tree_trunk(subname, description_trunk, description_bark,
tiles = {tile_inner, tile_inner, tile_bark}, tiles = {tile_inner, tile_inner, tile_bark},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
after_destruct = mcl_core.update_leaves,
stack_max = 64, stack_max = 64,
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = mcl_sounds.node_sound_wood_defaults(), sounds = mcl_sounds.node_sound_wood_defaults(),
@ -107,10 +142,7 @@ local function register_wooden_planks(subname, description, tiles)
}) })
end end
local function register_leaves(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) local function register_leaves(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances)
if leafdecay_distance == nil then
leafdecay_distance = 4
end
local apple_chances = {200, 180, 160, 120, 40} local apple_chances = {200, 180, 160, 120, 40}
local stick_chances = {50, 45, 30, 35, 10} local stick_chances = {50, 45, 30, 35, 10}
@ -141,7 +173,7 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
return drop return drop
end end
minetest.register_node("mcl_core:"..subname, { local l_def = {
description = description, description = description,
_doc_items_longdesc = longdesc, _doc_items_longdesc = longdesc,
_doc_items_hidden = false, _doc_items_hidden = false,
@ -153,9 +185,8 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
stack_max = 64, stack_max = 64,
groups = { groups = {
handy = 1, hoey = 1, shearsy = 1, swordy = 1, dig_by_piston = 1, handy = 1, hoey = 1, shearsy = 1, swordy = 1, dig_by_piston = 1,
leaves = 1, leafdecay = leafdecay_distance, deco_block = 1,
flammable = 2, fire_encouragement = 30, fire_flammability = 60, flammable = 2, fire_encouragement = 30, fire_flammability = 60,
compostability = 30 leaves = 1, deco_block = 1, compostability = 30
}, },
drop = get_drops(0), drop = get_drops(0),
_mcl_shears_drop = true, _mcl_shears_drop = true,
@ -164,7 +195,19 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
_mcl_silk_touch_drop = true, _mcl_silk_touch_drop = true,
_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) },
}) }
minetest.register_node("mcl_core:" .. subname, l_def)
local o_def = table.copy(l_def)
o_def._doc_items_create_entry = false
o_def.place_param2 = nil
o_def.groups.not_in_creative_inventory = 1
o_def.groups.orphan_leaves = 1
o_def._mcl_shears_drop = {"mcl_core:" .. subname}
o_def._mcl_silk_touch_drop = {"mcl_core:" .. subname}
minetest.register_node("mcl_core:" .. subname .. "_orphan", o_def)
end end
local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) local function register_sapling(subname, description, longdesc, tt_help, texture, selbox)

@ -283,10 +283,10 @@ minetest.register_node("mcl_crimson:warped_hyphae", {
tiles = { tiles = {
"warped_hyphae.png", "warped_hyphae.png",
"warped_hyphae.png", "warped_hyphae.png",
"warped_hyphae_side.png", {
"warped_hyphae_side.png", image="warped_hyphae_side.png",
"warped_hyphae_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
"warped_hyphae_side.png", },
}, },
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
@ -321,7 +321,12 @@ minetest.register_node("mcl_crimson:warped_nylium", {
minetest.register_node("mcl_crimson:warped_hyphae_bark", { minetest.register_node("mcl_crimson:warped_hyphae_bark", {
description = S("Warped Hyphae Bark"), description = S("Warped Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
tiles = {"warped_hyphae_side.png"}, tiles = {
{
image="warped_hyphae_side.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},
@ -468,10 +473,10 @@ minetest.register_node("mcl_crimson:crimson_hyphae", {
tiles = { tiles = {
"crimson_hyphae.png", "crimson_hyphae.png",
"crimson_hyphae.png", "crimson_hyphae.png",
"crimson_hyphae_side.png", {
"crimson_hyphae_side.png", image="crimson_hyphae_side.png",
"crimson_hyphae_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
"crimson_hyphae_side.png", },
}, },
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
@ -487,7 +492,12 @@ minetest.register_node("mcl_crimson:crimson_hyphae", {
minetest.register_node("mcl_crimson:crimson_hyphae_bark", { minetest.register_node("mcl_crimson:crimson_hyphae_bark", {
description = S("Crimson Hyphae Bark"), description = S("Crimson Hyphae Bark"),
_doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."), _doc_items_longdesc = S("This is a decorative block surrounded by the bark of an hyphae."),
tiles = {"crimson_hyphae_side.png"}, tiles = {
{
image="crimson_hyphae_side.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}
},
},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1}, groups = {handy = 1, axey = 1, bark = 1, building_block = 1, material_wood = 1},

@ -52,9 +52,9 @@ minetest.register_node("mcl_mangrove:mangrove_tree", {
tiles = {"mcl_mangrove_log_top.png", "mcl_mangrove_log_top.png", "mcl_mangrove_log.png"}, tiles = {"mcl_mangrove_log_top.png", "mcl_mangrove_log_top.png", "mcl_mangrove_log.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
after_destruct = mcl_core.update_leaves,
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = mcl_sounds.node_sound_wood_defaults(), sounds = mcl_sounds.node_sound_wood_defaults(),
on_place = mcl_util.rotate_axis,
_mcl_blast_resistance = 2, _mcl_blast_resistance = 2,
_mcl_hardness = 2, _mcl_hardness = 2,
_mcl_stripped_variant = "mcl_mangrove:mangrove_stripped_trunk", _mcl_stripped_variant = "mcl_mangrove:mangrove_stripped_trunk",
@ -86,7 +86,7 @@ minetest.register_node("mcl_mangrove:mangrove_wood", {
_mcl_hardness = 2, _mcl_hardness = 2,
}) })
minetest.register_node("mcl_mangrove:mangroveleaves", { local l_def = {
description = S("Mangrove Leaves"), description = S("Mangrove Leaves"),
_doc_items_longdesc = S("mangrove leaves are grown from mangrove trees."), _doc_items_longdesc = S("mangrove leaves are grown from mangrove trees."),
_doc_items_hidden = false, _doc_items_hidden = false,
@ -95,7 +95,11 @@ minetest.register_node("mcl_mangrove:mangroveleaves", {
place_param2 = 1, -- Prevent leafdecay for placed nodes place_param2 = 1, -- Prevent leafdecay for placed nodes
tiles = {"mcl_mangrove_leaves.png"}, tiles = {"mcl_mangrove_leaves.png"},
paramtype = "light", paramtype = "light",
groups = {handy=1,shearsy=1,swordy=1, leafdecay=10, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60}, groups = {
handy = 1, hoey = 1, shearsy = 1, swordy = 1, dig_by_piston = 1,
flammable = 2, fire_encouragement = 30, fire_flammability = 60,
leaves = 1, deco_block = 1, compostability = 30
},
drop = get_drops(0), drop = get_drops(0),
_mcl_shears_drop = true, _mcl_shears_drop = true,
sounds = mcl_sounds.node_sound_leaves_defaults(), sounds = mcl_sounds.node_sound_leaves_defaults(),
@ -103,7 +107,19 @@ minetest.register_node("mcl_mangrove:mangroveleaves", {
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
_mcl_silk_touch_drop = true, _mcl_silk_touch_drop = true,
_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) },
}) }
minetest.register_node("mcl_mangrove:mangroveleaves", l_def)
local o_def = table.copy(l_def)
o_def._doc_items_create_entry = false
o_def.place_param2 = nil
o_def.groups.not_in_creative_inventory = 1
o_def.groups.orphan_leaves = 1
o_def._mcl_shears_drop = {"mcl_mangrove:mangroveleaves"}
o_def._mcl_silk_touch_drop = {"mcl_mangrove:mangroveleaves"}
minetest.register_node("mcl_mangrove:mangroveleaves_orphan", o_def)
minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", {
description = S("Stripped Mangrove Wood"), description = S("Stripped Mangrove Wood"),
@ -147,11 +163,13 @@ minetest.register_node("mcl_mangrove:mangrove_roots", {
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
groups = { groups = {
handy = 1, hoey = 1, shearsy = 1, axey = 1, swordy = 1, dig_by_piston = 0, handy = 1, hoey = 1, shearsy = 1, axey = 1, swordy = 1, dig_by_piston = 0,
leaves = 1, deco_block = 1,flammable = 10, fire_encouragement = 30, fire_flammability = 60, compostability = 30 flammable = 10, fire_encouragement = 30, fire_flammability = 60,
deco_block = 1, compostability = 30
}, },
drop = "mcl_mangrove:mangrove_roots", drop = "mcl_mangrove:mangrove_roots",
_mcl_shears_drop = true, _mcl_shears_drop = true,
sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0.7, sounds = mcl_sounds.node_sound_leaves_defaults(),
_mcl_blast_resistance = 0.7,
_mcl_hardness = 0.7, _mcl_hardness = 0.7,
_mcl_silk_touch_drop = true, _mcl_silk_touch_drop = true,
_mcl_fortune_drop = { "mcl_mangrove:mangrove_roots 1", "mcl_mangrove:mangrove_roots 2", "mcl_mangrove:mangrove_roots 3", "mcl_mangrove:mangrove_roots 4" }, _mcl_fortune_drop = { "mcl_mangrove:mangrove_roots 1", "mcl_mangrove:mangrove_roots 2", "mcl_mangrove:mangrove_roots 3", "mcl_mangrove:mangrove_roots 4" },
@ -329,6 +347,9 @@ local wlroots = {
end, end,
} }
local rwlroots = table.copy(wlroots) local rwlroots = table.copy(wlroots)
-- FIXME luacheck complains that this is a repeated definition of water_tex.
-- Maybe the tiles definition below should be replaced with the animated tile
-- definition as per above?
water_tex = "default_river_water_source_animated.png^[verticalframe:16:0" water_tex = "default_river_water_source_animated.png^[verticalframe:16:0"
rwlroots.tiles = { rwlroots.tiles = {
"("..water_tex..")^mcl_mangrove_roots_top.png", "("..water_tex..")^mcl_mangrove_roots_top.png",

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

@ -17,6 +17,7 @@ mcl_structures.register_structure("pillager_outpost",{
y_max = mcl_vars.mg_overworld_max, y_max = mcl_vars.mg_overworld_max,
y_min = 1, y_min = 1,
biomes = { "Desert", "Plains", "Savanna", "IcePlains", "Taiga" }, biomes = { "Desert", "Plains", "Savanna", "IcePlains", "Taiga" },
construct_nodes = {"mcl_anvils:anvil_damage_2"},
filenames = { filenames = {
modpath.."/schematics/mcl_structures_pillager_outpost.mts", modpath.."/schematics/mcl_structures_pillager_outpost.mts",
modpath.."/schematics/mcl_structures_pillager_outpost_2.mts" modpath.."/schematics/mcl_structures_pillager_outpost_2.mts"
@ -67,7 +68,12 @@ mcl_structures.register_structure("pillager_outpost",{
mcl_structures.spawn_mobs("mobs_mc:pillager",spawnon,p1,p2,pr,5) mcl_structures.spawn_mobs("mobs_mc:pillager",spawnon,p1,p2,pr,5)
mcl_structures.spawn_mobs("mobs_mc:parrot",{"mesecons_pressureplates:pressure_plate_stone_off"},p1,p2,pr,3) mcl_structures.spawn_mobs("mobs_mc:parrot",{"mesecons_pressureplates:pressure_plate_stone_off"},p1,p2,pr,3)
mcl_structures.spawn_mobs("mobs_mc:iron_golem",{"mesecons_button:button_stone_off"},p1,p2,pr,1) mcl_structures.spawn_mobs("mobs_mc:iron_golem",{"mesecons_button:button_stone_off"},p1,p2,pr,1)
mcl_structures.construct_nodes(p1,p2,{"group:wall"}) for _,n in pairs(minetest.find_nodes_in_area(p1,p2,{"group:wall"})) do
local def = minetest.registered_nodes[minetest.get_node(n).name:gsub("_%d+$","")]
if def and def.on_construct then
def.on_construct(n)
end
end
end end
}) })

@ -20,7 +20,7 @@ mcl_structures.register_structure("woodland_cabin",{
modpath.."/schematics/mcl_structures_woodland_cabin.mts", modpath.."/schematics/mcl_structures_woodland_cabin.mts",
modpath.."/schematics/mcl_structures_woodland_outpost.mts", modpath.."/schematics/mcl_structures_woodland_outpost.mts",
}, },
construct_nodes = {"mcl_barrels:barrel_closed"}, construct_nodes = {"mcl_barrels:barrel_closed","mcl_books:bookshelf"},
after_place = function(p,def,pr) after_place = function(p,def,pr)
local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen) local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen)
local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen) local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen)

@ -52,16 +52,16 @@ schem_path = settlements.modpath.."/schematics/"
local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", true) local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", true)
settlements.schematic_table = { settlements.schematic_table = {
{name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 12, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages },
{name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = basic_pseudobiome_villages }, {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 8, hdepth = 11, hheight = 13, hsize = 13, max_num = 0.055, rplc = basic_pseudobiome_villages },
{name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03 , rplc = basic_pseudobiome_villages }, {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 12, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03 , rplc = basic_pseudobiome_villages },
{name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04 , rplc = basic_pseudobiome_villages }, {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04 , rplc = basic_pseudobiome_villages },
{name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1 , rplc = basic_pseudobiome_villages }, {name = "farm", mts = schem_path.."farm.mts", hwidth = 9, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1 , rplc = basic_pseudobiome_villages },
{name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1 , rplc = false }, {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 4, hheight = 13, hsize = 10, max_num = 0.1 , rplc = false },
{name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04 , rplc = basic_pseudobiome_villages }, {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04 , rplc = basic_pseudobiome_villages },
{name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 9, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages },
{name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7 , rplc = basic_pseudobiome_villages }, {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 8, hheight = 8, hsize = 13, max_num = 0.7 , rplc = basic_pseudobiome_villages },
{name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = basic_pseudobiome_villages }, {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 12, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = basic_pseudobiome_villages },
{name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = basic_pseudobiome_villages }, {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = basic_pseudobiome_villages },
} }

@ -1,17 +1,35 @@
local function mcl_log (message)
mcl_util.mcl_log (message, "[Village - Foundation]")
end
local foundation_materials = {}
foundation_materials["mcl_core:sand"] = "mcl_core:sandstone"
--"mcl_core:sandstonecarved"
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- function to fill empty space below baseplate when building on a hill -- function to fill empty space below baseplate when building on a hill
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
function settlements.ground(pos, pr) -- role model: Wendelsteinkircherl, Brannenburg function settlements.ground(pos, pr, platform_material) -- role model: Wendelsteinkircherl, Brannenburg
local p2 = vector.new(pos) local p2 = vector.new(pos)
local cnt = 0 local cnt = 0
local mat = "mcl_core:dirt" local mat = "mcl_core:dirt"
if not platform_material then
mat = "mcl_core:dirt"
else
mat = platform_material
end
p2.y = p2.y-1 p2.y = p2.y-1
while true do while true do
cnt = cnt+1 cnt = cnt+1
if cnt > 20 then break end if cnt > 20 then break end
if cnt>pr:next(2,4) then if cnt>pr:next(2,4) then
if not platform_material then
mat = "mcl_core:stone" mat = "mcl_core:stone"
end end
end
minetest.swap_node(p2, {name=mat}) minetest.swap_node(p2, {name=mat})
p2.y = p2.y-1 p2.y = p2.y-1
end end
@ -40,6 +58,12 @@ function settlements.terraform(settlement_info, pr)
end end
--fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above --fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above
fheight = schematic_data["hheight"] -- remove trees and leaves above fheight = schematic_data["hheight"] -- remove trees and leaves above
local surface_mat = settlement_info[i]["surface_mat"]
mcl_log("Surface material: " .. tostring(surface_mat))
local platform_mat = foundation_materials[surface_mat]
mcl_log("Foundation material: " .. tostring(platform_mat))
-- --
-- now that every info is available -> create platform and clear space above -- now that every info is available -> create platform and clear space above
-- --
@ -48,7 +72,8 @@ function settlements.terraform(settlement_info, pr)
for yi = 0,fheight *3 do for yi = 0,fheight *3 do
if yi == 0 then if yi == 0 then
local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi} local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi}
settlements.ground(p, pr) -- Pass in biome info and make foundations of same material (seed: apple for desert)
settlements.ground(p, pr, platform_mat)
else else
-- write ground -- write ground
-- local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} -- local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi}