]> git.lizzy.rs Git - Crafter.git/blob - mods/bed/init.lua
testing
[Crafter.git] / mods / bed / init.lua
1 --remember to delete spawnpoint when bed removed
2
3 local mod_storage = minetest.get_mod_storage()
4 local time_night = {begin = 19000, ending = 5500}
5
6 --node boxes are from mineclone2
7 local function create_spawnpoint(pos,clicker)
8         local time = minetest.get_timeofday() * 24000
9         
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)
16         else
17                 minetest.chat_send_player(clicker:get_player_name(), "You can only sleep at night!")
18         end
19 end
20
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!")
30                 end
31         end
32 end
33
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)
40                 player:setpos(pos)
41                 return(true)
42         end
43 end)
44 --these are beds
45 minetest.register_node("bed:bed", {
46     description = "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(),
53     drawtype = "nodebox",
54         node_placement_prediction = "",
55         on_construct = function(pos)
56                 
57                 local param2 = minetest.get_node(pos).param2
58                 local facedir = minetest.facedir_to_dir(param2)
59                 
60                 --cancel if not air
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
65                         return
66                 end
67                 
68                 
69                 facedir = vector.multiply(facedir,-1)
70                 param2 = minetest.dir_to_facedir(facedir, false)
71                 
72                 
73                 minetest.add_node(pos,{name="bed:bed_front", param2=param2})
74                         
75                 facedir = vector.multiply(facedir,-1)
76                 minetest.add_node(vector.add(pos,facedir),{name="bed:bed_back", param2=param2})
77         end,
78 })
79
80 minetest.register_node("bed:bed_front", {
81     description = "Bed",
82     paramtype = "light",
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(),
87     drawtype = "nodebox",
88     node_box = {
89                 type = "fixed",
90                 fixed = {
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},
94                         },
95                 },
96         node_placement_prediction = "",
97         drop = "bed:bed",
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)
108         end,
109         on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
110                 create_spawnpoint(pos,clicker)
111         end,
112 })
113
114 minetest.register_node("bed:bed_back", {
115     description = "Bed",
116     paramtype = "light",
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 = "",
123     node_box = {
124                 type = "fixed",
125                 fixed = {
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},
129                         },
130                 },
131         drop = "bed:bed",
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)               
141         end,
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)
146         end,
147 })
148 minetest.register_craft({
149         output = "bed:bed",
150         recipe = {
151                 {"main:leaves", "main:leaves", "main:leaves"},
152                 {"main:wood", "main:wood", "main:wood"},
153         },
154 })