refactor to use WeaponPartClass