mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-25 18:30:29 +01:00
Handle lag better in drill
If a mining drill is apparently applied to a non-pointable node, do nothing rather than drilling as normal. This situation usually arises from lag, where the news of a node having been drilled didn't reach the user quickly enough and the user thereby applied the drill twice to the same node. The second drill attempt would formerly consume charge and then find that all the nodes it wanted to dig had already been removed.
This commit is contained in:
parent
7c4b7046cc
commit
c394984ae5
@ -229,6 +229,12 @@ local function drill_dig_it(pos, player, mode)
|
||||
minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
|
||||
end
|
||||
|
||||
local function pos_is_pointable(pos)
|
||||
local node = minetest.env:get_node(pos)
|
||||
local nodedef = minetest.registered_nodes[node.name]
|
||||
return nodedef and nodedef.pointable
|
||||
end
|
||||
|
||||
local function mining_drill_mk2_setmode(user,itemstack)
|
||||
local player_name=user:get_player_name()
|
||||
local item=itemstack:to_table()
|
||||
@ -285,7 +291,7 @@ local function mining_drill_mk2_handler(itemstack, user, pointed_thing)
|
||||
if not meta or not meta.mode or keys.sneak then
|
||||
return mining_drill_mk2_setmode(user, itemstack)
|
||||
end
|
||||
if pointed_thing.type ~= "node" or not meta.charge then
|
||||
if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then
|
||||
return
|
||||
end
|
||||
local charge_to_take = cost_to_use(2, meta.mode)
|
||||
@ -306,7 +312,7 @@ local function mining_drill_mk3_handler(itemstack, user, pointed_thing)
|
||||
if not meta or not meta.mode or keys.sneak then
|
||||
return mining_drill_mk3_setmode(user, itemstack)
|
||||
end
|
||||
if pointed_thing.type ~= "node" or not meta.charge then
|
||||
if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) or not meta.charge then
|
||||
return
|
||||
end
|
||||
local charge_to_take = cost_to_use(3, meta.mode)
|
||||
@ -329,7 +335,7 @@ minetest.register_tool("technic:mining_drill", {
|
||||
wear_represents = "technic_RE_charge",
|
||||
on_refill = technic.refill_RE_charge,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
if pointed_thing.type ~= "node" or not pos_is_pointable(pointed_thing.under) then
|
||||
return itemstack
|
||||
end
|
||||
local meta = minetest.deserialize(itemstack:get_metadata())
|
||||
|
Loading…
Reference in New Issue
Block a user