RealBadAngel
2013-01-27 704a410fa1391318766927c8baa8a93b0731e7d0
Cleaned all chests code
1 files added
5 files modified
774 ■■■■ changed files
technic/technic/chest_commons.lua 78 ●●●●● patch | view | raw | blame | history
technic/technic/copper_chest.lua 123 ●●●● patch | view | raw | blame | history
technic/technic/gold_chest.lua 327 ●●●● patch | view | raw | blame | history
technic/technic/init.lua 1 ●●●● patch | view | raw | blame | history
technic/technic/iron_chest.lua 120 ●●●● patch | view | raw | blame | history
technic/technic/silver_chest.lua 125 ●●●● patch | view | raw | blame | history
technic/technic/chest_commons.lua
New file
@@ -0,0 +1,78 @@
chest_groups1 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1}
chest_groups2 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1}
tubes_properties = {insert_object=function(pos,node,stack,direction)
                    local meta=minetest.env:get_meta(pos)
                    local inv=meta:get_inventory()
                    return inv:add_item("main",stack)
                end,
                can_insert=function(pos,node,stack,direction)
                    local meta=minetest.env:get_meta(pos)
                    local inv=meta:get_inventory()
                    return inv:room_for_item("main",stack)
                end,
                input_inventory="main"}
chest_can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main")
end
def_allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
    minetest.log("action", player:get_player_name()..
    " tried to access a locked chest belonging to "..
    meta:get_string("owner").." at "..
    minetest.pos_to_string(pos))
    return 0
    end
    return count
end
def_allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
    minetest.log("action", player:get_player_name()..
    " tried to access a locked chest belonging to "..
    meta:get_string("owner").." at "..
    minetest.pos_to_string(pos))
    return 0
end
return stack:get_count()
end
def_allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
    minetest.log("action", player:get_player_name()..
    " tried to access a locked chest belonging to "..
    meta:get_string("owner").." at "..
    minetest.pos_to_string(pos))
    return 0
    end
return stack:get_count()
end
def_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 locked chest at "..minetest.pos_to_string(pos))
end
def_on_metadata_inventory_put = function(pos, listname, index, stack, player)
    minetest.log("action", player:get_player_name()..
    " moves stuff to locked chest at "..minetest.pos_to_string(pos))
end
def_on_metadata_inventory_take = function(pos, listname, index, stack, player)
    minetest.log("action", player:get_player_name()..
    " takes stuff from locked chest at "..minetest.pos_to_string(pos))
end
function has_locked_chest_privilege(meta, player)
    if player:get_player_name() ~= meta:get_string("owner") then
        return false
    end
    return true
end
technic/technic/copper_chest.lua
@@ -38,19 +38,8 @@
    tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
        "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_front.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    legacy_facedir_simple = true,
    groups = chest_groups1,
    tube = tubes_properties,legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
@@ -62,56 +51,20 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 10*4)
    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 chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_move_allow_all(
                pos, from_list, from_index, to_list, to_index, count, player)
    end,
    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " moves stuff to chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_offer_allow_all(
                pos, listname, index, stack, player)
    end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " takes stuff from chest at "..minetest.pos_to_string(pos))
    end,
    can_dig = chest_can_dig,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
  
local function has_locked_chest_privilege(meta, player)
    if player:get_player_name() ~= meta:get_string("owner") then
        return false
    end
    return true
end
minetest.register_node("technic:copper_locked_chest", {
    description = "Copper Locked Chest",
    tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
        "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,legacy_facedir_simple = true,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    after_place_node = function(pos, placer)
@@ -120,7 +73,7 @@
        meta:set_string("infotext", "Copper Locked Chest (owned by "..
                meta:get_string("owner")..")")
    end,
on_construct = function(pos)
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[10,9;]"..
@@ -131,54 +84,12 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 10*4)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return count
    end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    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 locked chest 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 locked chest 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 locked chest at "..minetest.pos_to_string(pos))
    end,
    can_dig = chest_can_dig,
    allow_metadata_inventory_move = def_allow_metadata_inventory_move,
    allow_metadata_inventory_put = def_allow_metadata_inventory_put,
    allow_metadata_inventory_take = def_allow_metadata_inventory_take,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
technic/technic/gold_chest.lua
@@ -51,75 +51,47 @@
    stack_max = 99,
})
gold_chest_formspec    =    "invsize[12,9;]"..
                        "list[current_name;main;0,0;12,4;]"..
                        "list[current_player;main;0,5;8,4;]"
gold_chest_inv_size = 12*4
minetest.register_node("technic:gold_chest", {
    description = "Gold Chest",
    tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
        "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
        meta:set_string("infotext", "Gold Chest")
        local inv = meta:get_inventory()
        inv:set_size("main", 12*4)
        inv:set_size("main", gold_chest_inv_size)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig = chest_can_dig,
    on_punch = function (pos, node, puncher)
    chest_punched (pos,node,puncher);
    end,
    on_receive_fields = function(pos, formname, fields, sender)
        local meta = minetest.env:get_meta(pos);
              fields.text = fields.text or ""
        meta:set_string("text", fields.text)
        meta:set_string("infotext", '"'..fields.text..'"')
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
    local meta = minetest.env:get_meta(pos);
    fields.text = fields.text or ""
    meta:set_string("text", fields.text)
    meta:set_string("infotext", '"'..fields.text..'"')
    meta:set_string("formspec",gold_chest_formspec)
    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 chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_move_allow_all(
                pos, from_list, from_index, to_list, to_index, count, player)
    end,
    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " moves stuff to chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_offer_allow_all(
                pos, listname, index, stack, player)
    end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " takes stuff from chest at "..minetest.pos_to_string(pos))
    end,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
