Files
luanti-stripped-tree/functions.lua

99 lines
3.5 KiB
Lua

stripped_tree = {}
-- Select between chisel tool or axes.
stripped_tree.ENABLE_CHISEL = core.settings:get_bool "stripped_tree_enable_chisel"
local creative_mode = minetest.settings:get_bool("creative_mode")
-- Function to verify that stripped tree trunk exists
stripped_tree.has_stripped = function(pos)
local node = minetest.get_node(pos).name or pos
local mod_name, node_name = unpack(node:split(":"))
local has_stripped = minetest.registered_nodes[mod_name .. ":" .. "stripped_" .. node_name]
return has_stripped
end
-- Function to swap nodes
stripped_tree.swap_node = function(pos, user, creative_mode)
local old_node = minetest.get_node(pos)
local stripped = mod_name .. ":" .. "stripped_" .. node_name
minetest.swap_node(pos, {name = stripped, param2 = old_node.param2})
-- itemstack:add_wear(65535 / 299) this is not useful at moment.
if not creative_mode then
local inv = user:get_inventory()
-- check for room in inv, if not, drop item
if inv:room_for_item("main", "default:tree_bark") then
inv:add_item("main", {name = "default:tree_bark"})
else
minetest.add_item(pos, "default:tree_bark")
end
end
return itemstack
end
-- function to register nodes
function stripped_tree.register_trunk(mod_name, trunk_names)
for _, name in ipairs(trunk_names) do
minetest.register_node(
":" .. mod_name .. ":stripped_" .. name, {
description = "Stripped " .. name,
tiles = {
"stripped_" .. mod_name .. "_" .. name .. "_top.png",
"stripped_" .. mod_name .. "_" .. name .. "_top.png",
"stripped_" .. mod_name .. "_" .. name .. ".png",
},
groups = {
tree = 1,
choppy = 2,
oddly_breakable_by_hand = 1,
flammable = 2,
not_in_creative_inventory = 1,
},
sounds = default.node_sound_wood_defaults(),
paramtype2 = "facedir",
on_place = minetest.rotate_node,
}
)
minetest.register_craft(
{
output = mod_name .. ":" .. name,
recipe = {
{"", "default:tree_bark", ""},
{"default:tree_bark", mod_name .. ":stripped_" .. name, "default:tree_bark"},
{"", "default:tree_bark", ""},
},
}
)
end
end
-- function to override axes
if stripped_tree.ENABLE_CHISEL ~= true then
function stripped_tree.register_axes(mod_n, axe_types)
for _, axe_name in ipairs(axe_types) do
minetest.override_item(
mod_n .. ":" .. axe_name, {
on_place = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then return end
local pos = pointed_thing.under
local pname = user:get_player_name()
if minetest.is_protected(pos, pname) then
minetest.record_protection_violation(pos, pname)
return
end
if stripped_tree.has_stripped(pos) then
stripped_tree.swap_node(pos, user, creative_mode)
end
end,
}
)
end
end
end