handle_schematics/nodes.lua

92 lines
3.2 KiB
Lua

---------------------------------------------------------------------------------------
-- helper node that is used during construction of a house; scaffolding
---------------------------------------------------------------------------------------
-- this node can be crafted
minetest.register_node("handle_schematics:support", {
description = "support structure for buildings",
tiles = {"handle_schematics_support.png"},
groups = {snappy=3,choppy=3,oddly_breakable_by_hand=3},
visual_scale = 1.2,
walkable = false,
climbable = true,
paramtype = "light",
drawtype = "plantlike",
-- -- the small selection box allows the player to dig one or two nodes below
-- selection_box = {
-- type = "fixed",
-- fixed = {-2 / 16, -0.5, -2 / 16, 2 / 16, 0.5, 2 / 16}
-- },
})
minetest.register_craft({
output = "handle_schematics:support 4",
recipe = {
{"group:stick", "", "group:stick" }
}
})
-- this node will only be placed by spawning a house with handle_schematics
minetest.register_node("handle_schematics:support_setup", {
description = "support structure for buildings (configured)",
tiles = {"handle_schematics_support.png"},
groups = {snappy=3,choppy=3,oddly_breakable_by_hand=3},
visual_scale = 1.2,
walkable = false,
climbable = true,
paramtype = "light",
drawtype = "plantlike",
-- after it is digged, the node looses its information and becomes a normal, unconfigured one
drop = "handle_schematics:support",
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if default.can_interact_with_node(clicker, pos) then
local meta = minetest.get_meta( pos );
local node_wanted = meta:get_string( "node_wanted" );
local param2_wanted = meta:get_int( "param2_wanted" );
if( not(meta) or not(node_wanted) or node_wanted == "" or not(clicker)) then
return itemstack;
end
if( not( clicker:get_inventory():contains_item("main", node_wanted ))) then
minetest.chat_send_player( clicker:get_player_name(),
"You have no "..node_wanted..".");
return itemstack;
end
-- take the item from the player
clicker:get_inventory():remove_item("main", node_wanted);
minetest.env:add_node( pos, { name = node_wanted, param1 = 0, param2 = param2_wanted } );
end
return itemstack;
end
})
-- no craft receipe for this node as it's only an indicator that the player shall dig here
minetest.register_node("handle_schematics:dig_here", {
description = "dig the node below this one",
tiles = {"default_tool_mesepick.png^[colorize:#FF0000^[transformFXR90"},
inventory_image = "default_tool_mesepick.png^[colorize:#FF0000^[transformFXR90";
-- falling node; will notice if the node below it is beeing digged; cannot be destroyed the normal way
groups = {falling_node = 1},
visual_scale = 0.6,
walkable = false,
climbable = true,
paramtype = "light",
drawtype = "torchlike",
-- this node's purpose is to indicate that the player shall dig here;
-- that requires beeing able to actually aim at that node below
selection_box = {
type = "fixed",
fixed = {-2 / 16, -0.5, -2 / 16, 2 / 16, 6 / 16, 2 / 16}
},
})