for i, state in ipairs(chest_mark_colors) do
@@ -128,38 +100,21 @@
    tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
        "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front"..state..".png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups2,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    drop = "technic:gold_chest",
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
        meta:set_string("infotext", "Gold Chest")
        local inv = meta:get_inventory()
        inv:set_size("main", 12*4)
        inv:set_size("main", gold_chest_inv_size)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig =chest_can_dig,
    on_punch = function (pos, node, puncher)
    chest_punched (pos,node,puncher);
    end,
@@ -169,39 +124,13 @@
              fields.text = fields.text or ""
        meta:set_string("text", fields.text)
        meta:set_string("infotext", '"'..fields.text..'"')
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
    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 chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_move_allow_all(
                pos, from_list, from_index, to_list, to_index, count, player)
    end,
    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " moves stuff to chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_offer_allow_all(
                pos, listname, index, stack, player)
    end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " takes stuff from chest at "..minetest.pos_to_string(pos))
    end,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
end
local function has_locked_chest_privilege(meta, player)
    if player:get_player_name() ~= meta:get_string("owner") then
        return false
    end
    return true
end
minetest.register_node("technic:gold_locked_chest", {
@@ -210,18 +139,8 @@
        "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked.png"},
    paramtype2 = "facedir",
    drop = "technic:gold_locked_chest",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    after_place_node = function(pos, placer)
@@ -232,85 +151,36 @@
    end,
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
        meta:set_string("infotext", "Gold Locked Chest")
        meta:set_string("owner", "")
        local inv = meta:get_inventory()
        inv:set_size("main", 12*4)
        inv:set_size("main", gold_chest_inv_size)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig =chest_can_dig,
    on_punch = function (pos, node, puncher)
            local meta = minetest.env:get_meta(pos);
        local meta = minetest.env:get_meta(pos);
        if (has_locked_chest_privilege(meta, puncher)) then
        locked_chest_punched (pos,node,puncher);
            locked_chest_punched (pos,node,puncher);
        end
       end,
    end,
    
    on_receive_fields = function(pos, formname, fields, sender)
        local meta = minetest.env:get_meta(pos);
              fields.text = fields.text or ""
        local meta = minetest.env:get_meta(pos);
        fields.text = fields.text or ""
        meta:set_string("text", fields.text)
        meta:set_string("infotext", '"'..fields.text..'"')
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
    end,
    allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return count
    end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    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 locked chest 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 locked chest 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 locked chest at "..minetest.pos_to_string(pos))
    end,
    allow_metadata_inventory_move = def_allow_metadata_inventory_move,
    allow_metadata_inventory_put = def_allow_metadata_inventory_put,
    allow_metadata_inventory_take = def_allow_metadata_inventory_take,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
for i, state in ipairs(chest_mark_colors) do
@@ -320,18 +190,8 @@
        "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked"..state..".png"},
    paramtype2 = "facedir",
    drop = "technic:gold_locked_chest",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups2,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    after_place_node = function(pos, placer)
@@ -342,85 +202,36 @@
    end,
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
        meta:set_string("infotext", "Gold Locked Chest")
        meta:set_string("owner", "")
        local inv = meta:get_inventory()
        inv:set_size("main", 12*4)
        inv:set_size("main", gold_chest_inv_size)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig = chest_can_dig,
    on_punch = function (pos, node, puncher)
            local meta = minetest.env:get_meta(pos);
        if (has_locked_chest_privilege(meta, puncher)) then
        locked_chest_punched (pos,node,puncher);
        end
       end,
    end,
    on_receive_fields = function(pos, formname, fields, sender)
        local meta = minetest.env:get_meta(pos);
              fields.text = fields.text or ""
        local meta = minetest.env:get_meta(pos);
        fields.text = fields.text or ""
        meta:set_string("text", fields.text)
        meta:set_string("infotext", '"'..fields.text..'"')
        meta:set_string("formspec",
                "invsize[12,9;]"..
                "list[current_name;main;0,0;12,4;]"..
                "list[current_player;main;0,5;8,4;]")
        meta:set_string("formspec",gold_chest_formspec)
    end,
    allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return count
    end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    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 locked chest 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 locked chest 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 locked chest at "..minetest.pos_to_string(pos))
    end,
    allow_metadata_inventory_move = def_allow_metadata_inventory_move,
    allow_metadata_inventory_put = def_allow_metadata_inventory_put,
    allow_metadata_inventory_take = def_allow_metadata_inventory_take,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
