diff options
author | thetaepsilon-gamedev <32034735+thetaepsilon-gamedev@users.noreply.github.com> | 2018-05-19 21:06:00 +0100 |
---|---|---|
committer | Nathanaƫl Courant <Ekdohibs@users.noreply.github.com> | 2018-05-19 22:06:00 +0200 |
commit | c93bfefd9fb66cab4a766b4e6a4d361a85503685 (patch) | |
tree | 46bf68bfa4798fea368317101782e40906388e9c | |
parent | 689766f15aad5186b35d21942ff853a7c2fc65bf (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.lua | 12 |
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 |