1 local function top_face(pointed_thing)
2 if not pointed_thing then return end
3 return pointed_thing.above.y > pointed_thing.under.y
6 function xdecor.sit(pos, node, clicker, pointed_thing)
7 if not top_face(pointed_thing) then return end
8 local player_name = clicker:get_player_name()
9 local objs = minetest.get_objects_inside_radius(pos, 0.1)
10 local vel = clicker:get_player_velocity()
11 local ctrl = clicker:get_player_control()
13 for _, obj in pairs(objs) do
14 if obj:is_player() and obj:get_player_name() ~= player_name then
19 if default.player_attached[player_name] then
22 clicker:set_eye_offset(vector.new(), vector.new())
23 clicker:set_physics_override({speed = 1, jump = 1, gravity = 1})
24 default.player_attached[player_name] = false
25 default.player_set_animation(clicker, "stand", 30)
27 elseif not default.player_attached[player_name] and node.param2 <= 3 and
28 not ctrl.sneak and vector.equals(vel, vector.new()) then
30 clicker:set_eye_offset({x = 0, y = -7, z = 2}, vector.new())
31 clicker:set_physics_override({speed = 0, jump = 0, gravity = 1})
33 default.player_attached[player_name] = true
34 default.player_set_animation(clicker, "sit", 30)
36 if node.param2 == 0 then
37 clicker:set_look_yaw(3.15)
38 elseif node.param2 == 1 then
39 clicker:set_look_yaw(7.9)
40 elseif node.param2 == 2 then
41 clicker:set_look_yaw(6.28)
42 elseif node.param2 == 3 then
43 clicker:set_look_yaw(4.75)
48 function xdecor.sit_dig(pos, digger)
49 for _, player in pairs(minetest.get_objects_inside_radius(pos, 0.1)) do
50 if player:is_player() and
51 default.player_attached[player:get_player_name()] then