55 lines
1.2 KiB
Lua
55 lines
1.2 KiB
Lua
rp_checkitem = {}
|
|
|
|
-- Time in seconds to check inventory for items
|
|
local ITEM_CHECK_TIME = 10
|
|
|
|
local items_to_watch = {}
|
|
|
|
function rp_checkitem.register_on_got_item(item, callback)
|
|
table.insert(items_to_watch, {item=item, callback=callback})
|
|
end
|
|
|
|
minetest.register_on_joinplayer(function(player)
|
|
local inv = player:get_inventory()
|
|
for i=1, #items_to_watch do
|
|
local entry = items_to_watch[i]
|
|
if inv:contains_item("main", entry.item) then
|
|
entry.callback(player)
|
|
end
|
|
end
|
|
end)
|
|
|
|
minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info)
|
|
if action == "put" then
|
|
local itemname = inventory_info.stack:get_name()
|
|
for i=1, #items_to_watch do
|
|
local entry = items_to_watch[i]
|
|
if inventory_info.stack:get_name() == entry.item then
|
|
entry.callback(player)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
local timer = 0
|
|
minetest.register_globalstep(function(dtime)
|
|
timer = timer + dtime
|
|
if timer < ITEM_CHECK_TIME then
|
|
return
|
|
end
|
|
timer = 0
|
|
|
|
local players = minetest.get_connected_players()
|
|
for p=1, #players do
|
|
local player = players[p]
|
|
local inv = player:get_inventory()
|
|
for i=1, #items_to_watch do
|
|
local entry = items_to_watch[i]
|
|
if inv:contains_item("main", entry.item) then
|
|
entry.callback(player)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|