CAO/SAO: Nicer velocity-controlled, interpolated rotation property:
[oweals/minetest.git] / src / inventory.h
index 459228d3e328f2cb03b2eb73666d339195c2d64a..465aa66db346934fb95314765c5b1b2199fc4e68 100644 (file)
@@ -32,11 +32,12 @@ struct ToolCapabilities;
 
 struct ItemStack
 {
-       ItemStack() {}
+       ItemStack() = default;
+
        ItemStack(const std::string &name_, u16 count_,
                        u16 wear, IItemDefManager *itemdef);
 
-       ~ItemStack() {}
+       ~ItemStack() = default;
 
        // Serialization
        void serialize(std::ostream &os) const;
@@ -110,12 +111,15 @@ struct ItemStack
        const ToolCapabilities& getToolCapabilities(
                        IItemDefManager *itemdef) const
        {
-               ToolCapabilities *cap;
-               cap = itemdef->get(name).tool_capabilities;
-               if(cap == NULL)
-                       cap = itemdef->get("").tool_capabilities;
-               assert(cap != NULL);
-               return *cap;
+               const ToolCapabilities *item_cap =
+                       itemdef->get(name).tool_capabilities;
+
+               if (item_cap == NULL)
+                       // Fall back to the hand's tool capabilities
+                       item_cap = itemdef->get("").tool_capabilities;
+
+               assert(item_cap != NULL);
+               return metadata.getToolCapabilities(*item_cap); // Check for override
        }
 
        // Wear out (only tools)
@@ -132,10 +136,8 @@ struct ItemStack
                                wear += amount;
                        return true;
                }
-               else
-               {
-                       return false;
-               }
+
+               return false;
        }
 
        // If possible, adds newitem to this item.