What is Bungeecord, and how does it work? How can this help with my server? We're going to find out:
Despite some beliefs, Bungeecord is not a plugin, or a hub server, but is actually a seperate server! Bungeecord will link together different servers. It will act like a proxy between the backend servers. Backend servers are your gamemode servers (Hub server, survival, factions, skyblock, etc.). Bungeecord will take those servers and link them together to make transitioning between them seamless. See this graphic for more info:
You can see that the players won't use the backend servers' IPs to connect, but they will use the IP for the proxy to connect. Keep in mind that all servers connected to the Bungeecord proxy needs to be in offline mode! Why? Because when the server is in offline mode, the connection between the server and the client is encrypted. Mojang servers will generate a "session key" when you join, which can be used once per session (hence the name).
Say we now have a network (proxy) between the client and the server. Problems start here: Firstly, the connection between the client and the server is secured so Bungeecord cannot listen in to, to process commands (/server, /plist, etc.) and secondly, the proxy cannot swap you between servers, as your session key is only valid for that session, and hence bungeecord requires offlinemode on the backend servers.
However, this shouldn't be a problem, because if you have IP forwarding enabled, Bungeecord will add a special packet to the login protocol that says "I've authenticated this user as UUID xxxx", where xxxx is an online mode, mojang issued UUID. This means that the backend servers trust that this actually is the player's UUID, and as far as the plugins are concerned, the server is in online mode and all players have proper and vaild UUIDs.
How can Bungeecord help with my server? Well, here's my 2 cents. Bungeecord can link many different servers together, and you can even have 2 or more Bungeecord instances in parallel! (That guide is coming soon!) Bungeecord will really help with server performance, as you are running different gamemodes on different servers. This can greatly help server performance, isolated plugins, etc. Though the drawbacks are that given a mistake in setup and/or configuration, there will be some serious security flaws (Google UUID spoofing minecraft), and from personal experience, there are quite a few potholes that you will 100% fall into while setting up. You will also need multiple servers, to run a network.
All in all, you will have a love-hate relationship with Bungeecord. It will take some technical experience to setup, but when you do eventually get it setup, it is a great asset to your server!
Thanks for sticking around and reading my very nerdy explanation of bungeecord! Catch you around!