]> git.lizzy.rs Git - xdecor.git/blob - nodes.lua
Tweak ABMs and flint use
[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         textures = {"xdecor_bamboo_frame.png", "xdecor_bamboo_frame.png", 
7                         "xpanes_space.png"},
8         inventory_image = "xdecor_bamboo_frame.png",
9         wield_image = "xdecor_bamboo_frame.png",
10         groups = {snappy=3, pane=1, flammable=2},
11         recipe = {
12                 {"default:papyrus", "default:papyrus", "default:papyrus"},
13                 {"default:papyrus", "farming:cotton", "default:papyrus"},
14                 {"default:papyrus", "default:papyrus", "default:papyrus"}
15         }
16 })
17
18 xdecor.register("baricade", {
19         description = "Baricade",
20         drawtype = "plantlike",
21         walkable = false,
22         inventory_image = "xdecor_baricade.png",
23         tiles = {"xdecor_baricade.png"},
24         groups = {snappy=3, flammable=2},
25         damage_per_second = 4,
26         selection_box = xdecor.nodebox.slab_y(0.5, 0)
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 = {choppy=3, flammable=2},
35         sounds = xdecor.wood
36 })
37
38 xdecor.register("cabinet", {
39         description = "Cabinet",
40         inventory = {size=24},
41         infotext = "Cabinet",
42         groups = {choppy=3, flammable=2},
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 = {choppy=3, flammable=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         sunlight_propagates = true,
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         sunlight_propagates = true,
144         node_box = {
145                 type = "fixed",
146                 fixed = {
147                         {-0.3125, -0.5, 0.1875, -0.1875, 0.5, 0.3125},
148                         {0.1875, -0.5, 0.1875, 0.3125, 0.5, 0.3125},
149                         {-0.1875, 0.025, 0.22, 0.1875, 0.45, 0.28},
150                         {-0.3125, -0.5, -0.3125, -0.1875, -0.125, -0.1875},
151                         {0.1875, -0.5, -0.3125, 0.3125, -0.125, -0.1875},
152                         {-0.3125, -0.125, -0.3125, 0.3125, 0, 0.1875}
153                 }
154         }
155 })
156
157 xdecor.register("chandelier", {
158         description = "Chandelier",
159         drawtype = "plantlike",
160         walkable = false,
161         inventory_image = "xdecor_chandelier.png",
162         tiles = {"xdecor_chandelier.png"},
163         groups = {dig_immediate=3},
164         light_source = 14,
165         selection_box = xdecor.nodebox.slab_y(0.5, 0.5)
166 })
167
168 xdecor.register("coalstone_tile", {
169         drawtype = "normal",
170         description = "Coalstone Tile",
171         tiles = {"xdecor_coalstone_tile.png"},
172         groups = {cracky=2, stone=1},
173         sounds = xdecor.stone
174 })
175
176 xdecor.register("cobweb", {
177         description = "Cobweb",
178         drawtype = "plantlike",
179         tiles = {"xdecor_cobweb.png"},
180         inventory_image = "xdecor_cobweb.png",
181         liquid_viscosity = 8,
182         liquidtype = "source",
183         liquid_alternative_flowing = "xdecor:cobweb",
184         liquid_alternative_source = "xdecor:cobweb",
185         liquid_renewable = false,
186         liquid_range = 0,
187         walkable = false,
188         selection_box = {type = "regular"},
189         groups = {dig_immediate=3, liquid=3, flammable=3},
190         sounds = xdecor.leaves
191 })
192
193 local colors = {"red"} -- Add more curtains colors simply here.
194
195 for _, c in pairs(colors) do
196         xdecor.register("curtain_"..c, {
197                 description = "Curtain ("..c..")",
198                 use_texture_alpha = true,
199                 walkable = false,
200                 tiles = {"xdecor_curtain.png^[colorize:"..c..":130"},
201                 inventory_image = "xdecor_curtain_open.png^[colorize:"..c..":130",
202                 wield_image = "xdecor_curtain.png^[colorize:"..c..":130",
203                 drawtype = "signlike",
204                 paramtype2 = "wallmounted",
205                 groups = {dig_immediate=3, flammable=3},
206                 selection_box = {type="wallmounted"},
207                 on_rightclick = function(pos, node, clicker, itemstack)
208                         minetest.set_node(pos, {name="xdecor:curtain_open_"..c, param2=node.param2})
209                 end
210         })
211
212         xdecor.register("curtain_open_"..c, {
213                 tiles = {"xdecor_curtain_open.png^[colorize:"..c..":130"},
214                 drawtype = "signlike",
215                 paramtype2 = "wallmounted",
216                 use_texture_alpha = true,
217                 walkable = false,
218                 groups = {dig_immediate=3, flammable=3, not_in_creative_inventory=1},
219                 selection_box = {type="wallmounted"},
220                 drop = "xdecor:curtain_"..c,
221                 on_rightclick = function(pos, node, clicker, itemstack)
222                         minetest.set_node(pos, {name="xdecor:curtain_"..c, param2=node.param2})
223                 end
224         })
225
226         minetest.register_craft({
227                 output = "xdecor:curtain_"..c.." 4",
228                 recipe = {
229                         {"", "wool:"..c, ""},
230                         {"", "wool:"..c, ""}
231                 }
232         })
233 end
234
235 xdecor.register("cushion", {
236         description = "Cushion",
237         tiles = {"xdecor_cushion.png"},
238         groups = {snappy=3, flammable=3, fall_damage_add_percent=-50},
239         on_place = minetest.rotate_node,
240         node_box = xdecor.nodebox.slab_y(-0.5, 0.5)
241 })
242
243 local door_types = {"woodglass", "japanese"}
244
245 for _, d in pairs(door_types) do
246         doors.register_door("xdecor:"..d.."_door", {
247                 description = d:gsub("%l", string.upper, 1).." Door",
248                 inventory_image = "xdecor_"..d.."_door_inv.png",
249                 groups = {choppy=3, flammable=2, door=1},
250                 tiles_bottom = {"xdecor_"..d.."_door_b.png", "xdecor_brown.png"},
251                 tiles_top = {"xdecor_"..d.."_door_a.png", "xdecor_brown.png"},
252                 sounds = xdecor.wood
253         })
254 end
255
256 xdecor.register("empty_shelf", {
257         description = "Empty Shelf",
258         inventory = {size=24},
259         infotext = "Empty Shelf",
260         tiles = {"default_wood.png", "xdecor_empty_shelf.png"},
261         groups = {choppy=3, flammable=2},
262         sounds = xdecor.wood
263 })
264
265 xdecor.register("enderchest", {
266         description = "Ender Chest",
267         tiles = {
268                 "xdecor_enderchest_top.png",
269                 "xdecor_enderchest_top.png",
270                 "xdecor_enderchest_side.png",
271                 "xdecor_enderchest_side.png",
272                 "xdecor_enderchest_side.png",
273                 "xdecor_enderchest_front.png"
274         },
275         groups = {cracky=2},
276         sounds = xdecor.stone,
277         on_construct = function(pos)
278                 local meta = minetest.get_meta(pos)
279                 meta:set_string("formspec",
280                                 "size[8,9]"..xdecor.fancy_gui..
281                                 "list[current_player;enderchest;0,0;8,4;]"..
282                                 "list[current_player;main;0,5;8,4;]")
283                 meta:set_string("infotext", "Ender Chest")
284         end
285 })
286
287 minetest.register_on_joinplayer(function(player)
288         local inv = player:get_inventory()
289         inv:set_size("enderchest", 8*4)
290 end)
291
292 xdecor.register("fence_wrought_iron", {
293         description = "Wrought Iron Fence",
294         drawtype = "fencelike",
295         groups = {cracky=2},
296         tiles = {"xdecor_wrought_iron.png"},
297         selection_box = {
298                 type = "fixed",
299                 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}
300         },
301         inventory_image = "default_fence_overlay.png^xdecor_wrought_iron.png^default_fence_overlay.png^[makealpha:255,126,126"
302 })
303
304 xdecor.register("fire", {
305         description = "Fancy Fire",
306         drawtype = "plantlike",
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         damage_per_second = 2,
314         drop = "",
315         selection_box = {
316                 type = "fixed",
317                 fixed = {-1/3.5, -1/2, -1/3.5, 1/3.5, -1/2+2/16, 1/3.5}
318         },
319         groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
320 })
321
322 minetest.register_tool("xdecor:flint_steel", {
323         description = "Flint & Steel",
324         inventory_image = "xdecor_flint_steel.png",
325         tool_capabilities = {
326                 groupcaps = { igniter = {uses=10, maxlevel=1} }
327         },
328         on_use = function(itemstack, user, pointed_thing)
329                 local player = user:get_player_name()
330                 if pointed_thing.type == "node" and
331                                 minetest.get_node(pointed_thing.above).name == "air" then
332                         if not minetest.is_protected(pointed_thing.above, player) then
333                                 minetest.set_node(pointed_thing.above, {name="xdecor:fire"})
334                         else
335                                 minetest.chat_send_player(player, "This area is protected.")
336                         end
337                 else return end
338
339                 itemstack:add_wear(1000)
340                 return itemstack
341         end
342 })
343
344 minetest.register_tool("xdecor:hammer", {
345         description = "Hammer",
346         inventory_image = "xdecor_hammer.png"
347 })
348
349 xdecor.register("ivy", {
350         description = "Ivy",
351         drawtype = "signlike",
352         walkable = false,
353         climbable = true,
354         groups = {dig_immediate=3, flammable=2, plant=1},
355         paramtype2 = "wallmounted",
356         selection_box = {type="wallmounted"},
357         legacy_wallmounted = true,
358         tiles = {"xdecor_ivy.png"},
359         inventory_image = "xdecor_ivy.png",
360         wield_image = "xdecor_ivy.png",
361         sounds = xdecor.leaves
362 })
363
364 xdecor.register("lantern", {
365         description = "Lantern",
366         light_source = 12,
367         drawtype = "torchlike",
368         inventory_image = "xdecor_lantern_floor.png",
369         wield_image = "xdecor_lantern_floor.png", 
370         paramtype2 = "wallmounted",
371         legacy_wallmounted = true,
372         walkable = false,
373         groups = {dig_immediate=3, attached_node=1},
374         tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
375                 "xdecor_lantern.png"},
376         selection_box = {
377                 type = "wallmounted",
378                 wall_top = {-0.25, -0.4, -0.25, 0.25, 0.5, 0.25},
379                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25},
380                 wall_side = {-0.5, -0.5, -0.15, 0.5, 0.5, 0.15}
381         }
382 })
383
384 local flowerstype = { "dandelion_white", "dandelion_yellow", "geranium",
385                 "rose", "tulip", "viola" }
386
387 for _, f in pairs(flowerstype) do
388         xdecor.register("potted_"..f, {
389                 description = "Potted Flowers ("..f..")",
390                 walkable = false,
391                 groups = {dig_immediate=3, flammable=3, plant=1, flower=1},
392                 tiles = {"xdecor_"..f.."_pot.png"},
393                 inventory_image = "xdecor_"..f.."_pot.png",
394                 drawtype = "plantlike",
395                 sounds = xdecor.leaves,
396                 selection_box = xdecor.nodebox.slab_y(0.5, 0)
397         })
398
399         minetest.register_craft({
400                 output = "xdecor:potted_"..f.." 2",
401                 recipe = {
402                         {"flowers:"..f, "xdecor:plant_pot"}
403                 }
404         })
405 end
406
407 xdecor.register("painting", {
408         description = "Painting",
409         drawtype = "signlike",
410         tiles = {"xdecor_painting.png"},
411         inventory_image = "xdecor_painting.png",
412         paramtype2 = "wallmounted",
413         legacy_wallmounted = true,
414         walkable = false,
415         wield_image = "xdecor_painting.png",
416         selection_box = {type="wallmounted"},
417         groups = {dig_immediate=3, flammable=2, attached_node=1}
418 })
419
420 xdecor.register("plant_pot", {
421         description = "Plant Pot",
422         groups = {snappy=3},
423         tiles = {"xdecor_plant_pot_top.png", "xdecor_plant_pot_bottom.png",
424                 "xdecor_plant_pot_sides.png"}
425 })
426
427 xdecor.register("metal_cabinet", {
428         description = "Metal Cabinet",
429         inventory = {size=24},
430         groups = {cracky=2},
431         infotext = "Metal Cabinet",
432         tiles = {
433                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
434                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_sides.png",
435                 "xdecor_metal_cabinet_sides.png", "xdecor_metal_cabinet_front.png"
436         }
437 })
438
439 xdecor.register("moonbrick", {
440         drawtype = "normal",
441         description = "Moonbrick",
442         tiles = {"xdecor_moonbrick.png"},
443         groups = {cracky=2},
444         sounds = xdecor.stone
445 })
446
447 xdecor.register("multishelf", {
448         description = "Multi Shelf",
449         inventory = {size=24},
450         infotext = "Multi Shelf",
451         tiles = {"default_wood.png", "xdecor_multishelf.png"},
452         groups = {choppy=3, flammable=2},
453         sounds = xdecor.wood
454 })
455
456 xpanes.register_pane("rust_bar", {
457         description = "Rust Bars",
458         tiles = {"xdecor_rust_bars.png"},
459         drawtype = "airlike",
460         paramtype = "light",
461         textures = {"xdecor_rust_bars.png", "xdecor_rust_bars.png", 
462                         "xpanes_space.png"},
463         inventory_image = "xdecor_rust_bars.png",
464         wield_image = "xdecor_rust_bars.png",
465         groups = {snappy=2, pane=1},
466         recipe = {
467                 {"xpanes:bar", "default:dirt"}
468         }
469 })
470
471 xdecor.register("stereo", {
472         description = "Stereo",
473         groups = {snappy=2},
474         tiles = {
475                 "xdecor_stereo_top.png", "xdecor_stereo_bottom.png",
476                 "xdecor_stereo_left.png^[transformFX", "xdecor_stereo_left.png",
477                 "xdecor_stereo_back.png", "xdecor_stereo_front.png"
478         }
479 })
480
481 xdecor.register("stone_rune", {
482         description = "Stone Rune",
483         tiles = {"xdecor_stone_rune.png"},
484         drawtype = "normal",
485         groups = {cracky=2, stone=1},
486         sounds = xdecor.stone
487 })
488
489 xdecor.register("stonepath", {
490         description = "Garden Stone Path",
491         tiles = {"default_stone.png"},
492         groups = {snappy=3, stone=1},
493         sounds = xdecor.stone,
494         sunlight_propagates = true,
495         node_box = {
496                 type = "fixed",
497                 fixed = {
498                         {-0.4375, -0.5, 0.3125, -0.3125, -0.48, 0.4375},
499                         {-0.25, -0.5, 0.125, 0, -0.48, 0.375},
500                         {0.125, -0.5, 0.125, 0.4375, -0.48, 0.4375},
501                         {-0.4375, -0.5, -0.125, -0.25, -0.48, 0.0625},
502                         {-0.0625, -0.5, -0.25, 0.25, -0.48, 0.0625},
503                         {0.3125, -0.5, -0.25, 0.4375, -0.48, -0.125},
504                         {-0.3125, -0.5, -0.375, -0.125, -0.48, -0.1875},
505                         {0.125, -0.5, -0.4375, 0.25, -0.48, -0.3125}
506                 }
507         },
508         selection_box = {
509                 type = "fixed",
510                 fixed = {-0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375}
511         }
512 })
513
514 xdecor.register("stone_tile", {
515         description = "Stone Tile",
516         tiles = {"xdecor_stone_tile.png"},
517         drawtype = "normal",
518         groups = {cracky=2, stone=1},
519         sounds = xdecor.stone
520 })
521
522 xdecor.register("table", {
523         description = "Table",
524         tiles = {"xdecor_wood.png"},
525         groups = {choppy=3, flammable=2},
526         sounds = xdecor.wood,
527         node_box = {
528                 type = "fixed",
529                 fixed = {
530                         {-0.5, 0.4, -0.5, 0.5, 0.5, 0.5},
531                         {-0.15, -0.5, -0.15, 0.15, 0.4, 0.15}
532                 }
533         }
534 })
535
536 xdecor.register("tatami", {
537         description = "Tatami",
538         tiles = {"xdecor_tatami.png"},
539         wield_image = "xdecor_tatami.png",
540         groups = {snappy=3, flammable=2},
541         node_box = {
542                 type = "fixed",
543                 fixed = {
544                         {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
545                 }
546         }
547 })
548
549 xdecor.register("trash_can", {
550         description = "Trash Can",
551         tiles = {"xdecor_wood.png"},
552         groups = {choppy=3, flammable=2},
553         sunlight_propagates = true,
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 })