mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-18 10:45:27 +02:00
Fix meta tool capabilities regression (#16563)
This also adds a unittest to avoid issues in the future.
This commit is contained in:
@@ -106,18 +106,24 @@ struct ItemStack
|
||||
const ToolCapabilities& getToolCapabilities(
|
||||
const IItemDefManager *itemdef, const ItemStack *hand = nullptr) const
|
||||
{
|
||||
const ToolCapabilities *item_cap = itemdef->get(name).tool_capabilities;
|
||||
// Check for override
|
||||
auto &meta_item_cap = metadata.getToolCapabilitiesOverride();
|
||||
if (meta_item_cap.has_value())
|
||||
return meta_item_cap.value();
|
||||
|
||||
if (item_cap) {
|
||||
return metadata.getToolCapabilities(*item_cap); // Check for override
|
||||
}
|
||||
const ToolCapabilities *item_cap = itemdef->get(name).tool_capabilities;
|
||||
if (item_cap)
|
||||
return *item_cap;
|
||||
|
||||
// Fall back to the hand's tool capabilities
|
||||
if (hand) {
|
||||
auto &hand_meta_item_cap = hand->metadata.getToolCapabilitiesOverride();
|
||||
if (hand_meta_item_cap.has_value())
|
||||
return hand_meta_item_cap.value();
|
||||
|
||||
item_cap = itemdef->get(hand->name).tool_capabilities;
|
||||
if (item_cap) {
|
||||
return hand->metadata.getToolCapabilities(*item_cap);
|
||||
}
|
||||
if (item_cap)
|
||||
return *item_cap;
|
||||
}
|
||||
|
||||
item_cap = itemdef->get("").tool_capabilities;
|
||||
|
@@ -23,10 +23,9 @@ public:
|
||||
void serialize(std::ostream &os) const;
|
||||
void deSerialize(std::istream &is);
|
||||
|
||||
const ToolCapabilities &getToolCapabilities(
|
||||
const ToolCapabilities &default_caps) const
|
||||
const std::optional<ToolCapabilities> &getToolCapabilitiesOverride() const
|
||||
{
|
||||
return toolcaps_override.has_value() ? *toolcaps_override : default_caps;
|
||||
return toolcaps_override;
|
||||
}
|
||||
|
||||
void setToolCapabilities(const ToolCapabilities &caps);
|
||||
|
Reference in New Issue
Block a user