Y a plusieurs manières de voir.
L'une d'entre elle est que le jet d'attaque ne sert à rien et qu'on "touche" automatiquement (ce que fait l'ATS). Après tout, pour rater un rocher ou un arbre, faut vraiment être un gland...
Un autre truc est de considérer que seul la pioche (ou hache de bûcheron, etc) permet de récupérer du matériau, mais que les autres armes permettent quand même de détruire le rocher/arbre/etc (encore une fois, ce que fait l'ATS)... ou pas bien sur.
Une autre chose encore est d'interrompre le combat entre chaque coup de hache/pioche/etc... pour éviter les choses du genre "Je cliques sur le rocher et je reviens une demi heure plus tard, après mon p'tit dej" (oui oui, j'aime l'ATS

)
Le OnPhysicalAttacked est déclenché à chaque coup porté au placable, qu'il touche ou non.
Et pour éviter qu'une arme dans l'autre main n'étant pas une pioche fasse bobo à ta roche, tu utilise quelque chose comme:
void main
{
object oPlayer = GetLastAttacker();
object oWeaponOnPlayer = GetLastWeaponUsed(oPlayer);
if(GetTag(oWeaponOnPlayer))=="tag_de_l'arme_speciale")
{
//Ce qui se passe si c'est le bon outil
} else {
//Ce qui se passe si ce n'est pas le bon outil
}
}
Ou encore
void main
{
object oPlayer = GetLastAttacker();
object oWeaponOnPlayer = GetLastWeaponUsed(oPlayer);
if(GetTag(oWeaponOnPlayer))!="tag_de_l'arme_speciale")
{
//Ce qui se passe si ce n'est pas le bon outil
return; //on quitte
}
//ici, on a forcement le bon outil
//Ce qui se passe si on a le bon outil
}
Ca peut être encore plus complexifié en considérant uniquement le début du tag de l'arme en faisant que tout les outils pour une matière commence d'une certaine manière ("CRAFT_PIOCHE_*" en remplaçant le * par une qualité de différente pioche, ou des matériaux différents)
Bref, voilà plusieurs pistes, et si tu as besoin d'aides ou précisions, n'hesites pas à demander