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