1 --remember to delete spawnpoint when bed removed
3 local mod_storage = minetest.get_mod_storage()
4 local time_night = {begin = 19000, ending = 5500}
6 --node boxes are from mineclone2
7 local function create_spawnpoint(pos,clicker)
8 local time = minetest.get_timeofday() * 24000
10 if time > time_night.begin or time < time_night.ending then
11 local name = clicker:get_player_name()
12 local string_pos = minetest.pos_to_string(pos)
13 mod_storage:set_string(name, string_pos)
14 minetest.chat_send_player(name, "Your respawn point has been set!")
15 minetest.set_timeofday(time_night.ending/24000)
17 minetest.chat_send_player(clicker:get_player_name(), "You can only sleep at night!")
21 --delete player spawnpoint if remove bed
22 local function remove_spawnpoint(pos,clicker)
23 local name = clicker:get_player_name()
24 local string_pos = mod_storage:get_string(name)
25 if string_pos ~= "" then
26 local pos2 = minetest.string_to_pos(string_pos)
27 if vector.equals(pos,pos2) then
28 mod_storage:set_string(name, "")
29 minetest.chat_send_player(name, "Your respawn point has been removed!")
34 --try to send the player to their bed
35 minetest.register_on_respawnplayer(function(player)
36 local name = player:get_player_name()
37 local string_pos = mod_storage:get_string(name)
38 if string_pos ~= "" then
39 local pos = minetest.string_to_pos(string_pos)
45 minetest.register_node("bed:bed", {
47 inventory_image = "bed.png",
48 wield_image = "bed.png",
49 paramtype2 = "facedir",
50 tiles = {"bed_top.png^[transform1","wood.png","bed_side.png","bed_side.png^[transform4","bed_front.png","nothing.png"},
51 groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1},
52 sounds = main.woodSound(),
54 node_placement_prediction = "",
55 on_construct = function(pos)
57 local param2 = minetest.get_node(pos).param2
58 local facedir = minetest.facedir_to_dir(param2)
61 if minetest.get_node(vector.add(pos,facedir)).name ~= "air" then
62 minetest.remove_node(pos)
63 local obj = minetest.add_item(pos, "bed:bed")
64 obj:get_luaentity().collection_timer = 2
69 facedir = vector.multiply(facedir,-1)
70 param2 = minetest.dir_to_facedir(facedir, false)
73 minetest.add_node(pos,{name="bed:bed_front", param2=param2})
75 facedir = vector.multiply(facedir,-1)
76 minetest.add_node(vector.add(pos,facedir),{name="bed:bed_back", param2=param2})
80 minetest.register_node("bed:bed_front", {
83 paramtype2 = "facedir",
84 tiles = {"bed_top.png^[transform1","wood.png","bed_side.png","bed_side.png^[transform4","bed_front.png","nothing.png"},
85 groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1,bouncy=50},
86 sounds = main.woodSound(),
91 {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5},
92 {-0.5, -0.5, 0.5, -5/16, -5/16, 5/16},
93 {0.5, -0.5, 0.5, 5/16, -5/16, 5/16},
96 node_placement_prediction = "",
98 on_dig = function(pos, node, digger)
99 local param2 = minetest.get_node(pos).param2
100 local facedir = minetest.facedir_to_dir(param2)
101 facedir = vector.multiply(facedir,-1)
102 local obj = minetest.add_item(pos, "bed:bed")
103 obj:get_luaentity().collection_timer = 2
104 minetest.remove_node(pos)
105 minetest.remove_node(vector.add(pos,facedir))
106 remove_spawnpoint(pos,digger)
107 remove_spawnpoint(vector.add(pos,facedir),digger)
109 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
110 create_spawnpoint(pos,clicker)
114 minetest.register_node("bed:bed_back", {
117 paramtype2 = "facedir",
118 tiles = {"bed_top_end.png^[transform1","wood.png","bed_side_end.png","bed_side_end.png^[transform4","nothing.png","bed_end.png"},
119 groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1,bouncy=50},
120 sounds = main.woodSound(),
121 drawtype = "nodebox",
122 node_placement_prediction = "",
126 {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5},
127 {-0.5, -0.5, -0.5, -5/16, -5/16, -5/16},
128 {0.5, -0.5, -0.5, 5/16, -5/16, -5/16},
132 on_dig = function(pos, node, digger)
133 local param2 = minetest.get_node(pos).param2
134 local facedir = minetest.facedir_to_dir(param2)
135 local obj = minetest.add_item(pos, "bed:bed")
136 obj:get_luaentity().collection_timer = 2
137 minetest.remove_node(pos)
138 minetest.remove_node(vector.add(pos,facedir))
139 remove_spawnpoint(pos,digger)
140 remove_spawnpoint(vector.add(pos,facedir),digger)
142 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
143 local param2 = minetest.get_node(pos).param2
144 local facedir = minetest.facedir_to_dir(param2)
145 create_spawnpoint(vector.add(pos,facedir),clicker)
148 minetest.register_craft({
151 {"main:leaves", "main:leaves", "main:leaves"},
152 {"main:wood", "main:wood", "main:wood"},