From d7336670f2bdc69c343ddac76b6e2d2e64f930c0 Mon Sep 17 00:00:00 2001 From: auouymous <5005204+auouymous@users.noreply.github.com> Date: Wed, 9 Sep 2020 09:44:12 -0700 Subject: [PATCH] Constructor: Add protection check (#564) Check if the player who placed constructor can access protected positions before placing or removing nodes. --- technic/machines/other/constructor.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/technic/machines/other/constructor.lua b/technic/machines/other/constructor.lua index e7b1f67..9117224 100644 --- a/technic/machines/other/constructor.lua +++ b/technic/machines/other/constructor.lua @@ -88,6 +88,7 @@ minetest.register_craft({ local function make_on(mark, length) return function(pos, node) local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") local inv = meta:get_inventory() local dir = vector.new() if node.param2 == 3 then dir.x = 1 end @@ -102,6 +103,9 @@ local function make_on(mark, length) minetest.check_for_falling(pos) for i = 1, length do place_pos = vector.add(place_pos, dir) + if owner ~= "" and minetest.is_protected(place_pos, owner) then + return + end local place_node = minetest.get_node(place_pos) deploy_node(inv, "slot"..i, place_pos, place_node, node) end @@ -156,6 +160,11 @@ local function make_constructor(mark, length) for i = 1, length do inv:set_size("slot"..i, 1) end + meta:set_string("owner", "?") + end, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", (placer and placer:get_player_name() or "?")) end, can_dig = function(pos, player) local meta = minetest.get_meta(pos)