January 1st of this year marked a very special day for me. It's hard for me to believe it, but my dear little Bukkit turned two years old. As cheesy as it sounds, I still remember writing that very first commit as if it were yesterday.
I figured now was a fantastic time to give you a history of the project, its impact on my life, and how everything came about to turn into the huge megaproject that it is today. Some of this may be new information to some people, and some of it may be a little out of order, but I'll try to do my best to make this a worthy read. Whilst the Bukkit project was the best thing that has ever happened to me, it didn't come without some big mistakes and sore spots. I may tell you about those, but they're not easy to write about and may involve a handful of politics.
Before we jump straight into Bukkit, let me take you back to late 2010 and introduce you to another server modding platform formally known as "hMod". Minecraft at this point was in Alpha 1.2 and modding wasn't as much of a thing as it is now. hMod was created by a guy known as hey0, and was an attempt to make a more customisable version of the server without having to learn how to code yourself. That may not sound like a modding platform... and that's because it wasn't created to be one; it just kinda ended up that way. It came with a few handy utilities for server owners such as some commands to control the server with (/ban, /give), a whitelist (this was huge!), and a message of the day. These kinds of things you take for granted these days, but they were unthinkable luxuries for the brave and willing modders back then. Somehow hMod picked up speed and people started to extend upon it with plugins, adding yet more functionality to such an already ambitious project.
I loved the concept of this strange and curious project. I wanted to check it out and maybe try my hand at making my own plugin. The chance of customising a game to how I want it? Yes please! I hadn't really played with Java much before, but I'm quick to pick up new programming languages and I was quite familiar with C# so it was easy enough to work with. I knew exactly what I wanted to try to make, and I had a bunch of friends who supported me and were willing to try it out with me. Minecraft multiplayer was an extremely new and broken thing at the time, and things like Minecarts would just be invincible crashing machines at this point (seriously; you couldn't destroy them and rails crashed your server and your clients), so there was a desperate need for getting around quickly on a server. There were already some plugins that let players /teleport between themselves but I didn't like this; commands are no way of interacting with a graphical world! I set out to make a plugin called "Stargate", which I'd like to imagine set the standards for modern portal plugins. There simply weren't any previously, and I went all out trying to get Stargate working how I thought it should; you'd orient and position properly between the portals, kept momentum, and they utilized signs as a means of interacting with them (something that nothing else did at the time - it's now the norm!)
During my time making Stargate, I somehow took burden of maintaining hMod with a few other people who equally just found themselves in such a position without any knowledge of how it happened. Hey0 had vanished, and Minecraft had started to be updated much more frequently than before. We needed to know what to do! Myself and Grum took control and spent our time updating hMod ourselves, which was a scary task and took us a long time, but we got through it. We had very little control over the project, and couldn't even make releases ourselves, so this was an extremely difficult position to work from - but we did it. We spent a few months updating hMod between Grum and myself, and eventually we just grew tired of having to support broken things without being able to even attempt to fix them. I spoke to a few people in private and proposed that we started up a new project from scratch, where we can actually work on the things that need to be worked on and hopefully make something just that much more awesome. Some of the guys I spoke to thought it wasn't worth the time, whilst others (Grum, Tahg, EvilSeph) thought it was a good idea. I figured that any positive reaction was enough to get it started, so I went forwards with my plans.
People often ask me, "why 'Bukkit'?". Well, it's kinda silly, but I have a bot in my home IRC channel called "Scrapbucket", which was a fork of xkcd's IRC bot "Bucket". I proposed "CraftBucket", and people agreed that it was a good name. After we realized that splitting the project into two parts (an API and an implementation), we decided to go for "Bucket" and "CraftBucket" - but then Grum jokingly suggested "Bukkit" for the whimsy name. Needless to say, it stuck :)
So there we had our group and our plans, and we were ready to take over the world. We drafted up an announcement that we'll no longer be supporting hMod ourselves and will be creating a new project, and this was published on a few sites. The minecraftforum thread is still available for reading, and is worth a few giggles if you're interested. Initial community reaction to the announcement was mostly fantastic, but it did spawn up the usual craze of "one project may die; we need to fill in the void with a new one!". Lots of other projects suddenly popped up to compete with us to replace our own work, but they didn't really take off. I was excited, there was so much to do and I can really get a lot done if I'm focused. Full steam ahead, and the project just grew like nothing else. Over the next couple of months, the initial team that said they'd help create the project kinda fell away, and we were left with just 4 people as the "core". Myself, Grum, EvilSeph, and Tahg. I'd come to learn from my time making this project that people may mean good, and some may even mean bad, you just can't rely on them to be available as much as you are a few months down the line - life gets in the way! It kinda ended up with me doing the API designing + implementing, and Grum helping out with the really difficult tasks as his time away from work allowed.
I think the one thing that I'm most proud of from Bukkit was our updating procedure. It was extremely taxing work, but we developed an awesome 3-step procedure for it. Grum had created some awesome tools to semi-automate the decompilation and deobfuscation process (step 1 and 2), and I would essentially rewrite a portion of CraftBukkit in a matter of hours for step 3. For the average update I would spent 20-30 hours nonstop (save for bathroom breaks. I was dedicated, but not that dedicated) just sat there recreating our now large codebase for the new version of Minecraft. During this time I would also be the one reassuring the community that yes, we know about the update, and yes, we are working on it. It was incredibly difficult work and very thankless too. I am so grateful that my loving fiancee supported me throughout this; Bukkit (and to a lesser extent, maybe even Minecraft) may not have gotten to where it is now without her :) You may have noticed that I speak about this process in first person, and that's because I did absolutely every update myself up until the day I joined Mojang. Sometimes I would get a little help, but it was rare; it was just quicker and easier to do it myself than wait around for other people to help out, because it wasn't really something that can be done concurrently.
I started Bukkit when I was employed, but I was made redundant soon after. This means that for most of the year (2011), I was unemployed. I was running purely on savings and personal donations to myself (of which probably totalled a few hundred pounds to this day. Almost enough for 1 month of rent!). Towards the end of the year, I had started to run into cash issues, and I wasn't entirely sure what to do. I had put a "please donate!" button on my blog, and tweeted it; I got a few personal direct donations this way, and it happened to be enough to get me through the month (combined with existing funds and borrowings). I asked the others about the donations that "Bukkit" receives; since day 1 we've had a donation form up on our website, and it went to one person to cover the $100~ one-time fee of a forum license. Apparently we received a nice amount of donations at the beginning (a few hundred USD for each of us four, after expenses!) but in the last half a year at that point, we ended up with about $20... Well. Ok. That clearly wasn't an option then! As upsetting as it was :(
At some point here, Curse had offered to support Bukkit and that couldn't have come at a better time. Our servers were buckling under load, and we couldn't afford to do anything about it on our own. I acquired a job at Curse (in which my role was literally, "keep doing what you do and don't mind us". They were good people!) and they also helped kick off an old dream that we had when we started Bukkit; an easy to search plugin repository! They also offered to fly us all to Blizzcon, of which I was planning to attend anyway, so that we can all meet up and say hi. And so for the first time ever, the Bukkit team was united together in person! A month or two after that, Curse also flew us out to the first Minecon and we did a panel there. That was both incredibly scary but also incredibly awesome.
Some months pass by, and we're now into 2012. Mojang had expressed a desire to acquire us, and so we flew to meet up with them yet again. Needless to say, after much talks to and fro, we accepted their offer and the rest is history! I passed on the keys to some other members, taught them how to do the updating, and went on to developing Minecraft.
It has been such a crazy ride. Looking back, we had made a lot of mistakes in Bukkit, but it was all worth it in the end. It was a fantastic experience for me, and I had never dreamed that it would have ended up anything as big as it is now. Bukkit is by no means a closed chapter though, it's still being developed to this day. I put my heart into the project, and it rewarded me with an awesome job and so much experience. Thank you.
Happy birthday, Bukkit. Here's to many more.