diff --git a/homedecor/bedroom.lua b/homedecor/bedroom.lua index 072096fc..e765e4a9 100644 --- a/homedecor/bedroom.lua +++ b/homedecor/bedroom.lua @@ -171,6 +171,7 @@ for _, w in pairs({"mahogany", "oak"}) do infotext=S("One-drawer Nightstand"), inventory = { size=8, + lockable=true, }, }) @@ -196,6 +197,7 @@ for _, w in pairs({"mahogany", "oak"}) do infotext=S("Two-drawer Nightstand"), inventory = { size=16, + lockable=true, }, }) end diff --git a/homedecor/handlers/inventory.lua b/homedecor/handlers/inventory.lua index 5855628e..362f1e5b 100644 --- a/homedecor/handlers/inventory.lua +++ b/homedecor/handlers/inventory.lua @@ -54,7 +54,8 @@ end -- inventory = { -- size = 16, -- formspec = …, --- locked = true, +-- locked = false, +-- lockable = true, -- } -- function homedecor.handle_inventory(name, def, original_def) @@ -88,20 +89,15 @@ function homedecor.handle_inventory(name, def, original_def) )) end - local locked = def.locked - def.locked = nil - + local locked = inventory.locked if locked then - local description = def.description - -- def.description = S("%s (Locked)"):format(description) - local after_place_node = def.after_place_node def.after_place_node = function(pos, placer) local meta = minetest.get_meta(pos) local owner = placer:get_player_name() or "" meta:set_string("owner", owner) - meta:set_string("infotext", S("%s (owned by %s)"):format(def.infotext or description, owner)) + meta:set_string("infotext", S("%s (owned by %s)"):format(def.infotext or def.description, owner)) return after_place_node and after_place_node(pos, placer) end @@ -113,7 +109,7 @@ function homedecor.handle_inventory(name, def, original_def) if (playername ~= owner) then minetest.log("action", string.format("%s tried to access a %s belonging to %s at %s", - playername, infotext, owner, minetest.pos_to_string(pos) + playername, name, owner, minetest.pos_to_string(pos) )) return 0 end @@ -130,7 +126,7 @@ function homedecor.handle_inventory(name, def, original_def) if (playername ~= owner) then minetest.log("action", string.format("%s tried to access a %s belonging to %s at %s", - playername, infotext, owner, minetest.pos_to_string(pos) + playername, name, owner, minetest.pos_to_string(pos) )) return 0 end @@ -146,7 +142,7 @@ function homedecor.handle_inventory(name, def, original_def) if (playername ~= owner) then minetest.log("action", string.format("%s tried to access a %s belonging to %s at %s", - playername, infotext, owner, minetest.pos_to_string(pos) + playername, name, owner, minetest.pos_to_string(pos) )) return 0 end @@ -154,4 +150,23 @@ function homedecor.handle_inventory(name, def, original_def) or stack:get_count() end end + + local lockable = inventory.lockable + if lockable then + local locked_def = table.copy(original_def) + locked_def.description = S("%s (Locked)"):format(def.infotext or def.description) + + local locked_inventory = locked_def.inventory + locked_inventory.locked = true + locked_inventory.lockable = nil -- avoid loops of locked locked stuff + + local locked_name = name .. "_locked" + homedecor.register(locked_name, locked_def) + minetest.register_craft({ + type = "shapeless", + output = "homedecor:" .. locked_name, + recipe = { "homedecor:" .. name, "default:steel_ingot" } + }) + end + end diff --git a/homedecor/handlers/locked.lua b/homedecor/handlers/locked.lua index dc1ccc61..2737e04e 100644 --- a/homedecor/handlers/locked.lua +++ b/homedecor/handlers/locked.lua @@ -115,32 +115,6 @@ local function create_locked ( name, infotext ) end local items = { - { "refrigerator_white", - "Refrigerator" }, - { "refrigerator_steel", - "Refrigerator (stainless steel)" }, - { "kitchen_cabinet", - "Cabinet" }, - { "kitchen_cabinet_steel", - "Cabinet (stainless steel top)" }, - { "kitchen_cabinet_granite", - "Cabinet (granite top)" }, - { "kitchen_cabinet_marble", - "Cabinet (marble top)" }, - { "kitchen_cabinet_half", - "Cabinet" }, - { "kitchen_cabinet_with_sink", - "Cabinet" }, - { "nightstand_oak_one_drawer", - "Nightstand" }, - { "nightstand_oak_two_drawers", - "Nightstand" }, - { "nightstand_mahogany_one_drawer", - "Nightstand" }, - { "nightstand_mahogany_two_drawers", - "Nightstand" }, - { "filing_cabinet", - "Filing cabinet" }, { "oven", "Oven" }, { "oven_active", diff --git a/homedecor/kitchen_appliances.lua b/homedecor/kitchen_appliances.lua index cb202793..80804fc8 100644 --- a/homedecor/kitchen_appliances.lua +++ b/homedecor/kitchen_appliances.lua @@ -35,7 +35,7 @@ homedecor.register("refrigerator_white", { infotext=S("Refrigerator"), inventory = { size=50, - lockable=true + lockable=true, }, on_rotate = screwdriver.rotate_simple }) diff --git a/homedecor/kitchen_furniture.lua b/homedecor/kitchen_furniture.lua index 3efead53..e64f4231 100644 --- a/homedecor/kitchen_furniture.lua +++ b/homedecor/kitchen_furniture.lua @@ -29,6 +29,7 @@ for _, mat in ipairs(counter_materials) do infotext=S("Kitchen Cabinet"), inventory = { size=24, + lockable=true, }, }) end @@ -51,6 +52,7 @@ homedecor.register("kitchen_cabinet_half", { infotext=S("Kitchen Cabinet"), inventory = { size=12, + lockable=true, }, }) @@ -68,6 +70,7 @@ homedecor.register("kitchen_cabinet_with_sink", { infotext=S("Under-sink cabinet"), inventory = { size=16, + lockable=true, }, node_box = { type = "fixed", diff --git a/homedecor/office.lua b/homedecor/office.lua index 2d4cbaa5..0489b32f 100644 --- a/homedecor/office.lua +++ b/homedecor/office.lua @@ -13,6 +13,7 @@ homedecor.register("filing_cabinet", { infotext=S("Filing cabinet"), inventory = { size=16, + lockable=true, }, })