From 150b50a487cc767c8adfc2b826227d98a7733dcf Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Sun, 30 Sep 2012 01:51:59 -0400 Subject: [PATCH] Various changes Recipe changes: Brass and wrought iron poles, table legs, and fences/railings were too expensive in practice. Increased recipe outputs. Small square glass table now comes from one small round table (instead of three-to-two). Large square glass comes from one small square insted of two. Small round, small square, and large wooden tables follow the same pattern. All glass tables can be recycled back into glass blocks via the Vessels mod's recipes. All are 3:1 with glass fragments (and thus, 3:1 with glass blocks), so there's no glass wasted. All wooden tables can be crafted into sticks by putting three of a given item onto the crafting grid. Any such craft yields 4 sticks, so there's no waste. Other changes: 3d-ified nightstands, improved their textures somewhat. New nodes: * Added working oven (really just a furnace with new textures) * Added mini-fridge that stores 24 slots * Added kitchen cabinet that stores 24 slots * Added half-size kitchen cabinet that stores 12 slots (6x2) * Added kitchen sink with under-sink cabinet that stores 16 slots. * Added slab-sized and half-slab-sized glowlights (e.g. ceiling fixtures) * Added curtains in 6 colors: red, green, blue, purple, pink, white Notes: This mod now requires Moreblocks for some recipes - namely fridge and oven. --- crafts.lua | 270 ++++++++++------- dressers.lua | 85 ++++++ init.lua | 284 ++++++------------ kitchen_cabinet.lua | 142 +++++++++ nightstands.lua | 235 +++++++++++++++ oven.lua | 188 ++++++++++++ refrigerator.lua | 45 +++ textures/homedecor_curtain_blue.png | Bin 0 -> 411 bytes textures/homedecor_curtain_green.png | Bin 0 -> 506 bytes textures/homedecor_curtain_pink.png | Bin 0 -> 626 bytes textures/homedecor_curtain_red.png | Bin 0 -> 431 bytes textures/homedecor_curtain_violet.png | Bin 0 -> 454 bytes textures/homedecor_curtain_white.png | Bin 0 -> 308 bytes textures/homedecor_glowlight_tb.png | Bin 0 -> 371 bytes textures/homedecor_glowlight_thick_sides.png | Bin 0 -> 252 bytes textures/homedecor_glowlight_thin_sides.png | Bin 0 -> 209 bytes textures/homedecor_kitchen_cabinet_bottom.png | Bin 0 -> 393 bytes textures/homedecor_kitchen_cabinet_front.png | Bin 0 -> 513 bytes .../homedecor_kitchen_cabinet_front_half.png | Bin 0 -> 380 bytes textures/homedecor_kitchen_cabinet_sides.png | Bin 0 -> 429 bytes .../homedecor_kitchen_cabinet_sinktop.png | Bin 0 -> 347 bytes textures/homedecor_kitchen_cabinet_top.png | Bin 0 -> 446 bytes ...cor_nightstand_mahogany_1_drawer_front.png | Bin 651 -> 591 bytes ...cor_nightstand_mahogany_2_drawer_front.png | Bin 702 -> 535 bytes .../homedecor_nightstand_mahogany_back.png | Bin 0 -> 3121 bytes .../homedecor_nightstand_mahogany_bottom.png | Bin 0 -> 3183 bytes .../homedecor_nightstand_mahogany_left.png | Bin 0 -> 3205 bytes .../homedecor_nightstand_mahogany_right.png | Bin 0 -> 3198 bytes .../homedecor_nightstand_mahogany_top.png | Bin 0 -> 3195 bytes ...omedecor_nightstand_oak_1_drawer_front.png | Bin 716 -> 632 bytes ...omedecor_nightstand_oak_2_drawer_front.png | Bin 784 -> 583 bytes textures/homedecor_nightstand_oak_back.png | Bin 0 -> 3155 bytes textures/homedecor_nightstand_oak_bottom.png | Bin 0 -> 3215 bytes textures/homedecor_nightstand_oak_left.png | Bin 0 -> 3234 bytes textures/homedecor_nightstand_oak_right.png | Bin 0 -> 3230 bytes textures/homedecor_nightstand_oak_top.png | Bin 0 -> 3224 bytes textures/homedecor_oven_bottom.png | Bin 0 -> 584 bytes textures/homedecor_oven_front.png | Bin 0 -> 454 bytes textures/homedecor_oven_front_active.png | Bin 0 -> 489 bytes textures/homedecor_oven_side.png | Bin 0 -> 507 bytes textures/homedecor_oven_top.png | Bin 0 -> 389 bytes textures/homedecor_refrigerator_back.png | Bin 0 -> 553 bytes textures/homedecor_refrigerator_bottom.png | Bin 0 -> 445 bytes textures/homedecor_refrigerator_front.png | Bin 0 -> 443 bytes textures/homedecor_refrigerator_left.png | Bin 0 -> 450 bytes textures/homedecor_refrigerator_right.png | Bin 0 -> 458 bytes textures/homedecor_refrigerator_top.png | Bin 0 -> 494 bytes 47 files changed, 958 insertions(+), 291 deletions(-) create mode 100644 dressers.lua create mode 100644 kitchen_cabinet.lua create mode 100644 nightstands.lua create mode 100644 oven.lua create mode 100644 refrigerator.lua create mode 100644 textures/homedecor_curtain_blue.png create mode 100644 textures/homedecor_curtain_green.png create mode 100644 textures/homedecor_curtain_pink.png create mode 100644 textures/homedecor_curtain_red.png create mode 100644 textures/homedecor_curtain_violet.png create mode 100644 textures/homedecor_curtain_white.png create mode 100644 textures/homedecor_glowlight_tb.png create mode 100644 textures/homedecor_glowlight_thick_sides.png create mode 100644 textures/homedecor_glowlight_thin_sides.png create mode 100644 textures/homedecor_kitchen_cabinet_bottom.png create mode 100644 textures/homedecor_kitchen_cabinet_front.png create mode 100644 textures/homedecor_kitchen_cabinet_front_half.png create mode 100644 textures/homedecor_kitchen_cabinet_sides.png create mode 100644 textures/homedecor_kitchen_cabinet_sinktop.png create mode 100644 textures/homedecor_kitchen_cabinet_top.png create mode 100644 textures/homedecor_nightstand_mahogany_back.png create mode 100644 textures/homedecor_nightstand_mahogany_bottom.png create mode 100644 textures/homedecor_nightstand_mahogany_left.png create mode 100644 textures/homedecor_nightstand_mahogany_right.png create mode 100644 textures/homedecor_nightstand_mahogany_top.png create mode 100644 textures/homedecor_nightstand_oak_back.png create mode 100644 textures/homedecor_nightstand_oak_bottom.png create mode 100644 textures/homedecor_nightstand_oak_left.png create mode 100644 textures/homedecor_nightstand_oak_right.png create mode 100644 textures/homedecor_nightstand_oak_top.png create mode 100644 textures/homedecor_oven_bottom.png create mode 100644 textures/homedecor_oven_front.png create mode 100644 textures/homedecor_oven_front_active.png create mode 100644 textures/homedecor_oven_side.png create mode 100644 textures/homedecor_oven_top.png create mode 100644 textures/homedecor_refrigerator_back.png create mode 100644 textures/homedecor_refrigerator_bottom.png create mode 100644 textures/homedecor_refrigerator_front.png create mode 100644 textures/homedecor_refrigerator_left.png create mode 100644 textures/homedecor_refrigerator_right.png create mode 100644 textures/homedecor_refrigerator_top.png diff --git a/crafts.lua b/crafts.lua index c0d3848d..066cffa7 100644 --- a/crafts.lua +++ b/crafts.lua @@ -194,19 +194,17 @@ minetest.register_craft( { -- minetest.register_craft( { - output = 'homedecor:glass_table_small_square 2', - recipe = { - { 'homedecor:glass_table_small_round', 'homedecor:glass_table_small_round', 'homedecor:glass_table_small_round' }, - }, + type = "shapeless", + output = 'homedecor:glass_table_small_square', + recipe = { 'homedecor:glass_table_small_round' }, }) -- minetest.register_craft( { - output = 'homedecor:glass_table_large 2', - recipe = { - { 'homedecor:glass_table_small_square', 'homedecor:glass_table_small_square' }, - }, + type = "shapeless", + output = 'homedecor:glass_table_large', + recipe = { 'homedecor:glass_table_small_square' }, }) -- @@ -306,10 +304,9 @@ minetest.register_craft({ }) minetest.register_craft( { + type = "shapeless", output = 'homedecor:wood_table_small_square 2', - recipe = { - { 'homedecor:wood_table_small_round', 'homedecor:wood_table_small_round', 'homedecor:wood_table_small_round' }, - }, + recipe = { 'homedecor:wood_table_small_round' }, }) minetest.register_craft({ @@ -321,10 +318,9 @@ minetest.register_craft({ -- minetest.register_craft( { + type = "shapeless", output = 'homedecor:wood_table_large 2', - recipe = { - { 'homedecor:wood_table_small_square', 'homedecor:wood_table_small_square' }, - }, + recipe = { 'homedecor:wood_table_small_square' }, }) minetest.register_craft({ @@ -630,7 +626,7 @@ minetest.register_craft({ -- Table legs and stuff minetest.register_craft( { - output = 'homedecor:table_legs_wrought_iron 2', + output = 'homedecor:table_legs_wrought_iron 3', recipe = { { '', 'default:iron_lump', '' }, { '', 'default:iron_lump', '' }, @@ -641,7 +637,7 @@ minetest.register_craft( { -- minetest.register_craft( { - output = 'homedecor:pole_wrought_iron 2', + output = 'homedecor:pole_wrought_iron 4', recipe = { { 'default:iron_lump', }, { 'default:iron_lump', }, @@ -650,7 +646,7 @@ minetest.register_craft( { }) minetest.register_craft( { - output = 'homedecor:fence_wrought_iron 4', + output = 'homedecor:fence_wrought_iron 6', recipe = { { 'default:iron_lump','default:iron_lump','default:iron_lump' }, { 'default:iron_lump','default:iron_lump','default:iron_lump' }, @@ -771,91 +767,6 @@ minetest.register_craft({ burntime = 30, }) - --- - -minetest.register_craftitem("homedecor:drawer_large", { - description = "Large Wooden Drawer", - inventory_image = "homedecor_drawer_large.png", -}) - - -minetest.register_craft( { - output = 'homedecor:drawer_large', - recipe = { - { 'default:wood', 'default:steel_ingot', 'default:wood' }, - { 'default:wood', 'default:wood', 'default:wood' }, - }, -}) - -minetest.register_craft({ - type = 'fuel', - recipe = 'homedecor:drawer_large', - burntime = 30, -}) - --- - -minetest.register_craftitem("homedecor:dresser_oak", { - description = "Three-Drawer Oak Dresser", - inventory_image = "homedecor_dresser_oak_inv.png", -}) - - -minetest.register_craft( { - output = 'homedecor:dresser_oak', - recipe = { - { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, - { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, - { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, - }, -}) - -minetest.register_craft({ - type = 'fuel', - recipe = 'homedecor:dresser_oak', - burntime = 30, -}) - --- - -minetest.register_craftitem("homedecor:dresser_mahogany", { - description = "Three-Drawer Mahogany Dresser", - inventory_image = "homedecor_dresser_mahogany_inv.png", -}) - -minetest.register_craft( { - type = 'shapeless', - output = 'homedecor:dresser_mahogany', - recipe = { - 'homedecor:dresser_oak', - 'unifieddyes:dark_orange', - 'unifieddyes:dark_orange', - }, - replacements = { - {'unifieddyes:dark_orange', 'vessels:glass_bottle'}, - {'unifieddyes:dark_orange', 'vessels:glass_bottle'} - }, -}) - -minetest.register_craft( { - type = 'shapeless', - output = 'homedecor:dresser_mahogany', - recipe = { - 'homedecor:dresser_oak', - 'default:dirt', - 'default:dirt', - 'default:coal_lump', - 'default:coal_lump', - }, -}) - -minetest.register_craft({ - type = 'fuel', - recipe = 'homedecor:dresser_oak', - burntime = 30, -}) - -- ========================================================== -- Recipes that require materials from Calinou's Moreores mod @@ -875,7 +786,7 @@ minetest.register_craft( { minetest.register_craft( { - output = 'homedecor:table_legs_brass 2', + output = 'homedecor:table_legs_brass 3', recipe = { { '', 'homedecor:brass_ingot', '' }, { '', 'homedecor:brass_ingot', '' }, @@ -884,7 +795,7 @@ minetest.register_craft( { }) minetest.register_craft( { - output = 'homedecor:pole_brass 2', + output = 'homedecor:pole_brass 4', recipe = { { '', 'homedecor:brass_ingot', '' }, { '', 'homedecor:brass_ingot', '' }, @@ -893,7 +804,7 @@ minetest.register_craft( { }) minetest.register_craft( { - output = 'homedecor:fence_brass 4', + output = 'homedecor:fence_brass 6', recipe = { { 'homedecor:brass_ingot', 'homedecor:brass_ingot', 'homedecor:brass_ingot' }, { 'homedecor:brass_ingot', 'homedecor:brass_ingot', 'homedecor:brass_ingot' }, @@ -1038,5 +949,154 @@ minetest.register_craft( { }, }) +-- Curtains + +local curtaincolors = { + "red", + "green", + "blue", + "white", + "pink", + "violet" +} + +for c in ipairs(curtaincolors) do + local color = curtaincolors[c] + minetest.register_craft( { + output = "homedecor:curtain_"..color.." 3", + recipe = { + { "wool:"..color, "", ""}, + { "wool:"..color, "", ""}, + { "wool:"..color, "", ""}, + }, + }) +end + + +-- Recycling recipes + +-- Glass object recycle via the glass fragments item/recipe in the Vessels mod. + +minetest.register_craft({ + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "homedecor:glass_table_small_round", + "homedecor:glass_table_small_round", + "homedecor:glass_table_small_round" + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "homedecor:glass_table_small_square", + "homedecor:glass_table_small_square", + "homedecor:glass_table_small_square" + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "homedecor:glass_table_large", + "homedecor:glass_table_large", + "homedecor:glass_table_large" + } +}) + +-- Wooden tabletops can turn into sticks + +minetest.register_craft({ + type = "shapeless", + output = "default:stick 4", + recipe = { + "homedecor:wood_table_small_round", + "homedecor:wood_table_small_round", + "homedecor:wood_table_small_round" + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "default:stick 4", + recipe = { + "homedecor:wood_table_small_square", + "homedecor:wood_table_small_square", + "homedecor:wood_table_small_square" + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "default:stick 4", + recipe = { + "homedecor:wood_table_large", + "homedecor:wood_table_large", + "homedecor:wood_table_large" + } +}) + +-- Kitchen stuff + +minetest.register_craft({ + output = "homedecor:oven", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot", }, + {"default:steel_ingot", "moreblocks:ironglass", "default:steel_ingot", }, + {"default:steel_ingot", "moreores:copper_ingot", "default:steel_ingot", }, + } +}) + +minetest.register_craft({ + output = "homedecor:refrigerator 2", + recipe = { + {"default:steel_ingot", "moreblocks:glowglass", "default:steel_ingot", }, + {"default:steel_ingot", "moreores:tin_ingot", "default:steel_ingot", }, + {"default:steel_ingot", "default:clay", "default:steel_ingot", }, + } +}) + +minetest.register_craft({ + output = "homedecor:kitchen_cabinet", + recipe = { + {"default:wood", "default:stick", "default:wood", }, + {"default:wood", "default:stick", "default:wood", }, + {"default:wood", "default:stick", "default:wood", }, + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "homedecor:kitchen_cabinet_half 2", + recipe = { "homedecor:kitchen_cabinet" } +}) + +minetest.register_craft({ + output = "homedecor:kitchen_cabinet_with_sink", + recipe = { + {"default:wood", "default:steel_ingot", "default:wood", }, + {"default:wood", "default:steel_ingot", "default:wood", }, + {"default:wood", "default:stick", "default:wood", }, + } +}) + +-- Lighting + +minetest.register_craft({ + output = "homedecor:glowlight_thick 6", + recipe = { + {"moreblocks:superglowglass", "moreblocks:superglowglass", "moreblocks:superglowglass", }, + } +}) + +minetest.register_craft({ + output = "homedecor:glowlight_thin 6", + recipe = { + {"homedecor:glowlight_thick", "homedecor:glowlight_thick", "homedecor:glowlight_thick", }, + } +}) diff --git a/dressers.lua b/dressers.lua new file mode 100644 index 00000000..8b4e5a0e --- /dev/null +++ b/dressers.lua @@ -0,0 +1,85 @@ +-- This file supplies dressers + + +minetest.register_craftitem("homedecor:drawer_large", { + description = "Large Wooden Drawer", + inventory_image = "homedecor_drawer_large.png", +}) + + +minetest.register_craft( { + output = 'homedecor:drawer_large', + recipe = { + { 'default:wood', 'default:steel_ingot', 'default:wood' }, + { 'default:wood', 'default:wood', 'default:wood' }, + }, +}) + +minetest.register_craft({ + type = 'fuel', + recipe = 'homedecor:drawer_large', + burntime = 30, +}) + +-- + +minetest.register_craftitem("homedecor:dresser_oak", { + description = "Three-Drawer Oak Dresser", + inventory_image = "homedecor_dresser_oak_inv.png", +}) + + +minetest.register_craft( { + output = 'homedecor:dresser_oak', + recipe = { + { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, + { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, + { 'default:wood', 'homedecor:drawer_large', 'default:wood' }, + }, +}) + +minetest.register_craft({ + type = 'fuel', + recipe = 'homedecor:dresser_oak', + burntime = 30, +}) + +-- + +minetest.register_craftitem("homedecor:dresser_mahogany", { + description = "Three-Drawer Mahogany Dresser", + inventory_image = "homedecor_dresser_mahogany_inv.png", +}) + +minetest.register_craft( { + type = 'shapeless', + output = 'homedecor:dresser_mahogany', + recipe = { + 'homedecor:dresser_oak', + 'unifieddyes:dark_orange', + 'unifieddyes:dark_orange', + }, + replacements = { + {'unifieddyes:dark_orange', 'vessels:glass_bottle'}, + {'unifieddyes:dark_orange', 'vessels:glass_bottle'} + }, +}) + +minetest.register_craft( { + type = 'shapeless', + output = 'homedecor:dresser_mahogany', + recipe = { + 'homedecor:dresser_oak', + 'default:dirt', + 'default:dirt', + 'default:coal_lump', + 'default:coal_lump', + }, +}) + +minetest.register_craft({ + type = 'fuel', + recipe = 'homedecor:dresser_oak', + burntime = 30, +}) + diff --git a/init.lua b/init.lua index bff66af8..d2eb4257 100644 --- a/init.lua +++ b/init.lua @@ -1,18 +1,21 @@ -- Home Decor mod by VanessaE --- 2012-06-12 +-- 2012-09-30 -- -- Mostly my own code, with bits and pieces lifted from Minetest's default --- lua files, from ironzorg's flowers mod +-- lua files and from ironzorg's flowers mod. Many thanks to GloopMaster +-- for helping me figure out the inventories used in the nightstands/dressers. -- --- See also, foldingdoors.lua (borrowed heavily from Minetest's default --- doors mod) +-- The code for ovens, nightstands, refrigerators are basically modified +-- copies of the code for chests and furnaces. -- --- This mod requires the presence of the "unifieddyes" mod, which also --- supplies ironzorg's flowers mod. --- --- License: GPL +-- License: LGPL -- +dofile(minetest.get_modpath("homedecor").."/kitchen_cabinet.lua") +dofile(minetest.get_modpath("homedecor").."/refrigerator.lua") +dofile(minetest.get_modpath("homedecor").."/oven.lua") +dofile(minetest.get_modpath("homedecor").."/nightstands.lua") +dofile(minetest.get_modpath("homedecor").."/dressers.lua") dofile(minetest.get_modpath("homedecor").."/television.lua") dofile(minetest.get_modpath("homedecor").."/foldingdoors_oak.lua") dofile(minetest.get_modpath("homedecor").."/foldingdoors_mahogany.lua") @@ -290,180 +293,6 @@ minetest.register_node('homedecor:stereo', { sounds = default.node_sound_leaves_defaults(), }) -minetest.register_node('homedecor:nightstand_oak_one_drawer', { - description = "Oak Nightstand with One Drawer", - tiles = { 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_1_drawer_front.png'}, - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_string("formspec", - "size[8,6]".. - "list[current_name;main;0,0;8,1;]".. - "list[current_player;main;0,2;8,4;]") - meta:set_string("infotext", "One-drawer Nightstand") - local inv = meta:get_inventory() - inv:set_size("main", 8) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from nightstand at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_node('homedecor:nightstand_oak_two_drawers', { - description = "Oak Nightstand with One Drawer", - tiles = { 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_sides.png', - 'homedecor_nightstand_oak_2_drawer_front.png'}, - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_string("formspec", - "size[8,7]".. - "list[current_name;main;0,0;8,2;]".. - "list[current_player;main;0,3;8,4;]") - meta:set_string("infotext", "Two-drawer Nightstand") - local inv = meta:get_inventory() - inv:set_size("main", 16) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from nightstand at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_node('homedecor:nightstand_mahogany_one_drawer', { - description = "Oak Nightstand with One Drawer", - tiles = { 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_1_drawer_front.png'}, - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_string("formspec", - "size[8,6]".. - "list[current_name;main;0,0;8,1;]".. - "list[current_player;main;0,2;8,4;]") - meta:set_string("infotext", "One-drawer Nightstand") - local inv = meta:get_inventory() - inv:set_size("main", 8) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from nightstand at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_node('homedecor:nightstand_mahogany_two_drawers', { - description = "Oak Nightstand with One Drawer", - tiles = { 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_sides.png', - 'homedecor_nightstand_mahogany_2_drawer_front.png'}, - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - meta:set_string("formspec", - "size[8,7]".. - "list[current_name;main;0,0;8,2;]".. - "list[current_player;main;0,3;8,4;]") - meta:set_string("infotext", "Two-drawer Nightstand") - local inv = meta:get_inventory() - inv:set_size("main", 16) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to nightstand at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from nightstand at "..minetest.pos_to_string(pos)) - end, -}) - minetest.register_node('homedecor:utility_table_top', { description = "Utility Table", tiles = { 'homedecor_utility_table_top.png' }, @@ -941,10 +770,6 @@ minetest.register_node('homedecor:utilitytable2', { sounds = default.node_sound_leaves_defaults(), }) --- =================================================== --- everything after this line is for testing purposes. --- =================================================== - -- cylinder-shaped objects courtesy Jeija local cylbox = {} @@ -1076,4 +901,91 @@ minetest.register_node('homedecor:speaker_small', { sounds = default.node_sound_leaves_defaults(), }) +minetest.register_node('homedecor:glowlight_thick', { + description = "Glowlight (thick)", + drawtype = "nodebox", + tiles = { 'homedecor_glowlight_tb.png', + 'homedecor_glowlight_tb.png', + 'homedecor_glowlight_thick_sides.png', + 'homedecor_glowlight_thick_sides.png', + 'homedecor_glowlight_thick_sides.png', + 'homedecor_glowlight_thick_sides.png'}, + selection_box = { + type = "fixed", + fixed = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + walkable = true, + groups = { snappy = 3 }, + light_source = LIGHT_MAX, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node('homedecor:glowlight_thin', { + description = "Glowlight (thin)", + drawtype = "nodebox", + tiles = { 'homedecor_glowlight_tb.png', + 'homedecor_glowlight_tb.png', + 'homedecor_glowlight_thin_sides.png', + 'homedecor_glowlight_thin_sides.png', + 'homedecor_glowlight_thin_sides.png', + 'homedecor_glowlight_thin_sides.png'}, + selection_box = { + type = "fixed", + fixed = { -0.5, 0.25, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, 0.25, -0.5, 0.5, 0.5, 0.5 } + }, + + sunlight_propagates = false, + paramtype = "light", + walkable = true, + groups = { snappy = 3 }, + light_source = LIGHT_MAX-1, + sounds = default.node_sound_leaves_defaults(), +}) + +-- + +local curtaincolors = { + "red", + "green", + "blue", + "white", + "pink", + "violet" +} + +for c in ipairs(curtaincolors) do + local color = curtaincolors[c] + +minetest.register_node("homedecor:curtain_"..color, { + description = "Curtains ("..color..")", + tiles = { "homedecor_curtain_"..color..".png" }, + inventory_image = "homedecor_curtain_"..color..".png", + wield_image = "homedecor_curtain_"..color..".png", + drawtype = 'signlike', + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + paramtype2 = 'wallmounted', + selection_box = { + type = "wallmounted", + --wall_side = = + }, +}) + +end + print("[HomeDecor] Loaded!") diff --git a/kitchen_cabinet.lua b/kitchen_cabinet.lua new file mode 100644 index 00000000..cda8ef6b --- /dev/null +++ b/kitchen_cabinet.lua @@ -0,0 +1,142 @@ +-- This file supplies Kitchen cabinets and kitchen sink + +minetest.register_node('homedecor:kitchen_cabinet', { + description = "Kitchen Cabinet", + tiles = { 'homedecor_kitchen_cabinet_top.png', + 'homedecor_kitchen_cabinet_bottom.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,8]".. + "list[current_name;main;0,0;8,3;]".. + "list[current_player;main;0,4;8,4;]") + meta:set_string("infotext", "Kitchen cabinet") + local inv = meta:get_inventory() + inv:set_size("main", 24) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in kitchen cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to kitchen cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from kitchen cabinet at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node('homedecor:kitchen_cabinet_half', { + drawtype="nodebox", + description = 'Half-height Kitchen Cabinet (on ceiling)', + tiles = { 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_bottom.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_front_half.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 } + }, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,7]".. + "list[current_name;main;0,0;6,2;]".. + "list[current_player;main;0,3;8,4;]") + meta:set_string("infotext", "Kitchen cabinet") + local inv = meta:get_inventory() + inv:set_size("main", 12) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in kitchen cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to kitchen cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from kitchen cabinet at "..minetest.pos_to_string(pos)) + end, +}) + + + +minetest.register_node('homedecor:kitchen_cabinet_with_sink', { + description = "Kitchen Cabinet with sink", + tiles = { 'homedecor_kitchen_cabinet_sinktop.png', + 'homedecor_kitchen_cabinet_bottom.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_sides.png', + 'homedecor_kitchen_cabinet_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,7]".. + "list[current_name;main;0,0;8,2;]".. + "list[current_player;main;0,3;8,4;]") + meta:set_string("infotext", "Under-sink cabinet") + local inv = meta:get_inventory() + inv:set_size("main", 16) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in under-sink cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to under-sink cabinet at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from under-sink cabinet at "..minetest.pos_to_string(pos)) + end, +}) + diff --git a/nightstands.lua b/nightstands.lua new file mode 100644 index 00000000..0bedae6a --- /dev/null +++ b/nightstands.lua @@ -0,0 +1,235 @@ +-- This file supplies nightstands + +minetest.register_node('homedecor:nightstand_oak_one_drawer', { + drawtype = "nodebox", + description = "Oak Nightstand with One Drawer", + tiles = { 'homedecor_nightstand_oak_top.png', + 'homedecor_nightstand_oak_bottom.png', + 'homedecor_nightstand_oak_right.png', + 'homedecor_nightstand_oak_left.png', + 'homedecor_nightstand_oak_back.png', + 'homedecor_nightstand_oak_1_drawer_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, 0, -30/64, 8/16, 8/16, 8/16 }, -- top half + { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64}, -- drawer face + { -8/16, -8/16, -30/64, -7/16, 0, 8/16 }, -- left + { 7/16, -8/16, -30/64, 8/16, 0, 8/16 }, -- right + { -8/16, -8/16, 7/16, 8/16, 0, 8/16 }, -- back + { -8/16, -8/16, -30/64, 8/16, -7/16, 8/16 } -- bottom + } + }, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,6]".. + "list[current_name;main;0,0;8,1;]".. + "list[current_player;main;0,2;8,4;]") + meta:set_string("infotext", "One-drawer Nightstand") + local inv = meta:get_inventory() + inv:set_size("main", 8) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from nightstand at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node('homedecor:nightstand_oak_two_drawers', { + drawtype = "nodebox", + description = "Oak Nightstand with One Drawer", + tiles = { 'homedecor_nightstand_oak_top.png', + 'homedecor_nightstand_oak_bottom.png', + 'homedecor_nightstand_oak_right.png', + 'homedecor_nightstand_oak_left.png', + 'homedecor_nightstand_oak_back.png', + 'homedecor_nightstand_oak_2_drawer_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, -8/16, -30/64, 8/16, 8/16, 8/16 }, -- main body + { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64 }, -- top drawer face + { -7/16, -7/16, -32/64, 7/16, -1/16, -29/64 }, -- bottom drawer face + + } + }, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,7]".. + "list[current_name;main;0,0;8,2;]".. + "list[current_player;main;0,3;8,4;]") + meta:set_string("infotext", "Two-drawer Nightstand") + local inv = meta:get_inventory() + inv:set_size("main", 16) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from nightstand at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node('homedecor:nightstand_mahogany_one_drawer', { + drawtype = "nodebox", + description = "Mahogany Nightstand with One Drawer", + tiles = { 'homedecor_nightstand_mahogany_top.png', + 'homedecor_nightstand_mahogany_bottom.png', + 'homedecor_nightstand_mahogany_right.png', + 'homedecor_nightstand_mahogany_left.png', + 'homedecor_nightstand_mahogany_back.png', + 'homedecor_nightstand_mahogany_1_drawer_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, 0, -30/64, 8/16, 8/16, 8/16 }, -- top half + { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64}, -- drawer face + { -8/16, -8/16, -30/64, -7/16, 0, 8/16 }, -- left + { 7/16, -8/16, -30/64, 8/16, 0, 8/16 }, -- right + { -8/16, -8/16, 7/16, 8/16, 0, 8/16 }, -- back + { -8/16, -8/16, -30/64, 8/16, -7/16, 8/16 } -- bottom + } + }, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,6]".. + "list[current_name;main;0,0;8,1;]".. + "list[current_player;main;0,2;8,4;]") + meta:set_string("infotext", "One-drawer Nightstand") + local inv = meta:get_inventory() + inv:set_size("main", 8) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from nightstand at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node('homedecor:nightstand_mahogany_two_drawers', { + drawtype = "nodebox", + description = "Mahogany Nightstand with Two Drawers", + tiles = { 'homedecor_nightstand_mahogany_top.png', + 'homedecor_nightstand_mahogany_bottom.png', + 'homedecor_nightstand_mahogany_right.png', + 'homedecor_nightstand_mahogany_left.png', + 'homedecor_nightstand_mahogany_back.png', + 'homedecor_nightstand_mahogany_2_drawer_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, -8/16, -30/64, 8/16, 8/16, 8/16 }, -- main body + { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64 }, -- top drawer face + { -7/16, -7/16, -32/64, 7/16, -1/16, -29/64 }, -- bottom drawer face + + } + }, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,7]".. + "list[current_name;main;0,0;8,2;]".. + "list[current_player;main;0,3;8,4;]") + meta:set_string("infotext", "Two-drawer Nightstand") + local inv = meta:get_inventory() + inv:set_size("main", 16) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to nightstand at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from nightstand at "..minetest.pos_to_string(pos)) + end, +}) diff --git a/oven.lua b/oven.lua new file mode 100644 index 00000000..85ab9cdb --- /dev/null +++ b/oven.lua @@ -0,0 +1,188 @@ +-- This code supplies an oven/stove. Basically it's just a copy of the default furnace with different textures. + +default.oven_inactive_formspec = + "size[8,9]".. + "image[2,2;1,1;default_furnace_fire_bg.png]".. + "list[current_name;fuel;2,3;1,1;]".. + "list[current_name;src;2,1;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]" + +minetest.register_node("homedecor:oven", { + description = "Oven", + tiles = {"homedecor_oven_top.png", "homedecor_oven_bottom.png", "homedecor_oven_side.png", + "homedecor_oven_side.png", "homedecor_oven_side.png", "homedecor_oven_front.png"}, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", default.oven_inactive_formspec) + meta:set_string("infotext", "Oven") + local inv = meta:get_inventory() + inv:set_size("fuel", 1) + inv:set_size("src", 1) + inv:set_size("dst", 4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("fuel") then + return false + elseif not inv:is_empty("dst") then + return false + elseif not inv:is_empty("src") then + return false + end + return true + end, +}) + +minetest.register_node("homedecor:oven_active", { + description = "Oven", + tiles = {"homedecor_oven_top.png", "homedecor_oven_bottom.png", "homedecor_oven_side.png", + "homedecor_oven_side.png", "homedecor_oven_side.png", "homedecor_oven_front_active.png"}, + paramtype2 = "facedir", + light_source = 8, + drop = "homedecor:oven", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", default.oven_inactive_formspec) + meta:set_string("infotext", "Oven"); + local inv = meta:get_inventory() + inv:set_size("fuel", 1) + inv:set_size("src", 1) + inv:set_size("dst", 4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("fuel") then + return false + elseif not inv:is_empty("dst") then + return false + elseif not inv:is_empty("src") then + return false + end + return true + end, +}) + +function hacky_swap_node(pos,name) + local node = minetest.env:get_node(pos) + local meta = minetest.env:get_meta(pos) + local meta0 = meta:to_table() + if node.name == name then + return + end + node.name = name + local meta0 = meta:to_table() + minetest.env:set_node(pos,node) + meta = minetest.env:get_meta(pos) + meta:from_table(meta0) +end + +minetest.register_abm({ + nodenames = {"homedecor:oven","homedecor:oven_active"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.env:get_meta(pos) + for i, name in ipairs({ + "fuel_totaltime", + "fuel_time", + "src_totaltime", + "src_time" + }) do + if meta:get_string(name) == "" then + meta:set_float(name, 0.0) + end + end + + local inv = meta:get_inventory() + + local srclist = inv:get_list("src") + local cooked = nil + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + end + + local was_active = false + + if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then + was_active = true + meta:set_float("fuel_time", meta:get_float("fuel_time") + 1) + meta:set_float("src_time", meta:get_float("src_time") + 1) + if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then + -- check if there's room for output in "dst" list + if inv:room_for_item("dst",cooked.item) then + -- Put result in "dst" list + inv:add_item("dst", cooked.item) + -- take stuff from "src" list + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + else + print("Could not insert '"..cooked.item:to_string().."'") + end + meta:set_string("src_time", 0) + end + end + + if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then + local percent = math.floor(meta:get_float("fuel_time") / + meta:get_float("fuel_totaltime") * 100) + meta:set_string("infotext","Oven active: "..percent.."%") + hacky_swap_node(pos,"homedecor:oven_active") + meta:set_string("formspec", + "size[8,9]".. + "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:".. + (100-percent)..":default_furnace_fire_fg.png]".. + "list[current_name;fuel;2,3;1,1;]".. + "list[current_name;src;2,1;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]") + return + end + + local fuel = nil + local cooked = nil + local fuellist = inv:get_list("fuel") + local srclist = inv:get_list("src") + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + end + if fuellist then + fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + end + + if fuel.time <= 0 then + meta:set_string("infotext","Oven out of fuel") + hacky_swap_node(pos,"homedecor:oven") + meta:set_string("formspec", default.oven_inactive_formspec) + return + end + + if cooked.item:is_empty() then + if was_active then + meta:set_string("infotext","Oven is empty") + hacky_swap_node(pos,"homedecor:oven") + meta:set_string("formspec", default.oven_inactive_formspec) + end + return + end + + meta:set_string("fuel_totaltime", fuel.time) + meta:set_string("fuel_time", 0) + + local stack = inv:get_stack("fuel", 1) + stack:take_item() + inv:set_stack("fuel", 1, stack) + end, +}) diff --git a/refrigerator.lua b/refrigerator.lua new file mode 100644 index 00000000..bd0b6379 --- /dev/null +++ b/refrigerator.lua @@ -0,0 +1,45 @@ +-- This file supplies refrigerators + +minetest.register_node('homedecor:refrigerator', { + description = "Refrigerator", + tiles = { 'homedecor_refrigerator_top.png', + 'homedecor_refrigerator_bottom.png', + 'homedecor_refrigerator_right.png', + 'homedecor_refrigerator_left.png', + 'homedecor_refrigerator_back.png', + 'homedecor_refrigerator_front.png'}, + sunlight_propagates = false, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + groups = { snappy = 3 }, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "size[8,8]".. + "list[current_name;main;0,0;8,3;]".. + "list[current_player;main;0,4;8,4;]") + meta:set_string("infotext", "Refrigerator") + local inv = meta:get_inventory() + inv:set_size("main", 24) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in refrigerator at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to refrigerator at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from refrigerator at "..minetest.pos_to_string(pos)) + end, +}) + diff --git a/textures/homedecor_curtain_blue.png b/textures/homedecor_curtain_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e2af931377d26ec20ccd82881be6e0fe8204f6 GIT binary patch literal 411 zcmV;M0c8G(P)tL5CkLB%^X4e zWM9fxIjqE`#}ynrvtU_$u+`J?MecZECooeB${?X)R`xk zRK0YPB!R=QV3I&yB<^G-OrA5l%FF;WJ1KbZX0{Fp%m7K!t^$x5-cx&?KHqo3vliI) z#dAUfGxto^`qI_4qUugsMJF*?D$struJwEhg2&o%u2v^$5`98I-MSAURG;U4z2TJs zJ&5>P2hx1;V{!pKQ%{tai*&~Kza$Gt3ekOPkB<6IpLPznZarbB)LbXDp1VnM>ie>M znmK;O{$tdcBc%VGdE}hRO?q8j>%_R))5e*{8{PLt{RGpADE zN9cX}yvwTc?hHvNxEui*4gUK5%XU=s?f56UyZ%%}OwQi>{C6brC)ZlX2?fam{*LlD(e6ilNY2OOV@=s)}U21z@cOqFj-YJ8i$uYdHJ%c&6v` z^JDmZ-_MWFaGvMcdxzql8x>O%8Pg*Oq73^wGxy#g=1eNjIs3CC0)w@d%OG^`C7GGS zsj9Aao56PXZI1=njtB@5krBb*csLZqWV2l+m@DsdA&~rz0YKlJD1rb&kxG(*pxLKk z0Eh@tH1pO4K@x^-k3EhIN$>Nny$F8wBha_C_wMR*PgU9e{;a1XLm>bR+V1K(Q(d|D w_BfGDc6YH1!+4)JGvDWxwSKJb&P+7^0`IFT3Wc}48UO$Q07*qoM6N<$g7k^pl>h($ literal 0 HcmV?d00001 diff --git a/textures/homedecor_curtain_pink.png b/textures/homedecor_curtain_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4782760ac39e5c9ef21327b54b434a31a32bb3 GIT binary patch literal 626 zcmV-&0*(ENP)~{T0?kR-T4U8M#Cj$I z-1j|~lxh)T8TssH-R#Tl8HqnWK5o}*E44flGWi&n&6HAyNkrWSbu%JTmb&cf;}&9H zFkm{zrR1mWDfMDz&zI|23nS54%UTPWR<+N!cSpQzGP{(L2>;EGuwAbE-h01Dgf=KR zANS3(Up7Sq5fSl`6A>XZGt4$d>z;)s006bz+!l{Bv5H=|=@=Q}9>{6Q=N!w4D9h?L zW}C2x7ur!b7iw>9T50X9MOD4`1i)+Jf_y(%g^|vb$p!y;+~+W4wj)P%MAT~|KvgxQ zJ#Okf+Oj^d8~Lvn7ea2C<^X_vKRj;(Fqd;NA>!L{AVMx@jJtaGKdr=>Px# M07*qoM6N<$g4jVC%>V!Z literal 0 HcmV?d00001 diff --git a/textures/homedecor_curtain_red.png b/textures/homedecor_curtain_red.png new file mode 100644 index 0000000000000000000000000000000000000000..a9462d022118b5d0208fcb10b90f5bb1e81b897c GIT binary patch literal 431 zcmV;g0Z{&lP)|`$kcAusa{@JS{@VLSRgl_51z3s{VF5`B^nHAHA#ATe_7+Ar-?t@6 zB(`lUDZuv0hXj-)sb9FBY3StN-ps5dpZiYoANeFbT`TQrC?yaz}p9AAW6>{v(u;bzP3aXOQWZ$uvL>7d|j7q#8vg+SI>-+JK}~0tRwXUD_SiPI)q-1UyP-jnn6{RYd>2jKxgqYN%vv{3 zChVrffZIR;;q(CISVOTbIjJ==@@}_51=)vdX3f%gWL@u9IY4$AJRUDI3sButqNc?y zxzbT-5=oM7J*Ac_)B7s{oMfl-z_MzO=b(u!1?F*Exfpb1mEoVpJ~D5E!Mhd z(vgkFpae*n0BFl;pFWuVc^6a9>n?&hamE%B3o1p6>TKK<_bly85}Sb4q9e E0Na9lMgRZ+ literal 0 HcmV?d00001 diff --git a/textures/homedecor_glowlight_tb.png b/textures/homedecor_glowlight_tb.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab5255257a196f0c132ba9a112876e560893912 GIT binary patch literal 371 zcmV-(0gV2MP)SVWuQd>JySAYeCCn35bL|t)5nDy zAKdv&=0@S*n;xmVgt&q6e`ZSHiBvMug}6T7$c>4gj8sq=bD%9q*IQaTN|H^66W?0| zaB^NUI;b>Mc3zhOCC%P5%au7CWM^h!rLyrVxi8|JDY?5#mmU}FDC{hkMuaD00+pEu z3k&-j7&4vX5^W^CB=ck|Y&{XE z)7O>#4yPQm1n(=MyeUAT*`6+rAr`0KPB_TdWFX)Yzp$ZdqWrfb?LVe#P2D7C)jRvx z>~OQ0Cb>rW%cReUJ?`&(y2JFmqfz<4Q;}K=q^edFVdQ&MBb@0ME}?o&W#< literal 0 HcmV?d00001 diff --git a/textures/homedecor_glowlight_thin_sides.png b/textures/homedecor_glowlight_thin_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a7b5ddbad5e1a8a1106075ff1694f6a75de17c GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4yPQm1YfbVy&h1gz|+Ms#NzbZ^NxIn40u>ChI5465z{*~Eql|VrL1R^`c_yt zyZ!1)(N3=J*ulzf%KH1v1NR4WD-(}4g+A=m_LC^|xv8hR@#l_&Lp|*0d<)J$`mz0F zgMXUu$vqQwymDiTl1^^-&6jrZx+Uo=Wi{9DDR=K&^pF2XskIMF-po9s(=_w?f)e0003fNkl9k9JWHQ|obBeGch9}&Jhpt80{~F( zYXIzoVGtz5-m#cJ^8l>Y+nXzI>Y4!Jbk}8bE(j31F_HDt-9n|xmnt?vOpa}}8fvNP z@Nx%$vb=~>`fualIeomnI8^2)h*@*=0HhxP7-Iy$os1jBUg*Z}lCSAI2~qK~1|W?Z z2Iqnt+w!MptwzgJDelj_EH5bktokiKkisaDD}_-)q_O4wysnQKAMfjpyatKy%CSy$ z!;~YN`?~%v&PQ4CMMRozj2mhE_~=2dV)-$QOq4!jB@P00000NkvXXu0mjfdO57I literal 0 HcmV?d00001 diff --git a/textures/homedecor_kitchen_cabinet_front.png b/textures/homedecor_kitchen_cabinet_front.png new file mode 100644 index 0000000000000000000000000000000000000000..04d47055c4c6647339e2550f1411c7dce373f138 GIT binary patch literal 513 zcmV+c0{;DpP)pF2XskIMF-po9s(>f=A7DT0004?Nklfgc5PiGe?Z!4W ztr{UmL4`z!MuCgfOT~>pz+d2Z@Pklq+z=e$#>XK@NC;3-gizHqgvPbAb{5;S931*Z zTIMu6@4cCQv&)`5-YE*xTnl1t%EAbtz>uW#qO3O7eFoI%Bu)S!r6U0Beg7H9T4%ZM zxjH`r=QBMAFiT?QNLv;Ahq15ZcsjdxcT)gx8}iY^`@>Pv34^^K6GyJRe*2k-cDA=9 zXYW28M7^*R2D{JS1K{{yM7=Q2(mE%yoXDPq8N&i*{Djx{QSRgQyn*7<(5JUEPpF2XskIMF-po9s~p$ius_60003SNklVmp>j%VgS)3qV2gcFO@EhW=wz}U9C-79ko3IY^qC{0*rHq0eF6Wmr|*`@S3hFVo;i?HGnLY#NoCw zlezQ+UnJSpWuMixbsPNlW&j|XrJR!SEPjgSwZ-Ylad6ObU49<=(JUQ3jsZ{rn^x>Z zlXyRH2*DmoDe(ly@0hjrJ5hP@b75aU3;pF2XskIMF-po9s(=^z(wlC0003@NkljO-{m45dJ!~kEX@c zk_d^C5KVxU(w*FZl_zlNCA^F)kKn=scmRpU1znI}%Ay!s8t4nQ>BB{9Q;R6yYJT2) z-^{#`ZmxP}wc>gK004@j#__6AGh8oFn2I&xc%?A4R;`SuAEr?y0Gh@I{dU7-gMNE0 z#7Xne>eL7Qc1;(OgoeqQ^?j>TKRwa_5Wb=51_~ICCTZklye!5E|KZ~7n1{jE0+K0B zYr2uYv$`$YnOohKNW_nVyNB1JYjs;}rYH=*f< zNJQ@5-anUTD5Au|!{GYzJX5fp`8JVXS`vwPe0tlOmWhW!y3^rkk}0HGJJHKTB-7@s zDH#Bfh|MTD*(w<6K|Bf9E`My?`;*nJwZd8rm~&`6&^({z?fKoJX!7F{XY2 XVV;H$B+5e)00000NkvXXu0mjfjhwz5 literal 0 HcmV?d00001 diff --git a/textures/homedecor_kitchen_cabinet_sinktop.png b/textures/homedecor_kitchen_cabinet_sinktop.png new file mode 100644 index 0000000000000000000000000000000000000000..84049e2d05abb91bdbea2061c99bde887c5021fe GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMpdfpR zr>`sf9ZorB9oG2AqJco6U!E?GAsXj<13mo?I|#fvyDi7!C*#CJ%nt%9gY6Cm?&6ma8x7a5&PDkmjPZRAAyv!_5Z9 z40G(?C2;?~J$W}b!<>8HW3T6O#l1}o-|yk#Q+nA%J4fl1C3AzqqdR}!%Z7%AGH5Kl z@TFZ_Q7I+uw4;~i(k*Xx?-sbowfp_=`HOe0%hZf;JQq1_V%qiiZwv>{d|G~alGVah zT2gHfe|dChn;W>02CpF2XskIMF-po9s?`}#_B}t00049Nkl{e52mBqIV5VP@`5vb$An zW|3V$nII{EwU(U707;Uv2LM1-DMLKZJ$6xDaZG$^S; zRo(af-6E26PW>p4zdHwrFpu*_#PdGgrkJn$$SsQ%?DekPvWt%5qM7CO(2T`Gz|6dA oy(?BZ0NV4s$>yTF%{j^X1GpYWjL2Yxf&c&j07*qoM6N<$g6R6pMF0Q* literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_mahogany_1_drawer_front.png b/textures/homedecor_nightstand_mahogany_1_drawer_front.png index fe49707e33bbab7034741ccf0b51a36cb2893085..3cdfe7a08b851a770417b975db123bc91a282b94 100644 GIT binary patch delta 538 zcmV+#0_FXS100HhvL_t(2&rOg!j#O6^Mc4VfUsYFEsYL=3 zBCv!&>IpdZ1Uw^;fH@I(2Dk$UfRI2PAY{4ds(SC;d(Uy;#`2CtZ0*V6s?;VTVPxjvYU7_ie7Sx8Q-sve{m9E_ zPoC~~r8V!>U4K#SL@cFK8C>rE{OqW{n3kH8bxPqqT8=fb*1FKj!#8Qc>e zH~pKp_oI#duCI0N#Q_B%5|UsgIUEju&8EHjwB7#x$2*{N;eUyIgqBI-rkVN6tJi+L z9RsM$Ekp%@fFvUYLBSwdBh(nCN#};UYDEz3=pA=dkbe}fD5#-|8^dUd>RPHp00!;H z?j$2?67A8a7Bccuiq5BFt&jlvuZ8?@Xtb7(YzT6GIO_4+86jJ?IcpF?EdVu8dn}>> zl$w|0;+tK+DdV}$;ixh6(liNN@BpRj1W6~%t?R{GX}9|u_J|r_BLBVF)@EiY4e-uu csc!xcJriIYlH+FjmH+?%07*qoM6N<$f;4In!2kdN delta 598 zcmV-c0;&Da1d9cbKz{}f0W1y~{Mh*b00JsWL_t(2&n3=DZW~7w2H^h<)y*QQW<*3D z1ZU-icL96|pTw6ikdq~62oPiwFKv02N!pY+RCf*UWuXgv_~@@cUjO~>^LBHnwG7J` zSfxWX6mg{-krEzs82 z{XG9B!)`jhSg)08TMQQjyIjT=b*A~Io~W3mp}lCPIqGFzi@wDa-I=fj;S1#*L> z!|Bhr@4VDrLn|c+{=NA=<~Br`Yd_4p?U!##R#$x(307JjbDYP2e(X+P^J3ZA&1Mlp zn)12koEqhr(to6hl&qy(XR{c)?)R(JQR1G`^{X*f*-NDE7_-frvdUgHy^JYVDUcLP9{fEe^%f4CeARw>F^sekLc@Z!;++5P)|-%j=8ZYM&j z@ZzWiDAVe%gB04(jeJU(n7-r%IhY?6X k4)g$_12aIu9?lH=AKhX`p2$=sWB>pF07*qoM6N<$f_6Y4OaK4? diff --git a/textures/homedecor_nightstand_mahogany_2_drawer_front.png b/textures/homedecor_nightstand_mahogany_2_drawer_front.png index b34c821cab2df9490c449745e59ab666df7d9620..89dfde025a18e16bea4e9fcb40a7edb86adffce3 100644 GIT binary patch delta 481 zcmV<70UrLo1(yVnKz|7y1T!6knw1;?00Fj1L_t(2&yCSLZWKWf2H?M{tLMF5V{L#f zVFDx~H~_aG;yR?U zsdy{CDghATQq0{KBN?;hx-}RBRVK#F3s#<1iqJIpvc%EdQ)7gG7B@mLE zLDd}u5DEYyW{JUr6BBY#=DOKc-bNR)Y<_cle_XaPZGWfb-?VnTU!_oEKw})TTvh=&wRS)MwE=oie;O^%`CqKU5zj^V>jEeET!RxET<$jk{rD72V zb0i8*k*OBC`G0yRV1C)I#oG`W#yh8Dkkz$nIEtr?ZL^BdN4}^<9MW{vr_Vq8s^1-U zDb20aDW$$`w?CVjn;N)i(Zk{JdkI{zw0(blKA2mY$DEd?ucE|p9Q(d!_a}WRc7OLs z6+OQ=le50bb!%?J{^`MU&Kw7>Lo4L&t11~Tul7SNd0L$$DTXGT_`qP^ayk8B$yw5L z?0A3T!#p14_&7hS^u&kdxJtLHPJf6M(TBI!%m6?f00bfc0MuPK4Iwxw0Etp^ks$v8 Xw-!rPkRC!r00000NkvXXu0mjfa2MiM delta 650 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 LNkvXXu0mjf-sIQ; literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_mahogany_bottom.png b/textures/homedecor_nightstand_mahogany_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..a49357e98a67d05fe92897cb7011d2655dbd3d56 GIT binary patch literal 3183 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 literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_mahogany_right.png b/textures/homedecor_nightstand_mahogany_right.png new file mode 100644 index 0000000000000000000000000000000000000000..25ce91d75e02d77519982c1edbb08ad8db4ea65f GIT binary patch literal 3198 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 literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_mahogany_top.png b/textures/homedecor_nightstand_mahogany_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9753e4d3cf2f6c7dc31f5cc1fe5cf7d12582c3 GIT binary patch literal 3195 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 literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_oak_1_drawer_front.png b/textures/homedecor_nightstand_oak_1_drawer_front.png index 25894b32d90a8dda94ecaf9985a69be5db773ce0..97e01617959b6a4f11ae18826bb6c31b03af880f 100644 GIT binary patch delta 579 zcmV-J0=)gq1^5JzKz|7y1ThHPaT9d_00I|DL_t(2&rOiMiWE^4gzNm=+ubwUGrPJf zf{}s3f`PAKX5e#(Z)B{YPhcb{nu!`H2#W@Sfx0`+?yS?@_nvbMR>g`c`HGLC=MNuL zK!Kc^DQYI2!coh1oVt$35db8ql?tzexo(H;(DV_;wRpv}`F}N>O~Gj9{EH(Z#?i`Z zYBkMv`mi6oJz2N2wrz9HiI}Q;jR=GT#i<6dNKPUmMC@f^>1JJ*nkF&RSnA8SpI4{D zYBL@u_P{~2w(sNFbf0%76?ZPSQsM!l!EXWhciB1udJRE zU;+TpUv)z@24DdQ2((@u^Xlsf2;s2Ni^Bt@0D)>O0`iKm^SN65x4vpllEb5ZGW3vg~-q^Vc)oJzd?WP8Q?>-bZ?s z6faI+y*>LnYnm$C8+0N|4xX`F^YMdhl=T+#d~&gJMjapBF@IzYW~(+K-xwl7bHgLqR`>#E$Xy(zlOX<@c(Nc^^_Z}s}U zZu6Exrb~ za2&`Hx&-FWU(X{K|2`7aPnG}C?MPW`D^KQT yQE3$?qb@T;AOKmwz&Jo5h0+R0ssJ6P7)!$+jKM4uQdyOyEeeZhg2azses=4z>&NA4 zT&~6spMOcrh)6_eP$pq#ZRzZgQ;c8~=52Fv`S)hs?;X`qs%aYr;O4--Ie&`+&B;7Upq$yUCmWVQQf9;3v_XT%i^H4VT8~`L_Me_C zhGDh5zR{erP=chMi3luh`>m_$tmgM+*UR?N=>a$Mc7N2u6o)dO%ea|Bgkpx3 z$GX)Jk__6OE*{jC30FKN@s-ykU?Ajp_kaL*4*-Bf&MF}pgGd%dWcPaMx_b6Zz_$A{a0ft$l(_lK$mPD6V4`WyfN2>=-3PRx*oM3w*(0I;PfiJATbyCqUS UJw(X701E&B07*qoM6N<$f-c4TL;wH) delta 732 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 literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_oak_bottom.png b/textures/homedecor_nightstand_oak_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2f759fe384d346c86ceb1eaa43e884a86a7283fc GIT binary patch literal 3215 zcmV;A3~=*_P)j1^HV42lZa2jn55j)S9!ipu-pd!uXCy!YnK{>2n?1;Gf_2w z45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~wV&ec%EdXFAf9BHw zfSvf6djSAjlpz%XppgI|6J>}*0BAb^tj|`8MF3bZ02F3R#5n-iEdVe{S7t~6u(trf z&JYW-00;~KFj0twDF6g}0AR=?BX|IWnE(_<@>e|ZE3OddDgXd@nX){&BsoQaTL>+2 z2Uk}v9w^R97b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&JM25&Nhy=4qq+m zzXtyzVq)X|<DpKG zaQJ>aJVl|9x!Kv}EM4F8AGNmGkLXs)PCDQ+7;@>R$ z13uq10I+I40eg`xs9j?N_Dd%aSaiVR_W%I$yKlkNCzL=651DUOSSq$Ed=-((3YAKgCY2j1FI1_jrmEhm3sv(~%T$l4 zUQ>OpMpZLYTc&xiMv2YpRx)mRPGut5K^*>%BIv?Wdily+ylO`+*KY z$4Vz$Cr4+G&IO(4Q`uA9rwXSQO+7mGt}d!;r5mBUM0dY#r|y`ZzFvTyOmC;&dA;ZQ z9DOhSRQ+xGr}ak+SO&8UBnI0I&KNw!HF0k|9WTe*@liuv!$3o&VU=N*;e?U7(LAHo zMvX=fjA_PP<0Rv4#%;!P6gpNq-kQ#w?mvCS^p@!_XIRe=&)75LwiC-K#A%&Vo6|>U7iYP1gY$@siA#dZ zE|)$on;XX6$i3uBboFsv;d;{botv|p!tJQrukJSPY3_&IpUgC$DV|v~bI`-cL*P;6 z(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#xcdGYc?-xGyK60PqKI1$$-ZI`wBr znsy*W_HW0Wrec-#cqqYFCLW#$!oKatOZ#u3bsO~ z=u}!L*D43HXJuDrzs-rtIhL!QE6wf9v&!3$H=OUE|LqdO65*1zrG`saEge|qy{u|E zvOIBl+X~|q1uKSD2CO`|inc0k)laMKSC_7Sy(W51Yk^+D%7VeQ0c-0ERSM;Wee2xU z?Ojh;FInHUVfu!h8$K0@imnvf7nc=(*eKk1(e4|2y!JHg)!SRV_x(P}zS~s+RZZ1q)n)rh`?L2yu8FGY_?G)^U9C=S zaqY(g(gXbmBM!FLxzyDi(mhmCkJc;eM-ImyzW$x>cP$Mz4ONYt#^NJzM0w=t_X*$k z9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{oHRUHc}nwC z$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR&Rp`ibn>#> zOB6F(@)2{oV%K?xm;_x?s~noduI3P8=g1L-SoYA@fQEq)t)&$ z-M#aAZ}-Lb_1_lVesU-M&da;mcPH+xyidGe^g!)F*+boj)jwPQ+}Q8je`>&Yp!3n( zNB0JWgU|kv^^Xrj1&^7J%Z3ex>z+71IXU7#a{cN2r$f(V&nBK1{-XZNt``^}my^G3e5L*B!0Q>W+s4Ai9=^$VGcjKDR{QP2cieX!@1x%jPvm?ce<=TG z`LXp=(5L&88IzO$1Ou4!{5mfCvj6}932;bRa{vG?A^-p`A_1!6-I4$R00(qQO+^RX z2_6J739NP_;{X5w8J?qSfBp0P_Jit%HH*evs~wy58>?tLM(>ih#XzeFTyLh*b^w_P<{%MK zB7*EIEY30QL^uFwdhc$grBrDC(rR)lTk>gwd zq~Iue4o{1XOI?A45&+;1JuXkrAKwE2Kq59r#HuPY((hd>Mh9Bm z6yrRZ+#_edx7N0H%#m}R;ij#*_wYW4>+8!k;{0WqF(cB<0JQyq`M1s6R;!enx4;#(#1|L@n$KN{D2Ac(=6+Bd`LJ0I+Si-yn)b5XK5* z1{}m}-89bC|9`R=pbVb?&^ux*76C5+TEx1k%0HdRNO^ROoLm3^002ovPDHLkV1f`6 B{-*!{ literal 0 HcmV?d00001 diff --git a/textures/homedecor_nightstand_oak_left.png b/textures/homedecor_nightstand_oak_left.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ec083444a768134251d9a4df40c8d7ac4158a3 GIT binary patch literal 3234 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 literal 0 HcmV?d00001 diff --git a/textures/homedecor_oven_front_active.png b/textures/homedecor_oven_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..aaab206d88f422277dc591d6ae7ddec1a66b97f2 GIT binary patch literal 489 zcmV$bZld6iycDogk&1Q4GUU$1)KHIic)%|`iBA3ghX&Q4p z9%r-J;c!?kmtEJDW!ZII2qDIpw>sxU1i)&wYTK4Y#2B+)ubH_h3L+Abtm(ZcB4&;; zzFsc?ALgyK)9DnSK~-anl;z$*N=Zb>T8sYyIp_Mme~0S5S5*>``F#G)hsWbVM4X48 z-@g3Q1QbM21qc90p#W$ynY3;D5%BL{Uo#g*bYue52#u@&8NtYEr0cq27+6)A`N#J^ zpIREL>UO)C^Z86fM3hqU-iydE41M2QYpbdvB2~TL@80_u<6^NebzM8>s;W{|BFdp! zYeNWq-#h1qVQ|jnrFC61fTAd}F#sWieDAt$97h0US*Db-6aXforfG6XGCNnmTAMQs fAppp2PbvKcAjtiB+sbbh00000NkvXXu0mjfR1(rT literal 0 HcmV?d00001 diff --git a/textures/homedecor_oven_side.png b/textures/homedecor_oven_side.png new file mode 100644 index 0000000000000000000000000000000000000000..30dd91091288a1266ffd2c773ff23bb8c63fdada GIT binary patch literal 507 zcmVA?SdwH0004+NklA3?(V5IEdlD z$^B24Z2&vA)hKZm1cKSAzDj(*-y*`y&bcv0?;QYo@61d@s;a7pXt&;b7LnKMrK;z7 z{{8(O$3aBvx*7@*#TWrVRgdF9L{io3x;~%Jx~}(qZ`(#hDJ5oRW)TsQT5D@9rKGAP zB19BI$T`OtRW*drTAOnMK#Y-@0l>CK%Rdb!ETsehkH-TMuj>MU5CS3sK&_QT#9W$P zA~K{>O0Cr(5pm!5-uoDXopZ*RQbNQzr-;ND?c6z6YbBy>+YFJJxwZCuK3i+{f{2`R z=Xs7XmSr){-n;jH&dFnpbzQ&TF97_$9mm1UDJAc{y%v$y8WAx70Kl>=%$#%f-uK?k zx7nL>#u!a=DTSPKB4YZMWpU1#jo*TZL?nbzN)Zv7b6V2Zb=6vbVfWsxK}7udu^352 zOj3;Te=zU8#gB*7j)Y310003bNklF$4LImNT!V90(0z0Zg-(isRzYJhXh;Y4^+9bPzBBwT=WzL~VHo?Q6s2i8k1e4P!e)#C2!h~pxd1qy&-lp_a?WijC4jE$=CLpgUxg)9O1YF$ z0C5~M#vI3KnkJ6p`TP+=2=PtGIF4^b2=RRBV_er=688^-OE^u_^QDzq^E|heQtPz> zuxCpvwfeqq4Z|>ZvMieo9*@UY=MC0%{aaX*x~?r_Oj(vvO2*iByH!d}(^ORzrIZi? jV6)i(D2jp*(skVfEG9py;*#mA00000NkvXXu0mjf^+BFB literal 0 HcmV?d00001 diff --git a/textures/homedecor_refrigerator_back.png b/textures/homedecor_refrigerator_back.png new file mode 100644 index 0000000000000000000000000000000000000000..a50103e9211d82896de53d6fc1e3ef0efa67e067 GIT binary patch literal 553 zcmV+^0@nSBP)D6svMlR% zySv@4sw&H}nx?_ZIXA`-La+kB;c%$ynrp2AU^1BqAw18MQU*bQ6UG=RrR%zBn)<#^ z2+>+YmSz2Zf3;cx0HyS+7^O1Cj4@hk^iY;1$IpB|ms0w^k8*K6AtXr>$8nM*3B#~$ z+rNbEc8e=1rIb>wH7-IdLeA&&=kwu=v9@iaC_e47{pWLY*G4%h3o zQc5XBDFpz|IYNG8_xpX*G#o9)aeTkugCM|VU+ef4LIgoz+jd>o@Or&^z20WCY1o=v}P0ZjA6ah;;K9T9_00000NkvXXu0mjfsM+lN literal 0 HcmV?d00001 diff --git a/textures/homedecor_refrigerator_bottom.png b/textures/homedecor_refrigerator_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..08cd01699daaed4d77e4a8a17570bfe077f068cf GIT binary patch literal 445 zcmV;u0Yd(XP)E=oZZsnIlLCn*Dwp5_4-~)O?>T2gsA}&$Gpp+J`H0Bl@gSns8WEl6DI#kv z%gp=zPDH9oL_`!3z4tliwr#4asu8j8I}v@qUw*w_=Xv(tVKV2$wch($OGGkLM6fP1 z`T2Yv$B~(4=I&<3%x0FEYb~h97!l#_+qM}qXJ%{d(v30JTFiWfBqDduOjVVt5)mSr zbGkbiL?j|`M?}u^yyyifBjOrW6_Qj{RUtZ7WTwFpQczY^YYoTnyuhkTuFy!5nP{Dv zTWe-!X0V-eGPA)8Qgp@4aDzDrQ6PW?2dZjjh-7BK9b>q=yW`=A$dJL^MMOlfKL0)p ziRd^Ez!*eh40Ht%&H#;^s#;a5Dw&A})>;sO2ZdrIpy6!5cXxEP@B8nI{?%}08)HH8ZPo zU$2*BrkO=VW)e|Vb$3MIl9}Bd1Ft_ z=x{iwYD9E5Gc$8$;xOlAW>ppNLeE-jXIEAJ`yd+<1plfETtq|!lz?DUs!~;V$6;@Axm@O)b~>FfS$J@F5y{LsCsIca$oqUg8>EZKoRf&a zzNd>uFoPOFs8t1C;NTuQp$!;!|6L78M@vA>42|cUz%cV#%fNu=s@jc4L{-7SzIm!D l*p~m}gK0R%f*?fH`~Y^@Mv1!_4nM9WTDiN7; zR#j_FRYe37T5Flf%uGbvwuuP90BvTfI_HcCRW-Bk*vxFL;X`YUnemdlg9J*>^PF>L zrlO;&dhbM3Rhg;!tuwQ`6Vbl!n5-aP*LBW`j;dnj>$)=2%!mjGP{6X%nVJi3$$i7#`tCg#byR1*oO-d!68O96ZS0SP=cDC^S|jsO4v07*qoM6N<$f*66qdH?_b literal 0 HcmV?d00001 diff --git a/textures/homedecor_refrigerator_right.png b/textures/homedecor_refrigerator_right.png new file mode 100644 index 0000000000000000000000000000000000000000..846210c134b33d412b000e392da769826a6c72bd GIT binary patch literal 458 zcmV;*0X6=KP)Vm#emS0oNFe1YEY_w)Jud_J$&tNiyJ$Dz!8o@Zv_%FHs;-9^ORBjWLR z^xoHXB_em{%xtaAIn4|TW)_iJD>Lu=KE~L#?KqC>x-wHEqLhLTB7!(G=bR#vnW{R* zP*oy|h`U&8O;z1}&Z(-cH8||OXQqg3+eSpp%n>o?JkOJeLR!kixvWyO{wI)X@D*gEbOFgi9%{HCQL2 zTI>Cy%*Zjb>$;$h2>#(mN5FOWF-EP`-SOnDwHw-x-Lfq1jzO_3I1&+hjxmVnMvjfB zwIXo$)>^GqRWSzW-$RQC76fGR1MzRM5sxwc0AwFNC(eu31^@s607*qoM6N<$f`87@ A?*IS* literal 0 HcmV?d00001 diff --git a/textures/homedecor_refrigerator_top.png b/textures/homedecor_refrigerator_top.png new file mode 100644 index 0000000000000000000000000000000000000000..501933ef9389ae625184525dca9f3f12f9f40f0a GIT binary patch literal 494 zcmV~oL_~;KYc;dTkaGrrQVJ1W*Ciq;B_aXj->Mo}5wW#)9EX_& zGOW5gnOUv1wHB~26AdoQA|eqf%B1iU5o@izcV?b*mQt8GI#AV|Ga{B!+?`^hF-E`; z(cNP;cXxM0G_#aa@7>I3&KXT#*QKfeFvf^rL=;V&=NYm9KtT{5M8wQu#9;k-R@MJo zI?wa_{l>;b6e6*4i2M#Q+~T^f%d#Ni?*!ca^ZE4N-|u%yDeT4XwrvR!_kI6eQ~*?! kh+1m^5VhX-O+;giKPlT)5q@YP@&Et;07*qoM6N<$f_}iyl>h($ literal 0 HcmV?d00001