1 local function pointed_face(pointed_thing)
2 return pointed_thing.above.y > pointed_thing.under.y -- Top face pointed.
5 local function sit(pos, node, clicker, pointed_thing)
6 if not pointed_face(pointed_thing) then return end
7 local player = clicker:get_player_name()
8 local objs = minetest.get_objects_inside_radius(pos, 0.1)
10 for _, p in pairs(objs) do
11 if p:get_player_name() ~= clicker:get_player_name() then
16 if default.player_attached[player] == true then
19 clicker:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0})
20 clicker:set_physics_override(1, 1, 1)
21 default.player_attached[player] = false
22 default.player_set_animation(clicker, "stand", 30)
24 elseif default.player_attached[player] ~= true and node.param2 <= 3 and
25 clicker:get_player_control().sneak == false and
26 clicker:get_player_velocity().x == 0 and
27 clicker:get_player_velocity().y == 0 and
28 clicker:get_player_velocity().z == 0 then
30 clicker:set_eye_offset({x=0, y=-7, z=2}, {x=0, y=0, z=0})
31 clicker:set_physics_override(0, 0, 0)
33 default.player_attached[player] = 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 local function dig(pos, player)
49 local pname = player:get_player_name()
50 local objs = minetest.get_objects_inside_radius(pos, 0.1)
52 for _, p in pairs(objs) do
53 if not player or not player:is_player() or p:get_player_name() ~= nil or
54 default.player_attached[pname] == true then
61 xdecor.register("chair", {
62 description = "Chair",
63 tiles = {"xdecor_wood.png"},
64 sounds = default.node_sound_wood_defaults(),
65 groups = {choppy=3, oddly_breakable_by_hand=2, flammable=3},
66 on_rotate = screwdriver.rotate_simple,
67 node_box = xdecor.pixelnodebox(16, {
69 {11, 0, 11, 2, 16, 2},
70 {5, 9, 11.5, 6, 6, 1},
76 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
77 pos.y = pos.y + 0 -- Sitting position.
78 sit(pos, node, clicker, pointed_thing)
82 xdecor.register("cushion", {
83 description = "Cushion",
84 tiles = {"xdecor_cushion.png"},
85 groups = {snappy=3, flammable=3, fall_damage_add_percent=-50},
86 on_place = minetest.rotate_node,
87 node_box = xdecor.nodebox.slab_y(0.5),
89 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
91 sit(pos, node, clicker, pointed_thing)
93 local wield_item = clicker:get_wielded_item():get_name()
94 if wield_item == "xdecor:cushion" and clicker:get_player_control().sneak then
95 local player_name = clicker:get_player_name()
96 if minetest.is_protected(pos, player_name) then
97 minetest.record_protection_violation(pos, player_name)
101 if pointed_face(pointed_thing) then
102 minetest.set_node(pos, {name="xdecor:cushion_block", param2=node.param2})
105 if not minetest.setting_getbool("creative_mode") then
106 itemstack:take_item()