end
technic/technic/init.lua
@@ -10,6 +10,7 @@
if enable_rubber_tree_generation==true then dofile(modpath.."/rubber.lua") end
-- chests
dofile(modpath.."/chest_commons.lua")
dofile(modpath.."/iron_chest.lua")
dofile(modpath.."/copper_chest.lua")
dofile(modpath.."/silver_chest.lua")
technic/technic/iron_chest.lua
@@ -41,18 +41,8 @@
    tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
        "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    on_construct = function(pos)
@@ -65,54 +55,19 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 9*4)
    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 chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_move_allow_all(
                pos, from_list, from_index, to_list, to_index, count, player)
    end,
    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " moves stuff to chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_offer_allow_all(
                pos, listname, index, stack, player)
    end,
      on_metadata_inventory_take = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " takes stuff from chest at "..minetest.pos_to_string(pos))
    end,
    can_dig = chest_can_dig,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
local function has_locked_chest_privilege(meta, player)
    if player:get_player_name() ~= meta:get_string("owner") then
        return false
    end
    return true
end
minetest.register_node("technic:iron_locked_chest", {
    description = "Iron Locked Chest",
    tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
        "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_locked.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    after_place_node = function(pos, placer)
@@ -121,7 +76,7 @@
        meta:set_string("infotext", "Locked Iron Chest (owned by "..
                meta:get_string("owner")..")")
    end,
on_construct = function(pos)
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[9,9;]"..
@@ -132,54 +87,11 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 9*4)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return count
    end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    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 locked chest 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 locked chest 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 locked chest at "..minetest.pos_to_string(pos))
    end,
    can_dig = chest_can_dig,
    allow_metadata_inventory_move = def_allow_metadata_inventory_move,
    allow_metadata_inventory_put = def_allow_metadata_inventory_put,
    allow_metadata_inventory_take = def_allow_metadata_inventory_take,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
technic/technic/silver_chest.lua
@@ -38,18 +38,8 @@
    tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
        "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},
    groups = chest_groups1,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    on_construct = function(pos)
@@ -62,11 +52,7 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 11*4)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig = chest_can_dig,
    on_punch = function (pos, node, puncher)
            local meta = minetest.env:get_meta(pos);
@@ -85,58 +71,27 @@
                "list[current_player;main;0,5;8,4;]")
    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 chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_move_allow_all(
                pos, from_list, from_index, to_list, to_index, count, player)
    end,
    on_metadata_inventory_offer = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " moves stuff to chest at "..minetest.pos_to_string(pos))
        return minetest.node_metadata_inventory_offer_allow_all(
                pos, listname, index, stack, player)
    end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
        minetest.log("action", player:get_player_name()..
                " takes stuff from chest at "..minetest.pos_to_string(pos))
    end,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})
local function has_locked_chest_privilege(meta, player)
    if player:get_player_name() ~= meta:get_string("owner") then
        return false
    end
    return true
end
minetest.register_node("technic:silver_locked_chest", {
    description = "Silver Locked Chest",
    tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
        "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"},
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
    tube={insert_object=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:add_item("main",stack)
        end,
        can_insert=function(pos,node,stack,direction)
            local meta=minetest.env:get_meta(pos)
            local inv=meta:get_inventory()
            return inv:room_for_item("main",stack)
        end,
        input_inventory="main"},legacy_facedir_simple = true,
    groups = chest_groups2,
    tube = tubes_properties,
    legacy_facedir_simple = true,
    sounds = default.node_sound_wood_defaults(),
    after_place_node = function(pos, placer)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("owner", placer:get_player_name() or "")
        meta:set_string("infotext", "Silver Locked Chest (owned by "..
                meta:get_string("owner")..")")
            meta:get_string("owner")..")")
    end,
on_construct = function(pos)
    on_construct = function(pos)
        local meta = minetest.env:get_meta(pos)
        meta:set_string("formspec",
                "invsize[11,9;]"..
@@ -147,11 +102,7 @@
        local inv = meta:get_inventory()
        inv:set_size("main", 11*4)
    end,
    can_dig = function(pos,player)
        local meta = minetest.env:get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("main")
    end,
    can_dig = chest_can_dig,
    on_punch = function (pos, node, puncher)
            local meta = minetest.env:get_meta(pos);
@@ -170,49 +121,11 @@
                "list[current_player;main;0,5;8,4;]")
    end,
    allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return count
    end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
        local meta = minetest.env:get_meta(pos)
        if not has_locked_chest_privilege(meta, player) then
            minetest.log("action", player:get_player_name()..
                    " tried to access a locked chest belonging to "..
                    meta:get_string("owner").." at "..
                    minetest.pos_to_string(pos))
            return 0
        end
        return stack:get_count()
    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 locked chest 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 locked chest 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 locked chest at "..minetest.pos_to_string(pos))
    end,
    allow_metadata_inventory_move = def_allow_metadata_inventory_move,
    allow_metadata_inventory_put = def_allow_metadata_inventory_put,
    allow_metadata_inventory_take = def_allow_metadata_inventory_take,
    on_metadata_inventory_move = def_on_metadata_inventory_move,
    on_metadata_inventory_put = def_on_metadata_inventory_put,
    on_metadata_inventory_take = def_on_metadata_inventory_take
})