Doctacosa

plugins

I've written before about my work on plugins, either to fix existing ones or create new modules entirely. Some of the new work happened to replace older options that stopped working or weren't reliable enough, while others have been designed to add some brand new functionality. While I had made a few available online already, I decided to go the full distance and release as much content as widely as possible!

There's now a main section on Interordi to link to the full set of plugins I've made available so far. This includes information and downloads on Spigot and Polymart, plus the full source code on GitHub. Five plugins are available now, with more being gradually prepared.

This might not mean much to most of you reading this, as you're players of the Creeper's Lab and don't need these files. Instead, these are for server owners, a group of people that I haven't been actively targeting until now. Since I'm already making the effort in developing these features, I thought I might as well use the opportunity to reach out to more people. This includes a new crowdfunding campaign, this time on GitHub Sponsors, which targets developers and server owners interested in supporting my work.

Now, this doesn't mean that this was a simple fire-and-forget thing. As I was telling someone else a few days ago, I tend to classify my code in three categories:

  1. The tools I create for myself only. These can be very unpolished, as I can easily work my way around their limitations or problems.
  2. Things that are shared among the staff members. While they can come with warnings about rough edges, something that's more intuitive is my goal.
  3. What gets published for everyone to see and use. This needs to be fully secured, as fool-proof as possible and with a solid production quality.

Moving anything forward from one level to another can be a significant effort, and often takes way longer than one would think. Most of the plugins that this post is about were in the second tier, although some were in the first; making sure that everything was easy to install and understand required some careful review work.

More in this direction will happen in the upcoming months. Do you have any thoughts on which of the tools I've mentioned over time that would be the most useful to other people? If so, please, I'd love to read about it!

#minecraft #plugins #projects

– Doctacosa

Following up on my previous post, here are some more of the plugins I've developed over time.

IOServerMonitor

The newest on the batch! As you might guess from the name, this plugin is used to monitor the status of the game servers. Nothing of this is visible to the players; it runs quietly as it lets me keep an eye on valuable data like the last time a server was restarted, how many players are on or how fast it's currently running. Bonus, this one is available for download on Spigot!

IOTrails

IOTrails replaced the older SmokeTrails, which I had been maintaining for a while. This full rewrite allowed me to add new options, most notably in letting players choose a trail once and have it apply on all servers simultaneously. Before, the setting was applied per-server, causing people to often have the wrong one applied. Also available for download!

IOBattleStats

I already did a full write-up on this one nearly two years ago, but I feel like it's worth another mention as tracking all gameplay stats was a very big bite to take. Thankfully, this has been very reliable overall in the meantime, with little maintenance needed. I'm planning a release once I work out a few known issues.

UHC and Grindatron

Both rotating challenges within Kenorland, I developed custom solutions from the beginning to have all the flexibility I needed. These aren't set for public release, as the UHC one is probably underdeveloped compared to some existing options, while the Grindatron is a special feature that I'd like to keep as a Creeper's Lab exclusive.

While I don't have more to mention right now, I'm often considering the time cost of maintaining existing plugins vs finding new ones vs developing my own, so there might very well be a part 3 in due time!

#projects #plugins #minecraft

– Doctacosa

Last month, I covered some of the Minecraft server plugins that I've taken over in order to make them work in newer game versions. Let's continue on that to cover some of the plugins that I've written myself, for various reasons. The four that I'm describing here have had their source code newly added to my GitHub profile, if any developers out there want to give them a look!

IOSync

Ironically, the newer one of the set replaces the first one I listed last month: InventorySQL. IOSync is responsible for synchronizing the inventory of players across all survival servers. While InventorySQL chooses a few things to synchronize, IOSync takes the opposite approach and synchronizes everything but a few selected details. Additionally, it works using the base game's data, making version updates much smoother overall! It's still young, but it has performed quite well so far.

IONotifier

