summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthetaepsilon-gamedev <32034735+thetaepsilon-gamedev@users.noreply.github.com>2018-05-19 21:06:00 +0100
committerNathanaƫl Courant <Ekdohibs@users.noreply.github.com>2018-05-19 22:06:00 +0200
commitc93bfefd9fb66cab4a766b4e6a4d361a85503685 (patch)
tree46bf68bfa4798fea368317101782e40906388e9c
parent689766f15aad5186b35d21942ff853a7c2fc65bf (diff)
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.)
-rw-r--r--technic/machines/HV/quarry.lua12
1 files changed, 11 insertions, 1 deletions
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