Move the player input to a separate FSM, and instead of key down, use button down (you always want to use button down and only if going through the input manager is impractical, e.g. quick prototypes, temporary for debug or setup, web game with no key binding etc, go for key down).
How this works: There is just one state that listens for any possible button. When that button is pressed, it goes into a connected state that then sends off the event to the weapon, to fire it off. When that is done, perhaps after a very short wait action, it returns to the start state, listening to buttons again.
If you also need to know whether a different weapon was fired, for weapon switching, you could store the last button down, and compare it, and if false, add a contraption that does the proper switching.