Plugin development
Vanilla+'s plugin stack was a mix of off-the-shelf tools and custom Java work built on top of them. Over the three years I wrote several plugins from scratch and consolidated others into VanillaPlus-Core, a single plugin that handled a growing list of server-specific features rather than scattering them across separate jars.
The more interesting projects were the ones that solved specific operational problems. A custom LiteBans extension intercepted /unban commands before they reached LiteBans, queried the punishment database to check whether the active ban was filed under the blacklist template, and rejected the unban if it was, preventing staff from accidentally or intentionally clearing permanent bans that were supposed to stay permanent. Another plugin I designed logged every item transaction and flagged patterns that matched known duplication exploits, integrating with a Discord bot to stream live detections into specific (category based) Discord channels rather than dumping everything into one feed.
The competitive advantage of writing your own plugins over configuring someone else's is that you understand exactly what runs every tick. When something breaks at peak hours, you're not guessing at what a closed-source plugin might be doing.
Performance work
Crystal PvP servers generate a specific kind of load: high player density in a small area, constant combat, huge farms, lots of entity spawn and despawn events and players connecting from anywhere between 5ms and 200ms latency. Vanilla+ ran everything on a single instance, which meant there was no sharding to fall back on when things got slow, the only options were configuration, code, or both.
Most investigations started with spark profiler reports. The recurring pattern was something behaving badly at scale that wasn't visible at lower player counts. Configuration adjustments handled the straightforward cases. The ones that required more work I fixed by forking the plugin and rewriting the specific path that was causing problems, keeping the original behaviour while cutting out the cost. Not every bottleneck had an upstream fix available and waiting for a maintainer to respond wasn't always an option when something was actively affecting server performance.
Increasing revenue
The biggest revenue contribution during my time was designing and shipping the 'Legend Token' system, which went from zero to 50% of the server's total revenue and was central to scaling annual turnover from $15,000 to $135,000 in a 12-month period.
Legend Rank is Vanilla+'s paid subscription at $14.99 for 30 days. It gives players access to queue priority when the server is full, a gold name in the tab list, RGB chat colours amongst various other desirable perks, without being pay-to-win. It's the server's primary source of monetisation.
I discovered that players were already trading Legend Ranks for in-game items informally, someone would agree to buy a rank for another player in exchange for gear, but there was no safe way to execute the exchange. Either side could take their half and disappear. Legend Tokens made the rank itself a transferable in-game object: a player buys a token from the store, hands it over via /trade alongside whatever was agreed, and the recipient redeems it for a 30-day Legend Rank via /redeem. Both sides of the deal happen in a single atomic transaction.
The system also had a secondary effect on revenue: paying players now had a reason to buy tokens beyond their own use. A token held in-game value, it could be traded for items, so a player might pick up extras to sell. This drove repeat purchases outside of just recurring subscriptions.
Operations and my broader role
Beyond the development and firefighting there was a lot of work that doesn't show up in a commit history. Monitoring was handled through Grafana dashboards aggregating server metrics alongside Atlassian Statuspage for player-facing uptime reporting, plus custom tools that pushed alerts to specific Discord channels. Running hundreds of data points across player retention, tick times, I/O and memory, meant that most issues surfaced as anomalies in the graphs before they became visible to players.
The operational leadership side involved prioritising what got built, translating player feedback from the Discord and in-game reports into development decisions, writing release notes and staff documentation and coordinating updates, without disrupting the live server. The 30,000 member Discord was where I would deliver announcements, changelogs, event posts, writing clearly and quickly was its own skill separate from the technical work.
What I took from it
Three years on one server long enough to watch it change is a different experience from project work. You accumulate the history of why a particular config value is what it is to which player is going to test every new feature by trying to break it. That context has limits too: it's easy to keep patching around a system that should have been replaced.
The performance investigations are what I'd point to most. Reading a spark report and finding the thing that's actually costing the server valuable performance. That carries over to any system where production behaviour doesn't match what you'd expect from reading the code.
I left in April 2026 to build Vanilla X, a Crystal PvP server of my own.






