Add Lua-based `player:get_meta()` wrapper

master
luk3yx 2021-08-22 21:32:10 +12:00 committed by MoNTE48
parent 915c1edb2f
commit b112040114
2 changed files with 50 additions and 0 deletions

View File

@ -16,6 +16,7 @@ if core.settings:get_bool("profiler.load") then
profiler = dofile(scriptpath .. "profiler" .. DIR_DELIM .. "init.lua")
end
dofile(gamepath .. "player_meta.lua")
dofile(commonpath .. "after.lua")
dofile(gamepath .. "item_entity.lua")
dofile(gamepath .. "misc.lua")

View File

@ -0,0 +1,49 @@
local floor, tostring = math.floor, tostring
local getmetatable, setmetatable = getmetatable, setmetatable
local PlayerMetaRef = {}
function PlayerMetaRef:contains(key)
return self.player:get_attribute(key) ~= nil
end
function PlayerMetaRef:get(key)
return self.player:get_attribute(key)
end
function PlayerMetaRef:set_string(key, value)
if value == "" then
value = nil
end
self.player:set_attribute(key, value)
end
function PlayerMetaRef:get_string(key)
return self.player:get_attribute(key) or ""
end
function PlayerMetaRef:set_int(key, value)
self:set_float(key, floor(value))
end
function PlayerMetaRef:get_int(key)
return floor(self:get_float(key))
end
function PlayerMetaRef:set_float(key, value)
self.player:set_attribute(key, tostring(value))
end
function PlayerMetaRef:get_float(key)
return tonumber(self:get_string(key)) or 0
end
local mt = {__index = PlayerMetaRef}
local function get_player_meta(player)
return setmetatable({player = player}, mt)
end
minetest.register_on_joinplayer(function(player)
if not player.get_meta then
getmetatable(player).get_meta = get_player_meta
end
end)