diff options
author | Tim <t4im@users.noreply.github.com> | 2015-03-05 11:14:30 +0100 |
---|---|---|
committer | Tim <t4im@users.noreply.github.com> | 2015-03-11 19:36:41 +0100 |
commit | d167aacf4d2cdcc98914cd05153b81e709e0eaa7 (patch) | |
tree | 5442649cd3416487bfb5e33faa9576884692866f | |
parent | 86ee58b17c2ec9ad303116cf76cfac354cf0f484 (diff) | |
download | pipeworks-d167aacf4d2cdcc98914cd05153b81e709e0eaa7.tar pipeworks-d167aacf4d2cdcc98914cd05153b81e709e0eaa7.tar.gz pipeworks-d167aacf4d2cdcc98914cd05153b81e709e0eaa7.tar.bz2 pipeworks-d167aacf4d2cdcc98914cd05153b81e709e0eaa7.tar.xz pipeworks-d167aacf4d2cdcc98914cd05153b81e709e0eaa7.zip |
add ownership/protection handling for device configuration
take any available ownership into account before deciding on area protection
-rw-r--r-- | autocrafter.lua | 7 | ||||
-rw-r--r-- | filter-injector.lua | 13 | ||||
-rw-r--r-- | init.lua | 11 | ||||
-rw-r--r-- | sorting_tubes.lua | 4 | ||||
-rw-r--r-- | teleport_tube.lua | 5 | ||||
-rw-r--r-- | vacuum_tubes.lua | 1 | ||||
-rw-r--r-- | wielder.lua | 21 |
7 files changed, 45 insertions, 17 deletions
diff --git a/autocrafter.lua b/autocrafter.lua index 89559ba..3609068 100644 --- a/autocrafter.lua +++ b/autocrafter.lua @@ -266,6 +266,7 @@ minetest.register_node("pipeworks:autocrafter", { update_meta(meta, false) end, on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end local meta = minetest.get_meta(pos) if fields.on then update_meta(meta, false) @@ -290,6 +291,7 @@ minetest.register_node("pipeworks:autocrafter", { autocrafterCache[minetest.hash_node_position(pos)] = nil end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end upgrade_autocrafter(pos) local inv = minetest.get_meta(pos):get_inventory() if listname == "recipe" then @@ -305,6 +307,10 @@ minetest.register_node("pipeworks:autocrafter", { return stack:get_count() end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then + minetest.log("action", string.format("%s attempted to take from autocrafter at %s", player:get_player_name(), minetest.pos_to_string(pos))) + return 0 + end upgrade_autocrafter(pos) local inv = minetest.get_meta(pos):get_inventory() if listname == "recipe" then @@ -319,6 +325,7 @@ minetest.register_node("pipeworks:autocrafter", { return stack:get_count() end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end upgrade_autocrafter(pos) local inv = minetest.get_meta(pos):get_inventory() local stack = inv:get_stack(from_list, from_index) diff --git a/filter-injector.lua b/filter-injector.lua index 20a9d44..620b7b3 100644 --- a/filter-injector.lua +++ b/filter-injector.lua @@ -181,12 +181,25 @@ for _, data in ipairs({ end, after_dig_node = pipeworks.after_dig, on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end fs_helpers.on_receive_fields(pos, fields) local meta = minetest.get_meta(pos) meta:set_int("slotseq_index", 1) set_filter_formspec(data, meta) set_filter_infotext(data, meta) end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return count + end, can_dig = function(pos, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -57,6 +57,17 @@ function pipeworks.add_node_box(t, b) end end +function pipeworks.may_configure(pos, player) + local name = player:get_player_name() + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if owner ~= "" then -- wielders and filters + return owner == name + end + return not minetest.is_protected(pos, name) +end + function pipeworks.node_is_owned(pos, placer) local ownername = false if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod diff --git a/sorting_tubes.lua b/sorting_tubes.lua index 8c1d49e..6f47f72 100644 --- a/sorting_tubes.lua +++ b/sorting_tubes.lua @@ -91,6 +91,7 @@ if pipeworks.enable_mese_tube then end, on_punch = update_formspec, on_receive_fields = function(pos, formname, fields, sender) + if not pipeworks.may_configure(pos, sender) then return end fs_helpers.on_receive_fields(pos, fields) update_formspec(pos) end, @@ -99,6 +100,7 @@ if pipeworks.enable_mese_tube then return true end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end update_formspec(pos) -- For old tubes local inv = minetest.get_meta(pos):get_inventory() local stack_copy = ItemStack(stack) @@ -107,12 +109,14 @@ if pipeworks.enable_mese_tube then return 0 end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end update_formspec(pos) -- For old tubes local inv = minetest.get_meta(pos):get_inventory() inv:set_stack(listname, index, ItemStack("")) return 0 end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end update_formspec(pos) -- For old tubes local inv = minetest.get_meta(pos):get_inventory() inv:set_stack(from_list, from_index, ItemStack("")) diff --git a/teleport_tube.lua b/teleport_tube.lua index 4a663d5..17beb06 100644 --- a/teleport_tube.lua +++ b/teleport_tube.lua @@ -154,8 +154,9 @@ pipeworks.register_tube("pipeworks:teleport_tube", { meta:set_string("infotext", "unconfigured Teleportation Tube") end, on_receive_fields = function(pos,formname,fields,sender) - if not fields.channel then - return -- ignore escaping or clientside manipulation of the form + if not fields.channel -- ignore escaping or clientside manipulation of the form + or not pipeworks.may_configure(pos, sender) then + return end local new_channel = tostring(fields.channel):trim() diff --git a/vacuum_tubes.lua b/vacuum_tubes.lua index f987589..2c14781 100644 --- a/vacuum_tubes.lua +++ b/vacuum_tubes.lua @@ -47,6 +47,7 @@ if pipeworks.enable_mese_sand_tube then meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment") end, on_receive_fields = function(pos,formname,fields,sender) + if not pipeworks.may_configure(pos, sender) then return end local meta = minetest.get_meta(pos) local dist = tonumber(fields.dist) if dist then diff --git a/wielder.lua b/wielder.lua index 88f8e67..8a0e45b 100644 --- a/wielder.lua +++ b/wielder.lua @@ -230,27 +230,18 @@ local function register_wielder(data) pipeworks.scan_for_tube_objects(pos) end, on_punch = data.fixup_node, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if player:get_player_name() ~= meta:get_string("owner") and meta:get_string("owner") ~= "" then - return 0 - end - return count - end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if player:get_player_name() ~= meta:get_string("owner") and meta:get_string("owner") ~= "" then - return 0 - end + if not pipeworks.may_configure(pos, player) then return 0 end return stack:get_count() end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if player:get_player_name() ~= meta:get_string("owner") and meta:get_string("owner") ~= "" then - return 0 - end + if not pipeworks.may_configure(pos, player) then return 0 end return stack:get_count() end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if not pipeworks.may_configure(pos, player) then return 0 end + return count + end }) end end |