]> git.lizzy.rs Git - Crafter.git/blob - mods/bed/init.lua
Fix indentation of all files
[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 })