Add minetest.is_player (#7013)

* Add minetest.is_player

* First use for is_player
master
you 2018-02-05 15:17:10 +01:00 committed by Loïc Blot
parent b7ff40eea2
commit 87e08b1b3a
2 changed files with 16 additions and 7 deletions

View File

@ -5,12 +5,11 @@
-- --
function core.check_player_privs(name, ...) function core.check_player_privs(name, ...)
local arg_type = type(name) if core.is_player(name) then
if (arg_type == "userdata" or arg_type == "table") and
name.get_player_name then -- If it quacks like a Player...
name = name:get_player_name() name = name:get_player_name()
elseif arg_type ~= "string" then elseif type(name) ~= "string" then
error("Invalid core.check_player_privs argument type: " .. arg_type, 2) error("core.check_player_privs expects a player or playername as " ..
"argument.", 2)
end end
local requested_privs = {...} local requested_privs = {...}
@ -85,6 +84,15 @@ function core.get_connected_players()
end end
function core.is_player(player)
-- a table being a player is also supported because it quacks sufficiently
-- like a player if it has the is_player function
local t = type(player)
return (t == "userdata" or t == "table") and
type(player.is_player) == "function" and player:is_player()
end
function minetest.player_exists(name) function minetest.player_exists(name)
return minetest.get_auth_handler().get_auth(name) ~= nil return minetest.get_auth_handler().get_auth(name) ~= nil
end end

View File

@ -2753,9 +2753,9 @@ and `minetest.auth_reload` call the authentication handler.
* Set node on all positions set in the first argument. * Set node on all positions set in the first argument.
* e.g. `minetest.bulk_set_node({{x=0, y=1, z=1}, {x=1, y=2, z=2}}, {name="default:stone"})` * e.g. `minetest.bulk_set_node({{x=0, y=1, z=1}, {x=1, y=2, z=2}}, {name="default:stone"})`
* For node specification or position syntax see `minetest.set_node` call * For node specification or position syntax see `minetest.set_node` call
* Faster than set_node due to single call, but still considerably slower than * Faster than set_node due to single call, but still considerably slower than
Voxel Manipulators (LVM) for large numbers of nodes. Voxel Manipulators (LVM) for large numbers of nodes.
Unlike LVMs, this will call node callbacks. It also allows setting nodes in spread out Unlike LVMs, this will call node callbacks. It also allows setting nodes in spread out
positions which would cause LVMs to waste memory. positions which would cause LVMs to waste memory.
For setting a cube, this is 1.3x faster than set_node whereas LVM is 20x faster. For setting a cube, this is 1.3x faster than set_node whereas LVM is 20x faster.
* `minetest.swap_node(pos, node)` * `minetest.swap_node(pos, node)`
@ -3329,6 +3329,7 @@ These functions return the leftover itemstack.
### Misc. ### Misc.
* `minetest.get_connected_players()`: returns list of `ObjectRefs` * `minetest.get_connected_players()`: returns list of `ObjectRefs`
* `minetest.is_player(o)`: boolean, whether `o` is a player
* `minetest.player_exists(name)`: boolean, whether player exists (regardless of online status) * `minetest.player_exists(name)`: boolean, whether player exists (regardless of online status)
* `minetest.hud_replace_builtin(name, hud_definition)` * `minetest.hud_replace_builtin(name, hud_definition)`
* Replaces definition of a builtin hud element * Replaces definition of a builtin hud element