I play Minecraft quite a bit in my spare time. I enjoy the openness and creative atmosphere of the game, and it’s often through exploration and building that I get many of my story ideas for my other projects.
My friend Dylan and I have been running a Minecraft server since the game first came out. Initially we started with a small home hosted server just for our group of friends. Later on, we joined a public server called ‘Suitcraft’ for almost two years before the owners shut it down. Not wanting to lose many of our new friends we made in that time, we created our own public server called ‘Syrocraft.’
We’ve had many crazy adventures and hardships with this server over the past 6 years, but at the end of the day, we find a way to work through it and continue to grow our tight knit community.
Over the last few years, I have begun to dabble in the art of plugin development. Because we run a mostly vanilla survival server, most of my plugins are small utility based plugins that help me bypass in-game limitations and improve ease of use. Most of these plugins don’t effect gameplay, and give me more control over vanilla mechanics. That said, the ones that do affect gameplay do so in a way to where it keeps our server fun, and unique, while still maintaining the feel of a true vanilla server.
The Wishing Well was the first official plugin that I ever created, and it solved a very limiting problem that we had. In our spawn area, we had built what we called ‘The Wishing Well.’ Using redstone magic, if a player tossed a diamond into the wishing well, a dropper, hidden below ground, would randomly dispense one of the items it held. It could be a diamond chestplate, it could be dirt. Bottom line is, it was a way for players to gamble away their diamonds hoping to make a profit. Now while this system worked, it had its limitations. For one, droppers could only have 9 possible drops, each having the same chance of happening.
In order to get around this issue, I created the Wishing Well Plugin. This plugin allowed me to create drop tables in game, and add potential drops to them in the form of commands. You can create as many drop tables as you want, and each table can have as many potential drops as you want. Each drop has a rarity value, a Boolean for whether or not it should announce your drop to the entire server (Usually for super rare items), and finally the server command that gets run when this drop happens. This command is usually ‘give <player> <item> <quantity>’ however any valid command works.
Because of the scalability of this plugin, I use it for almost everything that requires randomization. Whether it be boss drops, expeditions, event rewards, or broadcast messages, this plugin is the backbone for many things on our server.
This plugin evolved from an older, temporary plugin I made which allowed players to trick or treat during our Halloween event. Our players enjoyed trick or treating so much that we wanted to find a way to make it last year round. It was only after a fellow player reminded me of Runescape’s ‘Treasure Trails’ that I found a way to make a more unique, general use version which I call Expeditions.
The player must first obtain an expedition drop from the wishing well, voting for the server, or any of our boss fights. Once the player receives an expedition, they are given a task to complete which usually requires them to solve puzzles, and travel around the map. After completing a task, they are then given another. After completing a certain number of tasks (Based on the difficulty of the expedition) they are given a reward from the expedition drop tables via the wishing well plugin.
Technically speaking, each expedition has a list of possible tasks that can be assigned to the player based on difficulty. When the player starts an expedition, or solves a task, another task is randomly chosen from the respective list. An example of a simple task would be “Search around Syrobucks Coffee.” The player would then have to travel to the Syrobucks coffee shop, and search around the area for a hidden button to complete the task.
Overall this is one of my favorite plugins and I’m glad I created it. We’ve been dying to add some form of questing to Minecraft for ages now, but we were never able to due to the shear amount of work required to make one simple quest. This plugin essentially solves all our problems, as creating a new task takes only 10 seconds, yet can take players hours to figure out. Not to mention how long it takes to collect every possible drop from the expedition drop tables!
This plugin was an effort to create custom titles for our players to unlock once they achieved some tremendous task such as mining 100k stone.
The first part of this plugin is the stat tracker. Any time a player does something in game, using an item, breaking a block, etc., that statistic is updated for them in their stats file. I also added the ability to create custom stats (such as number of diamonds thrown into the wishing well) which can only be updated via running a command.
The next part of this plugin is the titles portion. For every title created, a statistic and minimum value are also assigned as unlock requirements. Players are able to look at two different title lists. The first is a list of titles they have access to, and clicking on a title in the list will set it as their active title. The second list contains every title they don’t currently have access to. Hovering over the name of the title will show the player what they need to do to obtain it, as well as their current progress.
This plugin is a strange one as its only purpose is to make my life easier. Since Minecraft’s 1.13 update, plugin commands no longer work in conjunction with the vanilla execute command, and any plugin that previously relied on Minecraft’s built in target selectors, would not function as intended. Any custom command using ‘@p’ before 1.13 would target the nearest player. Now it simply targets a player by the name of ‘@p.’
While I was able to create my own functionality for these selectors for my plugins, the developers of our other plugins have yet to do so. To solve this problem, I created my own execute command that acts as a wrapper, allowing me to once again utilize the vanilla target selectors for custom plugins.
While the target selector issue was one of our major problems when updating to 1.13, I decided to take this plugin one step further and add a bunch of small random features that are all around nice for us to have.
I use command blocks quite frequently on our server. As such, I noticed that many contraptions would use the same 5-6 commands each time, just with different values. To save time and also reduce the amount of lag caused by having so many tile entities on the server, I decided to create a few custom commands that would essentially merge my repeated elements into a single step. This is especially useful for CraftBook’s ‘Command Items’ plugin.
Another small feature that this plugin has is the seenlist command. In short, it displays the last 10 players who were online as well as how long ago they logged out.