]> git.lizzy.rs Git - xdecor.git/blob - nodes.lua
Add new nodes and tweaks
[xdecor.git] / nodes.lua
1 xpanes.register_pane("bamboo_frame", {
2         description = "Bamboo Frame",
3         tiles = {"xdecor_bamboo_frame.png"},
4         drawtype = "airlike",
5         paramtype = "light",
6         sunlight_propagates = true,
7         textures = { "xdecor_bamboo_frame.png", "xdecor_bamboo_frame.png", 
8                         "xpanes_space.png" },
9         inventory_image = "xdecor_bamboo_frame.png",
10         wield_image = "xdecor_bamboo_frame.png",
11         groups = {snappy=3, pane=1},
12         recipe = {
13                 {"default:papyrus", "default:papyrus", "default:papyrus"},
14                 {"default:papyrus", "farming:cotton", "default:papyrus"},
15                 {"default:papyrus", "default:papyrus", "default:papyrus"}
16         }
17 })
18
19 xdecor.register("baricade", {
20         description = "Baricade",
21         drawtype = "plantlike",
22         walkable = false,
23         inventory_image = "xdecor_baricade.png",
24         tiles = {"xdecor_baricade.png"},
25         groups = {snappy=3},
26         damage_per_second = 4
27 })
28
29 xdecor.register("barrel", {
30         description = "Barrel",
31         inventory = {size=24},
32         infotext = "Barrel",
33         tiles = { "xdecor_barrel_top.png", "xdecor_barrel_sides.png" },
34         groups = {snappy=3},
35         sounds = xdecor.wood
36 })
37
38 xdecor.register("cabinet", {
39         description = "Cabinet",
40         inventory = {size=24},
41         infotext = "Cabinet",
42         groups = {snappy=3},
43         sounds = xdecor.wood,
44         tiles = {
45                 "default_wood.png", "default_wood.png",
46                 "default_wood.png", "default_wood.png",
47                 "default_wood.png","xdecor_cabinet_front.png"
48         }
49 })
50
51 xdecor.register("cabinet_half", {
52         description = "Half Cabinet",
53         inventory = {size=8},
54         infotext = "Half Cabinet",
55         groups = {snappy=3},
56         sounds = xdecor.wood,
57         node_box = xdecor.nodebox.slab_y(0.5, 0.5),
58         tiles = {
59                 "default_wood.png", "default_wood.png",
60                 "default_wood.png", "default_wood.png",
61                 "default_wood.png", "xdecor_cabinet_half_front.png"
62         }
63 })
64
65 xdecor.register("candle", {
66         description = "Candle",
67         light_source = 12,
68         drawtype = "torchlike",
69         inventory_image = "xdecor_candle_inv.png",
70         wield_image = "xdecor_candle_inv.png",
71         paramtype2 = "wallmounted",
72         legacy_wallmounted = true,
73         walkable = false,
74         groups = {dig_immediate=3, attached_node=1},
75         tiles = {
76                 { name = "xdecor_candle_floor.png",
77                         animation = {type="vertical_frames", length=1.5} },
78                 { name = "xdecor_candle_wall.png",
79                         animation = {type="vertical_frames", length=1.5} }
80         },
81         selection_box = {
82                 type = "wallmounted",
83                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.1, 0.25},
84                 wall_side = {-0.5, -0.35, -0.15, -0.15, 0.4, 0.15}
85         }
86 })
87
88 xdecor.register("cardboard_box", {
89         description = "Cardboard Box",
90         inventory = {size=8},
91         infotext = "Cardboard Box",
92         groups = {snappy=3},
93         tiles = { "xdecor_cardbox_top.png", "xdecor_cardbox_top.png", 
94                 "xdecor_cardbox_sides.png" },
95         node_box = {
96                 type = "fixed",
97                 fixed = {
98                         {-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}
99                 }
100         }
101 })
102
103 xdecor.register("cauldron", {
104         description = "Cauldron",
105         groups = {snappy=1},
106         tiles = {
107                 { name = "xdecor_cauldron_top_anim.png",
108                 animation = {type="vertical_frames", length=3.0} },
109                 "xdecor_cauldron_sides.png"
110         }
111 })
112
113 xdecor.register("chair", {
114         description = "Chair",
115         tiles = {"xdecor_wood.png"},
116         sounds = xdecor.wood,
117         groups = {snappy=3},
118         node_box = {
119                 type = "fixed",
120                 fixed = {
121                         {-0.3125, -0.5, 0.1875, -0.1875, 0.5, 0.3125},
122                         {0.1875, -0.5, 0.1875, 0.3125, 0.5, 0.3125},
123                         {-0.1875, 0.025, 0.22, 0.1875, 0.45, 0.28},
124                         {-0.3125, -0.5, -0.3125, -0.1875, -0.125, -0.1875},
125                         {0.1875, -0.5, -0.3125, 0.3125, -0.125, -0.1875},
126                         {-0.3125, -0.125, -0.3125, 0.3125, 0, 0.1875}
127                 }
128         }
129 })
130
131 xdecor.register("chandelier", {
132         description = "Chandelier",
133         drawtype = "plantlike",
134         walkable = false,
135         inventory_image = "xdecor_chandelier.png",
136         tiles = {"xdecor_chandelier.png"},
137         groups = {dig_immediate=3},
138         light_source = 14
139 })
140
141 xdecor.register("coalstone_tile", {
142         drawtype = "normal",
143         description = "Coalstone Tile",
144         tiles = {"xdecor_coalstone_tile.png"},
145         groups = {snappy=2},
146         sounds = xdecor.stone
147 })
148
149 local colors = {"red"} -- Add more curtains colors simply here
150
151 for _, c in ipairs(colors) do
152         xdecor.register("curtain_"..c, {
153                 description = "Curtain ("..c..")",
154                 use_texture_alpha = true,
155                 walkable = false,
156                 tiles = { "xdecor_curtain.png^[colorize:"..c..":130" },
157                 inventory_image = "xdecor_curtain_open.png^[colorize:"..c..":130",
158                 wield_image = "xdecor_curtain.png^[colorize:"..c..":130",
159                 drawtype = "signlike",
160                 paramtype2 = "wallmounted",
161                 groups = {dig_immediate=3},
162                 selection_box = {type="wallmounted"},
163                 on_rightclick = function(pos, node, clicker, itemstack)
164                         local fdir = node.param2
165                         minetest.set_node(pos, { name="xdecor:curtain_open_"..c, param2=fdir })
166                 end
167         })
168
169         xdecor.register("curtain_open_"..c, {
170                 tiles = { "xdecor_curtain_open.png^[colorize:"..c..":130" },
171                 drawtype = "signlike",
172                 paramtype2 = "wallmounted",
173                 use_texture_alpha = true,
174                 walkable = false,
175                 groups = {dig_immediate=3, not_in_creative_inventory=1},
176                 selection_box = {type="wallmounted"},
177                 drop = "xdecor:curtain_"..c,
178                 on_rightclick = function(pos, node, clicker, itemstack)
179                         local fdir = node.param2
180                         minetest.set_node(pos, { name="xdecor:curtain_"..c, param2=fdir })
181                 end
182         })
183
184         minetest.register_craft({
185                 output = "xdecor:curtain_"..c.." 4",
186                 recipe = {
187                         {"", "wool:"..c, ""},
188                         {"", "wool:"..c, ""},
189                         {"", "wool:"..c, ""}
190                 }
191         })
192 end
193
194 xdecor.register("cushion", {
195         description = "Cushion",
196         tiles = {"xdecor_cushion.png"},
197         groups = {snappy=3},
198         on_place = minetest.rotate_node,
199         node_box = xdecor.nodebox.slab_y(-0.5, 0.5)
200 })
201
202 local door_types = {"woodglass", "japanese"}
203
204 for _, d in pairs(door_types) do
205         doors.register_door("xdecor:"..d.."_door", {
206                 description = string.sub(string.upper(d), 0, 1)..
207                                 string.sub(d, 2).." Door",
208                 inventory_image = "xdecor_"..d.."_door_inv.png",
209                 groups = {snappy=3, door=1},
210                 tiles_bottom = {"xdecor_"..d.."_door_b.png", "xdecor_brown.png"},
211                 tiles_top = {"xdecor_"..d.."_door_a.png", "xdecor_brown.png"},
212                 sounds = xdecor.wood,
213         })
214 end
215
216 xdecor.register("empty_shelf", {
217         description = "Empty Shelf",
218         inventory = {size=24},
219         infotext = "Empty Shelf",
220         tiles = { "default_wood.png", "xdecor_empty_shelf.png" },
221         groups = {snappy=3},
222         sounds = xdecor.wood
223 })
224
225 local fence_sbox = {
226         type = "fixed",
227         fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}
228 }
229
230 xdecor.register("fence_wrought_iron", {
231         description = "Wrought Iron Fence",
232         drawtype = "fencelike",
233         groups = {snappy=2},
234         tiles = { "xdecor_wrought_iron.png" },
235         selection_box = fence_sbox,
236         inventory_image = "default_fence_overlay.png^xdecor_wrought_iron.png^default_fence_overlay.png^[makealpha:255,126,126"
237 })
238
239 xdecor.register("fire", {
240         description = "Fake Fire",
241         light_source = 14,
242         walkable = false,
243         tiles = {
244                 { name = "xdecor_fire_anim.png",
245                 animation = {type="vertical_frames", length=1.5} }
246         },
247         drawtype = "plantlike",
248         damage_per_second = 2,
249         drop = "",
250         groups = {dig_immediate=3, not_in_creative_inventory=1}
251 })
252
253 minetest.register_tool("xdecor:flint_steel", {
254         description = "Flint & Steel",
255         stack_max = 1, 
256         inventory_image = "xdecor_flint_steel.png",
257         tool_capabilities = {
258                 groupcaps = {
259                         flamable = {uses=65, maxlevel=1}
260                 }
261         },
262         on_use = function(itemstack, user, pointed_thing)
263                 if pointed_thing.type == "node"
264                  and minetest.get_node(pointed_thing.above).name == "air" then
265                         if not minetest.is_protected(pointed_thing.above, user:get_player_name()) then
266                                 minetest.set_node(pointed_thing.above, {name="xdecor:fire"})
267                         else
268                                 minetest.chat_send_player(user:get_player_name(), "This area is protected!")
269                         end
270                 else
271                         return
272                 end
273
274                 itemstack:add_wear(65535/65)
275                 return itemstack
276         end
277 })
278
279 xdecor.register("lantern", {
280         description = "Lantern",
281         light_source = 12,
282         drawtype = "torchlike",
283         inventory_image = "xdecor_lantern_floor.png",
284         wield_image = "xdecor_lantern_floor.png", 
285         paramtype2 = "wallmounted",
286         legacy_wallmounted = true,
287         walkable = false,
288         groups = {dig_immediate=3, attached_node=1},
289         tiles = { "xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
290                 "xdecor_lantern.png" },
291         selection_box = {
292                 type = "wallmounted",
293                 wall_top = {-0.25, -0.4, -0.25, 0.25, 0.5, 0.25},
294                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25},
295                 wall_side = {-0.5, -0.5, -0.15, 0.5, 0.5, 0.15}
296         }
297 })
298
299 local flowerstype = { "dandelion_white", "dandelion_yellow", "geranium",
300         "rose", "tulip", "viola" }
301
302 for _, f in ipairs(flowerstype) do
303         xdecor.register("potted_"..f, {
304                 description = "Potted Flowers ("..f..")",
305                 walkable = false,
306                 groups = {dig_immediate=3},
307                 tiles = {"xdecor_"..f.."_pot.png"},
308                 inventory_image = "xdecor_"..f.."_pot.png",
309                 drawtype = "plantlike",
310                 sounds = xdecor.leaves
311         })
312
313         minetest.register_craft({
314                 type = "shapeless", output = "xdecor:potted_"..f.." 2",
315                 recipe = { "flowers:"..f, "xdecor:plant_pot" } 
316         })
317 end
318
319 xdecor.register("painting", {
320         description = "Painting",
321         drawtype = "signlike",
322         tiles = {"xdecor_painting.png"},
323         inventory_image = "xdecor_painting.png",
324         paramtype2 = "wallmounted",
325         legacy_wallmounted = true,
326         walkable = false,
327         wield_image = "xdecor_painting.png",
328         selection_box = {type="wallmounted"},
329         groups = {dig_immediate=3, attached_node=1}
330 })
331
332 xdecor.register("plant_pot", {
333         description = "Plant Pot",
334         groups = {snappy=3},
335         tiles = {"xdecor_plant_pot_top.png", "xdecor_plant_pot_bottom.png",
336                 "xdecor_plant_pot_sides.png"}
337 })
338
339 xdecor.register("metal_cabinet", {
340         description = "Metal Cabinet",
341         inventory = {size=24},
342         groups = {snappy=1},
343         infotext = "Metal Cabinet",
344         tiles = {
345                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
346                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
347                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_front.png"
348         }
349 })
350
351 xdecor.register("moonbrick", {
352         drawtype = "normal",
353         description = "Moonbrick",
354         tiles = {"xdecor_moonbrick.png"},
355         groups = {snappy=2},
356         sounds = xdecor.stone
357 })
358
359 xdecor.register("multishelf", {
360         description = "Multi Shelf",
361         inventory = {size=24},
362         infotext = "Multi Shelf",
363         tiles = {"default_wood.png", "xdecor_multishelf.png"},
364         groups = {snappy=3},
365         sounds = xdecor.wood
366 })
367
368 local rope_sbox = {
369         type = "fixed",
370         fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
371 }
372
373 xdecor.register("rope", {
374         description = "Rope",
375         walkable = false,
376         climbable = true,
377         groups = {dig_immediate=3},
378         selection_box = rope_sbox,
379         tiles = {"xdecor_rope.png"},
380         inventory_image = "xdecor_rope_inv.png",
381         wield_image = "xdecor_rope_inv.png",
382         drawtype = "plantlike"
383 })
384
385 xdecor.register("stereo", {
386         description = "Stereo",
387         groups = {snappy=3},
388         tiles = {
389                 "xdecor_stereo_top.png", "xdecor_stereo_bottom.png",
390                 "xdecor_stereo_left.png^[transformFX", "xdecor_stereo_left.png",
391                 "xdecor_stereo_back.png", "xdecor_stereo_front.png"
392         }
393 })
394
395 xdecor.register("stone_rune", {
396         description = "Stone Rune",
397         tiles = {"xdecor_stone_rune.png"},
398         drawtype = "normal",
399         groups = {snappy=3},
400         sounds = xdecor.stone
401 })
402
403 xdecor.register("stonepath", {
404         description = "Garden Stone Path",
405         tiles = { "default_stone.png" },
406         groups = { snappy=3 },
407         sounds = xdecor.stone,
408         node_box = {
409                 type = "fixed",
410                 fixed = {
411                         {-0.4375, -0.5, 0.3125, -0.3125, -0.48, 0.4375},
412                         {-0.25, -0.5, 0.125, 0, -0.48, 0.375},
413                         {0.125, -0.5, 0.125, 0.4375, -0.48, 0.4375},
414                         {-0.4375, -0.5, -0.125, -0.25, -0.48, 0.0625},
415                         {-0.0625, -0.5, -0.25, 0.25, -0.48, 0.0625},
416                         {0.3125, -0.5, -0.25, 0.4375, -0.48, -0.125},
417                         {-0.3125, -0.5, -0.375, -0.125, -0.48, -0.1875},
418                         {0.125, -0.5, -0.4375, 0.25, -0.48, -0.3125}
419                 }
420         },
421         selection_box = {
422                 type = "fixed",
423                 fixed = { -0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375 }
424         }
425 })
426
427 xdecor.register("stone_tile", {
428         description = "Stone Tile",
429         tiles = {"xdecor_stone_tile.png"},
430         drawtype = "normal",
431         groups = {snappy=3},
432         sounds = xdecor.stone
433 })
434
435 xdecor.register("table", {
436         description = "Table",
437         tiles = {"xdecor_wood.png"},
438         groups = {snappy=3},
439         sounds = xdecor.wood,
440         node_box = {
441                 type = "fixed",
442                 fixed = {
443                         {-0.5, 0.4, -0.5, 0.5, 0.5, 0.5},
444                         {-0.15, -0.5, -0.15, 0.15, 0.4, 0.15}
445                 }
446         }
447 })
448
449 xdecor.register("tatami", {
450         description = "Tatami",
451         tiles = {"xdecor_tatami.png"},
452         groups = {snappy=3},
453         node_box = {
454                 type = "fixed",
455                 fixed = {
456                         {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
457                 }
458         }
459 })
460
461 xdecor.register("tv", {
462         description = "Television",
463         light_source = 11,
464         groups = {snappy=3},
465         tiles = {
466                 "xdecor_television_left.png^[transformR270",
467                 "xdecor_television_left.png^[transformR90",
468                 "xdecor_television_left.png^[transformFX",
469                 "xdecor_television_left.png", "xdecor_television_back.png",
470                 { name = "xdecor_television_front_animated.png",
471                         animation = {type="vertical_frames", length=80.0} }
472         }
473 })
474
475 xdecor.register("woodframed_glass", {
476         description = "Wood Framed Glass",
477         drawtype = "glasslike_framed",
478         tiles = { "xdecor_framed_glass.png", "xdecor_framed_glass_detail.png" },
479         groups = {snappy=3},
480         sounds = xdecor.glass
481 })
482
483 xdecor.register("wood_tile", {
484         description = "Wood Tile",
485         tiles = {"xdecor_wood_tile.png"},
486         drawtype = "normal",
487         groups = {snappy=2, wood=1},
488         sounds = xdecor.wood
489 })