diff --git a/technic/technic/chest_commons.lua b/technic/technic/chest_commons.lua new file mode 100644 index 0000000..7786496 --- /dev/null +++ b/technic/technic/chest_commons.lua @@ -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 diff --git a/technic/technic/copper_chest.lua b/technic/technic/copper_chest.lua index 5fba6a6..ed75288 100644 --- a/technic/technic/copper_chest.lua +++ b/technic/technic/copper_chest.lua @@ -38,19 +38,8 @@ minetest.register_node("technic:copper_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_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 @@ minetest.register_node("technic:copper_chest", { 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 @@ minetest.register_node("technic:copper_locked_chest", { 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 @@ on_construct = function(pos) 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 }) diff --git a/technic/technic/gold_chest.lua b/technic/technic/gold_chest.lua index b93b66f..820ba86 100644 --- a/technic/technic/gold_chest.lua +++ b/technic/technic/gold_chest.lua @@ -51,75 +51,47 @@ minetest.register_craftitem("technic:gold_locked_chest", { 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 @@ minetest.register_node("technic:gold_chest".. state, { 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,59 +124,23 @@ minetest.register_node("technic:gold_chest".. state, { 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", { description = "Gold Locked 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_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 @@ minetest.register_node("technic:gold_locked_chest", { 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) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") + inv:set_size("main", gold_chest_inv_size) 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 @@ minetest.register_node("technic:gold_locked_chest".. state, { "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 @@ minetest.register_node("technic:gold_locked_chest".. state, { 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) - end, - can_dig = function(pos,player) - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") + inv:set_size("main", gold_chest_inv_size) 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 diff --git a/technic/technic/init.lua b/technic/technic/init.lua index 1456462..f1b4683 100644 --- a/technic/technic/init.lua +++ b/technic/technic/init.lua @@ -10,6 +10,7 @@ dofile(modpath.."/ores.lua") 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") diff --git a/technic/technic/iron_chest.lua b/technic/technic/iron_chest.lua index 36105d1..6f278fe 100644 --- a/technic/technic/iron_chest.lua +++ b/technic/technic/iron_chest.lua @@ -41,18 +41,8 @@ minetest.register_node("technic:iron_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_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 @@ minetest.register_node("technic:iron_chest", { 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 @@ minetest.register_node("technic:iron_locked_chest", { 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 @@ on_construct = function(pos) 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 }) diff --git a/technic/technic/silver_chest.lua b/technic/technic/silver_chest.lua index 85df64c..81dc47f 100644 --- a/technic/technic/silver_chest.lua +++ b/technic/technic/silver_chest.lua @@ -38,18 +38,8 @@ minetest.register_node("technic:silver_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_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 @@ minetest.register_node("technic:silver_chest", { 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 @@ minetest.register_node("technic:silver_chest", { "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 @@ on_construct = function(pos) 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 @@ on_construct = function(pos) "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 })