1 xpanes.register_pane("bamboo_frame", {
2 description = "Bamboo Frame",
3 tiles = {"xdecor_bamboo_frame.png"},
6 sunlight_propagates = true,
7 textures = {"xdecor_bamboo_frame.png", "xdecor_bamboo_frame.png",
9 inventory_image = "xdecor_bamboo_frame.png",
10 wield_image = "xdecor_bamboo_frame.png",
11 groups = {snappy=3, pane=1, flammable=2},
13 {"default:papyrus", "default:papyrus", "default:papyrus"},
14 {"default:papyrus", "farming:cotton", "default:papyrus"},
15 {"default:papyrus", "default:papyrus", "default:papyrus"}
19 xdecor.register("baricade", {
20 description = "Baricade",
21 drawtype = "plantlike",
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)
30 xdecor.register("barrel", {
31 description = "Barrel",
32 inventory = {size=24},
34 tiles = {"xdecor_barrel_top.png", "xdecor_barrel_sides.png"},
35 groups = {choppy=3, flammable=2},
39 xdecor.register("cabinet", {
40 description = "Cabinet",
41 inventory = {size=24},
43 groups = {choppy=3, flammable=2},
46 "default_wood.png", "default_wood.png",
47 "default_wood.png", "default_wood.png",
48 "default_wood.png", "xdecor_cabinet_front.png"
52 xdecor.register("cabinet_half", {
53 description = "Half Cabinet",
55 infotext = "Half Cabinet",
56 groups = {choppy=3, flammable=3},
58 node_box = xdecor.nodebox.slab_y(0.5, 0.5),
60 "default_wood.png", "default_wood.png",
61 "default_wood.png", "default_wood.png",
62 "default_wood.png", "xdecor_cabinet_half_front.png"
66 xdecor.register("candle", {
67 description = "Candle",
69 drawtype = "torchlike",
70 inventory_image = "xdecor_candle_inv.png",
71 wield_image = "xdecor_candle_inv.png",
72 paramtype2 = "wallmounted",
73 legacy_wallmounted = true,
75 groups = {dig_immediate=3, attached_node=1},
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} }
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}
89 xdecor.register("cardboard_box", {
90 description = "Cardboard Box",
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"},
99 {-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}
104 xdecor.register("cauldron", {
105 description = "Cauldron",
108 { name = "xdecor_cauldron_top_anim.png",
109 animation = {type="vertical_frames", length=3.0} },
110 "xdecor_cauldron_sides.png"
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()
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")
127 minetest.chat_send_player(player, "No enough room in your inventory.")
130 else if original_bucket_on_use then
131 return original_bucket_on_use(itemstack, user, pointed_thing)
138 xdecor.register("chair", {
139 description = "Chair",
140 tiles = {"xdecor_wood.png"},
141 sounds = xdecor.wood,
142 groups = {choppy=3, flammable=2},
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}
156 xdecor.register("chandelier", {
157 description = "Chandelier",
158 drawtype = "plantlike",
160 inventory_image = "xdecor_chandelier.png",
161 tiles = {"xdecor_chandelier.png"},
162 groups = {dig_immediate=3},
164 selection_box = xdecor.nodebox.slab_y(0.5, 0.5)
167 xdecor.register("coalstone_tile", {
169 description = "Coalstone Tile",
170 tiles = {"xdecor_coalstone_tile.png"},
171 groups = {cracky=2, stone=1},
172 sounds = xdecor.stone
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,
187 selection_box = {type = "regular"},
188 groups = {dig_immediate=3, liquid=3, flammable=3},
189 sounds = xdecor.leaves
192 local colors = {"red"} -- Add more curtains colors simply here.
194 for _, c in pairs(colors) do
195 xdecor.register("curtain_"..c, {
196 description = "Curtain ("..c..")",
197 use_texture_alpha = true,
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})
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,
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})
225 minetest.register_craft({
226 output = "xdecor:curtain_"..c.." 4",
228 {"", "wool:"..c, ""},
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)
242 local door_types = {"woodglass", "japanese"}
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"},
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},
264 xdecor.register("enderchest", {
265 description = "Ender Chest",
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"
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")
286 minetest.register_on_joinplayer(function(player)
287 local inv = player:get_inventory()
288 inv:set_size("enderchest", 8*4)
293 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}
296 xdecor.register("fence_wrought_iron", {
297 description = "Wrought Iron Fence",
298 drawtype = "fencelike",
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"
305 xdecor.register("fire", {
306 description = "Fancy Fire",
310 { name = "xdecor_fire_anim.png",
311 animation = {type="vertical_frames", length=1.5} }
313 drawtype = "plantlike",
314 damage_per_second = 2,
318 fixed = {-1/3.5, -1/2, -1/3.5, 1/3.5, -1/2+2/16, 1/3.5}
320 groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
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} }
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"})
336 minetest.chat_send_player(player, "This area is protected.")
340 itemstack:add_wear(65535/65)
345 minetest.register_tool("xdecor:hammer", {
346 description = "Hammer",
347 inventory_image = "xdecor_hammer.png"
350 xdecor.register("ivy", {
352 drawtype = "signlike",
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
365 xdecor.register("lantern", {
366 description = "Lantern",
368 drawtype = "torchlike",
369 inventory_image = "xdecor_lantern_floor.png",
370 wield_image = "xdecor_lantern_floor.png",
371 paramtype2 = "wallmounted",
372 legacy_wallmounted = true,
374 groups = {dig_immediate=3, attached_node=1},
375 tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
376 "xdecor_lantern.png"},
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}
385 local flowerstype = { "dandelion_white", "dandelion_yellow", "geranium",
386 "rose", "tulip", "viola" }
388 for _, f in pairs(flowerstype) do
389 xdecor.register("potted_"..f, {
390 description = "Potted Flowers ("..f..")",
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)
400 minetest.register_craft({
401 output = "xdecor:potted_"..f.." 2",
403 {"flowers:"..f, "xdecor:plant_pot"}
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,
416 wield_image = "xdecor_painting.png",
417 selection_box = {type="wallmounted"},
418 groups = {dig_immediate=3, flammable=2, attached_node=1}
421 xdecor.register("plant_pot", {
422 description = "Plant Pot",
424 tiles = {"xdecor_plant_pot_top.png", "xdecor_plant_pot_bottom.png",
425 "xdecor_plant_pot_sides.png"}
428 xdecor.register("metal_cabinet", {
429 description = "Metal Cabinet",
430 inventory = {size=24},
432 infotext = "Metal Cabinet",
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"
440 xdecor.register("moonbrick", {
442 description = "Moonbrick",
443 tiles = {"xdecor_moonbrick.png"},
445 sounds = xdecor.stone
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},
457 xpanes.register_pane("rust_bar", {
458 description = "Rust Bars",
459 tiles = {"xdecor_rust_bars.png"},
460 drawtype = "airlike",
462 sunlight_propagates = true,
463 textures = {"xdecor_rust_bars.png", "xdecor_rust_bars.png",
465 inventory_image = "xdecor_rust_bars.png",
466 wield_image = "xdecor_rust_bars.png",
467 groups = {snappy=2, pane=1},
469 {"xpanes:bar", "default:dirt"}
473 xdecor.register("stereo", {
474 description = "Stereo",
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"
483 xdecor.register("stone_rune", {
484 description = "Stone Rune",
485 tiles = {"xdecor_stone_rune.png"},
487 groups = {cracky=2, stone=1},
488 sounds = xdecor.stone
491 xdecor.register("stonepath", {
492 description = "Garden Stone Path",
493 tiles = {"default_stone.png"},
494 groups = {snappy=3, stone=1},
495 sounds = xdecor.stone,
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}
511 fixed = {-0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375}
515 xdecor.register("stone_tile", {
516 description = "Stone Tile",
517 tiles = {"xdecor_stone_tile.png"},
519 groups = {cracky=2, stone=1},
520 sounds = xdecor.stone
523 xdecor.register("table", {
524 description = "Table",
525 tiles = {"xdecor_wood.png"},
526 groups = {choppy=3, flammable=2},
527 sounds = xdecor.wood,
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}
537 xdecor.register("tatami", {
538 description = "Tatami",
539 tiles = {"xdecor_tatami.png"},
540 wield_image = "xdecor_tatami.png",
541 groups = {snappy=3, flammable=2},
545 {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
550 xdecor.register("trash_can", {
551 description = "Trash Can",
552 tiles = {"xdecor_wood.png"},
553 groups = {choppy=3, flammable=2},
554 sounds = xdecor.wood,
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}
568 {-0.375, -0.5, -0.375, 0.375, 0.19, 0.375}
571 on_construct = function(pos)
572 local meta = minetest.get_meta(pos)
573 meta:set_string("infotext", "Trash Can - throw your waste here!")
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
584 old_on_step(self, dtime)
587 xdecor.register("tv", {
588 description = "Television",
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} }
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"},
606 sounds = xdecor.glass
609 xdecor.register("wood_tile", {
610 description = "Wood Tile",
611 tiles = {"xdecor_wood_tile.png"},
613 groups = {choppy=2, wood=1, flammable=2},