Hawken – Player Count Graph
After Ashfire made his graphs private. I decided to go ahead with a project I’d been holding off because he had already made a solution. I installed MongoDB + PyMongo and wrote a script to poll the server list periodically, then store the resulting JSON in the database. Once that was done, I modified my flask web server for the server list to serve a simple graph using HighStocks. It uses ajax to fetch the data from the database as I did not store the derived data (the player count). Instead each request will parse X data points of server list jsons which makes it useful as a local application only.
Hawken – Server List
I then rewrote the entire thing from scratch and used Bootstrap as a base for the client side to make things look nicer.
Quassel – Web Search
Finalized my first pull request to a larger Open Source project. I copied Chrome’s Search for __ when right clicking selected text in chat.
Bukkit Plugin – PrideArena
I took over a writing a friend’s plugin for the Pride PvP Games server. Essentially, I put into practice the game mechanics of a Deathmatch arena in the style of the Hunger Games. Actually, it’s not that much like it as there’s no cornicopia danger. You choose a kit (class) and there a grace period when there’s no PvP. My personal highlight of this project is the that I shosed the status of the arena with signs around the portal you enter. Giving a very good user feedback about the sate of the arena. While I don’t have credit for the idea, I also added a gate that closes down to prevent people from walking though the portal (as opposed to just not teleporting them).
Looking for an IRC client that that fully customizable skins eventually brought me to Quassel. While I love the fact everything is styleable in QSS (CSS for QT), the client itself has a few minor annoyances. Thus began my first serious foray into C++.
Bukkit Plugin – Vault Promoter
This project was spurred by the fact that bPermissions’s promotion system limitations. While it focus’s on tracks, the actual permission node for each track uses one node per group. My desired setup was that normal users could promote Guests. Giving users the
promote.User permission node would then allow users the ability to both promote to guests to User and to demote them from it. Not ideal. While I first debated forking and submitting a patch (which I half did), I also wanted the promotion commands to be more configurable. Currently they were
/promote [trackname]. Which would force a mod use the command more than once to go all the way from Guest -> Mod.
MegaUpload Batch Downloader (Python)
I started watching One Piece. Unfortunately, >400 episodes to download is fairly annoying to do manually. So I fired up python and made a script to download from megaupload in a single-threaded environment using Mechanize and BeautifulSoup.
Bukkit Plugin – CellWar (Currently Integrated Into Towny)
I started getting re-involved with Towny’s development, and got some inspiration from users about how to do warring Nations. I also took a gander at some of the mechanics of a similar plugin that did PvP stuff right, Factions. I coded up some threaded tasks that created a huge beacon in the sky overtop the area under attack. The game mechanic was to attack and hold the area. Towny’s war event is the same thing, but there’s nothing physical. So I created a focus for the defenders. Attacking would have the attacker place a flag, which the defenders would need to break / take down.
I wanted to try making my own Tactics engine, inspired from Final Fantasy Tactics and the 40 Hour challenge, I only knew Python and Java at the time, and wanted to learn more with Python. So I took a second shot at Pygame (I’d tried to port an old Turing project before). I managed to get the isometric down right, as with the height levels, but my code re-rendered the whole map every tick which was terrible so I scrapped the project.
Bukkit Plugin – Questioner
I wanted a way to integrate accept/deny ability to Towny’s invitation’s to join towns and other user confirmations. At the time, there was no customizable API available for the task, so I made my own.
Bukkit Plugin – Towny
I converted Towny to Bukkit when it became apparent hMod was dieing. The initial release didn’t include the wall generation code, however I did add iConomy support as well as a taxation system. I then coded up a (rather sloppy) implementation of having residents own plots inside towns.The rewrite had me focus on getters/setters, exception handling (as well as custom exceptions), as well as focus on the inevitable problem the hMod had. hMod didn’t plan for when Minecraft would eventually allow users to move between more than one world on a single server, but the Bukkit dev’s had foresight.
hMod Plugin – Arena
A server owner was asking for a plugin to kick off his server and make it more unique. Basically a new player would be forced to tackle a waves of enemies when he first joined before being able to select his faction. This was my first tackle on a paid project, and gave me a tons of experience for what to do next time.
hMod Plugin – Towny
Then hMod really started picking up heat and introduced plugins. I decided to use my Java skills I learned. I wanted a way for users to manage their own towns, and the more people in the town, the more perks. As the idea expanded, I eventually started planning that towns would be part of a hierarchy with nations at the top. I fist wrote mapper, which would show where the town was founded, but I kept getting user feedback that Towny should protect areas.
My initial code was terrible. I tried writing my own XML parser/writer for persistence.
When I finally decided on just a plain flatfile, and with the heirachy code done (but oh so buggy), I was ready to tackle integrating with another cuboid plugin for area protection. I started talking with some on IRC, and a dude was dishearted that I was just going to force players to use cuboid to select an area, and gave me the idea of having the town expand from a central point. Like a protective sphere.
I started looking into cuboid and how it did block protection. This was around the time when dev’s started talking about how checking if a block was in a list of cuboids was a terrible idea. Eventually cuboid got on the path of using K-D Tree. That threw my sphere idea out, but I started on thinking about a chunk based system.
hMod Plugin – ChatChannels
A server I was on wanted specific channels for each faction on the server. I was partway into coding Towny, so this was a good relief and learning stepping stone. I took some idea’s from how IRC operated, but the code didn’t use much OOP.
hMod Plugin – Mapper
After I first got the spark to start writing Towny, I wanted a visual representation of where the towns were. This lead me to expand on the Cartographer idea (a top down render of a minecraft world). I made it so ingame coordinates could be passed to a flatfile (type:string:x,z). I then worked on a stand alone program that would take a cartographer rendering, and draw the notes onto it. For testing, one of the types I used was all the player’s locations at the time. I like to think is the inspiration behind the current map viewers.