2021-03-30 22:24:52 -05:00
|
|
|
-- LUALOCALS < ---------------------------------------------------------
|
2021-08-30 21:07:12 -04:00
|
|
|
local math, minetest, nodecore
|
|
|
|
= math, minetest, nodecore
|
|
|
|
local math_random
|
|
|
|
= math.random
|
2021-03-30 22:24:52 -05:00
|
|
|
-- LUALOCALS > ---------------------------------------------------------
|
2021-08-30 21:07:12 -04:00
|
|
|
|
2021-03-30 22:24:52 -05:00
|
|
|
local modname = minetest.get_current_modname()
|
|
|
|
|
|
|
|
minetest.register_alias_force("nc_nature:bamboo", "nc_nature:bamboo_living")
|
|
|
|
|
|
|
|
minetest.register_node(modname .. ":bamboo_pole", {
|
2021-08-30 21:07:12 -04:00
|
|
|
description = "Bamboo",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {
|
|
|
|
{-0.125, -0.4375, -0.125, 0.125, 0.5, 0.125}, -- Shaft
|
|
|
|
{-0.1875, -0.5, -0.1875, 0.1875, -0.4375, 0.1875} -- Bottom
|
|
|
|
}
|
|
|
|
},
|
|
|
|
tiles = {"nc_nature_bamboo.png^[colorize:peru:100"},
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
on_place = minetest.rotate_node,
|
|
|
|
climbable = true,
|
|
|
|
groups = {choppy = 1, flammable = 2, fire_fuel = 1, bamboo = 1},
|
|
|
|
sounds = nodecore.sounds("nc_tree_sticky")
|
|
|
|
})
|
2021-03-30 22:24:52 -05:00
|
|
|
|
|
|
|
minetest.register_node(modname .. ":bamboo_living", {
|
2021-08-30 21:07:12 -04:00
|
|
|
description = "Living Bamboo",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {
|
|
|
|
{-0.125, -0.4375, -0.125, 0.125, 0.5, 0.125}, -- Shaft
|
|
|
|
{-0.1875, -0.5, -0.1875, 0.1875, -0.4375, 0.1875} -- Bottom
|
|
|
|
}
|
|
|
|
},
|
|
|
|
tiles = {"nc_nature_bamboo.png"},
|
|
|
|
groups = {choppy = 2, flammable = 6, fire_fuel = 1, falling_node = 1, scaling_time = 80},
|
|
|
|
crush_damage = 1,
|
|
|
|
sounds = nodecore.sounds("nc_tree_sticky"),
|
|
|
|
drop = modname .. ":bamboo_pole"
|
|
|
|
})
|
2021-03-30 22:24:52 -05:00
|
|
|
|
|
|
|
nodecore.register_aism({
|
2021-08-30 21:07:12 -04:00
|
|
|
label = "bamboo convert",
|
|
|
|
interval = 1,
|
|
|
|
chance = 1,
|
|
|
|
itemnames = {modname .. ":bamboo_living"},
|
|
|
|
action = function(stack)
|
|
|
|
stack:set_name(modname .. ":bamboo_pole")
|
|
|
|
return stack
|
|
|
|
end
|
|
|
|
})
|
2021-03-30 22:24:52 -05:00
|
|
|
|
|
|
|
nodecore.register_limited_abm({
|
2021-08-30 21:07:12 -04:00
|
|
|
label = "bamboo spreading",
|
|
|
|
nodenames = {modname .. ":bamboo_living"},
|
|
|
|
neighbors = {"group:water"},
|
|
|
|
interval = 120,
|
|
|
|
chance = 20,
|
|
|
|
action = function(pos)
|
|
|
|
local gro = {x = pos.x + math_random(-1, 1), y = pos.y + math_random(-1, 1), z = pos.z + math_random(-1, 1)}
|
|
|
|
local grodown = {x = gro.x, y = gro.y - 1, z = gro.z}
|
|
|
|
local num = minetest.find_nodes_in_area(
|
|
|
|
{x = pos.x + 1, y = pos.y - 1, z = pos.z + 1},
|
|
|
|
{x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
|
|
|
|
{"group:soil", "group:sand"})
|
|
|
|
local dname = minetest.get_node(grodown).name
|
|
|
|
if minetest.get_node(gro).name ~= "air" then return end
|
|
|
|
if minetest.get_item_group(dname, "soil") > 0 then return end
|
|
|
|
if #num > 3 and pos.y < 50 then
|
|
|
|
nodecore.set_node(gro, {name = modname .. ":bamboo_living"})
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
})
|
2021-03-30 22:24:52 -05:00
|
|
|
|
|
|
|
nodecore.register_limited_abm({
|
2021-08-30 21:07:12 -04:00
|
|
|
label = "bamboo growing",
|
|
|
|
nodenames = {modname .. ":bamboo_living"},
|
|
|
|
-- neighbors = {"air"}, -- dunno if this helps, with the air check in the action;
|
|
|
|
-- I'd compare performance with and without.
|
|
|
|
interval = 60,
|
|
|
|
chance = 10,
|
|
|
|
action = function(pos)
|
|
|
|
local up = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
|
|
if minetest.get_node(up).name ~= "air" then return end
|
|
|
|
for i = 1, 13 do
|
|
|
|
local down = {x = pos.x, y = pos.y - i; z = pos.z}
|
|
|
|
local dname = minetest.get_node(down).name
|
|
|
|
if minetest.get_item_group(dname, "soil") > 0 then
|
|
|
|
return minetest.set_node(up, {name = modname .. ":bamboo_living"})
|
|
|
|
elseif dname ~= modname .. ":bamboo_living" then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
})
|
2021-03-30 22:24:52 -05:00
|
|
|
|
|
|
|
minetest.register_decoration({
|
2021-08-30 21:07:12 -04:00
|
|
|
label = "nc_nature:bamboo_living",
|
|
|
|
deco_type = "simple",
|
|
|
|
place_on = {"group:soil", "nc_terrain:sand"},
|
|
|
|
sidelen = 16,
|
|
|
|
fill_ratio = 0.1,
|
|
|
|
y_max = 200,
|
|
|
|
y_min = 1,
|
|
|
|
decoration = "nc_nature:bamboo_living",
|
|
|
|
height = 1,
|
|
|
|
height_max = 12,
|
|
|
|
biomes = {"thicket", "floodland"}
|
2021-03-30 22:24:52 -05:00
|
|
|
})
|
|
|
|
|
|
|
|
-----Split Bamboo-----
|
|
|
|
nodecore.register_craft({
|
2021-08-30 21:07:12 -04:00
|
|
|
label = "split bamboo into staves",
|
|
|
|
action = "pummel",
|
|
|
|
-- priority = -1,
|
|
|
|
toolgroups = {choppy = 1},
|
|
|
|
nodes = {
|
|
|
|
{match = "nc_nature:bamboo_pole", replace = "air"}
|
|
|
|
},
|
|
|
|
items = {
|
|
|
|
{name = "nc_woodwork:staff", count = 2, scatter = 2}
|
|
|
|
},
|
|
|
|
itemscatter = 2
|
|
|
|
})
|