nodecore-skyblock/mods/nc_player_pickup/intercept.lua

69 lines
1.8 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local ipairs, minetest, nodecore, setmetatable
= ipairs, minetest, nodecore, setmetatable
-- LUALOCALS > ---------------------------------------------------------
local function wrapinv(inv, player)
if not inv then return inv end
local t = {}
setmetatable(t, {__index = inv})
function t.add_item(_, list, stack)
return nodecore.give_item(player, stack, list, inv)
end
return t
end
local function wrapplayer(player)
if not player then return player end
local t = {}
setmetatable(t, {__index = player})
function t.get_inventory()
return wrapinv(player:get_inventory(), player)
end
return t
end
local oldstackgive = nodecore.stack_giveto
nodecore.stack_giveto = function(a, whom, ...)
return oldstackgive(a, wrapplayer(whom), ...)
end
local olddrops = minetest.handle_node_drops
function minetest.handle_node_drops(a, b, whom, ...)
return olddrops(a, b, wrapplayer(whom), ...)
end
local oldeat = minetest.do_item_eat
function minetest.do_item_eat(a, b, c, whom, ...)
return oldeat(a, b, c, wrapplayer(whom), ...)
end
local bii = minetest.registered_entities["__builtin:item"]
local item = {
on_punch = function(self, whom, ...)
return bii.on_punch(self, wrapplayer(whom), ...)
end
}
setmetatable(item, bii)
minetest.register_entity(":__builtin:item", item)
for _, cmd in ipairs({"give", "giveme"}) do
local give = minetest.registered_chatcommands[cmd] or {}
local oldfunc = give.func or function() end
give.func = function(...)
local oldgpbn = minetest.get_player_by_name
local function helper(...)
minetest.get_player_by_name = oldgpbn
return ...
end
minetest.get_player_by_name = function(...)
local function helpest(p, ...)
p = wrapplayer(p)
return p, ...
end
return helpest(oldgpbn(...))
end
return helper(oldfunc(...))
end
end