77 lines
2.4 KiB
Lua
77 lines
2.4 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local ItemStack, minetest, nodecore, string
|
|
= ItemStack, minetest, nodecore, string
|
|
local string_format
|
|
= string.format
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local modname = minetest.get_current_modname()
|
|
|
|
local supername = modname .. ":super"
|
|
local superdef = nodecore.underride({
|
|
description = "Admin Tool",
|
|
light_source = 14,
|
|
tiles = {"[combine:1x1^[noalpha^[colorize:#ffffff:255"},
|
|
inventory_image = modname .. "_admintool.png",
|
|
tool_capabilities = nodecore.toolcaps({
|
|
uses = 0,
|
|
cracky = 100,
|
|
crumbly = 100,
|
|
choppy = 100,
|
|
snappy = 100,
|
|
thumpy = 100
|
|
}),
|
|
groups = {cheat = 1},
|
|
virtual_item = true,
|
|
on_drop = function() return ItemStack("") end,
|
|
on_place = function() end
|
|
}, minetest.registered_nodes[modname .. ":hand"])
|
|
superdef.on_use = nil
|
|
minetest.register_node(supername, superdef)
|
|
|
|
minetest.register_chatcommand("nckfa", {
|
|
description = "Summon admin tool",
|
|
privs = {give = true},
|
|
func = function(name)
|
|
minetest.registered_chatcommands.giveme.func(name, supername)
|
|
end
|
|
})
|
|
|
|
local cooldown = {}
|
|
minetest.register_on_punchnode(function(pos, node, puncher)
|
|
if not (puncher and puncher:is_player()) then return end
|
|
|
|
local ctl = puncher:get_player_control()
|
|
if not (ctl.sneak and ctl.aux1) then return end
|
|
|
|
local wield = puncher:get_wielded_item()
|
|
if wield:get_name() ~= supername then return end
|
|
|
|
if node.name == "air" or node.name == "ignore" then return end
|
|
|
|
local now = minetest.get_us_time()
|
|
local pname = puncher:get_player_name()
|
|
local cd = cooldown[pname]
|
|
if cd and cd > now then return end
|
|
cooldown[pname] = now + 250 * 1000
|
|
|
|
if not nodecore.stack_giveto(pos, puncher) then
|
|
nodecore.item_eject(pos, nodecore.stack_get(pos))
|
|
end
|
|
|
|
nodecore.log("action", string_format("%s super-digs %s at %s",
|
|
pname, node.name, minetest.pos_to_string(pos)))
|
|
|
|
local def = minetest.registered_nodes[node.name]
|
|
if (not def) or (not def.air_equivalent) and (not def.groups.is_stack_only) then
|
|
local stack = ItemStack(node.name)
|
|
stack:get_meta():from_table({fields = minetest.get_meta(pos)
|
|
:to_table().field})
|
|
stack = puncher:get_inventory():add_item("main", stack)
|
|
if not stack:is_empty() then nodecore.item_eject(pos, stack) end
|
|
end
|
|
|
|
minetest.remove_node(pos)
|
|
return nodecore.fallcheck(pos)
|
|
end)
|