89 lines
3.1 KiB
Lua

lzr_hand = {}
-- Range of editor hand
local RANGE_EDITOR = 20.0
-- Default hand
local handdef = {
type = "none",
wield_image = "wieldhand.png",
wield_scale = {x=1,y=1,z=2.5},
tool_capabilities = {
max_drop_level = 0,
groupcaps = {
takable = { times = { [1] = 0, [2] = 0, [3] = 0 } },
punchdig = { times = { [1] = 0, [2] = 0, [3] = 0 } },
},
},
-- When using the [Place] key on a trigger node with the bare
-- hand, show its trigger info (HUD overlay).
-- It's somewhat hacky we override on_place of the hand for this,
-- but it surprisingly works without side-effects.
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
-- IMPORTANT: We MUST use this return statement in
-- any case where the trigger info function was
-- not case, so that node-specific on_rightclick
-- handlers (and similar) events still fire.
return minetest.item_place(itemstack, placer, pointed_thing)
end
-- Make sure the external mod functions are available before
-- calling them
if not minetest.global_exists("lzr_triggers") or not minetest.global_exists("lzr_laser") then
return minetest.item_place(itemstack, placer, pointed_thing)
end
-- If pointed node is a trigger, show its info
local pos = pointed_thing.under
local meta = minetest.get_meta(pos)
local trigger_id = meta:get_string("trigger_id")
if lzr_triggers.trigger_exists(trigger_id) then
lzr_laser.show_trigger_info(trigger_id, placer)
-- Return to override the default placement handler
return nil
end
return minetest.item_place(itemstack, placer, pointed_thing)
end,
-- Implied default hand range is 4
}
minetest.register_item(":", handdef)
-- Editor hand
-- Identical to default hand except it has increased range
local editor_handdef = table.copy(handdef)
editor_handdef.range = RANGE_EDITOR
editor_handdef.wield_image = "wieldhand.png"
editor_handdef.inventory_image = "wieldhand.png"
if not editor_handdef.groups then
editor_handdef.groups = {}
end
editor_handdef.groups.not_in_creative_inventory = 1
minetest.register_item("lzr_hand:hand_editor", editor_handdef)
-- Scorched hand
-- Identical to default hand except it is scorched
local scorched_handdef = table.copy(handdef)
scorched_handdef.wield_image = "lzr_hand_hand_scorched.png"
scorched_handdef.inventory_image = "lzr_hand_hand_scorched.png"
if not scorched_handdef.groups then
scorched_handdef.groups = {}
end
scorched_handdef.groups.not_in_creative_inventory = 1
minetest.register_item("lzr_hand:hand_scorched", scorched_handdef)
-- Switch hand type for player.
-- hand_hype is one of "normal", "scorched" or "editor"
function lzr_hand.set_hand(player, hand_type)
local inv = player:get_inventory()
if hand_type == "normal" then
minetest.log("action", "[lzr_hand] Setting hand to normal hand")
inv:set_stack("hand", 1, "")
elseif hand_type == "scorched" then
minetest.log("action", "[lzr_hand] Setting hand to scorched hand")
inv:set_stack("hand", 1, "lzr_hand:hand_scorched")
elseif hand_type == "editor" then
minetest.log("action", "[lzr_hand] Setting hand to editor hand")
inv:set_stack("hand", 1, "lzr_hand:hand_editor")
end
end