1 xpanes.register_pane("bamboo_frame", {
2 description = "Bamboo Frame",
3 tiles = {"xdecor_bamboo_frame.png"},
6 textures = {"xdecor_bamboo_frame.png", "xdecor_bamboo_frame.png",
8 inventory_image = "xdecor_bamboo_frame.png",
9 wield_image = "xdecor_bamboo_frame.png",
10 groups = {snappy=3, pane=1, flammable=2},
12 {"default:papyrus", "default:papyrus", "default:papyrus"},
13 {"default:papyrus", "farming:cotton", "default:papyrus"},
14 {"default:papyrus", "default:papyrus", "default:papyrus"}
18 xdecor.register("baricade", {
19 description = "Baricade",
20 drawtype = "plantlike",
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)
29 xdecor.register("barrel", {
30 description = "Barrel",
31 inventory = {size=24},
33 tiles = {"xdecor_barrel_top.png", "xdecor_barrel_sides.png"},
34 groups = {choppy=3, flammable=2},
38 xdecor.register("cabinet", {
39 description = "Cabinet",
40 inventory = {size=24},
42 groups = {choppy=3, flammable=2},
45 "default_wood.png", "default_wood.png",
46 "default_wood.png", "default_wood.png",
47 "default_wood.png", "xdecor_cabinet_front.png"
51 xdecor.register("cabinet_half", {
52 description = "Half Cabinet",
54 infotext = "Half Cabinet",
55 groups = {choppy=3, flammable=3},
57 node_box = xdecor.nodebox.slab_y(0.5, 0.5),
59 "default_wood.png", "default_wood.png",
60 "default_wood.png", "default_wood.png",
61 "default_wood.png", "xdecor_cabinet_half_front.png"
65 xdecor.register("candle", {
66 description = "Candle",
68 drawtype = "torchlike",
69 inventory_image = "xdecor_candle_inv.png",
70 wield_image = "xdecor_candle_inv.png",
71 paramtype2 = "wallmounted",
72 legacy_wallmounted = true,
74 groups = {dig_immediate=3, attached_node=1},
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} }
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}
88 xdecor.register("cardboard_box", {
89 description = "Cardboard Box",
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"},
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},
143 sunlight_propagates = true,
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}
157 xdecor.register("chandelier", {
158 description = "Chandelier",
159 drawtype = "plantlike",
161 inventory_image = "xdecor_chandelier.png",
162 tiles = {"xdecor_chandelier.png"},
163 groups = {dig_immediate=3},
165 selection_box = xdecor.nodebox.slab_y(0.5, 0.5)
168 xdecor.register("coalstone_tile", {
170 description = "Coalstone Tile",
171 tiles = {"xdecor_coalstone_tile.png"},
172 groups = {cracky=2, stone=1},
173 sounds = xdecor.stone
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,
188 selection_box = {type = "regular"},
189 groups = {dig_immediate=3, liquid=3, flammable=3},
190 sounds = xdecor.leaves
193 local colors = {"red"} -- Add more curtains colors simply here.
195 for _, c in pairs(colors) do
196 xdecor.register("curtain_"..c, {
197 description = "Curtain ("..c..")",
198 use_texture_alpha = true,
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})
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,
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})
226 minetest.register_craft({
227 output = "xdecor:curtain_"..c.." 4",
229 {"", "wool:"..c, ""},
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)
243 local door_types = {"woodglass", "japanese"}
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"},
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},
265 xdecor.register("enderchest", {
266 description = "Ender Chest",
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"
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")
287 minetest.register_on_joinplayer(function(player)
288 local inv = player:get_inventory()
289 inv:set_size("enderchest", 8*4)
292 xdecor.register("fence_wrought_iron", {
293 description = "Wrought Iron Fence",
294 drawtype = "fencelike",
296 tiles = {"xdecor_wrought_iron.png"},
299 fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}
301 inventory_image = "default_fence_overlay.png^xdecor_wrought_iron.png^default_fence_overlay.png^[makealpha:255,126,126"
304 xdecor.register("fire", {
305 description = "Fancy Fire",
306 drawtype = "plantlike",
310 { name = "xdecor_fire_anim.png",
311 animation = {type="vertical_frames", length=1.5} }
313 damage_per_second = 2,
317 fixed = {-1/3.5, -1/2, -1/3.5, 1/3.5, -1/2+2/16, 1/3.5}
319 groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
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} }
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"})
335 minetest.chat_send_player(player, "This area is protected.")
339 itemstack:add_wear(1000)
344 minetest.register_tool("xdecor:hammer", {
345 description = "Hammer",
346 inventory_image = "xdecor_hammer.png"
349 xdecor.register("ivy", {
351 drawtype = "signlike",
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
364 xdecor.register("lantern", {
365 description = "Lantern",
367 drawtype = "torchlike",
368 inventory_image = "xdecor_lantern_floor.png",
369 wield_image = "xdecor_lantern_floor.png",
370 paramtype2 = "wallmounted",
371 legacy_wallmounted = true,
373 groups = {dig_immediate=3, attached_node=1},
374 tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
375 "xdecor_lantern.png"},
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}
384 local flowerstype = { "dandelion_white", "dandelion_yellow", "geranium",
385 "rose", "tulip", "viola" }
387 for _, f in pairs(flowerstype) do
388 xdecor.register("potted_"..f, {
389 description = "Potted Flowers ("..f..")",
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)
399 minetest.register_craft({
400 output = "xdecor:potted_"..f.." 2",
402 {"flowers:"..f, "xdecor:plant_pot"}
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,
415 wield_image = "xdecor_painting.png",
416 selection_box = {type="wallmounted"},
417 groups = {dig_immediate=3, flammable=2, attached_node=1}
420 xdecor.register("plant_pot", {
421 description = "Plant Pot",
423 tiles = {"xdecor_plant_pot_top.png", "xdecor_plant_pot_bottom.png",
424 "xdecor_plant_pot_sides.png"}
427 xdecor.register("metal_cabinet", {
428 description = "Metal Cabinet",
429 inventory = {size=24},
431 infotext = "Metal Cabinet",
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"
439 xdecor.register("moonbrick", {
441 description = "Moonbrick",
442 tiles = {"xdecor_moonbrick.png"},
444 sounds = xdecor.stone
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},
456 xpanes.register_pane("rust_bar", {
457 description = "Rust Bars",
458 tiles = {"xdecor_rust_bars.png"},
459 drawtype = "airlike",
461 textures = {"xdecor_rust_bars.png", "xdecor_rust_bars.png",
463 inventory_image = "xdecor_rust_bars.png",
464 wield_image = "xdecor_rust_bars.png",
465 groups = {snappy=2, pane=1},
467 {"xpanes:bar", "default:dirt"}
471 xdecor.register("stereo", {
472 description = "Stereo",
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"
481 xdecor.register("stone_rune", {
482 description = "Stone Rune",
483 tiles = {"xdecor_stone_rune.png"},
485 groups = {cracky=2, stone=1},
486 sounds = xdecor.stone
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,
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}
510 fixed = {-0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375}
514 xdecor.register("stone_tile", {
515 description = "Stone Tile",
516 tiles = {"xdecor_stone_tile.png"},
518 groups = {cracky=2, stone=1},
519 sounds = xdecor.stone
522 xdecor.register("table", {
523 description = "Table",
524 tiles = {"xdecor_wood.png"},
525 groups = {choppy=3, flammable=2},
526 sounds = xdecor.wood,
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}
536 xdecor.register("tatami", {
537 description = "Tatami",
538 tiles = {"xdecor_tatami.png"},
539 wield_image = "xdecor_tatami.png",
540 groups = {snappy=3, flammable=2},
544 {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}
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,
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},