1 -- Player state for public API
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
)
15 if minetest
.registered_nodes
[node
.name
] then
24 local get_player_nodes
= function(player_pos
)
25 local work_pos
= table.copy(player_pos
)
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
41 minetest
.register_globalstep(function(dtime
)
45 -- Run the rest of the code every 0.5 seconds
50 -- reset time for next check
51 -- FIXME: Make sure a regular check interval applies
55 for _
,player
in pairs(minetest
.get_connected_players()) do
57 local name
= player
:get_player_name()
60 local pos
= player
:get_pos()
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
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
] = {
81 node_stand_below
= "",
86 -- clear when player leaves
87 minetest
.register_on_leaveplayer(function(player
)
88 local name
= player
:get_player_name()
90 mcl_playerinfo
[name
] = nil