Aaron Suen be452b4d52 Finish base playerstep API
Now all that's needed is converting existing
mods for proof of concept.
2020-06-22 21:14:40 -04:00

45 lines
1.2 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local getmetatable, minetest, nodecore, pairs, type
= getmetatable, minetest, nodecore, pairs, type
-- LUALOCALS > ---------------------------------------------------------
local mismatch = nodecore.prop_mismatch
local old_set_props
local function set_properties_compare(obj, def)
if type(def) ~= "table" then return old_set_props(obj, def) end
local old = obj:get_properties()
if not old then return end
if type(def) == "function" then
def = def(old, obj)
end
local toset
for k, v in pairs(def) do
if mismatch(v, old[k]) then
toset = toset or {}
toset[k] = v
end
end
return toset and old_set_props(obj, toset)
end
local function tryhook()
for _, v in pairs(minetest.object_refs) do
local mt = v and getmetatable(v)
if mt and mt.set_properties then
old_set_props = mt.set_properties
mt.set_properties = set_properties_compare
return
end
end
return minetest.after(0, tryhook)
end
tryhook()
function nodecore.ent_prop_set(obj, def)
nodecore.log("warning", "nodecore.ent_prop_set() is now deprecated;"
.. " just use object:set_properties(), which has been patched")
return obj:set_properties(def)
end