diff --git a/homedecor/books.lua b/homedecor/books.lua new file mode 100644 index 00000000..a10f13d4 --- /dev/null +++ b/homedecor/books.lua @@ -0,0 +1,151 @@ +local S = homedecor.gettext + +local bookcolors = { + "red", + "green", + "blue", + "violet", + "grey", + "brown" +} + +local BOOK_FORMNAME = "homedecor:book_form" + +for c in ipairs(bookcolors) do + local color = bookcolors[c] + local color_d = S(bookcolors[c]) + + local function book_dig(pos, node, digger) + if minetest.is_protected(pos, digger:get_player_name()) then return end + local meta = minetest.get_meta(pos) + local stack = ItemStack({ + name = "homedecor:book_"..color, + metadata = meta:get_string("text"), + }) + stack = digger:get_inventory():add_item("main", stack) + if not stack:is_empty() then + minetest.item_drop(stack, digger, pos) + end + minetest.remove_node(pos) + end + +homedecor.register("book_"..color, { + description = S("Book (%s)"):format(color_d), + mesh = "homedecor_book.obj", + tiles = { "homedecor_book_"..color..".png" }, + inventory_image = "homedecor_book_"..color.."_inv.png", + wield_image = "homedecor_book_"..color.."_inv.png", + groups = { snappy=3, oddly_breakable_by_hand=3, book=1 }, + stack_max = 1, + on_rightclick = function(pos, node, clicker) + local fdir = node.param2 + minetest.swap_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir }) + end, + on_place = function(itemstack, placer, pointed_thing) + local plname = placer:get_player_name() + local pos = pointed_thing.under + local node = minetest.get_node(pos) + local n = minetest.registered_nodes[node.name] + if not n.buildable_to then + pos = pointed_thing.above + node = minetest.get_node(pos) + n = minetest.registered_nodes[node.name] + if not n.buildable_to then return end + end + if minetest.is_protected(pos, plname) then return end + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + minetest.set_node(pos, { + name = "homedecor:book_"..color, + param2 = fdir, + }) + local text = itemstack:get_metadata() or "" + local meta = minetest.get_meta(pos) + meta:set_string("text", text) + local data = minetest.deserialize(text) or {} + if data.title and data.title ~= "" then + meta:set_string("infotext", data.title) + end + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack + end, + on_dig = book_dig, + on_use = function(itemstack, user, pointed_thing) + local player_name = user:get_player_name() + local data = minetest.deserialize(itemstack:get_metadata()) + local title, text, owner = "", "", player_name + if data then + title, text, owner = data.title, data.text, data.owner + end + local formspec + if owner == player_name then + formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img.. + "field[0.5,1;7.5,0;title;Book title :;".. + minetest.formspec_escape(title).."]".. + "textarea[0.5,1.5;7.5,7;text;Book content :;".. + minetest.formspec_escape(text).."]".. + "button_exit[2.5,7.5;3,1;save;Save]" + else + formspec = "size[8,8]"..default.gui_bg.. + "button_exit[7,0.25;1,0.5;close;X]".. + default.gui_bg_img.. + "label[0.5,0.5;by "..owner.."]".. + "label[0.5,0;"..minetest.formspec_escape(title).."]".. + "textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]" + end + minetest.show_formspec(user:get_player_name(), BOOK_FORMNAME, formspec) + end, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25} + }, + collision_box = { + type = "fixed", + fixed = {-0.15, -0.5, -0.25, 0.15, -0.35, 0.25} + }, +}) + +homedecor.register("book_open_"..color, { + mesh = "homedecor_book_open.obj", + tiles = { "homedecor_book_open_"..color..".png" }, + groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1 }, + drop = "homedecor:book_"..color, + on_dig = book_dig, + on_rightclick = function(pos, node, clicker) + local fdir = node.param2 + minetest.swap_node(pos, { name = "homedecor:book_"..color, param2 = fdir }) + minetest.sound_play("homedecor_book_close", { + pos=pos, + max_hear_distance = 3, + gain = 2, + }) + end, + selection_box = { + type = "fixed", + fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25} + }, + collision_box = { + type = "fixed", + fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25} + }, +}) + +end + +minetest.register_on_player_receive_fields(function(player, form_name, fields) + if form_name ~= BOOK_FORMNAME or not fields.save then + return + end + local stack = player:get_wielded_item() + if minetest.get_item_group(stack:get_name(), "book") == 0 then + return + end + local data = minetest.deserialize(stack:get_metadata()) or {} + data.title, data.text, data.owner = + fields.title, fields.text, player:get_player_name() + stack:set_metadata(minetest.serialize(data)) + player:set_wielded_item(stack) + minetest.log("action", player:get_player_name().." has written in a book (title: \""..fields.title.."\"): \""..fields.text.. + "\" at location: "..minetest.pos_to_string(player:getpos())) +end) diff --git a/homedecor/exterior.lua b/homedecor/exterior.lua new file mode 100644 index 00000000..c62ac609 --- /dev/null +++ b/homedecor/exterior.lua @@ -0,0 +1,560 @@ +local S = homedecor.gettext +dofile(homedecor.modpath.."/furniture.lua") + +homedecor.register("barbecue", { + description = "Barbecue", + tiles = { + {name="homedecor_barbecue_top.png", animation={type="vertical_frames", + aspect_w=16, aspect_h=16, length=2}}, + "forniture_black_metal.png", + }, + groups = { snappy=3 }, + light_source = 9, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.25, -0.4375, 0.0625, 0.3125}, -- NodeBox1 + {0.4375, -0.5, 0.25, 0.5, 0.0625, 0.3125}, -- NodeBox2 + {-0.5, -0.5, -0.3125, -0.4375, 0.0625, -0.25}, -- NodeBox3 + {0.4375, -0.5, -0.3125, 0.5, 0.0625, -0.25}, -- NodeBox4 + {-0.5, 0.0625, -0.3125, 0.5, 0.375, 0.3125}, -- NodeBox5 + {-0.375, 0.5, -0.25, -0.313, 0.5, 0.251}, -- NodeBox6 + {-0.25, 0.5, -0.25, -0.188, 0.5, 0.251}, -- NodeBox7 + {-0.125, 0.5, -0.25, -0.063, 0.5, 0.251}, -- NodeBox8 + {0, 0.5, -0.25, 0.062, 0.5, 0.251}, -- NodeBox9 + {0.125, 0.5, -0.25, 0.187, 0.5, 0.251}, -- NodeBox10 + {0.25, 0.5, -0.25, 0.312, 0.5, 0.251}, -- NodeBox11 + {0.375, 0.5, -0.25, 0.437, 0.5, 0.251}, -- NodeBox12 + {-0.5, 0.375, 0.251, 0.5, 0.5, 0.3125}, -- NodeBox13 + {-0.5, 0.0625, -0.3125, 0.5, 0.5, -0.25}, -- NodeBox14 + {-0.5, 0.0625, -0.3125, -0.438, 0.5, 0.3125}, -- NodeBox15 + {0.4375, 0.0625, -0.3125, 0.5, 0.5, 0.3125}, -- NodeBox16 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.3125, 0.5, 0.625, 0.3125 } + }, + expand = { top="homedecor:barbecue_meat" }, +}) + +homedecor.register("barbecue_meat", { + tiles = { + "homedecor_barbecue_meat.png", + }, + groups = { snappy=3, not_in_creative_inventory=1 }, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.125, -0.0625, -0.4375, 0.125}, -- NodeBox1 + {0.125, -0.5, -0.125, 0.3125, -0.4375, 0.125}, -- NodeBox2 + } + }, + selection_box = homedecor.nodebox.null +}) + +homedecor.register("bench_large_1_left", { + description = "Garden Bench (style 1)", + tiles = { + "homedecor_bench_large_1_left_top.png", + "homedecor_bench_large_1_left_bottom.png", + "homedecor_bench_large_1_ends.png^[transformFX", + "homedecor_bench_large_1_ends.png", + "homedecor_bench_large_1_left_back.png", + "homedecor_bench_large_1_left_front.png" + }, + inventory_image = "homedecor_bench_large_1_inv.png", + groups = {snappy=3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.25, 0.375, 0.5, 0.4375, 0.4375}, -- NodeBox1 + {-0.5, 0, 0.375, 0.5, 0.1875, 0.4375}, -- NodeBox2 + {-0.5, -0.125, 0.115, 0.5, -0.0625, 0.35}, -- NodeBox3 + {-0.5, -0.125, -0.0872, 0.5, -0.0625, 0.079}, -- NodeBox4 + {-0.3125, -0.5, 0.4375, -0.25, 0.375, 0.5}, -- NodeBox5 + {-0.3125, -0.25, -0.0625, -0.25, -0.125, 0.4375}, -- NodeBox6 + {-0.3125, -0.5, -0.0625, -0.25, -0.25, 0}, -- NodeBox7 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.09375, 1.5, 0.5, 0.5 } + }, + expand = { right="homedecor:bench_large_1_right" }, + on_rightclick = function(pos, node, clicker) + pos.y = pos.y-0 -- player's sit position. + sit_exec(pos, node, clicker) + end, +}) + +homedecor.register("bench_large_1_right", { + tiles = { + "homedecor_bench_large_1_left_top.png^[transformFX", + "homedecor_bench_large_1_left_bottom.png^[transformFX", + "homedecor_bench_large_1_ends.png^[transformFX", + "homedecor_bench_large_1_ends.png", + "homedecor_bench_large_1_left_back.png^[transformFX", + "homedecor_bench_large_1_left_front.png^[transformFX" + }, + groups = {snappy=3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.25, 0.375, 0.5, 0.4375, 0.4375}, -- NodeBox1 + {-0.5, 0, 0.375, 0.5, 0.1875, 0.4375}, -- NodeBox2 + {-0.5, -0.125, 0.115, 0.5, -0.0625, 0.35}, -- NodeBox3 + {-0.5, -0.125, -0.0872, 0.5, -0.0625, 0.079}, -- NodeBox4 + {0.25, -0.5, 0.4375, 0.3125, 0.375, 0.5}, -- NodeBox5 + {0.25, -0.25, -0.0625, 0.3125, -0.125, 0.5}, -- NodeBox6 + {0.25, -0.5, -0.0625, 0.3125, -0.25, 0}, -- NodeBox7 + } + }, + selection_box = homedecor.nodebox.null, +}) + + +homedecor.register("bench_large_2_left", { + description = "Garden Bench (style 2)", + tiles = { + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_bench_large_2_left_back.png", + "homedecor_bench_large_2_left_back.png^[transformFX" + }, + inventory_image = "homedecor_bench_large_2_inv.png", + groups = {snappy=3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, -- NodeBox1 + {-0.375, 0.3125, 0.4375, 0.5, 0.4375, 0.5}, -- NodeBox2 + {-0.375, -0.0625, 0.4375, 0.5, 0.0625, 0.5}, -- NodeBox3 + {-0.3125, 0.0625, 0.45, -0.25, 0.3125, 0.48}, -- NodeBox4 + {-0.1875, 0.0625, 0.45, -0.125, 0.3125, 0.48}, -- NodeBox5 + {-0.0625, 0.0625, 0.45, 0, 0.3125, 0.48}, -- NodeBox6 + {0.0625, 0.0625, 0.45, 0.125, 0.3125, 0.48}, -- NodeBox7 + {0.1875, 0.0625, 0.45, 0.25, 0.3125, 0.48}, -- NodeBox8 + {0.3125, 0.0625, 0.45, 0.375, 0.3125, 0.48}, -- NodeBox9 + {0.4375, 0.0625, 0.45, 0.5, 0.3125, 0.48}, -- NodeBox10 + {-0.5, 0.0625, -0.145362, -0.375, 0.125, 0.375}, -- NodeBox11 + {-0.5, -0.5, -0.0625, -0.375, 0.0625, 0.0625}, -- NodeBox12 + {-0.4375, -0.125, -0.0625, 0.5, -0.0911603, 0.4375}, -- NodeBox13 + {-0.4375, -0.4375, 0.0625, -0.375, -0.3125, 0.375}, -- NodeBox14 + {-0.375, -0.342324, 0.25, 0.5, -0.4375, 0.1875}, -- NodeBox15 + {-0.5, -0.25, -0.0290173, 0.5, -0.125, 0.0125346}, -- NodeBox16 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.15625, 1.5, 0.5, 0.5 } + }, + expand = { right="homedecor:bench_large_2_right" }, + on_rightclick = function(pos, node, clicker) + pos.y = pos.y-0 -- player's sit position. + sit_exec(pos, node, clicker) + end, +}) + +homedecor.register("bench_large_2_right", { + tiles = { + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_bench_large_2_right_back.png", + "homedecor_bench_large_2_right_back.png^[transformFX" + }, + groups = {snappy=3}, + node_box = { + type = "fixed", + fixed = { + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, -- NodeBox1 + {-0.5, 0.3125, 0.4375, 0.375, 0.4375, 0.5}, -- NodeBox2 + {-0.5, -0.0625, 0.4375, 0.375, 0.0625, 0.5}, -- NodeBox3 + {-0.5, 0.0625, 0.45, -0.4375, 0.3125, 0.48}, -- NodeBox4 + {-0.375, 0.0625, 0.45, -0.3125, 0.3125, 0.48}, -- NodeBox5 + {-0.25, 0.0625, 0.45, -0.1875, 0.3125, 0.48}, -- NodeBox6 + {-0.125, 0.0625, 0.45, -0.0625, 0.3125, 0.48}, -- NodeBox7 + {0, 0.0625, 0.45, 0.0625, 0.3125, 0.48}, -- NodeBox8 + {0.125, 0.0625, 0.45, 0.1875, 0.3125, 0.48}, -- NodeBox9 + {0.25, 0.0625, 0.45, 0.3125, 0.3125, 0.48}, -- NodeBox10 + {0.375, 0.0625, -0.145362, 0.5, 0.125, 0.375}, -- NodeBox11 + {0.375, -0.5, -0.0625, 0.5, 0.125, 0.0625}, -- NodeBox12 + {0.375, -0.4375, 0.0625, 0.4375, -0.3125, 0.375}, -- NodeBox13 + {-0.5, -0.4375, 0.1875, 0.375, -0.342324, 0.25}, -- NodeBox14 + {-0.5, -0.125, -0.0625, 0.4375, -0.0911603, 0.4375}, -- NodeBox15 + {-0.5, -0.25, -0.0290173, 0.5, -0.125, 0.0125346}, -- NodeBox16 + } + }, + selection_box = homedecor.nodebox.null, +}) + +homedecor.register("deckchair_head", { + tiles = { + "homedecor_deckchair_top_c1.png", + "homedecor_deckchair_sides.png", + "homedecor_deckchair_sides.png", + "homedecor_deckchair_sides.png^[transformFX", + "homedecor_deckchair_sides.png", + "homedecor_deckchair_front.png" + }, + groups = { snappy = 3, not_in_creative_inventory = 1 }, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.3125, -0.0625, 0.375, -0.25, 0}, -- NodeBox1 + {-0.375, -0.25, 0, 0.375, -0.1875, 0.0625}, -- NodeBox2 + {-0.375, -0.1875, 0.0625, 0.375, -0.125, 0.125}, -- NodeBox3 + {-0.375, -0.125, 0.125, 0.375, -0.0625, 0.1875}, -- NodeBox4 + {-0.375, -0.0625, 0.1875, 0.375, 0, 0.25}, -- NodeBox5 + {-0.375, 0, 0.25, 0.375, 0.0625, 0.3125}, -- NodeBox6 + {-0.375, 0.0625, 0.3125, 0.375, 0.125, 0.375}, -- NodeBox7 + {-0.375, 0.125, 0.375, 0.375, 0.1875, 0.4375}, -- NodeBox8 + {-0.375, 0.1875, 0.4375, 0.375, 0.25, 0.5}, -- NodeBox9 + {-0.375, -0.375, -0.5, 0.375, -0.3125, 0.0625}, -- NodeBox10 + {0.3125, -0.1875, -0.5, 0.4375, -0.1575, 0.0625}, -- NodeBox11 + {-0.4375, -0.1875, -0.5, -0.3125, -0.1575, 0.0625}, -- NodeBox12 + {0.3125, -0.5, 0, 0.375, -0.25, 0.0625}, -- NodeBox13 + {-0.375, -0.5, 0, -0.3125, -0.25, 0.0625}, -- NodeBox14 + } + }, + selection_box = homedecor.nodebox.null +}) + +homedecor.register("deckchair_foot", { + tiles = { + "homedecor_deckchair_top_c2.png", + "homedecor_deckchair_sides.png", + "homedecor_deckchair_sides.png", + "homedecor_deckchair_sides.png^[transformFX", + "homedecor_deckchair_front.png" + }, + description = "Deck chair", + inventory_image = "homedecor_deckchair_inv.png", + groups = { snappy = 3 }, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.375, -0.5, 0.375, -0.3125, 0.5}, -- NodeBox1 + {0.3125, -0.5, -0.5, 0.375, -0.375, -0.4375}, -- NodeBox2 + {-0.375, -0.5, -0.5, -0.3125, -0.375, -0.4375}, -- NodeBox3 + {0.3125, -0.1875, 0.3, 0.4375, -0.1575, 0.5}, -- NodeBox4 + {-0.4375, -0.1875, 0.3, -0.3125, -0.1575, 0.5}, -- NodeBox5 + {-0.365, -0.3125, 0.32, -0.3225, -0.1875, 0.4375}, -- NodeBox6 + {0.3225, -0.3125, 0.32, 0.365, -0.1875, 0.4375}, -- NodeBox7 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.45, -0.5, -0.5, 0.45, 0.35, 1.5 } + }, + expand = { forward="homedecor:deckchair_head" }, +}) + +homedecor.register("doghouse_base", { + tiles = { + "homedecor_doghouse_base_top.png", + "homedecor_doghouse_base_bottom.png", + "homedecor_doghouse_base_side.png", + "homedecor_doghouse_base_side.png", + "homedecor_doghouse_base_side.png", + "homedecor_doghouse_base_front.png" + }, + description = "Doghouse", + inventory_image = "homedecor_doghouse_inv.png", + node_box = { + type = "fixed", + fixed = { + {0.3125, -0.5, -0.4375, 0.4375, -0.3125, -0.3125}, -- NodeBox1 + {0.3125, -0.5, 0.3125, 0.4375, -0.3125, 0.4375}, -- NodeBox2 + {-0.4375, -0.5, 0.3125, -0.3125, -0.3125, 0.4375}, -- NodeBox3 + {-0.4375, -0.5, -0.4375, -0.3125, -0.3125, -0.3125}, -- NodeBox4 + {-0.4375, -0.3125, -0.4375, -0.375, 0.5, 0.4375}, -- NodeBox5 + {-0.4375, 0.3125, -0.375, 0.4375, 0.5, -0.3125}, -- NodeBox6 + {-0.4375, -0.3125, -0.4375, 0.4375, -0.25, 0.4375}, -- NodeBox7 + {-0.375, -0.3125, -0.375, -0.1875, 0.4375, -0.3125}, -- NodeBox8 + {0.1875, -0.3125, -0.375, 0.4375, 0.5, -0.3125}, -- NodeBox9 + {0.375, -0.25, -0.4375, 0.4375, 0.5, 0.4375}, -- NodeBox10 + {-0.4375, -0.3125, 0.375, 0.4375, 0.5, 0.4375}, -- NodeBox11 + } + }, + selection_box = homedecor.nodebox.slab_y(1.5), + groups = {snappy=3}, + expand = { top="homedecor:doghouse_roof" }, +}) + +homedecor.register("doghouse_roof", { + tiles = { + "homedecor_doghouse_roof_top.png", + "homedecor_doghouse_roof_bottom.png", + "homedecor_doghouse_roof_side.png", + "homedecor_doghouse_roof_side.png", + "homedecor_doghouse_roof_front.png", + "homedecor_doghouse_roof_front.png" + }, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, -0.4375, -0.4375, 0.5}, -- NodeBox17 + {-0.4375, -0.4375, -0.5, -0.375, -0.375, 0.5}, -- NodeBox18 + {-0.375, -0.375, -0.5, -0.3125, -0.3125, 0.5}, -- NodeBox19 + {-0.3125, -0.3125, -0.5, -0.25, -0.25, 0.5}, -- NodeBox20 + {-0.25, -0.25, -0.5, -0.1875, -0.1875, 0.5}, -- NodeBox21 + {-0.1875, -0.1875, -0.5, -0.125, -0.125, 0.5}, -- NodeBox22 + {-0.125, -0.125, -0.5, -0.0625, -0.0625, 0.5}, -- NodeBox23 + {-0.0625, -0.0625, -0.5, 0.0625, 0, 0.5}, -- NodeBox24 + {0.0625, -0.125, -0.5, 0.125, -0.0625, 0.5}, -- NodeBox25 + {0.125, -0.1875, -0.5, 0.1875, -0.125, 0.5}, -- NodeBox26 + {0.1875, -0.25, -0.5, 0.25, -0.1875, 0.5}, -- NodeBox27 + {0.25, -0.3125, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox28 + {0.3125, -0.375, -0.5, 0.375, -0.3125, 0.5}, -- NodeBox29 + {0.375, -0.4375, -0.5, 0.4375, -0.375, 0.5}, -- NodeBox30 + {0.4375, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox31 + {-0.4375, -0.5, -0.375, 0.4375, -0.4375, 0.4375}, -- NodeBox32 + {-0.375, -0.4375, -0.375, 0.375, -0.375, 0.4375}, -- NodeBox33 + {-0.3125, -0.375, -0.375, 0.3125, -0.3125, 0.4375}, -- NodeBox34 + {-0.25, -0.3125, -0.375, 0.25, -0.25, 0.4375}, -- NodeBox35 + {-0.1875, -0.25, -0.375, 0.1875, -0.1875, 0.4375}, -- NodeBox36 + {-0.125, -0.1875, -0.375, 0.125, -0.125, 0.4375}, -- NodeBox37 + {0.0625, -0.125, -0.375, -0.0625, -0.0625, 0.4375}, -- NodeBox38 + } + }, + selection_box = homedecor.nodebox.null, + groups = {snappy=3, not_in_creative_inventory=1}, +}) + +homedecor.register("simple_bench", { + tiles = { + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_generic_wood.png", + "homedecor_bench_large_2_left_back.png", + "homedecor_bench_large_2_left_back.png^[transformFX" + }, + description = "Simple Bench", + groups = {snappy=3}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.15, 0, 0.5, -0.05, 0.4}, + {-0.4, -0.5, 0.1, -0.3, -0.15, 0.3}, + { 0.3, -0.5, 0.1, 0.4, -0.15, 0.3}, + } + }, + on_rightclick = function(pos, node, clicker) + pos.y = pos.y-0 -- player's sit position. + sit_exec(pos, node, clicker) + end, +}) + +homedecor.register("stonepath", { + description = "Garden stone path", + tiles = { + "default_stone.png" + }, + inventory_image = "homedecor_stonepath_inv.png", + groups = { snappy=3 }, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, 0.3125, -0.3125, -0.48, 0.4375}, -- NodeBox1 + {-0.25, -0.5, 0.125, 0, -0.48, 0.375}, -- NodeBox2 + {0.125, -0.5, 0.125, 0.4375, -0.48, 0.4375}, -- NodeBox3 + {-0.4375, -0.5, -0.125, -0.25, -0.48, 0.0625}, -- NodeBox4 + {-0.0625, -0.5, -0.25, 0.25, -0.48, 0.0625}, -- NodeBox5 + {0.3125, -0.5, -0.25, 0.4375, -0.48, -0.125}, -- NodeBox6 + {-0.3125, -0.5, -0.375, -0.125, -0.48, -0.1875}, -- NodeBox7 + {0.125, -0.5, -0.4375, 0.25, -0.48, -0.3125}, -- NodeBox8 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375 } + } +}) + +homedecor.register("swing", { + description = "Tree's swing", + tiles = { + "homedecor_swing_top.png", + "homedecor_swing_top.png^[transformR180", + "homedecor_swing_top.png" + }, + inventory_image = "homedecor_swing_inv.png", + groups = { snappy=3, oddly_breakable_by_hand=3 }, + node_box = { + type = "fixed", + fixed = { + {-0.3125, 0.33, -0.125, 0.3125, 0.376, 0.1875}, -- NodeBox1 + {-0.3125, 0.376, 0.025, -0.3, 0.5, 0.0375}, -- NodeBox2 + { 0.3, 0.376, 0.025, 0.3125, 0.5, 0.0375}, -- NodeBox3 + } + }, + selection_box = { + type = "fixed", + fixed = { -0.3125, 0.33, -0.125, 0.3125, 0.5, 0.1875 } + }, + on_place = function(itemstack, placer, pointed_thing) + isceiling, pos = homedecor.find_ceiling(itemstack, placer, pointed_thing) + if isceiling then + local height = 0 + + for i = 0, 4 do -- search up to 5 spaces downward from the ceiling for the first non-buildable-to node... + height = i + local testpos = { x=pos.x, y=pos.y-i-1, z=pos.z } + local testnode = minetest.get_node(testpos) + local testreg = core.registered_nodes[testnode.name] + + if not testreg.buildable_to then + if i < 1 then + minetest.chat_send_player(placer:get_player_name(), "No room under there to hang a swing.") + return + else + break + end + end + end + + for j = 0, height do -- then fill that space with ropes... + local testpos = { x=pos.x, y=pos.y-j, z=pos.z } + local testnode = minetest.get_node(testpos) + local testreg = core.registered_nodes[testnode.name] + minetest.set_node(testpos, { name = "homedecor:swing_rope", param2 = fdir }) + end + + minetest.set_node({ x=pos.x, y=pos.y-height, z=pos.z }, { name = "homedecor:swing", param2 = fdir }) + + if not homedecor.expect_infinite_stacks then + itemstack:take_item() + return itemstack + end + + else + minetest.chat_send_player(placer:get_player_name(), "You have to point at the bottom side of an overhanging object to place a swing.") + end + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + for i = 0, 4 do + local testpos = { x=pos.x, y=pos.y+i+1, z=pos.z } + if minetest.get_node(testpos).name == "homedecor:swing_rope" then + minetest.remove_node(testpos) + else + return + end + end + end +}) + +homedecor.register("swing_rope", { + tiles = { + "homedecor_swingrope_sides.png" + }, + groups = { not_in_creative_inventory=1 }, + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, 0.025, -0.3, 0.5, 0.0375}, -- NodeBox1 + {0.3, -0.5, 0.025, 0.3125, 0.5, 0.0375}, -- NodeBox2 + } + }, + selection_box = homedecor.nodebox.null +}) + +homedecor.register("well_base", { + tiles = { + "homedecor_well_base_top.png", + "default_cobble.png" + }, + inventory_image = "homedecor_well_inv.png", + description = "Water well", + groups = { snappy = 3 }, + node_box = { + type = "fixed", + fixed = { + {-0.3125, -0.5, -0.4375, 0.3125, 0.5, -0.3125}, -- NodeBox1 + {0.3125, -0.5, -0.3125, 0.4375, 0.5, 0.3125}, -- NodeBox2 + {-0.4375, -0.5, -0.3125, -0.3125, 0.5, 0.3125}, -- NodeBox3 + {-0.3125, -0.5, 0.3125, 0.3125, 0.5, 0.4375}, -- NodeBox4 + {0.25, -0.5, -0.375, 0.375, 0.5, -0.25}, -- NodeBox5 + {0.25, -0.5, 0.25, 0.375, 0.5, 0.375}, -- NodeBox6 + {-0.375, -0.5, -0.375, -0.25, 0.5, -0.25}, -- NodeBox7 + {-0.375, -0.5, 0.25, -0.25, 0.5, 0.375}, -- NodeBox8 + {-0.3125, -0.5, -0.5, 0.3125, -0.3125, -0.4375}, -- NodeBox9 + {0.4375, -0.5, -0.3125, 0.5, -0.3125, 0.3125}, -- NodeBox10 + {-0.3125, -0.5, 0.4375, 0.3125, -0.3125, 0.5}, -- NodeBox11 + {-0.5, -0.5, -0.3125, -0.4375, -0.3125, 0.3125}, -- NodeBox12 + {0.3125, -0.5, -0.4375, 0.4375, -0.3125, -0.3125}, -- NodeBox13 + {0.3125, -0.5, 0.3125, 0.4375, -0.3125, 0.4375}, -- NodeBox14 + {-0.4375, -0.5, 0.3125, -0.3125, -0.3125, 0.4375}, -- NodeBox15 + {-0.4375, -0.5, -0.4375, -0.3125, -0.3125, -0.3125}, -- NodeBox16 + {-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}, -- NodeBox17 + } + }, + selection_box = homedecor.nodebox.slab_y(2), + expand = { top="homedecor:well_top" }, +}) + +homedecor.register("well_top", { + tiles = { + "homedecor_well_roof_top.png", + "homedecor_well_roof_wood.png", + "homedecor_well_roof_side3.png", + "homedecor_well_roof_side3.png", + "homedecor_well_roof_side2.png", + "homedecor_well_roof_side1.png" + }, + groups = { snappy = 3 }, + node_box = { + type = "fixed", + fixed = { + {-0.0625, -0.5, 0.375, 0.0625, 0.4375, 0.4375}, -- NodeBox1 + {-0.0625, -0.5, -0.4375, 0.0625, 0.4375, -0.375}, -- NodeBox2 + {-0.125, 0.375, -0.5, 0.125, 0.4375, 0.5}, -- NodeBox3 + {0.125, 0.3125, -0.5, 0.1875, 0.375, 0.5}, -- NodeBox4 + {-0.1875, 0.3125, -0.5, -0.125, 0.375, 0.5}, -- NodeBox5 + {0.1875, 0.25, -0.5, 0.25, 0.3125, 0.5}, -- NodeBox6 + {-0.25, 0.25, -0.5, -0.1875, 0.3125, 0.5}, -- NodeBox7 + {0.25, 0.1875, -0.5, 0.3125, 0.25, 0.5}, -- NodeBox8 + {-0.3125, 0.1875, -0.5, -0.25, 0.25, 0.5}, -- NodeBox9 + {0.3125, 0.125, -0.5, 0.375, 0.1875, 0.5}, -- NodeBox10 + {-0.375, 0.125, -0.5, -0.3125, 0.1875, 0.5}, -- NodeBox11 + {0.375, 0.0625, -0.5, 0.4375, 0.125, 0.5}, -- NodeBox12 + {-0.375, 0.0625, -0.5, -0.4375, 0.125, 0.5}, -- NodeBox13 + {0.4375, 0, -0.5, 0.5, 0.0625, 0.5}, -- NodeBox14 + {-0.5, 0, -0.5, -0.4375, 0.0625, 0.5}, -- NodeBox15 + {-0.0625, 0.4375, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox16 + {-0.125, 0.125, -0.4375, 0.125, 0.1875, -0.375}, -- NodeBox17 + {0.125, 0.1875, -0.4375, 0.1875, 0.25, -0.375}, -- NodeBox18 + {-0.1875, 0.1875, -0.4375, -0.125, 0.25, -0.375}, -- NodeBox19 + {-0.125, 0.125, 0.375, 0.125, 0.1875, 0.4375}, -- NodeBox20 + {0.125, 0.1875, 0.375, 0.1875, 0.25, 0.4375}, -- NodeBox21 + {-0.1875, 0.1875, 0.375, -0.125, 0.25, 0.4375}, -- NodeBox22 + {-0.0165975, -0.159751, -0.375, 0.0165974, -0.125, 0.375}, -- NodeBox23 + {-0.00414942, -0.465, -0.008299, 0.008299, -0.159751, 0.004149}, -- NodeBox24 + {-0.0625, -0.0625, -0.5, 0.0625, 0, -0.4646}, -- NodeBox25 + {0.0625, -0.125, -0.5, 0.125, -0.0625, -0.4646}, -- NodeBox26 + {0.125, -0.25, -0.5, 0.1875, -0.125, -0.4646}, -- NodeBox27 + {0.0625, -0.3125, -0.5, 0.125, -0.25, -0.4646}, -- NodeBox28 + {-0.0625, -0.375, -0.5, 0.0625, -0.3125, -0.4646}, -- NodeBox29 + {-0.0625, -0.3125, -0.5, -0.125, -0.25, -0.4646}, -- NodeBox30 + {-0.1875, -0.25, -0.5, -0.125, -0.125, -0.4646}, -- NodeBox31 + {-0.125, -0.125, -0.5, -0.0625, -0.0625, -0.4646}, -- NodeBox32 + {-0.016598, -0.3125, -0.48, 0.020747, -0.0625, -0.49}, -- NodeBox33 + {-0.125, -0.209544, -0.48, 0.125, -0.172199, -0.49}, -- NodeBox34 + {-0.0165975, -0.200, -0.477178, 0.020747, -0.175349, -0.435685}, -- NodeBox35 + {0.1, -0.75, -0.125, 0.125, -0.5, 0.125}, -- NodeBox36 + {-0.125, -0.75, -0.125, -0.1, -0.5, 0.125}, -- NodeBox37 + {-0.125, -0.75, -0.125, 0.125, -0.729253, 0.125}, -- NodeBox38 + {-0.125, -0.75, -0.125, 0.125, -0.5, -0.1}, -- NodeBox39 + {-0.125, -0.75, 0.1, 0.125, -0.5, 0.125}, -- NodeBox40 + {-0.0165975,-0.465, -0.125, 0.0165974, -0.451245, 0.125}, -- NodeBox41 + {-0.0165975, -0.51, 0.112033, 0.0165974, -0.46, 0.125}, -- NodeBox42 + {-0.0165975, -0.51, -0.125, 0.0165974, -0.46, -0.112033}, -- NodeBox43 + } + }, + selection_box = homedecor.nodebox.null, +}) diff --git a/homedecor/furniture.lua b/homedecor/furniture.lua index df247c0e..07e93fc8 100644 --- a/homedecor/furniture.lua +++ b/homedecor/furniture.lua @@ -1,6 +1,44 @@ local S = homedecor.gettext --- 3dforniture tables ... well, they used to be :P +function sit(pos, node, clicker) + local name = clicker:get_player_name() + local meta = minetest:get_meta(pos) + local param2 = node.param2 + if clicker:get_player_name() == meta:get_string("player") then + meta:set_string("player", "") + pos.y = pos.y-0.5 + clicker:setpos(pos) + clicker:set_eye_offset({x=0,y=0,z=0}, {x=0,y=0,z=0}) + clicker:set_physics_override(1, 1, 1) + default.player_attached[name] = false + default.player_set_animation(clicker, "stand", 30) + else + meta:set_string("player", clicker:get_player_name()) + clicker:set_eye_offset({x=0,y=-7,z=2}, {x=0,y=0,z=0}) + clicker:set_physics_override(0, 0, 0) + default.player_attached[name] = true + if param2 == 1 then + clicker:set_look_yaw(7.9) + elseif param2 == 3 then + clicker:set_look_yaw(4.75) + elseif param2 == 0 then + clicker:set_look_yaw(3.15) + else + clicker:set_look_yaw(6.28) + end + end +end + +function sit_exec(pos, node, clicker) -- don't move these functions inside sit() + if not clicker or not clicker:is_player() + or clicker:get_player_control().up == true or clicker:get_player_control().down == true + or clicker:get_player_control().left == true or clicker:get_player_control().right == true + or clicker:get_player_control().jump == true then -- make sure that the player is immobile. + return end + sit(pos, node, clicker) + clicker:setpos(pos) + default.player_set_animation(clicker, "sit", 30) +end local table_colors = { "", "mahogany", "white" } @@ -34,46 +72,6 @@ for _, i in ipairs(table_colors) do }) end -local function sit(pos, node, clicker) - local name = clicker:get_player_name() - local meta = minetest:get_meta(pos) - local param2 = node.param2 - if clicker:get_player_name() == meta:get_string("player") then - meta:set_string("player", "") - pos.y = pos.y-0.5 - clicker:setpos(pos) - clicker:set_eye_offset({x=0,y=0,z=0}, {x=0,y=0,z=0}) - clicker:set_physics_override(1, 1, 1) - default.player_attached[name] = false - default.player_set_animation(clicker, "stand", 30) - else - meta:set_string("player", clicker:get_player_name()) - clicker:set_eye_offset({x=0,y=-7,z=2}, {x=0,y=0,z=0}) - clicker:set_physics_override(0, 0, 0) - default.player_attached[name] = true - if param2 == 1 then - clicker:set_look_yaw(7.9) - elseif param2 == 3 then - clicker:set_look_yaw(4.75) - elseif param2 == 0 then - clicker:set_look_yaw(3.15) - else - clicker:set_look_yaw(6.28) - end - end -end - -local function sit_exec(pos, node, clicker) -- don't move these functions inside sit() - if not clicker or not clicker:is_player() - or clicker:get_player_control().up == true or clicker:get_player_control().down == true - or clicker:get_player_control().left == true or clicker:get_player_control().right == true - or clicker:get_player_control().jump == true then -- make sure that the player is immobile. - return end - sit(pos, node, clicker) - clicker:setpos(pos) - default.player_set_animation(clicker, "sit", 30) -end - local chaircolors = { { "", "plain" }, { "black", "Black" }, @@ -385,232 +383,6 @@ homedecor.register("wardrobe_bottom", { }, }) -homedecor.register("simple_bench", { - tiles = { - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_bench_large_2_left_back.png", - "homedecor_bench_large_2_left_back.png^[transformFX" - }, - description = "Simple Bench", - groups = {snappy=3}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.15, 0, 0.5, -0.05, 0.4}, - {-0.4, -0.5, 0.1, -0.3, -0.15, 0.3}, - { 0.3, -0.5, 0.1, 0.4, -0.15, 0.3}, - } - }, - on_rightclick = function(pos, node, clicker) - pos.y = pos.y-0 -- player's sit position. - sit_exec(pos, node, clicker) - end, -}) - -homedecor.register("bench_large_1_left", { - description = "Garden Bench (style 1)", - tiles = { - "homedecor_bench_large_1_left_top.png", - "homedecor_bench_large_1_left_bottom.png", - "homedecor_bench_large_1_ends.png^[transformFX", - "homedecor_bench_large_1_ends.png", - "homedecor_bench_large_1_left_back.png", - "homedecor_bench_large_1_left_front.png" - }, - inventory_image = "homedecor_bench_large_1_inv.png", - groups = {snappy=3}, - node_box = { - type = "fixed", - fixed = { - {-0.5, 0.25, 0.375, 0.5, 0.4375, 0.4375}, -- NodeBox1 - {-0.5, 0, 0.375, 0.5, 0.1875, 0.4375}, -- NodeBox2 - {-0.5, -0.125, 0.115, 0.5, -0.0625, 0.35}, -- NodeBox3 - {-0.5, -0.125, -0.0872, 0.5, -0.0625, 0.079}, -- NodeBox4 - {-0.3125, -0.5, 0.4375, -0.25, 0.375, 0.5}, -- NodeBox5 - {-0.3125, -0.25, -0.0625, -0.25, -0.125, 0.4375}, -- NodeBox6 - {-0.3125, -0.5, -0.0625, -0.25, -0.25, 0}, -- NodeBox7 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.09375, 1.5, 0.5, 0.5 } - }, - expand = { right="homedecor:bench_large_1_right" }, - on_rightclick = function(pos, node, clicker) - pos.y = pos.y-0 -- player's sit position. - sit_exec(pos, node, clicker) - end, -}) - -homedecor.register("bench_large_1_right", { - tiles = { - "homedecor_bench_large_1_left_top.png^[transformFX", - "homedecor_bench_large_1_left_bottom.png^[transformFX", - "homedecor_bench_large_1_ends.png^[transformFX", - "homedecor_bench_large_1_ends.png", - "homedecor_bench_large_1_left_back.png^[transformFX", - "homedecor_bench_large_1_left_front.png^[transformFX" - }, - groups = {snappy=3}, - node_box = { - type = "fixed", - fixed = { - {-0.5, 0.25, 0.375, 0.5, 0.4375, 0.4375}, -- NodeBox1 - {-0.5, 0, 0.375, 0.5, 0.1875, 0.4375}, -- NodeBox2 - {-0.5, -0.125, 0.115, 0.5, -0.0625, 0.35}, -- NodeBox3 - {-0.5, -0.125, -0.0872, 0.5, -0.0625, 0.079}, -- NodeBox4 - {0.25, -0.5, 0.4375, 0.3125, 0.375, 0.5}, -- NodeBox5 - {0.25, -0.25, -0.0625, 0.3125, -0.125, 0.5}, -- NodeBox6 - {0.25, -0.5, -0.0625, 0.3125, -0.25, 0}, -- NodeBox7 - } - }, - selection_box = homedecor.nodebox.null, -}) - - -homedecor.register("bench_large_2_left", { - description = "Garden Bench (style 2)", - tiles = { - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_bench_large_2_left_back.png", - "homedecor_bench_large_2_left_back.png^[transformFX" - }, - inventory_image = "homedecor_bench_large_2_inv.png", - groups = {snappy=3}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, -- NodeBox1 - {-0.375, 0.3125, 0.4375, 0.5, 0.4375, 0.5}, -- NodeBox2 - {-0.375, -0.0625, 0.4375, 0.5, 0.0625, 0.5}, -- NodeBox3 - {-0.3125, 0.0625, 0.45, -0.25, 0.3125, 0.48}, -- NodeBox4 - {-0.1875, 0.0625, 0.45, -0.125, 0.3125, 0.48}, -- NodeBox5 - {-0.0625, 0.0625, 0.45, 0, 0.3125, 0.48}, -- NodeBox6 - {0.0625, 0.0625, 0.45, 0.125, 0.3125, 0.48}, -- NodeBox7 - {0.1875, 0.0625, 0.45, 0.25, 0.3125, 0.48}, -- NodeBox8 - {0.3125, 0.0625, 0.45, 0.375, 0.3125, 0.48}, -- NodeBox9 - {0.4375, 0.0625, 0.45, 0.5, 0.3125, 0.48}, -- NodeBox10 - {-0.5, 0.0625, -0.145362, -0.375, 0.125, 0.375}, -- NodeBox11 - {-0.5, -0.5, -0.0625, -0.375, 0.0625, 0.0625}, -- NodeBox12 - {-0.4375, -0.125, -0.0625, 0.5, -0.0911603, 0.4375}, -- NodeBox13 - {-0.4375, -0.4375, 0.0625, -0.375, -0.3125, 0.375}, -- NodeBox14 - {-0.375, -0.342324, 0.25, 0.5, -0.4375, 0.1875}, -- NodeBox15 - {-0.5, -0.25, -0.0290173, 0.5, -0.125, 0.0125346}, -- NodeBox16 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.15625, 1.5, 0.5, 0.5 } - }, - expand = { right="homedecor:bench_large_2_right" }, - on_rightclick = function(pos, node, clicker) - pos.y = pos.y-0 -- player's sit position. - sit_exec(pos, node, clicker) - end, -}) - -homedecor.register("bench_large_2_right", { - tiles = { - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_generic_wood.png", - "homedecor_bench_large_2_right_back.png", - "homedecor_bench_large_2_right_back.png^[transformFX" - }, - groups = {snappy=3}, - node_box = { - type = "fixed", - fixed = { - {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, -- NodeBox1 - {-0.5, 0.3125, 0.4375, 0.375, 0.4375, 0.5}, -- NodeBox2 - {-0.5, -0.0625, 0.4375, 0.375, 0.0625, 0.5}, -- NodeBox3 - {-0.5, 0.0625, 0.45, -0.4375, 0.3125, 0.48}, -- NodeBox4 - {-0.375, 0.0625, 0.45, -0.3125, 0.3125, 0.48}, -- NodeBox5 - {-0.25, 0.0625, 0.45, -0.1875, 0.3125, 0.48}, -- NodeBox6 - {-0.125, 0.0625, 0.45, -0.0625, 0.3125, 0.48}, -- NodeBox7 - {0, 0.0625, 0.45, 0.0625, 0.3125, 0.48}, -- NodeBox8 - {0.125, 0.0625, 0.45, 0.1875, 0.3125, 0.48}, -- NodeBox9 - {0.25, 0.0625, 0.45, 0.3125, 0.3125, 0.48}, -- NodeBox10 - {0.375, 0.0625, -0.145362, 0.5, 0.125, 0.375}, -- NodeBox11 - {0.375, -0.5, -0.0625, 0.5, 0.125, 0.0625}, -- NodeBox12 - {0.375, -0.4375, 0.0625, 0.4375, -0.3125, 0.375}, -- NodeBox13 - {-0.5, -0.4375, 0.1875, 0.375, -0.342324, 0.25}, -- NodeBox14 - {-0.5, -0.125, -0.0625, 0.4375, -0.0911603, 0.4375}, -- NodeBox15 - {-0.5, -0.25, -0.0290173, 0.5, -0.125, 0.0125346}, -- NodeBox16 - } - }, - selection_box = homedecor.nodebox.null, -}) - -homedecor.register("deckchair_head", { - tiles = { - "homedecor_deckchair_top_c1.png", - "homedecor_deckchair_sides.png", - "homedecor_deckchair_sides.png", - "homedecor_deckchair_sides.png^[transformFX", - "homedecor_deckchair_sides.png", - "homedecor_deckchair_front.png" - }, - groups = { snappy = 3, not_in_creative_inventory = 1 }, - node_box = { - type = "fixed", - fixed = { - {-0.375, -0.3125, -0.0625, 0.375, -0.25, 0}, -- NodeBox1 - {-0.375, -0.25, 0, 0.375, -0.1875, 0.0625}, -- NodeBox2 - {-0.375, -0.1875, 0.0625, 0.375, -0.125, 0.125}, -- NodeBox3 - {-0.375, -0.125, 0.125, 0.375, -0.0625, 0.1875}, -- NodeBox4 - {-0.375, -0.0625, 0.1875, 0.375, 0, 0.25}, -- NodeBox5 - {-0.375, 0, 0.25, 0.375, 0.0625, 0.3125}, -- NodeBox6 - {-0.375, 0.0625, 0.3125, 0.375, 0.125, 0.375}, -- NodeBox7 - {-0.375, 0.125, 0.375, 0.375, 0.1875, 0.4375}, -- NodeBox8 - {-0.375, 0.1875, 0.4375, 0.375, 0.25, 0.5}, -- NodeBox9 - {-0.375, -0.375, -0.5, 0.375, -0.3125, 0.0625}, -- NodeBox10 - {0.3125, -0.1875, -0.5, 0.4375, -0.1575, 0.0625}, -- NodeBox11 - {-0.4375, -0.1875, -0.5, -0.3125, -0.1575, 0.0625}, -- NodeBox12 - {0.3125, -0.5, 0, 0.375, -0.25, 0.0625}, -- NodeBox13 - {-0.375, -0.5, 0, -0.3125, -0.25, 0.0625}, -- NodeBox14 - } - }, - selection_box = homedecor.nodebox.null -}) - -homedecor.register("deckchair_foot", { - tiles = { - "homedecor_deckchair_top_c2.png", - "homedecor_deckchair_sides.png", - "homedecor_deckchair_sides.png", - "homedecor_deckchair_sides.png^[transformFX", - "homedecor_deckchair_front.png" - }, - description = "Deck chair", - inventory_image = "homedecor_deckchair_inv.png", - groups = { snappy = 3 }, - node_box = { - type = "fixed", - fixed = { - {-0.375, -0.375, -0.5, 0.375, -0.3125, 0.5}, -- NodeBox1 - {0.3125, -0.5, -0.5, 0.375, -0.375, -0.4375}, -- NodeBox2 - {-0.375, -0.5, -0.5, -0.3125, -0.375, -0.4375}, -- NodeBox3 - {0.3125, -0.1875, 0.3, 0.4375, -0.1575, 0.5}, -- NodeBox4 - {-0.4375, -0.1875, 0.3, -0.3125, -0.1575, 0.5}, -- NodeBox5 - {-0.365, -0.3125, 0.32, -0.3225, -0.1875, 0.4375}, -- NodeBox6 - {0.3225, -0.3125, 0.32, 0.365, -0.1875, 0.4375}, -- NodeBox7 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.45, -0.5, -0.5, 0.45, 0.35, 1.5 } - }, - expand = { forward="homedecor:deckchair_head" }, -}) - homedecor.register("wall_shelf", { description = "Wall Shelf", tiles = { diff --git a/homedecor/init.lua b/homedecor/init.lua index 673bab35..8c2b8dd9 100644 --- a/homedecor/init.lua +++ b/homedecor/init.lua @@ -147,6 +147,8 @@ dofile(homedecor.modpath.."/furniture_recipes.lua") dofile(homedecor.modpath.."/climate-control.lua") dofile(homedecor.modpath.."/cobweb.lua") +dofile(homedecor.modpath.."/books.lua") +dofile(homedecor.modpath.."/exterior.lua") dofile(homedecor.modpath.."/handlers/locked.lua") diff --git a/homedecor/misc-nodes.lua b/homedecor/misc-nodes.lua index 669b2048..c1ac0b9f 100644 --- a/homedecor/misc-nodes.lua +++ b/homedecor/misc-nodes.lua @@ -338,78 +338,6 @@ homedecor.register("filing_cabinet", { }, }) -homedecor.register("doghouse_base", { - tiles = { - "homedecor_doghouse_base_top.png", - "homedecor_doghouse_base_bottom.png", - "homedecor_doghouse_base_side.png", - "homedecor_doghouse_base_side.png", - "homedecor_doghouse_base_side.png", - "homedecor_doghouse_base_front.png" - }, - description = "Doghouse", - inventory_image = "homedecor_doghouse_inv.png", - node_box = { - type = "fixed", - fixed = { - {0.3125, -0.5, -0.4375, 0.4375, -0.3125, -0.3125}, -- NodeBox1 - {0.3125, -0.5, 0.3125, 0.4375, -0.3125, 0.4375}, -- NodeBox2 - {-0.4375, -0.5, 0.3125, -0.3125, -0.3125, 0.4375}, -- NodeBox3 - {-0.4375, -0.5, -0.4375, -0.3125, -0.3125, -0.3125}, -- NodeBox4 - {-0.4375, -0.3125, -0.4375, -0.375, 0.5, 0.4375}, -- NodeBox5 - {-0.4375, 0.3125, -0.375, 0.4375, 0.5, -0.3125}, -- NodeBox6 - {-0.4375, -0.3125, -0.4375, 0.4375, -0.25, 0.4375}, -- NodeBox7 - {-0.375, -0.3125, -0.375, -0.1875, 0.4375, -0.3125}, -- NodeBox8 - {0.1875, -0.3125, -0.375, 0.4375, 0.5, -0.3125}, -- NodeBox9 - {0.375, -0.25, -0.4375, 0.4375, 0.5, 0.4375}, -- NodeBox10 - {-0.4375, -0.3125, 0.375, 0.4375, 0.5, 0.4375}, -- NodeBox11 - } - }, - selection_box = homedecor.nodebox.slab_y(1.5), - groups = {snappy=3}, - expand = { top="homedecor:doghouse_roof" }, -}) - -homedecor.register("doghouse_roof", { - tiles = { - "homedecor_doghouse_roof_top.png", - "homedecor_doghouse_roof_bottom.png", - "homedecor_doghouse_roof_side.png", - "homedecor_doghouse_roof_side.png", - "homedecor_doghouse_roof_front.png", - "homedecor_doghouse_roof_front.png" - }, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, -0.4375, -0.4375, 0.5}, -- NodeBox17 - {-0.4375, -0.4375, -0.5, -0.375, -0.375, 0.5}, -- NodeBox18 - {-0.375, -0.375, -0.5, -0.3125, -0.3125, 0.5}, -- NodeBox19 - {-0.3125, -0.3125, -0.5, -0.25, -0.25, 0.5}, -- NodeBox20 - {-0.25, -0.25, -0.5, -0.1875, -0.1875, 0.5}, -- NodeBox21 - {-0.1875, -0.1875, -0.5, -0.125, -0.125, 0.5}, -- NodeBox22 - {-0.125, -0.125, -0.5, -0.0625, -0.0625, 0.5}, -- NodeBox23 - {-0.0625, -0.0625, -0.5, 0.0625, 0, 0.5}, -- NodeBox24 - {0.0625, -0.125, -0.5, 0.125, -0.0625, 0.5}, -- NodeBox25 - {0.125, -0.1875, -0.5, 0.1875, -0.125, 0.5}, -- NodeBox26 - {0.1875, -0.25, -0.5, 0.25, -0.1875, 0.5}, -- NodeBox27 - {0.25, -0.3125, -0.5, 0.3125, -0.25, 0.5}, -- NodeBox28 - {0.3125, -0.375, -0.5, 0.375, -0.3125, 0.5}, -- NodeBox29 - {0.375, -0.4375, -0.5, 0.4375, -0.375, 0.5}, -- NodeBox30 - {0.4375, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox31 - {-0.4375, -0.5, -0.375, 0.4375, -0.4375, 0.4375}, -- NodeBox32 - {-0.375, -0.4375, -0.375, 0.375, -0.375, 0.4375}, -- NodeBox33 - {-0.3125, -0.375, -0.375, 0.3125, -0.3125, 0.4375}, -- NodeBox34 - {-0.25, -0.3125, -0.375, 0.25, -0.25, 0.4375}, -- NodeBox35 - {-0.1875, -0.25, -0.375, 0.1875, -0.1875, 0.4375}, -- NodeBox36 - {-0.125, -0.1875, -0.375, 0.125, -0.125, 0.4375}, -- NodeBox37 - {0.0625, -0.125, -0.375, -0.0625, -0.0625, 0.4375}, -- NodeBox38 - } - }, - selection_box = homedecor.nodebox.null, - groups = {snappy=3, not_in_creative_inventory=1}, -}) - homedecor.register("pool_table", { tiles = { "homedecor_pool_table_top1.png", @@ -514,101 +442,6 @@ homedecor.register("trash_can", { collision_box = trash_cbox, }) -homedecor.register("well_base", { - tiles = { - "homedecor_well_base_top.png", - "default_cobble.png" - }, - inventory_image = "homedecor_well_inv.png", - description = "Water well", - groups = { snappy = 3 }, - node_box = { - type = "fixed", - fixed = { - {-0.3125, -0.5, -0.4375, 0.3125, 0.5, -0.3125}, -- NodeBox1 - {0.3125, -0.5, -0.3125, 0.4375, 0.5, 0.3125}, -- NodeBox2 - {-0.4375, -0.5, -0.3125, -0.3125, 0.5, 0.3125}, -- NodeBox3 - {-0.3125, -0.5, 0.3125, 0.3125, 0.5, 0.4375}, -- NodeBox4 - {0.25, -0.5, -0.375, 0.375, 0.5, -0.25}, -- NodeBox5 - {0.25, -0.5, 0.25, 0.375, 0.5, 0.375}, -- NodeBox6 - {-0.375, -0.5, -0.375, -0.25, 0.5, -0.25}, -- NodeBox7 - {-0.375, -0.5, 0.25, -0.25, 0.5, 0.375}, -- NodeBox8 - {-0.3125, -0.5, -0.5, 0.3125, -0.3125, -0.4375}, -- NodeBox9 - {0.4375, -0.5, -0.3125, 0.5, -0.3125, 0.3125}, -- NodeBox10 - {-0.3125, -0.5, 0.4375, 0.3125, -0.3125, 0.5}, -- NodeBox11 - {-0.5, -0.5, -0.3125, -0.4375, -0.3125, 0.3125}, -- NodeBox12 - {0.3125, -0.5, -0.4375, 0.4375, -0.3125, -0.3125}, -- NodeBox13 - {0.3125, -0.5, 0.3125, 0.4375, -0.3125, 0.4375}, -- NodeBox14 - {-0.4375, -0.5, 0.3125, -0.3125, -0.3125, 0.4375}, -- NodeBox15 - {-0.4375, -0.5, -0.4375, -0.3125, -0.3125, -0.3125}, -- NodeBox16 - {-0.3125, -0.5, -0.3125, 0.3125, 0, 0.3125}, -- NodeBox17 - } - }, - selection_box = homedecor.nodebox.slab_y(2), - expand = { top="homedecor:well_top" }, -}) - -homedecor.register("well_top", { - tiles = { - "homedecor_well_roof_top.png", - "homedecor_well_roof_wood.png", - "homedecor_well_roof_side3.png", - "homedecor_well_roof_side3.png", - "homedecor_well_roof_side2.png", - "homedecor_well_roof_side1.png" - }, - groups = { snappy = 3 }, - node_box = { - type = "fixed", - fixed = { - {-0.0625, -0.5, 0.375, 0.0625, 0.4375, 0.4375}, -- NodeBox1 - {-0.0625, -0.5, -0.4375, 0.0625, 0.4375, -0.375}, -- NodeBox2 - {-0.125, 0.375, -0.5, 0.125, 0.4375, 0.5}, -- NodeBox3 - {0.125, 0.3125, -0.5, 0.1875, 0.375, 0.5}, -- NodeBox4 - {-0.1875, 0.3125, -0.5, -0.125, 0.375, 0.5}, -- NodeBox5 - {0.1875, 0.25, -0.5, 0.25, 0.3125, 0.5}, -- NodeBox6 - {-0.25, 0.25, -0.5, -0.1875, 0.3125, 0.5}, -- NodeBox7 - {0.25, 0.1875, -0.5, 0.3125, 0.25, 0.5}, -- NodeBox8 - {-0.3125, 0.1875, -0.5, -0.25, 0.25, 0.5}, -- NodeBox9 - {0.3125, 0.125, -0.5, 0.375, 0.1875, 0.5}, -- NodeBox10 - {-0.375, 0.125, -0.5, -0.3125, 0.1875, 0.5}, -- NodeBox11 - {0.375, 0.0625, -0.5, 0.4375, 0.125, 0.5}, -- NodeBox12 - {-0.375, 0.0625, -0.5, -0.4375, 0.125, 0.5}, -- NodeBox13 - {0.4375, 0, -0.5, 0.5, 0.0625, 0.5}, -- NodeBox14 - {-0.5, 0, -0.5, -0.4375, 0.0625, 0.5}, -- NodeBox15 - {-0.0625, 0.4375, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox16 - {-0.125, 0.125, -0.4375, 0.125, 0.1875, -0.375}, -- NodeBox17 - {0.125, 0.1875, -0.4375, 0.1875, 0.25, -0.375}, -- NodeBox18 - {-0.1875, 0.1875, -0.4375, -0.125, 0.25, -0.375}, -- NodeBox19 - {-0.125, 0.125, 0.375, 0.125, 0.1875, 0.4375}, -- NodeBox20 - {0.125, 0.1875, 0.375, 0.1875, 0.25, 0.4375}, -- NodeBox21 - {-0.1875, 0.1875, 0.375, -0.125, 0.25, 0.4375}, -- NodeBox22 - {-0.0165975, -0.159751, -0.375, 0.0165974, -0.125, 0.375}, -- NodeBox23 - {-0.00414942, -0.465, -0.008299, 0.008299, -0.159751, 0.004149}, -- NodeBox24 - {-0.0625, -0.0625, -0.5, 0.0625, 0, -0.4646}, -- NodeBox25 - {0.0625, -0.125, -0.5, 0.125, -0.0625, -0.4646}, -- NodeBox26 - {0.125, -0.25, -0.5, 0.1875, -0.125, -0.4646}, -- NodeBox27 - {0.0625, -0.3125, -0.5, 0.125, -0.25, -0.4646}, -- NodeBox28 - {-0.0625, -0.375, -0.5, 0.0625, -0.3125, -0.4646}, -- NodeBox29 - {-0.0625, -0.3125, -0.5, -0.125, -0.25, -0.4646}, -- NodeBox30 - {-0.1875, -0.25, -0.5, -0.125, -0.125, -0.4646}, -- NodeBox31 - {-0.125, -0.125, -0.5, -0.0625, -0.0625, -0.4646}, -- NodeBox32 - {-0.016598, -0.3125, -0.48, 0.020747, -0.0625, -0.49}, -- NodeBox33 - {-0.125, -0.209544, -0.48, 0.125, -0.172199, -0.49}, -- NodeBox34 - {-0.0165975, -0.200, -0.477178, 0.020747, -0.175349, -0.435685}, -- NodeBox35 - {0.1, -0.75, -0.125, 0.125, -0.5, 0.125}, -- NodeBox36 - {-0.125, -0.75, -0.125, -0.1, -0.5, 0.125}, -- NodeBox37 - {-0.125, -0.75, -0.125, 0.125, -0.729253, 0.125}, -- NodeBox38 - {-0.125, -0.75, -0.125, 0.125, -0.5, -0.1}, -- NodeBox39 - {-0.125, -0.75, 0.1, 0.125, -0.5, 0.125}, -- NodeBox40 - {-0.0165975,-0.465, -0.125, 0.0165974, -0.451245, 0.125}, -- NodeBox41 - {-0.0165975, -0.51, 0.112033, 0.0165974, -0.46, 0.125}, -- NodeBox42 - {-0.0165975, -0.51, -0.125, 0.0165974, -0.46, -0.112033}, -- NodeBox43 - } - }, - selection_box = homedecor.nodebox.null, -}) - homedecor.register("coatrack_wallmount", { tiles = { "forniture_wood.png" }, inventory_image = "homedecor_coatrack_wallmount_inv.png", @@ -924,84 +757,6 @@ homedecor.register("skateboard", { on_place = minetest.rotate_node }) -homedecor.register("stonepath", { - description = "Garden stone path", - tiles = { - "default_stone.png" - }, - inventory_image = "homedecor_stonepath_inv.png", - groups = { snappy=3 }, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, 0.3125, -0.3125, -0.48, 0.4375}, -- NodeBox1 - {-0.25, -0.5, 0.125, 0, -0.48, 0.375}, -- NodeBox2 - {0.125, -0.5, 0.125, 0.4375, -0.48, 0.4375}, -- NodeBox3 - {-0.4375, -0.5, -0.125, -0.25, -0.48, 0.0625}, -- NodeBox4 - {-0.0625, -0.5, -0.25, 0.25, -0.48, 0.0625}, -- NodeBox5 - {0.3125, -0.5, -0.25, 0.4375, -0.48, -0.125}, -- NodeBox6 - {-0.3125, -0.5, -0.375, -0.125, -0.48, -0.1875}, -- NodeBox7 - {0.125, -0.5, -0.4375, 0.25, -0.48, -0.3125}, -- NodeBox8 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.4375, -0.5, -0.4375, 0.4375, -0.4, 0.4375 } - } -}) - -homedecor.register("barbecue", { - description = "Barbecue", - tiles = { - {name="homedecor_barbecue_top.png", animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2}}, - "forniture_black_metal.png", - }, - groups = { snappy=3 }, - light_source = 9, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, 0.25, -0.4375, 0.0625, 0.3125}, -- NodeBox1 - {0.4375, -0.5, 0.25, 0.5, 0.0625, 0.3125}, -- NodeBox2 - {-0.5, -0.5, -0.3125, -0.4375, 0.0625, -0.25}, -- NodeBox3 - {0.4375, -0.5, -0.3125, 0.5, 0.0625, -0.25}, -- NodeBox4 - {-0.5, 0.0625, -0.3125, 0.5, 0.375, 0.3125}, -- NodeBox5 - {-0.375, 0.5, -0.25, -0.313, 0.5, 0.251}, -- NodeBox6 - {-0.25, 0.5, -0.25, -0.188, 0.5, 0.251}, -- NodeBox7 - {-0.125, 0.5, -0.25, -0.063, 0.5, 0.251}, -- NodeBox8 - {0, 0.5, -0.25, 0.062, 0.5, 0.251}, -- NodeBox9 - {0.125, 0.5, -0.25, 0.187, 0.5, 0.251}, -- NodeBox10 - {0.25, 0.5, -0.25, 0.312, 0.5, 0.251}, -- NodeBox11 - {0.375, 0.5, -0.25, 0.437, 0.5, 0.251}, -- NodeBox12 - {-0.5, 0.375, 0.251, 0.5, 0.5, 0.3125}, -- NodeBox13 - {-0.5, 0.0625, -0.3125, 0.5, 0.5, -0.25}, -- NodeBox14 - {-0.5, 0.0625, -0.3125, -0.438, 0.5, 0.3125}, -- NodeBox15 - {0.4375, 0.0625, -0.3125, 0.5, 0.5, 0.3125}, -- NodeBox16 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.3125, 0.5, 0.625, 0.3125 } - }, - expand = { top="homedecor:barbecue_meat" }, -}) - -homedecor.register("barbecue_meat", { - tiles = { - "homedecor_barbecue_meat.png", - }, - groups = { snappy=3, not_in_creative_inventory=1 }, - node_box = { - type = "fixed", - fixed = { - {-0.25, -0.5, -0.125, -0.0625, -0.4375, 0.125}, -- NodeBox1 - {0.125, -0.5, -0.125, 0.3125, -0.4375, 0.125}, -- NodeBox2 - } - }, - selection_box = homedecor.nodebox.null -}) - homedecor.register("beer_tap", { description = "Beer tap", tiles = { @@ -1126,243 +881,6 @@ homedecor.register("tool_cabinet_top", { selection_box = homedecor.nodebox.null }) -homedecor.register("swing", { - description = "Tree's swing", - tiles = { - "homedecor_swing_top.png", - "homedecor_swing_top.png^[transformR180", - "homedecor_swing_top.png" - }, - inventory_image = "homedecor_swing_inv.png", - groups = { snappy=3, oddly_breakable_by_hand=3 }, - node_box = { - type = "fixed", - fixed = { - {-0.3125, 0.33, -0.125, 0.3125, 0.376, 0.1875}, -- NodeBox1 - {-0.3125, 0.376, 0.025, -0.3, 0.5, 0.0375}, -- NodeBox2 - { 0.3, 0.376, 0.025, 0.3125, 0.5, 0.0375}, -- NodeBox3 - } - }, - selection_box = { - type = "fixed", - fixed = { -0.3125, 0.33, -0.125, 0.3125, 0.5, 0.1875 } - }, - on_place = function(itemstack, placer, pointed_thing) - isceiling, pos = homedecor.find_ceiling(itemstack, placer, pointed_thing) - if isceiling then - local height = 0 - - for i = 0, 4 do -- search up to 5 spaces downward from the ceiling for the first non-buildable-to node... - height = i - local testpos = { x=pos.x, y=pos.y-i-1, z=pos.z } - local testnode = minetest.get_node(testpos) - local testreg = core.registered_nodes[testnode.name] - - if not testreg.buildable_to then - if i < 1 then - minetest.chat_send_player(placer:get_player_name(), "No room under there to hang a swing.") - return - else - break - end - end - end - - for j = 0, height do -- then fill that space with ropes... - local testpos = { x=pos.x, y=pos.y-j, z=pos.z } - local testnode = minetest.get_node(testpos) - local testreg = core.registered_nodes[testnode.name] - minetest.set_node(testpos, { name = "homedecor:swing_rope", param2 = fdir }) - end - - minetest.set_node({ x=pos.x, y=pos.y-height, z=pos.z }, { name = "homedecor:swing", param2 = fdir }) - - if not homedecor.expect_infinite_stacks then - itemstack:take_item() - return itemstack - end - - else - minetest.chat_send_player(placer:get_player_name(), "You have to point at the bottom side of an overhanging object to place a swing.") - end - end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - for i = 0, 4 do - local testpos = { x=pos.x, y=pos.y+i+1, z=pos.z } - if minetest.get_node(testpos).name == "homedecor:swing_rope" then - minetest.remove_node(testpos) - else - return - end - end - end -}) - -homedecor.register("swing_rope", { - tiles = { - "homedecor_swingrope_sides.png" - }, - groups = { not_in_creative_inventory=1 }, - node_box = { - type = "fixed", - fixed = { - {-0.3125, -0.5, 0.025, -0.3, 0.5, 0.0375}, -- NodeBox1 - {0.3, -0.5, 0.025, 0.3125, 0.5, 0.0375}, -- NodeBox2 - } - }, - selection_box = homedecor.nodebox.null -}) - -local bookcolors = { - "red", - "green", - "blue", - "violet", - "grey", - "brown" -} - -local BOOK_FORMNAME = "homedecor:book_form" - -for c in ipairs(bookcolors) do - local color = bookcolors[c] - local color_d = S(bookcolors[c]) - - local function book_dig(pos, node, digger) - if minetest.is_protected(pos, digger:get_player_name()) then return end - local meta = minetest.get_meta(pos) - local stack = ItemStack({ - name = "homedecor:book_"..color, - metadata = meta:get_string("text"), - }) - stack = digger:get_inventory():add_item("main", stack) - if not stack:is_empty() then - minetest.item_drop(stack, digger, pos) - end - minetest.remove_node(pos) - end - -homedecor.register("book_"..color, { - description = S("Book (%s)"):format(color_d), - mesh = "homedecor_book.obj", - tiles = { "homedecor_book_"..color..".png" }, - inventory_image = "homedecor_book_"..color.."_inv.png", - wield_image = "homedecor_book_"..color.."_inv.png", - groups = { snappy=3, oddly_breakable_by_hand=3, book=1 }, - stack_max = 1, - on_rightclick = function(pos, node, clicker) - local fdir = node.param2 - minetest.swap_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir }) - end, - on_place = function(itemstack, placer, pointed_thing) - local plname = placer:get_player_name() - local pos = pointed_thing.under - local node = minetest.get_node(pos) - local n = minetest.registered_nodes[node.name] - if not n.buildable_to then - pos = pointed_thing.above - node = minetest.get_node(pos) - n = minetest.registered_nodes[node.name] - if not n.buildable_to then return end - end - if minetest.is_protected(pos, plname) then return end - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - minetest.set_node(pos, { - name = "homedecor:book_"..color, - param2 = fdir, - }) - local text = itemstack:get_metadata() or "" - local meta = minetest.get_meta(pos) - meta:set_string("text", text) - local data = minetest.deserialize(text) or {} - if data.title and data.title ~= "" then - meta:set_string("infotext", data.title) - end - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end, - on_dig = book_dig, - on_use = function(itemstack, user, pointed_thing) - local player_name = user:get_player_name() - local data = minetest.deserialize(itemstack:get_metadata()) - local title, text, owner = "", "", player_name - if data then - title, text, owner = data.title, data.text, data.owner - end - local formspec - if owner == player_name then - formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img.. - "field[0.5,1;7.5,0;title;Book title :;".. - minetest.formspec_escape(title).."]".. - "textarea[0.5,1.5;7.5,7;text;Book content :;".. - minetest.formspec_escape(text).."]".. - "button_exit[2.5,7.5;3,1;save;Save]" - else - formspec = "size[8,8]"..default.gui_bg.. - "button_exit[7,0.25;1,0.5;close;X]".. - default.gui_bg_img.. - "label[0.5,0.5;by "..owner.."]".. - "label[0.5,0;"..minetest.formspec_escape(title).."]".. - "textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]" - end - minetest.show_formspec(user:get_player_name(), BOOK_FORMNAME, formspec) - end, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25} - }, - collision_box = { - type = "fixed", - fixed = {-0.15, -0.5, -0.25, 0.15, -0.35, 0.25} - }, -}) - -homedecor.register("book_open_"..color, { - mesh = "homedecor_book_open.obj", - tiles = { "homedecor_book_open_"..color..".png" }, - groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1 }, - drop = "homedecor:book_"..color, - on_dig = book_dig, - on_rightclick = function(pos, node, clicker) - local fdir = node.param2 - minetest.swap_node(pos, { name = "homedecor:book_"..color, param2 = fdir }) - minetest.sound_play("homedecor_book_close", { - pos=pos, - max_hear_distance = 3, - gain = 2, - }) - end, - selection_box = { - type = "fixed", - fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25} - }, - collision_box = { - type = "fixed", - fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25} - }, -}) - -end - -minetest.register_on_player_receive_fields(function(player, form_name, fields) - if form_name ~= BOOK_FORMNAME or not fields.save then - return - end - local stack = player:get_wielded_item() - if minetest.get_item_group(stack:get_name(), "book") == 0 then - return - end - local data = minetest.deserialize(stack:get_metadata()) or {} - data.title, data.text, data.owner = - fields.title, fields.text, player:get_player_name() - stack:set_metadata(minetest.serialize(data)) - player:set_wielded_item(stack) - minetest.log("action", player:get_player_name().." has written in a book (title: \""..fields.title.."\"): \""..fields.text.. - "\" at location: "..minetest.pos_to_string(player:getpos())) -end) - homedecor.register("calendar", { description = "Calendar", drawtype = "signlike",