In general, designing data structures that are required to be in sync with each other like these two lists is prone to bugs where you forget to update either list and they desync. Another possible issue in the general case is that you are storing derived quantities which can also get out of date if proper care is not taken (not in this particular case but something to keep in mind). It is also repetitive to write. In this case l would simply have one list with Weapons.

I'm saying this as general advice in writing maintainable robust code.

That said, I think you nailed the interface on this class. Looks testable too, good!