1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Fix problems when overriding the hand:

- If the hand can dig a node the item wielded can't, allow to dig it anyway.
- Fix the API callbacks from setting the hand instead of the wielded item.
This commit is contained in:
Ekdohibs 2017-03-22 03:25:16 +01:00 committed by Auke Kok
parent bce0d458d8
commit 08b680d588
4 changed files with 38 additions and 20 deletions

View file

@ -1382,7 +1382,10 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
const ItemDefinition &playeritem_def =
playersao->getWieldedItem().getDefinition(m_itemdef);
float max_d = BS * playeritem_def.range;
float max_d_hand = BS * m_itemdef->get("").range;
InventoryList *hlist = playersao->getInventory()->getList("hand");
const ItemDefinition &hand_def =
hlist?(hlist->getItem(0).getDefinition(m_itemdef)):(m_itemdef->get(""));
float max_d_hand = BS * hand_def.range;
if (max_d < 0 && max_d_hand >= 0)
max_d = max_d_hand;
else if (max_d < 0)
@ -1443,7 +1446,7 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
<<pointed.object_id<<": "
<<pointed_object->getDescription()<<std::endl;
ItemStack punchitem = playersao->getWieldedItem();
ItemStack punchitem = playersao->getWieldedItemOrHand();
ToolCapabilities toolcap =
punchitem.getToolCapabilities(m_itemdef);
v3f dir = (pointed_object->getBasePosition() -
@ -1510,7 +1513,7 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
m_script->on_cheat(playersao, "finished_unknown_dig");
}
// Get player's wielded item
ItemStack playeritem = playersao->getWieldedItem();
ItemStack playeritem = playersao->getWieldedItemOrHand();
ToolCapabilities playeritem_toolcap =
playeritem.getToolCapabilities(m_itemdef);
// Get diggability and expected digging time
@ -1518,7 +1521,9 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
&playeritem_toolcap);
// If can't dig, try hand
if (!params.diggable) {
const ItemDefinition &hand = m_itemdef->get("");
InventoryList *hlist = playersao->getInventory()->getList("hand");
const ItemDefinition &hand =
hlist?hlist->getItem(0).getDefinition(m_itemdef):m_itemdef->get("");
const ToolCapabilities *tp = hand.tool_capabilities;
if (tp)
params = getDigParams(m_nodedef->get(n).groups, tp);