The Chunk Diaries: UUID migration

Foreword: This post is actually quite out of date now! Since this post was written, a large volume of time and effort is now being poured into efforts meant to increase consistency across the network.

At The Chunk, we use a mix of off-the-shelf components and custom components, but most of these are custom. These present interesting challenges to UUID migration.

On July 28, 2014, we were able to remove our dependence on these components and upgrade to RedisBungee 0.3 (from a version of RedisBungee between 0.2.5 and the UUID changes that eventually became 0.3), allowing us to develop against RedisBungee more effectively.

Our codebase rewrite

The UUID migration provided us with impetus to begin a complete rewrite of our existing codebase. As regular readers of my blog know, two plugins (ChunkStats and ChunkCredits) originally provided us with stats and credits functionality. With ChunkCommons we could now clean this code up, hide the underlying implementation (notably, we developed our systems against Redis and then SQL in order to ensure this from day one), and allow for a shared set of common libraries (implemented as a Bukkit and BungeeCord plugin).

We made many design decisions, mostly to abstract the implementation from the interface. As we could not rely on Bukkit's primitives, we implemented interfaces which implemented functions we'd need most in the library, notably to fetch a username and its UUID. This affords us flexibility, in that we could support other user storage methods and any implementation of Minecraft we wish.

There is more left to do

Although we have finished up the majority of the UUID migration and EULA compliance, there is substantial room for improvement around the network, and we still have many pieces of code to clean up.