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:
parent
bce0d458d8
commit
08b680d588
4 changed files with 38 additions and 20 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue