hades_revisited/mods/hades_doors/wrench.lua

81 lines
2.5 KiB
Lua

local S = minetest.get_translator("hades_doors")
local config = {}
config.wrench_usage_limit = 200
---------------------------------
-- handle_wrench( )
---------------------------------
local function handle_wrench( itemstack, player, pointed_thing, mode, uses )
if pointed_thing.type ~= "node" then return end
local pos = pointed_thing.under
local player_name = player:get_player_name( )
local node = minetest.get_node( pos )
local ndef = minetest.registered_nodes[ node.name ]
if minetest.is_protected( pos, player_name ) then
minetest.record_protection_violation( pos, player_name )
return
end
if ndef.on_adjust then
local has_wear = ndef.on_adjust( vector.new( pos ), { name = node.name, param1 = node.param1, param2 = node.param2 }, player, mode )
if (mode == hades_doors.ADJUST_LOCKING or mode == hades_doors.ADJUST_CLOSING) and
(not minetest.is_creative_enabled( player_name )) and has_wear then
itemstack:add_wear( 65535 / config.wrench_usage_limit - 1 )
end
end
end
minetest.register_tool( "hades_doors:wrench", {
description = S("Wrench"),
_tt_help = S("Punch to adjust door locking").."\n"..
S("Place to adjust door closing").."\n"..
S("Hold Sneak to check state"),
inventory_image = "hades_doors_wrench.png",
on_use = function( itemstack, player, pointed_thing )
local ctrl = player:get_player_control()
local mode
if ctrl.sneak then
mode = hades_doors.CHECK_LOCKING
else
mode = hades_doors.ADJUST_LOCKING
end
handle_wrench( itemstack, player, pointed_thing, mode )
return itemstack
end,
on_place = function( itemstack, player, pointed_thing)
local node = minetest.get_node(pointed_thing.under)
local ndef = minetest.registered_nodes[node.name]
local is_door = minetest.get_item_group(node.name, "door") ~= 0
local is_trapdoor = minetest.get_item_group(node.name, "trapdoor") ~= 0
local is_fence_gate = minetest.get_item_group(node.name, "fence_gate") ~= 0
if not is_door and not is_trapdoor and not is_fence_gate and
ndef and ndef.on_rightclick and
not player:get_player_control().sneak then
return ndef.on_rightclick(pointed_thing.under,
node, player, itemstack, pointed_thing)
end
local ctrl = player:get_player_control()
local mode
if ctrl.sneak then
mode = hades_doors.CHECK_CLOSING
else
mode = hades_doors.ADJUST_CLOSING
end
handle_wrench( itemstack, player, pointed_thing, mode )
return itemstack
end,
} )
minetest.register_craft( {
output = "hades_doors:wrench",
recipe = {
{ "hades_core:steel_ingot" },
{ "hades_core:steel_rod" },
}
} )