Probably the simpler one, this reads the content of a file on the server and displays that text in-game. It's used to relay notifications, such as the hourly notices or the achievement rolls. Straightforward functionality, but since nothing I could find would work just the way I wanted, I rolled out my own.

IOLogger

Straight and to the point, this logs all of the chat and commands entered by the players. These logs have various uses, from tracking the daily activity of the servers to reviewing hacking attempts. This was the first plugin I wrote and made for a good starting point before jumping into more complex functionality.

IOTracker

This one tracks when players move in and out of the WorldGuard regions in the world and saves that information to a file for later use. It's a key part of the achievements system, being able to say who went where.

I've got more, but since I've placed all these online recently, I thought it made sense to start there. I'll continue in a later post at another time!

#plugins #projects #minecraft

– Doctacosa

My work on updating the Creeper's Lab to Minecraft 1.14 is underway right now. One of the big (bad) surprises I encountered quickly is that our stats-tracking plugin is breaking in the new game version, and there's no clear upgrade path available. The stats tracking is critical to our setup: it's part of the player profiles on the forums, the achievements targets, griefing tracking, and more. There is no easy way out of this one, and this unfortunately isn't the first time this happens either. Here's a recap of all the gameplay stats solutions I've used in the past.

Stats/TNO-Stats Our first stats plugin, selected because it had a wide range of values being tracked, in a simple format, and was easy enough to use. Initially, nothing relied on this, but I integrated it early on so we could record as many gameplay events as possible.

BeardStats Quickly after that initial setup, the first Stats plugin went abandoned. Someone else made a follow-up that was compatible with the same structure, so I migrated to this. The initial version of key features like the achievements were made using this one.

Vanilla When Minecraft 1.8 rolled around, a lot of functionality was rewritten, breaking a lot of compatibility. Unfortunately, BeardStats stopped getting updated around that time, so I had to look for another option. The Mojang team had implemented their own vanilla statistics, tracked server-side and viewable through your game menu. I rewrote everything to support this. However, at the next game update, I realized that Mojang's implementation caused any stat with an ID change (for example, roses becoming poppies) to completely ERASE the old values and start counting anew, which wasn't acceptable for our uses. Another change was needed.

Stats2 At the time, Stats2 was the leading plugin to track player events, so I once again rewrote all my logic to be based on this. A negative effect was that all stats had to be counted from 0, but it seemed like a necessary evil to get a stable base to work with.

Stats3 The author of Stats2 created a new version, Stats3, with a different data structure and better performance. Thankfully, this one properly converted the values already stored to the new format. While I had to do some updates to the processing of achievements to account for the new format, this was a rather smooth change.

IOBattleStats Stats3 didn't count everything I wanted for the sake of some achievements, like the famous “Sailor Scout – Defeat an enemy with the power of Love”. To complement it, I wrote my own plugin, focused on a more detailed tracking of any damage taken or dealt (to both mobs and other players), along with death causes on all sides. This took care of PvP and PvE events, while everything else still relied on Stats3.

And that's where we stood, up until 1.14 showed up. My initial tests revealed that Stats3 was completely incompatible with the new game version, as it was still trying to use numerical item IDs instead of names. Its author stopped updating it, and instead chose to start building Stats5, once again incompatible with the previous versions, and this time with no data converter available. That'd have meant restarting counting the values from 0 all over again, and that's where I decided to draw the line. No more!

I figured that, if everyone on this front is going to let me down every few years, I might as well do it myself, so that's what I'm doing now. IOBattleStats is being expanded on to track all relevant gameplay values, from block breaking to minecart distance passing by portal uses. I'll also write a converter from Stats3 to IOBattleStats' own data format, so that everyone working toward specific achievements don't need to restart from zero. Then, everything based on these stats (see above: player profiles, achievements, griefing tracking) will be updated to the new data format, and this time should finally be the one.

This takes more time to do upfront, but will save me from having to rewrite significant parts of the existing systems every year or two, so I see it as very much worthwhile!

#gamedev #projects #plugins

– Doctacosa