Modification of the Month #21 - November 2024
Welcome back to Modification of the Month to my 2 active readers, and welcome to all of our new readers who want to know how things previously worked and work now! This is where I endlessly ramble about Nerd's latest tech happenings. Come back every once in a while! I don't bite :)
There will be a TL;DR at the end for people not wanting to read through the last 4 months of confusion and pain I endured.
I'd like to begin by thanking Pez252 and Deaygo for the help they provided for this major update. I literally would have still been flopping around like a fish trying to figure out how to make the websites work >_>. I'd also like to thank the mod team and some players I kidnapped off of the street for helping me test everything.
The biggest question right now is probably: What changed? Which is followed by a close second place: WHAT DID YOU DO TO MY MCBOUNCER YOU MONSTER???
3 major systems were redone to modernize the very base of Nerd's functionality. This post will navigate each one in the order I discovered things were breaking, meaning we'll start with the very base of it all: The proxy.
The Proxy
BungeeCord has been replaced by Velocity. Bungee worked pretty well for a long while as we've used it for over a decade at this point. The biggest problem we had with it is that one of our plugins needed for version updates, ViaVersion, dropped support for Bungee entirely. The reason why that's so significant is because if we update the dev servers to 1.21.3, we also need to update BungeeCord to 1.21.3. But if PvE is on 1.20.4 and Bungee is on 1.21.3, nobody can join because of the version difference! ViaVersion would let us bridge those versions together so I could crash the dev servers repeatedly while you all played on P.
The update to Velocity has nearly 0 effect on you. It's a significant shift on the tech-end of things as our old Bungee plugins no longer work on Velocity. See where I may have problems? Disregarding the foreshadowing, the one thing you may see while playing is that the proxy no longer restarts. At all. It will be a continuously running network unless I need to perform maintenance on it. Now that doesn't mean the servers don't restart... ʸᵉᵗ
LuckPerms
But Gome, we already run LuckPerms! I saw it when I sneakily ran /plugins
!
We do currently run LuckPerms, that's correct. However, it was a weird system. We had LuckPerms on each server and those each hooked up to their own H2 databases. Each server had an independent permission suite tailored to that specific server... except for moderator permissions?
Moderator permissions were handled by a different plugin, BungeePerms. This plugin ran at the proxy-level and gave staff the same permissions for certain commands regardless of what server they were on. I knew this plugin had to go as soon as I became a TAdmin when I ran the command to list the groups and it crashed my client multiple times, but this was the nail in the coffin. Why are our permissions so spaghetti-like? This was our chance to get rid of BungeePerms once and for all, so I did it! I ran rm bungeeperms.jar
like it was nobody's business.
Nerd is now overseen by LuckPerms entirely. But in a different way! Each server still has LuckPerms running on it, but there's also a LuckPerms instance on the proxy. The proxy-level one communicates with all of the server LuckPerms to make sure things are in check and working, while we now have one central database for all of the permissions! We no longer have upwards of 4 different databases keeping track of targeted permissions. It's all under the one database using the beautiful context system. If I want players to be able to run /sit
on P and C but not the lobby, I can have a single permission node for that and specify that it's true in all cases except on the lobby. This makes figuring out permissions insanely easier and also reduces the chances of broken permissions or, as some may have seen recently, stray past moderators!
MCBouncer, My Beloved (And Also LolNo)
Now is the big part. This is realistically the only part of this update that affects you, the player.
MCBouncer has supported Nerd's punishments for a long, long time. Longer than most of you have been playing here. 13 years is an insanely long time, but we need to send it off into retirement. Thank you to Deaygo for maintaining the servers that hosted MCBouncer for all of these years.
Nerd has never needed anything too fancy. We issue notes, occasional warnings, kicks, and sometimes bans, too. MCBouncer provided us with all of that, and we needed nothing more.
MCBouncer started showing signs of decay some time ago. Bit by bit, very small things started breaking. Near the end of its time on Nerd, it had stopped sending mods a message when a player joined with notes. Not a huge downside, but it still was a bit of a loss. That note mechanic was mostly useful for when MCBouncer was widely used and we had players joining from other servers that we could be alerted for. Nerd was the only remaining user of MCBouncer at the time of its removal.
We had no reason to keep using a shared punishment system. We were the only ones using it and weren't reaping any of the benefits it used to provide. Additionally, it was being used at the proxy level on BungeeCord, which we now just killed. Whoopdeedoo, I need to update this sucke- nevermind that code is old and scary and I don't want to. Because it was on the Bungee level and due to how basic its commands were, CommandHelper actually completely carried it. All commands mods used to interact with MCBouncer were sent through Bungee messaging channels that started at CommandHelper to ensure that you stayed banned. This broke a lot of things, so it was no good.
A discussion was started a few years ago to see what the best options were for replacing it. The conversation mostly fell flat as no alternatives at the time provided what we needed. A few years later, we found one!!
Welcome the new intern: BanManager
BanManager has a classy, modern new website at https://bans.nerd.nu. We were able to import every single bit of information we had from MCBouncer, so all bans and notes remain in place. You thought you could wait those notes out? Not anymore! Active bans are still visible, as are all previous notes, but under a new name: warnings.
We've also had a weird setup for all of our punishments: This is a list of the plugins that handled punishments and what they handled:
- MCBouncer - Bans, Notes.
- LolNo - Mutes.
- CommandHelper - Warnings, MCBouncer crutch.
BanManager handles all of them under one roof, and more! The new system allows for better handling of punishments, easier management of them, and an infinitely friendlier UI.
As a result of this, LolNo will no longer be around. Its other core functions will be merged into NerdMessage at some point.
You, the players, still have access to all the same information you had before like active bans and notes (which are now warnings), but you now have a few extra things to see: past bans, current mutes, and past mutes. MCBouncer stopped displaying bans once removed, but this will keep them around for longer.
THE RULE ABOUT NOT DISCUSSING BANS STILL APPLIES FOR BOTH PRESENT AND PAST BANS.
You will also notice a big button that says "Appeal". This will be used at some point in the near future, but, at the time of writing, we will still be using nerd.nu/appeal.
We salute you, MCBouncer. You served us well.
The TL;DR
As promised, here's a breakdown of what's changed:
- The proxy has changed from BungeeCord to Velocity
- The proxy will no longer restart. Not much else that will impact players.
- Some plugins have been replaced
- BungeePerms -> LuckPerms
- BungeeResourcePacks -> VelocityResourcePacks
- Some plugins have been updated
- ViaVersion
- ViaBackwards
- New plugins
- CommandWhitelist - Replacing "CommandBlock" on the main servers
- MiniMOTD - Gives us a cooler multiplayer menu look B)
- Maintenance - Allows for individual server shutdowns when work needs to be done. Has a separate whitelist and timer functionality
- LuckPerms was set up in a more efficient way
- Hooks up to one central database now instead of 3 smaller ones
- Relies on LuckPerms' context module for specific permission scenarios
- Solves the issue of past staff randomly getting their permissions back
- MCBouncer has been replaced with BanManager
- Accessible at https://bans.nerd.nu
- All data was able to be imported from MCBouncer
- Players can now see active bans, warnings, and mutes as well as past bans and mutes. DO NOT DISCUSS BANS, PAST OR PRESENT, AT ANY TIME.
- Appeal button is present on home page. Not to be used, see https://nerd.nu/appeal.
- PvE, Creative, and Lobby had LolNo and CommandBlock removed.
- Functionality of both have been migrated into new plugins:
- LolNo -> BanManager and NerdMessage
- CommandBlock -> CommandWhitelist
- Functionality of both have been migrated into new plugins:
Ping PPGOME in discord if a server, or multiple, go offline, permissions break, or https://bans.nerd.nu goes down. Do not ping in any other scenario. Make a modreq so we can triage the problem properly.
The path has been paved for great things.
Thanks for reading, PPGOME