WeaponEventObserver refactor