diff --git a/mods/pipeworks/README b/mods/pipeworks/README index b9c68f95..7a346189 100644 --- a/mods/pipeworks/README +++ b/mods/pipeworks/README @@ -1,7 +1,7 @@ This mod uses nodeboxes to supply a complete set of 3D pipes and tubes, along devices that work with them. -See http://vanessae.github.io/pipeworks/ for detailed information about usage of this mod. +See https://github.com/VanessaE/pipeworks/wiki/ for detailed information about usage of this mod. Unlike the previous version of this mod, these pipes are rounded, and when placed, they'll automatically join together as needed. Pipes can go vertically diff --git a/mods/pipeworks/autocrafter.lua b/mods/pipeworks/autocrafter.lua index 89559ba5..36090687 100644 --- a/mods/pipeworks/autocrafter.lua +++ b/mods/pipeworks/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/mods/pipeworks/devices.lua b/mods/pipeworks/devices.lua index 89806d9f..6f408175 100644 --- a/mods/pipeworks/devices.lua +++ b/mods/pipeworks/devices.lua @@ -567,4 +567,5 @@ minetest.register_node("pipeworks:fountainhead_pouring", { }) minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty") +minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty") diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua index 20a9d449..620b7b32 100644 --- a/mods/pipeworks/filter-injector.lua +++ b/mods/pipeworks/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() diff --git a/mods/pipeworks/init.lua b/mods/pipeworks/init.lua index 5ed4074f..9c2ebc82 100755 --- a/mods/pipeworks/init.lua +++ b/mods/pipeworks/init.lua @@ -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/mods/pipeworks/sorting_tubes.lua b/mods/pipeworks/sorting_tubes.lua index 8c1d49e1..6f47f728 100644 --- a/mods/pipeworks/sorting_tubes.lua +++ b/mods/pipeworks/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/mods/pipeworks/teleport_tube.lua b/mods/pipeworks/teleport_tube.lua index 4a663d56..42dacd17 100644 --- a/mods/pipeworks/teleport_tube.lua +++ b/mods/pipeworks/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() @@ -226,7 +227,7 @@ minetest.register_craft( { { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, { "default:desert_stone", "default:mese_block", "default:desert_stone" }, { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, + }, -- MODIFICATION MADE FOR MFF ^ }) if minetest.get_modpath("mesecons_mvps") ~= nil then diff --git a/mods/pipeworks/vacuum_tubes.lua b/mods/pipeworks/vacuum_tubes.lua index f987589a..2c147813 100644 --- a/mods/pipeworks/vacuum_tubes.lua +++ b/mods/pipeworks/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/mods/pipeworks/wielder.lua b/mods/pipeworks/wielder.lua index 88f8e678..8a0e45b5 100644 --- a/mods/pipeworks/wielder.lua +++ b/mods/pipeworks/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