]> git.lizzy.rs Git - xdecor.git/blob - nodes.lua
8b97c803688caac9189d4b3f38aacd0310139a8a
[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, flammable=2},
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, flammable=2},
26         damage_per_second = 4,
27         selection_box = xdecor.nodebox.slab_y(0.5, 0)
28 })
29
30 xdecor.register("barrel", {
31         description = "Barrel",
32         inventory = {size=24},
33         infotext = "Barrel",
34         tiles = {"xdecor_barrel_top.png", "xdecor_barrel_sides.png"},
35         groups = {choppy=3, flammable=2},
36         sounds = xdecor.wood
37 })
38
39 xdecor.register("cabinet", {
40         description = "Cabinet",
41         inventory = {size=24},
42         infotext = "Cabinet",
43         groups = {choppy=3, flammable=2},
44         sounds = xdecor.wood,
45         tiles = {
46                 "default_wood.png", "default_wood.png",
47                 "default_wood.png", "default_wood.png",
48                 "default_wood.png", "xdecor_cabinet_front.png"
49         }
50 })
51
52 xdecor.register("cabinet_half", {
53         description = "Half Cabinet",
54         inventory = {size=8},
55         infotext = "Half Cabinet",
56         groups = {choppy=3, flammable=3},
57         sounds = xdecor.wood,
58         node_box = xdecor.nodebox.slab_y(0.5, 0.5),
59         tiles = {
60                 "default_wood.png", "default_wood.png",
61                 "default_wood.png", "default_wood.png",
62                 "default_wood.png", "xdecor_cabinet_half_front.png"
63         }
64 })
65
66 xdecor.register("candle", {
67         description = "Candle",
68         light_source = 12,
69         drawtype = "torchlike",
70         inventory_image = "xdecor_candle_inv.png",
71         wield_image = "xdecor_candle_inv.png",
72         paramtype2 = "wallmounted",
73         legacy_wallmounted = true,
74         walkable = false,
75         groups = {dig_immediate=3, attached_node=1},
76         tiles = {
77                 { name = "xdecor_candle_floor.png",
78                         animation = {type="vertical_frames", length=1.5} },
79                 { name = "xdecor_candle_wall.png",
80                         animation = {type="vertical_frames", length=1.5} }
81         },
82         selection_box = {
83                 type = "wallmounted",
84                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.1, 0.25},
85                 wall_side = {-0.5, -0.35, -0.15, -0.15, 0.4, 0.15}
86         }
87 })
88
89 xdecor.register("cardboard_box", {
90         description = "Cardboard Box",
91         inventory = {size=8},
92         infotext = "Cardboard Box",
93         groups = {snappy=3, flammable=3},
94         tiles = {"xdecor_cardbox_top.png", "xdecor_cardbox_top.png", 
95                 "xdecor_cardbox_sides.png"},
96         node_box = {
97                 type = "fixed",
98                 fixed = {
99                         {-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}
100                 }
101         }
102 })
103
104 xdecor.register("cauldron", {
105         description = "Cauldron",
106         groups = {cracky=1},
107         tiles = {
108                 { name = "xdecor_cauldron_top_anim.png",
109                         animation = {type="vertical_frames", length=3.0} },
110                 "xdecor_cauldron_sides.png"
111         }
112 })
113
114 if minetest.get_modpath("bucket") then
115         local original_bucket_on_use = minetest.registered_items["bucket:bucket_empty"].on_use
116         minetest.override_item("bucket:bucket_empty", {
117                 on_use = function(itemstack, user, pointed_thing)
118                         local inv = user:get_inventory()
119                         local player = user:get_player_name()
120
121                         if pointed_thing.type == "node" and
122                                         minetest.get_node(pointed_thing.under).name == "xdecor:cauldron" then
123                                 if inv:room_for_item("main", "bucket:bucket_water 1") then
124                                         itemstack:take_item()
125                                         inv:add_item("main", "bucket:bucket_water 1")
126                                 else
127                                         minetest.chat_send_player(player, "No enough room in your inventory.")
128                                 end
129                                 return itemstack
130                         else if original_bucket_on_use then
131                                 return original_bucket_on_use(itemstack, user, pointed_thing)
132                         else return end
133                 end
134         end
135         })
136 end
137
138 xdecor.register("chair", {
139         description = "Chair",
140         tiles = {"xdecor_wood.png"},
141         sounds = xdecor.wood,
142         groups = {choppy=3, flammable=2},
143         node_box = {
144                 type = "fixed",
145                 fixed = {
146                         {-0.3125, -0.5, 0.1875, -0.1875, 0.5, 0.3125},
147                         {0.1875, -0.5, 0.1875, 0.3125, 0.5, 0.3125},
148                         {-0.1875, 0.025, 0.22, 0.1875, 0.45, 0.28},
149                         {-0.3125, -0.5, -0.3125, -0.1875, -0.125, -0.1875},
150                         {0.1875, -0.5, -0.3125, 0.3125, -0.125, -0.1875},
151                         {-0.3125, -0.125, -0.3125, 0.3125, 0, 0.1875}
152                 }
153         }
154 })
155
156 xdecor.register("chandelier", {
157         description = "Chandelier",
158         drawtype = "plantlike",
159         walkable = false,
160         inventory_image = "xdecor_chandelier.png",
161         tiles = {"xdecor_chandelier.png"},
162         groups = {dig_immediate=3},
163         light_source = 14,
164         selection_box = xdecor.nodebox.slab_y(0.5, 0.5)
165 })
166
167 xdecor.register("coalstone_tile", {
168         drawtype = "normal",
169         description = "Coalstone Tile",
170         tiles = {"xdecor_coalstone_tile.png"},
171         groups = {cracky=2, stone=1},
172         sounds = xdecor.stone
173 })
174
175 xdecor.register("cobweb", {
176         description = "Cobweb",
177         drawtype = "plantlike",
178         tiles = {"xdecor_cobweb.png"},
179         inventory_image = "xdecor_cobweb.png",
180         liquid_viscosity = 8,
181         liquidtype = "source",
182         liquid_alternative_flowing = "xdecor:cobweb",
183         liquid_alternative_source = "xdecor:cobweb",
184         liquid_renewable = false,
185         liquid_range = 0,
186         walkable = false,
187         selection_box = {type = "regular"},
188         groups = {dig_immediate=3, liquid=3, flammable=3},
189         sounds = xdecor.leaves
190 })
191
192 local colors = {"red"} -- Add more curtains colors simply here.
193
194 for _, c in pairs(colors) do
195         xdecor.register("curtain_"..c, {
196                 description = "Curtain ("..c..")",
197                 use_texture_alpha = true,
198                 walkable = false,
199                 tiles = {"xdecor_curtain.png^[colorize:"..c..":130"},
200                 inventory_image = "xdecor_curtain_open.png^[colorize:"..c..":130",
201                 wield_image = "xdecor_curtain.png^[colorize:"..c..":130",
202                 drawtype = "signlike",
203                 paramtype2 = "wallmounted",
204                 groups = {dig_immediate=3, flammable=3},
205                 selection_box = {type="wallmounted"},
206                 on_rightclick = function(pos, node, clicker, itemstack)
207                         minetest.set_node(pos, {name="xdecor:curtain_open_"..c, param2=node.param2})
208                 end
209         })
210
211         xdecor.register("curtain_open_"..c, {
212                 tiles = {"xdecor_curtain_open.png^[colorize:"..c..":130"},
213                 drawtype = "signlike",
214                 paramtype2 = "wallmounted",
215                 use_texture_alpha = true,
216                 walkable = false,
217                 groups = {dig_immediate=3, flammable=3, not_in_creative_inventory=1},
218                 selection_box = {type="wallmounted"},
219                 drop = "xdecor:curtain_"..c,
220                 on_rightclick = function(pos, node, clicker, itemstack)
221                         minetest.set_node(pos, {name="xdecor:curtain_"..c, param2=node.param2})
222                 end
223         })
224
225         minetest.register_craft({
226                 output = "xdecor:curtain_"..c.." 4",
227                 recipe = {
228                         {"", "wool:"..c, ""},
229                         {"", "wool:"..c, ""}
230                 }
231         })
232 end
233
234 xdecor.register("cushion", {
235         description = "Cushion",
236         tiles = {"xdecor_cushion.png"},
237         groups = {snappy=3, flammable=3, fall_damage_add_percent=-50},
238         on_place = minetest.rotate_node,
239         node_box = xdecor.nodebox.slab_y(-0.5, 0.5)
240 })
241
242 local door_types = {"woodglass", "japanese"}
243
244 for _, d in pairs(door_types) do
245         doors.register_door("xdecor:"..d.."_door", {
246                 description = string.gsub(d, "%l", string.upper, 1).." Door",
247                 inventory_image = "xdecor_"..d.."_door_inv.png",
248                 groups = {choppy=3, flammable=2, door=1},
249                 tiles_bottom = {"xdecor_"..d.."_door_b.png", "xdecor_brown.png"},
250                 tiles_top = {"xdecor_"..d.."_door_a.png", "xdecor_brown.png"},
251                 sounds = xdecor.wood
252         })
253 end
254
255 xdecor.register("empty_shelf", {
256         description = "Empty Shelf",
257         inventory = {size=24},
258         infotext = "Empty Shelf",
259         tiles = {"default_wood.png", "xdecor_empty_shelf.png"},
260         groups = {choppy=3, flammable=2},
261         sounds = xdecor.wood
262 })
263
264 xdecor.register("enderchest", {
265         description = "Ender Chest",
266         tiles = {
267                 "xdecor_enderchest_top.png",
268                 "xdecor_enderchest_top.png",
269                 "xdecor_enderchest_side.png",
270                 "xdecor_enderchest_side.png",
271                 "xdecor_enderchest_side.png",
272                 "xdecor_enderchest_front.png"
273         },
274         groups = {cracky=2},
275         sounds = xdecor.stone,
276         on_construct = function(pos)
277                 local meta = minetest.get_meta(pos)
278                 meta:set_string("formspec",
279                                 "size[8,9]"..xdecor.fancy_gui..
280                                 "list[current_player;enderchest;0,0;8,4;]"..
281                                 "list[current_player;main;0,5;8,4;]")
282                 meta:set_string("infotext", "Ender Chest")
283         end
284 })
285
286 minetest.register_on_joinplayer(function(player)
287         local inv = player:get_inventory()
288         inv:set_size("enderchest", 8*4)
289 end)
290
291 local fence_sbox = {
292         type = "fixed",
293         fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}
294 }
295
296 xdecor.register("fence_wrought_iron", {
297         description = "Wrought Iron Fence",
298         drawtype = "fencelike",
299         groups = {cracky=2},
300         tiles = {"xdecor_wrought_iron.png"},
301         selection_box = fence_sbox,
302         inventory_image = "default_fence_overlay.png^xdecor_wrought_iron.png^default_fence_overlay.png^[makealpha:255,126,126"
303 })
304
305 xdecor.register("fire", {
306         description = "Fancy Fire",
307         light_source = 14,
308         walkable = false,
309         tiles = {
310                 { name = "xdecor_fire_anim.png",
311                 animation = {type="vertical_frames", length=1.5} }
312         },
313         drawtype = "plantlike",
314         damage_per_second = 2,
315         drop = "",
316         selection_box = {
317                 type = "fixed",
318                 fixed = {-1/3.5, -1/2, -1/3.5, 1/3.5, -1/2+2/16, 1/3.5}
319         },
320         groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
321 })
322
323 minetest.register_tool("xdecor:flint_steel", {
324         description = "Flint & Steel",
325         inventory_image = "xdecor_flint_steel.png",
326         tool_capabilities = {
327                 groupcaps = { igniter = {uses=65, maxlevel=1} }
328         },
329         on_use = function(itemstack, user, pointed_thing)
330                 local player = user:get_player_name()
331                 if pointed_thing.type == "node" and
332                                 minetest.get_node(pointed_thing.above).name == "air" then
333                         if not minetest.is_protected(pointed_thing.above, player) then
334                                 minetest.set_node(pointed_thing.above, {name="xdecor:fire"})
335                         else
336                                 minetest.chat_send_player(player, "This area is protected.")
337                         end
338                 else return end
339
340                 itemstack:add_wear(65535/65)
341                 return itemstack
342         end
343 })
344
345 minetest.register_tool("xdecor:hammer", {
346         description = "Hammer",
347         inventory_image = "xdecor_hammer.png"
348 })
349
350 xdecor.register("ivy", {
351         description = "Ivy",
352         drawtype = "signlike",
353         walkable = false,
354         climbable = true,
355         groups = {dig_immediate=3, flammable=2, plant=1},
356         paramtype2 = "wallmounted",
357         selection_box = {type="wallmounted"},
358         legacy_wallmounted = true,
359         tiles = {"xdecor_ivy.png"},
360         inventory_image = "xdecor_ivy.png",
361         wield_image = "xdecor_ivy.png",
362         sounds = xdecor.leaves
363 })
364
365 xdecor.register("lantern", {
366         description = "Lantern",
367         light_source = 12,
368         drawtype = "torchlike",
369         inventory_image = "xdecor_lantern_floor.png",
370         wield_image = "xdecor_lantern_floor.png", 
371         paramtype2 = "wallmounted",
372         legacy_wallmounted = true,
373         walkable = false,
374         groups = {dig_immediate=3, attached_node=1},
375         tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
376                 "xdecor_lantern.png"},
377         selection_box = {
378                 type = "wallmounted",
379                 wall_top = {-0.25, -0.4, -0.25, 0.25, 0.5, 0.25},
380                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25},
381                 wall_side = {-0.5, -0.5, -0.15, 0.5, 0.5, 0.15}
382         }
383 })
384
385 local flowerstype = { "dandelion_white", "dandelion_yellow", "geranium",
386                 "rose", "tulip", "viola" }
387
388 for _, f in pairs(flowerstype) do
389         xdecor.register("potted_"..f, {
390                 description = "Potted Flowers ("..f..")",
391                 walkable = false,
392                 groups = {dig_immediate=3, flammable=3, plant=1, flower=1},
393                 tiles = {"xdecor_"..f.."_pot.png"},
394                 inventory_image = "xdecor_"..f.."_pot.png",
395                 drawtype = "plantlike",
396                 sounds = xdecor.leaves,
397                 selection_box = xdecor.nodebox.slab_y(0.5, 0)
398         })
399
400         minetest.register_craft({
401                 output = "xdecor:potted_"..f.." 2",
402                 recipe = {
403                         {"flowers:"..f, "xdecor:plant_pot"}
404                 }
405         })
406 end
407
408 xdecor.register("painting", {
409         description = "Painting",
410         drawtype = "signlike",
411         tiles = {"xdecor_painting.png"},
412         inventory_image = "xdecor_painting.png",
413         paramtype2 = "wallmounted",
414         legacy_wallmounted = true,
415         walkable = false,
416         wield_image = "xdecor_painting.png",
417         selection_box = {type="wallmounted"},
418         groups = {dig_immediate=3, flammable=2, attached_node=1}
419 })
420
421 xdecor.register("plant_pot", {
422         description = "Plant Pot",
423         groups = {snappy=3},
424         tiles = {"xdecor_plant_pot_top.png", "xdecor_plant_pot_bottom.png",
425                 "xdecor_plant_pot_sides.png"}
426 })
427
428 xdecor.register("metal_cabinet", {
429         description = "Metal Cabinet",
430         inventory = {size=24},
431         groups = {cracky=2},
432         infotext = "Metal Cabinet",
433         tiles = {
434                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
435                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
436                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_front.png"
437         }
438 })
439
440 xdecor.register("moonbrick", {
441         drawtype = "normal",
442         description = "Moonbrick",
443         tiles = {"xdecor_moonbrick.png"},
444         groups = {cracky=2},
445         sounds = xdecor.stone
446 })
447
448 xdecor.register("multishelf", {
449         description = "Multi Shelf",
450         inventory = {size=24},
451         infotext = "Multi Shelf",
452         tiles = {"default_wood.png", "xdecor_multishelf.png"},
453         groups = {choppy=3, flammable=2},
454         sounds = xdecor.wood
455 })
456
457 xpanes.register_pane("rust_bar", {
458         description = "Rust Bars",
459         tiles = {"xdecor_rust_bars.png"},
460         drawtype = "airlike",
461         paramtype = "light",
462         sunlight_propagates = true,
463         textures = {"xdecor_rust_bars.png", "xdecor_rust_bars.png", 
464                         "xpanes_space.png"},
465         inventory_image = "xdecor_rust_bars.png",
466         wield_image = "xdecor_rust_bars.png",
467         groups = {snappy=2, pane=1},
468         recipe = {
469                 {"xpanes:bar", "default:dirt"}
470         }
471 })
472
473 xdecor.register("stereo", {
474         description = "Stereo",
475         groups = {snappy=2},
476         tiles = {
477                 "xdecor_stereo_top.png", "xdecor_stereo_bottom.png",
478                 "xdecor_stereo_left.png^[transformFX", "xdecor_stereo_left.png",
479                 "xdecor_stereo_back.png", "xdecor_stereo_front.png"
480         }
481 })
482
483 xdecor.register("stone_rune", {
484         description = "Stone Rune",
485         tiles = {"xdecor_stone_rune.png"},
486         drawtype = "normal",
487         groups = {cracky=2, stone=1},
488         sounds = xdecor.stone
489 })
490
491 xdecor.register("stonepath", {
492         description = "Garden Stone Path",
493         tiles = {"default_stone.png"},
494         groups = {snappy=3, stone=1},
495         sounds = xdecor.stone,
496         node_box = {
497                 type = "fixed",
498                 fixed = {
499                         {-0.4375, -0.5, 0.3125, -0.3125, -0.48, 0.4375},
500                         {-0.25, -0.5, 0.125, 0, -0.48, 0.375},
501                         {0.125, -0.5, 0.125, 0.4375, -0.48, 0.4375},
502                         {-0.4375, -0.5, -0.125, -0.25, -0.48, 0.0625},
503                         {-0.0625, -0.5, -0.25, 0.25, -0.48, 0.0625},
504                         {0.3125, -0.5, -0.25, 0.4375, -0.48, -0.125},
505                         {-0.3125, -0.5, -0.375, -0.125, -0.48, -0.1875},
506                         {0.125, -0.5, -0.4375, 0.25, -0.48, -0.3125}
507                 }
508         },
509         selection_box = {
510                 type = "fixed",
511                 fixed = {-0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375}
512         }
513 })
514
515 xdecor.register("stone_tile", {
516         description = "Stone Tile",
517         tiles = {"xdecor_stone_tile.png"},
518         drawtype = "normal",
519         groups = {cracky=2, stone=1},
520         sounds = xdecor.stone
521 })
522
523 xdecor.register("table", {
524         description = "Table",
525         tiles = {"xdecor_wood.png"},
526         groups = {choppy=3, flammable=2},
527         sounds = xdecor.wood,
528         node_box = {
529                 type = "fixed",
530                 fixed = {
531                         {-0.5, 0.4, -0.5, 0.5, 0.5, 0.5},
532                         {-0.15, -0.5, -0.15, 0.15, 0.4, 0.15}
533                 }
534         }
535 })
536
537 xdecor.register("tatami", {
538         description = "Tatami",
539         tiles = {"xdecor_tatami.png"},
540         wield_image = "xdecor_tatami.png",
541         groups = {snappy=3, flammable=2},
542         node_box = {
543                 type = "fixed",
544                 fixed = {
545                         {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
546                 }
547         }
548 })
549
550 xdecor.register("trash_can", {
551         description = "Trash Can",
552         tiles = {"xdecor_wood.png"},
553         groups = {choppy=3, flammable=2},
554         sounds = xdecor.wood,
555         node_box = {
556                 type = "fixed",
557                 fixed = {
558                         {-0.3125, -0.5, 0.3125, 0.3125, 0.5, 0.375},
559                         {0.3125, -0.5, -0.375, 0.375, 0.5, 0.375},
560                         {-0.3125, -0.5, -0.375, 0.3125, 0.5, -0.3125},
561                         {-0.375, -0.5, -0.375, -0.3125, 0.5, 0.375},
562                         {-0.3125, -0.5, -0.3125, 0.3125, -0.4375, 0.3125}
563                 }
564         },
565         collision_box = {
566                 type = "fixed",
567                 fixed = {
568                         {-0.375, -0.5, -0.375, 0.375, 0.19, 0.375}
569                 }
570         },
571         on_construct = function(pos)
572                 local meta = minetest.get_meta(pos)
573                 meta:set_string("infotext", "Trash Can - throw your waste here!")
574         end
575 })
576
577 -- Thanks to Evergreen for this code.
578 local old_on_step = minetest.registered_entities["__builtin:item"].on_step
579 minetest.registered_entities["__builtin:item"].on_step = function(self, dtime)
580         if minetest.get_node(self.object:getpos()).name == "xdecor:trash_can" then
581                 self.object:remove()
582                 return
583         end
584         old_on_step(self, dtime)
585 end
586
587 xdecor.register("tv", {
588         description = "Television",
589         light_source = 11,
590         groups = {snappy=2},
591         tiles = {
592                 "xdecor_television_left.png^[transformR270",
593                 "xdecor_television_left.png^[transformR90",
594                 "xdecor_television_left.png^[transformFX",
595                 "xdecor_television_left.png", "xdecor_television_back.png",
596                 { name = "xdecor_television_front_animated.png",
597                         animation = {type="vertical_frames", length=80.0} }
598         }
599 })
600
601 xdecor.register("woodframed_glass", {
602         description = "Wood Framed Glass",
603         drawtype = "glasslike_framed",
604         tiles = {"xdecor_framed_glass.png", "xdecor_framed_glass_detail.png"},
605         groups = {cracky=3},
606         sounds = xdecor.glass
607 })
608
609 xdecor.register("wood_tile", {
610         description = "Wood Tile",
611         tiles = {"xdecor_wood_tile.png"},
612         drawtype = "normal",
613         groups = {choppy=2, wood=1, flammable=2},
614         sounds = xdecor.wood
615 })