]> git.lizzy.rs Git - xdecor.git/blob - nodes.lua
59f2efe5598b8dd55613d21bd07529f4431185ff
[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", "xpanes_space.png"},
7         inventory_image = "xdecor_bamboo_frame.png",
8         wield_image = "xdecor_bamboo_frame.png",
9         groups = {snappy=3, pane=1, flammable=2},
10         recipe = {
11                 {"default:papyrus", "default:papyrus", "default:papyrus"},
12                 {"default:papyrus", "farming:cotton", "default:papyrus"},
13                 {"default:papyrus", "default:papyrus", "default:papyrus"}
14         }
15 })
16
17 xdecor.register("baricade", {
18         description = "Baricade",
19         drawtype = "plantlike",
20         walkable = false,
21         inventory_image = "xdecor_baricade.png",
22         tiles = {"xdecor_baricade.png"},
23         groups = {snappy=3, flammable=3},
24         damage_per_second = 4,
25         selection_box = xdecor.nodebox.slab_y(0.3)
26 })
27
28 xdecor.register("barrel", {
29         description = "Barrel",
30         inventory = {size=24},
31         infotext = "Barrel",
32         tiles = {"xdecor_barrel_top.png", "xdecor_barrel_sides.png"},
33         groups = {choppy=3, flammable=3},
34         sounds = default.node_sound_wood_defaults()
35 })
36
37 xdecor.register("cabinet", {
38         description = "Wood Cabinet",
39         inventory = {size=24},
40         infotext = "Wood Cabinet",
41         groups = {choppy=3, flammable=3},
42         sounds = default.node_sound_wood_defaults(),
43         tiles = {
44                 "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
45                 "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
46                 "xdecor_cabinet_sides.png", "xdecor_cabinet_front.png"
47         }
48 })
49
50 xdecor.register("cabinet_half", {
51         description = "Half Wood Cabinet",
52         inventory = {size=8},
53         infotext = "Half Wood Cabinet",
54         groups = {choppy=3, flammable=3},
55         sounds = default.node_sound_wood_defaults(),
56         node_box = xdecor.nodebox.slab_y(0.5, 0.5),
57         tiles = {
58                 "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
59                 "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_sides.png",
60                 "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_front.png"
61         }
62 })
63
64 xdecor.register("candle", {
65         description = "Candle",
66         light_source = 12,
67         drawtype = "torchlike",
68         inventory_image = "xdecor_candle_inv.png",
69         wield_image = "xdecor_candle_wield.png",
70         paramtype2 = "wallmounted",
71         legacy_wallmounted = true,
72         walkable = false,
73         groups = {dig_immediate=3, attached_node=1},
74         tiles = {
75                 { name = "xdecor_candle_floor.png",
76                         animation = {type="vertical_frames", length=1.5} },
77                 { name = "xdecor_candle_ceiling.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", fixed = {{-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}}
98         }
99 })
100
101 xdecor.register("cauldron", {
102         description = "Cauldron",
103         groups = {cracky=2},
104         tiles = {
105                 { name = "xdecor_cauldron_top_anim.png",
106                         animation = {type="vertical_frames", length=3.0} },
107                 "xdecor_cauldron_sides.png"
108         }
109 })
110
111 if minetest.get_modpath("bucket") then
112         local original_bucket_on_use = minetest.registered_items["bucket:bucket_empty"].on_use
113         minetest.override_item("bucket:bucket_empty", {
114                 on_use = function(itemstack, user, pointed_thing)
115                         local inv = user:get_inventory()
116                         if pointed_thing.type == "node" and minetest.get_node(pointed_thing.under).name == "xdecor:cauldron" then
117                                 if inv:room_for_item("main", "bucket:bucket_water 1") then
118                                         itemstack:take_item()
119                                         inv:add_item("main", "bucket:bucket_water 1")
120                                 else
121                                         minetest.chat_send_player(user:get_player_name(), "No room in your inventory to add a filled bucket!")
122                                 end
123                                 return itemstack
124                         else if original_bucket_on_use then
125                                 return original_bucket_on_use(itemstack, user, pointed_thing)
126                         else return end
127                 end
128         end
129         })
130 end
131
132 xpanes.register_pane("chainlink", {
133         description = "Chain Link",
134         tiles = {"xdecor_chainlink.png"},
135         drawtype = "airlike",
136         paramtype = "light",
137         textures = {"xdecor_chainlink.png", "xdecor_chainlink.png", "xpanes_space.png"},
138         inventory_image = "xdecor_chainlink.png",
139         wield_image = "xdecor_chainlink.png",
140         groups = {snappy=3, pane=1},
141         recipe = {
142                 {"default:steel_ingot", "", "default:steel_ingot"},
143                 {"", "default:steel_ingot", ""},
144                 {"default:steel_ingot", "", "default:steel_ingot"}
145         }
146 })
147
148 xdecor.register("chair", {
149         description = "Chair",
150         tiles = {"xdecor_wood.png"},
151         sounds = default.node_sound_wood_defaults(),
152         groups = {choppy=3, flammable=3},
153         node_box = {
154                 type = "fixed",
155                 fixed = {{-0.3125, -0.5, 0.1875, -0.1875, 0.5, 0.3125},
156                         {0.1875, -0.5, 0.1875, 0.3125, 0.5, 0.3125},
157                         {-0.1875, 0.025, 0.22, 0.1875, 0.45, 0.28},
158                         {-0.3125, -0.5, -0.3125, -0.1875, -0.125, -0.1875},
159                         {0.1875, -0.5, -0.3125, 0.3125, -0.125, -0.1875},
160                         {-0.3125, -0.125, -0.3125, 0.3125, 0, 0.1875}}
161         }
162 })
163
164 xdecor.register("chandelier", {
165         description = "Chandelier",
166         drawtype = "plantlike",
167         walkable = false,
168         inventory_image = "xdecor_chandelier.png",
169         tiles = {"xdecor_chandelier.png"},
170         groups = {dig_immediate=3},
171         light_source = 14,
172         selection_box = xdecor.nodebox.slab_y(0.5, 0.5)
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 = default.node_sound_leaves_defaults()
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 = c:gsub("^%l", string.upper).." Curtain",
197                 walkable = false,
198                 tiles = {"wool_white.png^[colorize:"..c..":170"},
199                 inventory_image = "wool_white.png^[colorize:"..c..":170^xdecor_curtain_open_overlay.png^[makealpha:255,126,126",
200                 wield_image = "wool_white.png^[colorize:"..c..":170",
201                 drawtype = "signlike",
202                 paramtype2 = "wallmounted",
203                 groups = {dig_immediate=3, flammable=3},
204                 selection_box = {type="wallmounted"},
205                 on_rightclick = function(pos, node, _, _)
206                         minetest.set_node(pos, {name="xdecor:curtain_open_"..c, param2=node.param2})
207                 end
208         })
209
210         xdecor.register("curtain_open_"..c, {
211                 tiles = {"wool_white.png^[colorize:"..c..":170^xdecor_curtain_open_overlay.png^[makealpha:255,126,126"},
212                 drawtype = "signlike",
213                 paramtype2 = "wallmounted",
214                 walkable = false,
215                 groups = {dig_immediate=3, flammable=3, not_in_creative_inventory=1},
216                 selection_box = {type="wallmounted"},
217                 drop = "xdecor:curtain_"..c,
218                 on_rightclick = function(pos, node, _, _)
219                         minetest.set_node(pos, {name="xdecor:curtain_"..c, param2=node.param2})
220                 end
221         })
222
223         minetest.register_craft({
224                 output = "xdecor:curtain_"..c.." 4",
225                 recipe = {
226                         {"", "wool:"..c, ""},
227                         {"", "wool:"..c, ""}
228                 }
229         })
230 end
231
232 xdecor.register("cushion", {
233         description = "Cushion",
234         tiles = {"xdecor_cushion.png"},
235         groups = {snappy=3, flammable=3, fall_damage_add_percent=-50},
236         on_place = minetest.rotate_node,
237         node_box = xdecor.nodebox.slab_y(-0.5, 0.5)
238 })
239
240 local function door_access(door)
241         if door:find("prison") then return true end
242         return false
243 end
244
245 local door_types = {
246         {"japanese", "brown"}, {"prison", "grey"}, {"prison_rust", "rust"},
247         {"screen", "brownb"}, {"slide", "brownc"}, {"woodglass", "brown"}
248 }
249
250 for _, d in pairs(door_types) do
251         doors.register_door("xdecor:"..d[1].."_door", {
252                 description = string.gsub(d[1]:gsub("^%l", string.upper), "_r", " R").." Door",
253                 inventory_image = "xdecor_"..d[1].."_door_inv.png",
254                 groups = {choppy=3, flammable=2, door=1},
255                 tiles_bottom = {"xdecor_"..d[1].."_door_b.png", "xdecor_"..d[2]..".png"},
256                 tiles_top = {"xdecor_"..d[1].."_door_a.png", "xdecor_"..d[2]..".png"},
257                 only_placer_can_open = door_access(d[1]),
258                 sounds = default.node_sound_wood_defaults(),
259                 sunlight = false
260         })
261 end
262
263 xdecor.register("empty_shelf", {
264         description = "Empty Shelf",
265         inventory = {size=24},
266         infotext = "Empty Shelf",
267         tiles = {"default_wood.png", "default_wood.png^xdecor_empty_shelf.png"},
268         groups = {choppy=3, flammable=3},
269         sounds = default.node_sound_wood_defaults()
270 })
271
272 xdecor.register("enderchest", {
273         description = "Ender Chest",
274         tiles = {
275                 "xdecor_enderchest_top.png", "xdecor_enderchest_top.png",
276                 "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
277                 "xdecor_enderchest_side.png", "xdecor_enderchest_front.png"
278         },
279         groups = {cracky=2},
280         sounds = default.node_sound_stone_defaults(),
281         on_construct = function(pos)
282                 local meta = minetest.get_meta(pos)
283                 local xbg = default.gui_bg..default.gui_bg_img..default.gui_slots
284                 meta:set_string("formspec", "size[8,9]"..xbg..
285                                 "list[current_player;enderchest;0,0;8,4;]"..
286                                 "list[current_player;main;0,5;8,4;]")
287                 meta:set_string("infotext", "Ender Chest")
288         end
289 })
290
291 minetest.register_on_joinplayer(function(player)
292         local inv = player:get_inventory()
293         inv:set_size("enderchest", 8*4)
294 end)
295
296 xdecor.register("fire", {
297         description = "Fancy Fire",
298         drawtype = "plantlike",
299         light_source = 14,
300         walkable = false,
301         tiles = {
302                 { name = "xdecor_fire_anim.png",
303                 animation = {type="vertical_frames", length=1.5} }
304         },
305         damage_per_second = 2,
306         drop = "",
307         selection_box = {
308                 type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, -0.3, 0.3}
309         },
310         groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
311 })
312
313 minetest.register_tool("xdecor:flint_steel", {
314         description = "Flint & Steel",
315         inventory_image = "xdecor_flint_steel.png",
316         tool_capabilities = {
317                 groupcaps = { igniter = {uses=10, maxlevel=1} }
318         },
319         on_use = function(itemstack, user, pointed_thing)
320                 local player = user:get_player_name()
321                 if pointed_thing.type == "node" and
322                                 minetest.get_node(pointed_thing.above).name == "air" then
323                         if not minetest.is_protected(pointed_thing.above, player) then
324                                 minetest.set_node(pointed_thing.above, {name="xdecor:fire"})
325                         else
326                                 minetest.chat_send_player(player, "This area is protected.")
327                         end
328                 else return end
329
330                 itemstack:add_wear(1000)
331                 return itemstack
332         end
333 })
334
335 minetest.register_tool("xdecor:hammer", {
336         description = "Hammer",
337         inventory_image = "xdecor_hammer.png",
338         wield_image = "xdecor_hammer.png",
339         on_use = function(...) do return end end
340 })
341
342 xdecor.register("ivy", {
343         description = "Ivy",
344         drawtype = "signlike",
345         walkable = false,
346         climbable = true,
347         groups = {dig_immediate=3, flammable=3, plant=1},
348         paramtype2 = "wallmounted",
349         selection_box = {type="wallmounted"},
350         legacy_wallmounted = true,
351         tiles = {"xdecor_ivy.png"},
352         inventory_image = "xdecor_ivy.png",
353         wield_image = "xdecor_ivy.png",
354         sounds = default.node_sound_leaves_defaults()
355 })
356
357 xdecor.register("lantern", {
358         description = "Lantern",
359         light_source = 12,
360         drawtype = "torchlike",
361         inventory_image = "xdecor_lantern_floor.png",
362         wield_image = "xdecor_lantern_floor.png", 
363         paramtype2 = "wallmounted",
364         legacy_wallmounted = true,
365         walkable = false,
366         groups = {dig_immediate=3, attached_node=1},
367         tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
368                         "xdecor_lantern.png"},
369         selection_box = {
370                 type = "wallmounted",
371                 wall_top = {-0.25, -0.4, -0.25, 0.25, 0.5, 0.25},
372                 wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25},
373                 wall_side = {-0.5, -0.5, -0.15, 0.5, 0.5, 0.15}
374         }
375 })
376
377 xdecor.register("lightbox", {
378         description = "Light Box",
379         tiles = {"xdecor_lightbox.png"},
380         groups = {cracky=3},
381         light_source = 13,
382         sounds = default.node_sound_glass_defaults()
383 })
384
385 xdecor.register("packed_ice", {
386         drawtype = "normal",
387         description = "Packed Ice",
388         tiles = {"xdecor_packed_ice.png"},
389         groups = {cracky=2},
390         sounds = default.node_sound_glass_defaults()
391 })
392
393 local flowers = {"dandelion_white", "dandelion_yellow", "geranium",
394                 "rose", "tulip", "viola"}
395
396 for _, f in pairs(flowers) do
397         xdecor.register("potted_"..f, {
398                 description = string.gsub("Potted Flowers ("..f..")", "_", " "),
399                 walkable = false,
400                 groups = {dig_immediate=3, flammable=3, plant=1, flower=1},
401                 tiles = {"xdecor_"..f.."_pot.png"},
402                 inventory_image = "xdecor_"..f.."_pot.png",
403                 drawtype = "plantlike",
404                 sounds = default.node_sound_leaves_defaults(),
405                 selection_box = xdecor.nodebox.slab_y(0.3)
406         })
407
408         minetest.register_craft({
409                 output = "xdecor:potted_"..f,
410                 recipe = {
411                         {"default:clay_brick", "flowers:"..f, "default:clay_brick"},
412                         {"", "default:clay_brick", ""}
413                 }
414         })
415 end
416
417 xdecor.register("painting", {
418         description = "Painting",
419         drawtype = "signlike",
420         tiles = {"xdecor_painting.png"},
421         inventory_image = "xdecor_painting.png",
422         paramtype2 = "wallmounted",
423         legacy_wallmounted = true,
424         walkable = false,
425         wield_image = "xdecor_painting.png",
426         selection_box = {type="wallmounted"},
427         groups = {dig_immediate=3, flammable=3, attached_node=1}
428 })
429
430 xdecor.register("plant_pot", {
431         description = "Plant Pot",
432         drawtype = "plantlike",
433         inventory_image = "xdecor_plant_pot.png",
434         wield_image = "xdecor_plant_pot.png",
435         groups = {snappy=3},
436         tiles = {"xdecor_plant_pot.png"},
437         sounds = default.node_sound_stone_defaults()
438 })
439
440
441 for _, b in pairs({{"cactus", "cactus"}, {"moon", "stone"}}) do
442         xdecor.register(b[1].."brick", {
443                 drawtype = "normal",
444                 description = b[1]:gsub("^%l", string.upper).." Brick",
445                 tiles = {"xdecor_"..b[1].."brick.png"},
446                 groups = {cracky=2},
447                 sounds = default.node_sound_stone_defaults(),
448         })
449         
450         minetest.register_craft({
451         output = "xdecor:"..b[1].."brick",
452         recipe = {
453                 {"default:brick", "default:"..b[2]}
454         }
455 })
456 end
457
458 xdecor.register("multishelf", {
459         description = "Multi Shelf",
460         inventory = {size=24},
461         infotext = "Multi Shelf",
462         tiles = {"default_wood.png", "default_wood.png^xdecor_multishelf.png"},
463         groups = {choppy=3, flammable=3},
464         sounds = default.node_sound_wood_defaults()
465 })
466
467 xpanes.register_pane("rust_bar", {
468         description = "Rust Bars",
469         tiles = {"xdecor_rust_bars.png"},
470         drawtype = "airlike",
471         paramtype = "light",
472         textures = {"xdecor_rust_bars.png", "xdecor_rust_bars.png", "xpanes_space.png"},
473         inventory_image = "xdecor_rust_bars.png",
474         wield_image = "xdecor_rust_bars.png",
475         groups = {snappy=3, pane=1},
476         recipe = {
477                 {"", "default:dirt", ""},
478                 {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
479                 {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
480         }
481 })
482
483 xdecor.register("stereo", {
484         description = "Stereo",
485         groups = {snappy=3},
486         tiles = {
487                 "xdecor_stereo_top.png", "xdecor_stereo_bottom.png",
488                 "xdecor_stereo_left.png^[transformFX", "xdecor_stereo_left.png",
489                 "xdecor_stereo_back.png", "xdecor_stereo_front.png"
490         }
491 })
492
493 xdecor.register("stonepath", {
494         description = "Garden Stone Path",
495         tiles = {"default_stone.png"},
496         groups = {snappy=3},
497         sounds = default.node_sound_stone_defaults(),
498         sunlight_propagates = true,
499         node_box = {
500                 type = "fixed",
501                 fixed = {{0, -0.5, 0, 0.375, -0.47, 0.375},
502                         {-0.4375, -0.5, -0.4375, -0.0625, -0.47, -0.0625},
503                         {-0.4375, -0.5, 0.125, -0.125, -0.47, 0.4375},
504                         {0.125, -0.5, -0.375, 0.375, -0.47, -0.125}}
505         },
506         selection_box = xdecor.nodebox.slab_y(0.05)
507 })
508
509 local stonish = {"desertstone_tile", "stone_tile", "stone_rune",
510                 "coalstone_tile", "hard_clay"}
511
512 for _, t in pairs(stonish) do
513         xdecor.register(t, {
514                 drawtype = "normal",
515                 description = string.sub(t:gsub("^%l", string.upper), 1, -6)
516                                 .." "..t:sub(-4):gsub("^%l", string.upper),
517                 tiles = {"xdecor_"..t..".png"},
518                 groups = {cracky=2},
519                 sounds = default.node_sound_stone_defaults()
520         })
521 end
522
523 xdecor.register("table", {
524         description = "Table",
525         tiles = {"xdecor_wood.png"},
526         groups = {choppy=3, flammable=3},
527         sounds = default.node_sound_wood_defaults(),
528         node_box = {
529                 type = "fixed",
530                 fixed = {{-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 xdecor.register("tatami", {
536         description = "Tatami",
537         tiles = {"xdecor_tatami.png"},
538         wield_image = "xdecor_tatami.png",
539         groups = {snappy=3, flammable=3},
540         node_box = {
541                 type = "fixed", fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}}
542         }
543 })
544
545 xdecor.register("tv", {
546         description = "Television",
547         light_source = 11,
548         groups = {snappy=3},
549         tiles = {
550                 "xdecor_television_left.png^[transformR270",
551                 "xdecor_television_left.png^[transformR90",
552                 "xdecor_television_left.png^[transformFX",
553                 "xdecor_television_left.png", "xdecor_television_back.png",
554                 { name = "xdecor_television_front_animated.png",
555                         animation = {type="vertical_frames", length=80.0} }
556         }
557 })
558
559 xdecor.register("woodframed_glass", {
560         description = "Wood Framed Glass",
561         drawtype = "glasslike_framed",
562         tiles = {"xdecor_woodframed_glass.png", "xdecor_woodframed_glass_detail.png"},
563         groups = {cracky=3},
564         sounds = default.node_sound_glass_defaults()
565 })
566
567 xdecor.register("wood_tile", {
568         description = "Wood Tile",
569         tiles = {"xdecor_wood_tile.png"},
570         drawtype = "normal",
571         groups = {choppy=2, wood=1, flammable=2},
572         sounds = default.node_sound_wood_defaults()
573 })