Replace getpos() with get_pos()
[MineClone/MineClone2.git] / mods / PLAYER / mcl_playerinfo / init.lua
blob31dad39a6fa23a25ba53fc08eadd97ca5e48bcb6
1 -- Player state for public API
2 mcl_playerinfo = {}
4 -- Get node but use fallback for nil or unknown
5 local function node_ok(pos, fallback)
7 fallback = fallback or "air"
9 local node = minetest.get_node_or_nil(pos)
11 if not node then
12 return fallback
13 end
15 if minetest.registered_nodes[node.name] then
16 return node.name
17 end
19 return fallback
20 end
22 local time = 0
24 local get_player_nodes = function(player_pos)
25 local work_pos = table.copy(player_pos)
27 -- what is around me?
28 work_pos.y = work_pos.y - 0.1 -- standing on
29 local node_stand = node_ok(work_pos)
30 local node_stand_below = node_ok({x=work_pos.x, y=work_pos.y-1, z=work_pos.z})
32 work_pos.y = work_pos.y + 1.5 -- head level
33 local node_head = node_ok(work_pos)
35 work_pos.y = work_pos.y - 1.2 -- feet level
36 local node_feet = node_ok(work_pos)
38 return node_stand, node_stand_below, node_head, node_feet
39 end
41 minetest.register_globalstep(function(dtime)
43 time = time + dtime
45 -- Run the rest of the code every 0.5 seconds
46 if time < 0.5 then
47 return
48 end
50 -- reset time for next check
51 -- FIXME: Make sure a regular check interval applies
52 time = 0
54 -- check players
55 for _,player in pairs(minetest.get_connected_players()) do
56 -- who am I?
57 local name = player:get_player_name()
59 -- where am I?
60 local pos = player:get_pos()
62 -- what is around me?
63 local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos)
64 mcl_playerinfo[name].node_stand = node_stand
65 mcl_playerinfo[name].node_stand_below = node_stand_below
66 mcl_playerinfo[name].node_head = node_head
67 mcl_playerinfo[name].node_feet = node_feet
69 end
71 end)
73 -- set to blank on join (for 3rd party mods)
74 minetest.register_on_joinplayer(function(player)
75 local name = player:get_player_name()
77 mcl_playerinfo[name] = {
78 node_head = "",
79 node_feet = "",
80 node_stand = "",
81 node_stand_below = "",
84 end)
86 -- clear when player leaves
87 minetest.register_on_leaveplayer(function(player)
88 local name = player:get_player_name()
90 mcl_playerinfo[name] = nil
91 end)