if a plug-in needs to monitor a certain set of keys for its own purposes, it is practically certain that those keys should not carry out the in-game actions bound to them.
No doubt, but it's important to have an efficient way to do that without too many disadvantages (or uncomfortable behaviour for the player).
Is this what you mean by Player.disableClientSideKeys() ?
Yes, exactly. For example, if you call player.disableClientSideKeys(KeyInput.KEY_W, KeyInput.KEY_A, KeyInput.KEY_S, KeyInput.KEY_D), the W, A, S and D keys will be disabled on the clientside (probably most people use these keys for player movement, so in this case, the player would be unable to move his character anymore). Or if you call player.disableClientSideKeys(KeyInput.KEY_I), the player can't press I anymore (or more precisely, it has no effect, e.g. if the player uses this key to bring up his inventory, he can't do that anymore). This state lasts until you call player.enableClientsideKeys() or something like that.
However, the "PlayerKeyEvent" in the API will always be called, there is no way to disable that (with the exception of unregistering keys, or by setting the "listenForKeyInput" to false).
This would both avoid any unnecessary forwarding (less traffic)
I guess this way we can already expect the least amount of traffic. Calling player.setListenForKeyInput() is very "cheap" (just a few bytes the server has to send to the client), however, it's not necessary at all. It is only useful if your plugin registers a lot of keys (or some keys which are frequently pressed, like WASD etc), but only need them in certain situations - this way you can enable or disable the "listenForKeyInput" when needed, so the player does not always spam the server with his key inputs (every single key input is more "expensive" [still quite cheap] than a "setListenForKeyInput" packet) 