--- /dev/null
+--remember to delete spawnpoint when bed removed
+
+local mod_storage = minetest.get_mod_storage()
+local time_night = {19500,4750}
+
+--node boxes are from mineclone2
+local function create_spawnpoint(pos,clicker)
+ local name = clicker:get_player_name()
+ local string_pos = minetest.pos_to_string(pos)
+ mod_storage:set_string(name, string_pos)
+ minetest.chat_send_player(name, "YOUR RESPAWN POINT HAS BEEN SET!")
+end
+
+--delete player spawnpoint if remove bed
+local function remove_spawnpoint(pos,clicker)
+ local name = clicker:get_player_name()
+ local string_pos = mod_storage:get_string(name)
+ if string_pos ~= "" then
+ local pos2 = minetest.string_to_pos(string_pos)
+ if vector.equals(pos,pos2) then
+ mod_storage:set_string(name, "")
+ minetest.chat_send_player(name, "YOUR RESPAWN POINT HAS BEEN REMOVED!")
+ end
+ end
+end
+
+--try to send the player to their bed
+minetest.register_on_respawnplayer(function(player)
+ local name = player:get_player_name()
+ local string_pos = mod_storage:get_string(name)
+ if string_pos ~= "" then
+ local pos = minetest.string_to_pos(string_pos)
+ player:setpos(pos)
+ return(true)
+ end
+end)
+--these are beds
+minetest.register_node("bed:bed", {
+ description = "Bed",
+ inventory_image = "bed.png",
+ wield_image = "bed.png",
+ paramtype2 = "facedir",
+ tiles = {"bed_top.png^[transform1","wood.png","bed_side.png","bed_side.png^[transform4","bed_front.png","nothing.png"},
+ groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1},
+ sounds = main.woodSound(),
+ drawtype = "nodebox",
+ node_placement_prediction = "",
+ on_construct = function(pos)
+
+ local param2 = minetest.get_node(pos).param2
+ local facedir = minetest.facedir_to_dir(param2)
+
+ --cancel if not air
+ if minetest.get_node(vector.add(pos,facedir)).name ~= "air" then
+ minetest.remove_node(pos)
+ local obj = minetest.add_item(pos, "bed:bed")
+ obj:get_luaentity().collection_timer = 2
+ return
+ end
+
+
+ facedir = vector.multiply(facedir,-1)
+ param2 = minetest.dir_to_facedir(facedir, false)
+
+
+ minetest.add_node(pos,{name="bed:bed_front", param2=param2})
+
+ facedir = vector.multiply(facedir,-1)
+ minetest.add_node(vector.add(pos,facedir),{name="bed:bed_back", param2=param2})
+ end,
+})
+
+minetest.register_node("bed:bed_front", {
+ description = "Bed",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"bed_top.png^[transform1","wood.png","bed_side.png","bed_side.png^[transform4","bed_front.png","nothing.png"},
+ groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1,bouncy=50},
+ sounds = main.woodSound(),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5},
+ {-0.5, -0.5, 0.5, -5/16, -5/16, 5/16},
+ {0.5, -0.5, 0.5, 5/16, -5/16, 5/16},
+ },
+ },
+ node_placement_prediction = "",
+ drop = "bed:bed",
+ on_dig = function(pos, node, digger)
+ local param2 = minetest.get_node(pos).param2
+ local facedir = minetest.facedir_to_dir(param2)
+ facedir = vector.multiply(facedir,-1)
+ local obj = minetest.add_item(pos, "bed:bed")
+ obj:get_luaentity().collection_timer = 2
+ minetest.remove_node(pos)
+ minetest.remove_node(vector.add(pos,facedir))
+ remove_spawnpoint(pos,digger)
+ remove_spawnpoint(vector.add(pos,facedir),digger)
+ end,
+ on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+ create_spawnpoint(pos,clicker)
+ end,
+})
+
+minetest.register_node("bed:bed_back", {
+ description = "Bed",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"bed_top_end.png^[transform1","wood.png","bed_side_end.png","bed_side_end.png^[transform4","nothing.png","bed_end.png"},
+ groups = {wood = 1, hard = 1, axe = 1, hand = 3, instant=1,bouncy=50},
+ sounds = main.woodSound(),
+ drawtype = "nodebox",
+ node_placement_prediction = "",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -5/16, -0.5, 0.5, 0.06, 0.5},
+ {-0.5, -0.5, -0.5, -5/16, -5/16, -5/16},
+ {0.5, -0.5, -0.5, 5/16, -5/16, -5/16},
+ },
+ },
+ drop = "bed:bed",
+ on_dig = function(pos, node, digger)
+ local param2 = minetest.get_node(pos).param2
+ local facedir = minetest.facedir_to_dir(param2)
+ local obj = minetest.add_item(pos, "bed:bed")
+ obj:get_luaentity().collection_timer = 2
+ minetest.remove_node(pos)
+ minetest.remove_node(vector.add(pos,facedir))
+ remove_spawnpoint(pos,digger)
+ remove_spawnpoint(vector.add(pos,facedir),digger)
+ end,
+ on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+ local param2 = minetest.get_node(pos).param2
+ local facedir = minetest.facedir_to_dir(param2)
+ create_spawnpoint(vector.add(pos,facedir),clicker)
+ end,
+})