Depending on the game type of the server, it may be more up to how server plugins are written rather than the game itself (i.e. mini game servers rely heavily on the performance of the mini game plugins).
As for optimizing the game itself, projects like Spigot provide tweaked server jars that might improve server performance.
Except that would break every world interaction as well as cause a ton of concurrency issues.
Adding more threads doesn’t mean the game would be faster and better; threading is not a magical solution to all performance issues.
Threading should only be used if the routine to be put on another thread makes sense to be on another thread (i.e. make the checking for update routine separate from the main game thread, or separate the render thread from the game logic thread (not Minecraft specific)). It is not as simple as totalTimeUsed / threadCount = actualTimeUsed.
With the SlotItemHandler it would be a bit different.
Since SlotItemHandler checks whether the inserted item can be accepted into the item handler, there is no need to add checks to the slot. Instead, you only need to create another IItemHandler capability for the output slot that does not accept the inserting of items (the SlotItemHandler will respect the isItemValid check).
You don't, its client specific code.
To which client? Each player connected to the server is a different client.
Also,
Read the Docs
https://mcforge.readthedocs.io/en/1.15.x/networking/