diff --git a/decor_api/init.lua b/decor_api/init.lua new file mode 100644 index 0000000..1e920f6 --- /dev/null +++ b/decor_api/init.lua @@ -0,0 +1,7 @@ +multidecor = {} + +local modpath = minetest.get_modpath("decor_api") + +dofile(modpath .. "/register.lua") +dofile(modpath .. "/sitting.lua") +dofile(modpath .. "/seat.lua") diff --git a/decor_api/mod.conf b/decor_api/mod.conf new file mode 100644 index 0000000..75facef --- /dev/null +++ b/decor_api/mod.conf @@ -0,0 +1,3 @@ +name = decor_api +description = Set of API functions for various furniture stuff +author = Andrey01 diff --git a/decor_api/register.lua b/decor_api/register.lua new file mode 100644 index 0000000..16da264 --- /dev/null +++ b/decor_api/register.lua @@ -0,0 +1,182 @@ +-- Registration API + +multidecor.register = {} + +register = multidecor.register + +-- Default furniture types +register.supported_types = { + "seat", + "table", + "shelf", + "bed" +} + +-- Default furniture styles +register.supported_styles = { + "baroque", + "classic", + "high_tech", + "mixed", + "modern", + "royal" +} + +-- Default furniture materials +register.supported_materials = { + "wood", + "glass", + "metal", + "plastic", + "stone" +} + +-- Registers a new furniture type +function register.register_type(type_name) + table.insert(register.supported_types, type_name) +end + +-- Checks whether type with 'type_name' name is registered +function register.check_for_type(type_name) + for _, type in ipairs(register.supported_types) do + if type == type_name then + return true + end + end + + return false +end + +-- Checks whether style with 'style_name' name is registered +function register.check_for_style(style_name) + minetest.debug("style_name: " .. style_name) + for _, style in ipairs(register.supported_styles) do + if style == style_name then + return true + end + end + + return false +end + +--[[def: + { + type = + style = , + material = , + description = , + drawtype = , + mesh = , + tiles = {}, + paramtype2 = , + bounding_boxes = { + Box1: {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + Box2: {0.5, 1.5, 0.1, 0.5, 1.0, 0.5}, + ... + }, + wield_scale = {x=, y=, z=} (Optional), + visual_scale = (Optional), + drop = (Optional), + groups = {snappy=, choppy=, crumbly=...} (Optional), + sounds = { + footstep = , + dig = , + dug = , + place = , + place_failed = , + fall = + } (Optional), + + callbacks = { + on_construct = , + on_destruct = , + on_rightclick = , + on_timer = + } + } +]] + +-- Registers some furniture component (chair, stool, table, sofa, cupboard and etc). +function register.register_furniture_unit(name, def, craft_def) + local f_def = {} + + assert(register.check_for_type(def.type), "The type with a name \"" .. def.type .. "\" is not registered!") + assert(register.check_for_style(def.style), "The type with a name \"" .. def.style .. "\" is not registered!") + + f_def.description = def.description + f_def.visual_scale = def.visual_scale + f_def.wield_scale = def.wield_scale + f_def.drawtype = def.drawtype or "mesh" + f_def.paramtype2 = def.paramtype2 or "facedir" + f_def.use_texture_alpha = "clip" + + if f_def.drawtype == "mesh" then + f_def.mesh = def.mesh + end + + f_def.tiles = def.tiles + f_def.inventory_image = def.inventory_image + f_def.wield_image = def.wield_image + + f_def.groups = def.groups or {} + f_def.groups[def.type] = 1 + f_def.groups[def.style] = 1 + + if def.material then + f_def.groups[def.material] = 1 + end + + if def.bounding_boxes then + if f_def.drawtype == "nodebox" then + f_def.node_box = { + type = "fixed", + fixed = def.bounding_boxes + } + f_def.selection_box = f_def.node_box + elseif f_def.drawtype == "mesh" then + f_def.collision_box = { + type = "fixed", + fixed = def.bounding_boxes + } + f_def.selection_box = f_def.collision_box + minetest.debug("f_def.collision_box: " .. dump(f_def.collision_box)) + end + end + + if def.sounds then + f_def.sounds = def.sounds + else + if f_def.material == "wood" then + f_def.sounds = default.node_sound_wood_defaults() + elseif f_def.material == "glass" then + f_def.sounds = default.node_sound_glass_defaults() + elseif f_def.material == "metal" then + f_def.sounds = default.node_sound_metal_defaults() + elseif f_def.material == "plastic" then + f_def.sounds = default.node_sound_leaves_defaults() + elseif f_def.material == "stone" then + f_def.sounds = default.node_sound_stone_defaults() + end + end + + f_def.on_construct = def.callbacks.on_construct + f_def.on_destruct = def.callbacks.on_destruct + f_def.on_rightclick = def.callbacks.on_rightclick + f_def.on_timer = def.callbacks.on_timer + + f_def.add_properties = def.add_properties + local f_name = def.style .. ":" .. name + minetest.register_node(f_name, f_def) + + if craft_def then + minetest.register_craft({ + output = f_name, + recipe = craft_def.recipe, + replacements = craft_def.replacements + }) + end +end + +-- Registers a set of furniture components of certain type: "kitchen", "bathroom", "bedroom", "living_room" and etc. +function register.register_garniture() +end diff --git a/decor_api/seat.lua b/decor_api/seat.lua new file mode 100644 index 0000000..5a61a66 --- /dev/null +++ b/decor_api/seat.lua @@ -0,0 +1,46 @@ +--[[ + 'seat_def' is table: + { + pos = + rot = + models = { + [1] = { + mesh = , + anim = {range = , speed = , blend = , loop = } + } + ... + } + } +]] + +function register.register_seat(name, base_def, seat_def, craft_def) + local def = table.copy(base_def) + + def.type = "seat" + def.paramtype2 = "facedir" + + def.add_properties = { + seat_data = seat_def + } + + if not def.callbacks then + def.callbacks = {} + def.callbacks.on_construct = function(pos) + minetest.get_meta(pos):set_string("is_busy", "") + end + + def.callbacks.on_destruct = function(pos) + sitting.standup_player(minetest.get_player_by_name(minetest.get_meta(pos):get_string("is_busy")), pos) + end + + def.callbacks.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local bool = sitting.sit_player(clicker, pos) + + if not bool then + sitting.standup_player(clicker, pos) + end + end + end + + register.register_furniture_unit(name, def, craft_def) +end diff --git a/decor_api/sitting.lua b/decor_api/sitting.lua new file mode 100644 index 0000000..8306921 --- /dev/null +++ b/decor_api/sitting.lua @@ -0,0 +1,116 @@ +-- Sitting API + +--[[Node that can be sat on should contain 'is_busy' metadata field with playername string. + Player that is currently sitting should contain 'previous_mesh_data' metadata field to return his previous mesh after detaching. + It is presented in such form: + { + mesh = , + anim = {range=float, speed=float, blend=bool, loop=bool}, + physics = {speed=float, jump=float} + } +]] +multidecor.sitting = {} + +sitting = multidecor.sitting + +function sitting.attach_player_to_node(attacher, seat_data) + attacher:set_pos(seat_data.pos) + attacher:set_look_vertical(seat_data.rot.x) + attacher:set_look_horizontal(seat_data.rot.y) + attacher:set_physics_override({speed=0, jump=0}) + + if seat_data.model then + attacher:set_properties({mesh = seat_data.model.mesh}) + attacher:set_animation(seat_data.model.anim.range, seat_data.model.anim.speed, seat_data.model.anim.blend, seat_data.model.anim.loop) + end +end + +function sitting.detach_player_from_node(detacher, prev_pdata) + if not prev_pdata then + minetest.debug("3") + return + end + minetest.debug("prev_pdata.physics: " .. dump(prev_pdata.physics)) + detacher:set_physics_override(prev_pdata.physics) + + if prev_pdata.mesh and prev_pdata.anim then + detacher:set_properties({mesh = prev_pdata.mesh}) + detacher:set_animation(prev_pdata.anim.range, prev_pdata.anim.speed, prev_pdata.anim.blend, prev_pdata.anim.loop) + end +end + +function sitting.is_player_attached_to_anything(player) + local prev_pdata = player:get_meta():get_string("previous_player_data") + + return prev_pdata ~= "" +end + +function sitting.is_seat_busy(node_pos) + local is_busy = minetest.get_meta(node_pos):get_string("is_busy") + + return is_busy ~= "" +end + +function sitting.sit_player(player, node_pos) + if not player then + return + end + + if sitting.is_player_attached_to_anything(player) then + return false + end + + local playername = player:get_player_name() + if sitting.is_seat_busy(node_pos) then + minetest.chat_send_player(playername, "This seat is busy!") + return false + end + + local physics = player:get_physics_override() + + local prev_pdata = { + physics = {speed = physics.speed, jump = physics.jump} + } + local node = minetest.get_node(node_pos) + local seat_data = minetest.registered_nodes[node.name].add_properties.seat_data + + local rand_model + if seat_data.models then + local range, speed, blend, loop = player:get_animation() + + prev_pdata.mesh = player:get_properties().mesh + prev_pdata.anim = {range = range, speed = speed, blend = blend, loop = loop} + + rand_model = seat_data.models[math.random(1, #seat_data.models)] + end + + player:get_meta():set_string("previous_player_data", minetest.serialize(prev_pdata)) + + local dir_rot = vector.dir_to_rotation(minetest.facedir_to_dir(node.param2)) + sitting.attach_player_to_node(player, {pos = vector.add(node_pos, seat_data.pos), rot = vector.add(dir_rot, seat_data.rot), model = rand_model}) + + minetest.get_meta(node_pos):set_string("is_busy", playername) + + return true +end + +function sitting.standup_player(player, node_pos) + if not player then + minetest.debug("1") + return + end + local meta = minetest.get_meta(node_pos) + + if player:get_player_name() ~= meta:get_string("is_busy") then + minetest.debug("2") + return false + end + + local player_meta = player:get_meta() + sitting.detach_player_from_node(player, minetest.deserialize(player_meta:get_string("previous_player_data"))) + + player_meta:set_string("previous_player_data", "") + meta:set_string("is_busy", "") + + return true +end diff --git a/modern/init.lua b/modern/init.lua new file mode 100644 index 0000000..2793af9 --- /dev/null +++ b/modern/init.lua @@ -0,0 +1,123 @@ +register.register_seat("kitchen_modern_wooden_chair", { + type = "seat", + style = "modern", + material = "wood", + visual_scale = 0.4, + description = "Kitchen Modern Wooden Chair", + mesh = "multidecor_kitchen_modern_wooden_chair.b3d", + tiles = {"multidecor_wooden_material.png"}, + bounding_boxes = { + {-0.36, -0.5, -0.36, 0.36, 0.3, 0.26}, + {-0.36, -0.5, 0.26, 0.36, 1.3, 0.36} + }, + groups = {choppy=1.5} +}, +{ + pos = {x=0.0, y=0.35, z=0.0}, + rot = {x=0, y=0, z=0}, + models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 15} + } + } +}) + +register.register_seat("soft_kitchen_modern_wooden_chair", { + type = "seat", + style = "modern", + material = "wood", + visual_scale = 0.4, + description = "Soft Kitchen Modern Wooden Chair", + mesh = "multidecor_soft_kitchen_modern_wooden_chair.b3d", + tiles = {"multidecor_wooden_material.png", "multidecor_wool_material.png"}, + bounding_boxes = { + {-0.36, -0.5, -0.36, 0.36, 0.35, 0.26}, + {-0.36, -0.5, 0.26, 0.36, 1.3, 0.36} + }, + groups = {choppy=1.5} +}, +{ + pos = {x=0.0, y=0.4, z=0.0}, + rot = {x=0, y=0, z=0}, + models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 15} + } + } +}) + +register.register_seat("soft_modern_jungle_chair", { + type = "seat", + style = "modern", + material = "wood", + visual_scale = 0.4, + description = "Soft Modern Jungle Chair", + mesh = "multidecor_soft_modern_jungle_chair.b3d", + tiles = {"multidecor_modern_jungle_chair.png"}, + bounding_boxes = { + {-0.35, -0.5, -0.35, 0.35, 0.25, 0.25}, + {-0.35, -0.5, 0.25, 0.35, 1.2, 0.35} + }, + groups = {choppy=1.5} +}, +{ + pos = {x=0.0, y=0.3, z=0.0}, + rot = {x=0, y=0, z=0}, + models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 15} + } + } +}) + +register.register_seat("soft_round_modern_metallic_chair", { + type = "seat", + style = "modern", + material = "metal", + visual_scale = 0.4, + description = "Soft Round Modern Metallic Chair", + mesh = "multidecor_round_soft_metallic_chair.b3d", + tiles = {"multidecor_round_soft_metallic_chair.png"}, + bounding_boxes = { + {-0.5, -0.5, -0.5, 0.5, 0.25, 0.25}, + {-0.5, -0.5, 0.25, 0.5, 0.95, 0.5} + }, + groups = {choppy=1.5} +}, +{ + pos = {x=0.0, y=0.3, z=0.0}, + rot = {x=0, y=0, z=0}, + models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 15} + } + } +}) + +register.register_seat("round_modern_metallic_stool", { + type = "seat", + style = "modern", + material = "metal", + visual_scale = 0.4, + description = "Round Modern Jungle Stool", + mesh = "multidecor_modern_round_metallic_stool.b3d", + tiles = {"multidecor_modern_round_metallic_stool.png"}, + bounding_boxes = { + {-0.4, -0.5, -0.4, 0.4, 0.35, 0.4} + }, + groups = {choppy=1.5} +}, +{ + pos = {x=0.0, y=0.4, z=0.0}, + rot = {x=0, y=0, z=0}, + models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 15} + } + } +}) diff --git a/modern/mod.conf b/modern/mod.conf new file mode 100644 index 0000000..baedac8 --- /dev/null +++ b/modern/mod.conf @@ -0,0 +1,4 @@ +name = modern +description = Modern-style furniture +depends = decor_api +author = Andrey01 diff --git a/modern/models/multidecor_character_sitting.b3d b/modern/models/multidecor_character_sitting.b3d new file mode 100644 index 0000000..ad26a55 Binary files /dev/null and b/modern/models/multidecor_character_sitting.b3d differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_chair.b3d b/modern/models/multidecor_kitchen_modern_wooden_chair.b3d new file mode 100644 index 0000000..59c2fc2 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_chair.b3d differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_chair.blend b/modern/models/multidecor_kitchen_modern_wooden_chair.blend new file mode 100644 index 0000000..7bd33f9 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_chair.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_chair.blend1 b/modern/models/multidecor_kitchen_modern_wooden_chair.blend1 new file mode 100644 index 0000000..a46dd46 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_chair.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table.b3d b/modern/models/multidecor_kitchen_modern_wooden_table.b3d new file mode 100644 index 0000000..6de67d8 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table.b3d differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table.blend b/modern/models/multidecor_kitchen_modern_wooden_table.blend new file mode 100644 index 0000000..a24fcde Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table.blend1 new file mode 100644 index 0000000..5236843 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_1.blend b/modern/models/multidecor_kitchen_modern_wooden_table_1.blend new file mode 100644 index 0000000..76a0951 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_1.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_1.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table_1.blend1 new file mode 100644 index 0000000..dd0df9d Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_1.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_2.blend b/modern/models/multidecor_kitchen_modern_wooden_table_2.blend new file mode 100644 index 0000000..875ca33 Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_2.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_2.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table_2.blend1 new file mode 100644 index 0000000..a78d92d Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_2.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_3.blend b/modern/models/multidecor_kitchen_modern_wooden_table_3.blend new file mode 100644 index 0000000..f3e803c Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_3.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_3.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table_3.blend1 new file mode 100644 index 0000000..dd0df9d Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_3.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_4.blend b/modern/models/multidecor_kitchen_modern_wooden_table_4.blend new file mode 100644 index 0000000..ae10b0f Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_4.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_4.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table_4.blend1 new file mode 100644 index 0000000..f3e803c Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_4.blend1 differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_5.blend b/modern/models/multidecor_kitchen_modern_wooden_table_5.blend new file mode 100644 index 0000000..da2b0de Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_5.blend differ diff --git a/modern/models/multidecor_kitchen_modern_wooden_table_5.blend1 b/modern/models/multidecor_kitchen_modern_wooden_table_5.blend1 new file mode 100644 index 0000000..ae10b0f Binary files /dev/null and b/modern/models/multidecor_kitchen_modern_wooden_table_5.blend1 differ diff --git a/modern/models/multidecor_modern_round_metallic_stool.b3d b/modern/models/multidecor_modern_round_metallic_stool.b3d new file mode 100644 index 0000000..ccfd715 Binary files /dev/null and b/modern/models/multidecor_modern_round_metallic_stool.b3d differ diff --git a/modern/models/multidecor_modern_round_metallic_stool.blend b/modern/models/multidecor_modern_round_metallic_stool.blend new file mode 100644 index 0000000..6955f56 Binary files /dev/null and b/modern/models/multidecor_modern_round_metallic_stool.blend differ diff --git a/modern/models/multidecor_modern_round_metallic_stool.blend1 b/modern/models/multidecor_modern_round_metallic_stool.blend1 new file mode 100644 index 0000000..8c216ef Binary files /dev/null and b/modern/models/multidecor_modern_round_metallic_stool.blend1 differ diff --git a/modern/models/multidecor_round_soft_metallic_chair.b3d b/modern/models/multidecor_round_soft_metallic_chair.b3d new file mode 100644 index 0000000..a67ea77 Binary files /dev/null and b/modern/models/multidecor_round_soft_metallic_chair.b3d differ diff --git a/modern/models/multidecor_round_soft_metallic_chair.blend b/modern/models/multidecor_round_soft_metallic_chair.blend new file mode 100644 index 0000000..2f4db70 Binary files /dev/null and b/modern/models/multidecor_round_soft_metallic_chair.blend differ diff --git a/modern/models/multidecor_round_soft_metallic_chair.blend1 b/modern/models/multidecor_round_soft_metallic_chair.blend1 new file mode 100644 index 0000000..b917dac Binary files /dev/null and b/modern/models/multidecor_round_soft_metallic_chair.blend1 differ diff --git a/modern/models/multidecor_soft_kitchen_modern_wooden_chair.b3d b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.b3d new file mode 100644 index 0000000..6cedd85 Binary files /dev/null and b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.b3d differ diff --git a/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend new file mode 100644 index 0000000..f504e7f Binary files /dev/null and b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend differ diff --git a/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend1 b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend1 new file mode 100644 index 0000000..c51e5a3 Binary files /dev/null and b/modern/models/multidecor_soft_kitchen_modern_wooden_chair.blend1 differ diff --git a/modern/models/multidecor_soft_modern_jungle_chair.b3d b/modern/models/multidecor_soft_modern_jungle_chair.b3d new file mode 100644 index 0000000..935aa91 Binary files /dev/null and b/modern/models/multidecor_soft_modern_jungle_chair.b3d differ diff --git a/modern/models/multidecor_soft_modern_jungle_chair.blend b/modern/models/multidecor_soft_modern_jungle_chair.blend new file mode 100644 index 0000000..83dd01d Binary files /dev/null and b/modern/models/multidecor_soft_modern_jungle_chair.blend differ diff --git a/modern/models/multidecor_soft_modern_jungle_chair.blend1 b/modern/models/multidecor_soft_modern_jungle_chair.blend1 new file mode 100644 index 0000000..96855bb Binary files /dev/null and b/modern/models/multidecor_soft_modern_jungle_chair.blend1 differ diff --git a/modern/textures/multidecor_metal_material.png b/modern/textures/multidecor_metal_material.png new file mode 100644 index 0000000..5be3c62 Binary files /dev/null and b/modern/textures/multidecor_metal_material.png differ diff --git a/modern/textures/multidecor_modern_jungle_chair.png b/modern/textures/multidecor_modern_jungle_chair.png new file mode 100644 index 0000000..998f89d Binary files /dev/null and b/modern/textures/multidecor_modern_jungle_chair.png differ diff --git a/modern/textures/multidecor_modern_round_metallic_stool.png b/modern/textures/multidecor_modern_round_metallic_stool.png new file mode 100644 index 0000000..54daa1d Binary files /dev/null and b/modern/textures/multidecor_modern_round_metallic_stool.png differ diff --git a/modern/textures/multidecor_round_soft_metallic_chair.png b/modern/textures/multidecor_round_soft_metallic_chair.png new file mode 100644 index 0000000..4d069a6 Binary files /dev/null and b/modern/textures/multidecor_round_soft_metallic_chair.png differ diff --git a/modern/textures/multidecor_wooden_material.png b/modern/textures/multidecor_wooden_material.png new file mode 100644 index 0000000..4567c6a Binary files /dev/null and b/modern/textures/multidecor_wooden_material.png differ diff --git a/modern/textures/multidecor_wool_material.png b/modern/textures/multidecor_wool_material.png new file mode 100644 index 0000000..a33aaa3 Binary files /dev/null and b/modern/textures/multidecor_wool_material.png differ diff --git a/modpack.conf b/modpack.conf new file mode 100644 index 0000000..a03912b --- /dev/null +++ b/modpack.conf @@ -0,0 +1,3 @@ +name = multidecor +description = Adds a huge amount of detailed furniture components, decorations and exterior stuff with various designs and styles of each epoch. +author = Andrey01