As a suggestion, you could effectively have the guns represented by build strings that the system interprets. That way you only need to have the server send the build codes to the client, and all the client is doing is just assembling the weapon assets/data based on the build code. So in practice the client would build a weapon that would generate a build code which is sent to the server. The server then does any necessary anti-cheat logic (does the player have these items? Is the weapon the right level? etc), and then send either the build code confirmation or an error response to the client.