struct craft_age_wear_hook : df::item_crafted {
    typedef df::item_crafted interpose_base;

    DEFINE_VMETHOD_INTERPOSE(bool, ageItem, (int amount))
    {
        int orig_age = age;
        age += amount;
        if (age > 200000000)
            age = 200000000;
        if (age == orig_age)
            return false;

        MaterialInfo mat(mat_type, mat_index);
        if (!mat.isValid())
            return false;
        int wear = 0;

        if (mat.material->flags.is_set(material_flags::WOOD))
            wear = 5;
        else if (mat.material->flags.is_set(material_flags::LEATHER) ||
            mat.material->flags.is_set(material_flags::THREAD_PLANT) ||
            mat.material->flags.is_set(material_flags::SILK) ||
            mat.material->flags.is_set(material_flags::YARN))
            wear = 1;
        else
            return false;
        wear = ((orig_age % wear) + (age - orig_age)) / wear;
        if (wear > 0)
            return incWearTimer(wear);
        else
            return false;
    }
};
IMPLEMENT_VMETHOD_INTERPOSE(craft_age_wear_hook, ageItem);