1 -- Minetest: builtin/misc.lua
9 local function update_timers(delay)
12 for index = 1, #timers do
14 local timer = timers[index]
15 timer.time = timer.time - delay
16 if timer.time <= 0 then
17 timer.func(unpack(timer.args or {}))
18 table.remove(timers, index)
21 mintime = math.min(mintime, timer.time)
29 local function add_timers()
30 for _, timer in ipairs(timers_to_add) do
31 table.insert(timers, timer)
37 core.register_globalstep(function(dtime)
39 -- abort if no timers are running
46 if delay < mintime then
53 function core.after(time, func, ...)
54 assert(tonumber(time) and type(func) == "function",
55 "Invalid core.after invocation")
58 timers_to_add = {{time=time+delay, func=func, args={...}}}
61 mintime = math.min(mintime, time)
62 timers_to_add = timers_to_add or {}
63 timers_to_add[#timers_to_add+1] = {time=time+delay, func=func, args={...}}
66 function core.check_player_privs(name, privs)
67 local player_privs = core.get_player_privs(name)
68 local missing_privileges = {}
69 for priv, val in pairs(privs) do
71 and not player_privs[priv] then
72 table.insert(missing_privileges, priv)
75 if #missing_privileges > 0 then
76 return false, missing_privileges
81 local player_list = {}
83 core.register_on_joinplayer(function(player)
84 player_list[player:get_player_name()] = player
87 core.register_on_leaveplayer(function(player)
88 player_list[player:get_player_name()] = nil
91 function core.get_connected_players()
93 for index, value in pairs(player_list) do
94 if value:is_player_connected() then
95 table.insert(temp_table, value)
101 function core.hash_node_position(pos)
102 return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768
105 function core.get_position_from_hash(hash)
107 pos.x = (hash%65536) - 32768
108 hash = math.floor(hash/65536)
109 pos.y = (hash%65536) - 32768
110 hash = math.floor(hash/65536)
111 pos.z = (hash%65536) - 32768
115 function core.get_item_group(name, group)
116 if not core.registered_items[name] or not
117 core.registered_items[name].groups[group] then
120 return core.registered_items[name].groups[group]
123 function core.get_node_group(name, group)
124 core.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead")
125 return core.get_item_group(name, group)
128 function core.setting_get_pos(name)
129 local value = core.setting_get(name)
133 return core.string_to_pos(value)
136 -- To be overriden by protection mods
137 function core.is_protected(pos, name)
141 function core.record_protection_violation(pos, name)
142 for _, func in pairs(core.registered_on_protection_violation) do
147 local raillike_ids = {}
148 local raillike_cur_id = 0
149 function core.raillike_group(name)
150 local id = raillike_ids[name]
152 raillike_cur_id = raillike_cur_id + 1
153 raillike_ids[name] = raillike_cur_id