From c93bfefd9fb66cab4a766b4e6a4d361a85503685 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev <32034735+thetaepsilon-gamedev@users.noreply.github.com> Date: Sat, 19 May 2018 21:06:00 +0100 Subject: [PATCH] machines/HV/quarry.lua: [modification] provide a basic digger object to can_dig callbacks to prevent nil object errors (#425) Minetest game's doors mod was known to cause server errors when passed a nil digger in it's can_dig callback, due to always attempting to invoke digger:get_player_name(). Fix this by providing a basic fake player which provides this method to can_dig callbacks. (It should be noted that currently this fix causes doors to be undiggable by quarries.) --- technic/machines/HV/quarry.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/technic/machines/HV/quarry.lua b/technic/machines/HV/quarry.lua index 9060b70..86ca395 100644 --- a/technic/machines/HV/quarry.lua +++ b/technic/machines/HV/quarry.lua @@ -145,7 +145,17 @@ local function quarry_run(pos, node) if can_dig then dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos) local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false} - if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, nil)) then + -- doors mod among other thing does NOT like a nil digger... + local fakedigger = { + get_player_name = function() + return "!technic_quarry_fake_digger" + end, + is_player = function() return false end, + get_wielded_item = function() + return ItemStack("air") + end, + } + if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, fakedigger)) then can_dig = false end end