From fb4fef783b605dcdc73554019ef46d8354614ad4 Mon Sep 17 00:00:00 2001
From: Louis Royer <55180044+louisroyer@users.noreply.github.com>
Date: Sun, 26 Apr 2020 11:33:12 +0200
Subject: [PATCH] Shapeless locked chests crafts (chest + lockpad) (#530)

---
 wrench/init.lua |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/wrench/init.lua b/wrench/init.lua
index f99fd14..adb80c9 100644
--- a/wrench/init.lua
+++ b/wrench/init.lua
@@ -24,10 +24,7 @@
 
 local function get_meta_type(name, metaname)
 	local def = wrench.registered_nodes[name]
-	if not def or not def.metas or not def.metas[metaname] then
-		return nil
-	end
-	return def.metas[metaname]
+	return def and def.metas and def.metas[metaname] or nil
 end
 
 local function get_pickup_name(name)
@@ -42,6 +39,14 @@
 	local data = itemstack:get_meta():get_string("data")
 	data = (data ~= "" and data) or	itemstack:get_metadata()
 	data = minetest.deserialize(data)
+	if not data then
+		minetest.remove_node(pos)
+		minetest.log("error", placer:get_player_name().." wanted to place "..
+				name.." at "..minetest.pos_to_string(pos)..
+				", but it had no data.")
+		minetest.log("verbose", "itemstack: "..itemstack:to_string())
+		return true
+	end
 	minetest.set_node(pos, {name = data.name, param2 = node.param2})
 	for name, value in pairs(data.metas) do
 		local meta_type = get_meta_type(data.name, name)
@@ -115,7 +120,7 @@
 			return
 		end
 		local meta = minetest.get_meta(pos)
-		if def.owned then
+		if def.owned and not minetest.check_player_privs(placer, "protection_bypass") then
 			local owner = meta:get_string("owner")
 			if owner and owner ~= player_name then
 				minetest.log("action", player_name..

--
Gitblit v1.8.0