|
| 1 | + |
| 2 | +local reverse = true |
| 3 | + |
| 4 | +local function destruct_bed(pos, n) |
| 5 | + local node = minetest.get_node(pos) |
| 6 | + local other |
| 7 | + |
| 8 | + if n == 2 then |
| 9 | + local dir = minetest.facedir_to_dir(node.param2) |
| 10 | + other = vector.subtract(pos, dir) |
| 11 | + elseif n == 1 then |
| 12 | + local dir = minetest.facedir_to_dir(node.param2) |
| 13 | + other = vector.add(pos, dir) |
| 14 | + end |
| 15 | + |
| 16 | + if reverse then |
| 17 | + reverse = not reverse |
| 18 | + minetest.remove_node(other) |
| 19 | + nodeupdate(other) |
| 20 | + else |
| 21 | + reverse = not reverse |
| 22 | + end |
| 23 | +end |
| 24 | + |
1 | 25 | function beds.register_bed(name, def)
|
2 | 26 | minetest.register_node(name .. "_bottom", {
|
3 | 27 | description = def.description,
|
@@ -39,14 +63,7 @@ function beds.register_bed(name, def)
|
39 | 63 | end,
|
40 | 64 |
|
41 | 65 | on_destruct = function(pos)
|
42 |
| - local n = minetest.get_node_or_nil(pos) |
43 |
| - if not n then return end |
44 |
| - local dir = minetest.facedir_to_dir(n.param2) |
45 |
| - local p = vector.add(pos, dir) |
46 |
| - local n2 = minetest.get_node(p) |
47 |
| - if minetest.get_item_group(n2.name, "bed") == 2 and n.param2 == n2.param2 then |
48 |
| - minetest.remove_node(p) |
49 |
| - end |
| 66 | + destruct_bed(pos, 1) |
50 | 67 | end,
|
51 | 68 |
|
52 | 69 | on_rightclick = function(pos, node, clicker)
|
@@ -95,10 +112,14 @@ function beds.register_bed(name, def)
|
95 | 112 | pointable = false,
|
96 | 113 | groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2},
|
97 | 114 | sounds = default.node_sound_wood_defaults(),
|
| 115 | + drop = name .. "_bottom", |
98 | 116 | node_box = {
|
99 | 117 | type = "fixed",
|
100 | 118 | fixed = def.nodebox.top,
|
101 | 119 | },
|
| 120 | + on_destruct = function(pos) |
| 121 | + destruct_bed(pos, 2) |
| 122 | + end, |
102 | 123 | })
|
103 | 124 |
|
104 | 125 | minetest.register_alias(name, name .. "_bottom")
|
|
0 commit comments