Just found out about this recently:
1. Get a Minecraft Forge server
2. Download the SpongeForge mod and place it in your mods folder (link here)
3. Start the server, and once it's fully loaded, type in the stop command (to properly stop it)
4. Go to config/sponge/global.conf
5. Set bungeecord=true in the modules section, like:
modules {
block-capturing-control=true
# SET BUNGEECORD TO TRUE HERE :D (PS: Don't include this comment)
bungeecord=true
entity-activation-range=true
entity-collisions=true
exploits=true
game-fixes=false
# Allows configuring Vanilla movement and speed checks
movement-checks=false
optimizations=true
# Use real (wall) time instead of ticks as much as possible
realtime=false
# Controls block range and tick rate of tileentities.
# Use with caution as this can break intended functionality.
tileentity-activation=false
timings=true
tracking=true
}
6. Set ip-forwarding=true in the bungeecord section, like:
bungeecord {
# If enabled, allows BungeeCord to forward IP address, UUID, and Game Profile to this server
ip-forwarding=true
}
7. Now, instead of BungeeCord, get Waterfall. This is because the ip forwarding feature in Bungee doesn't work with Forge, but if you have Waterfall, all is well
8. In the Waterfall config.yml, set ip-forwarding to true
NOTE: All these steps are for people who want to use Waterfall (aka BungeeCord) with Forge WHILE using Bungee's awesome IP forwarding feature. If you do not want ip forwarding, then you can directly use BungeeCord with Forge (without any mod support), BUT you need to disable ip-forwarding in Bungee's config. Without IP forwarding, your Forge servers won't get the player's real IP and won't get the player's UUID (for some reason, UUIDs are also forwarded in IP forwarding, despite the name). If you are planning to host a cracked server, then this is fine - except you'll have trouble administering IP bans