Minecraft Snow Ball Match Plugin with Web App banner

Minecraft Snow Ball Match Plugin with Web App

12 devlogs
122h 13m 33s

Minecraft Snow Ball Match is Game for Minecraft Servers I once Coded. Now I’ll update my spagetti code and make addtionally a Web App where you can watch live stats about the current Game and change the game settings and controll the game states.

This project uses AI

In this project, AI was used for consultation and programming language learning. Code was never directly copied from the AI (except for code of the Demo WebApp Backend), but in rare cases, it was transcribed directly. The project documentation was created with the help of AI (brainstorming, spelling, and tone). Code of the Demo WebApp Backend was sometimes directly written by AI but allways checked by a human.

Demo Repository

Loading README...

Nuan

Shipped this project!

Hours: 122.21
Cookies: 🍪 2198
Multiplier: 17.99 cookies/hr

So that’s it. I first started this project in 2023, but back then, the code was disorganized and I didn’t have the time to finish it. I initially planned to build a web dashboard, but the old groundwork needed a complete rework. I ended up scaling the arena, adding new features, and implementing a multi-language system (moving from German to English). With the (personal) deadline approaching, the custom web app isn’t quite ready. However, since all data is in Redis, I created a functional demo interface using Tooljet. In the future, I plan to release both a lightweight version and a fully integrated dashboard version.
So what is it The Snowballmatch Plugin (SBM) is inspired by a classic game played in school. Two teams fight in rounds using tactics and snowballs until only one player (or team) remains.
It is specifically designed for hosted competitions, meaning it’s built to be managed by a live host or moderator rather than running on a 24/7 automated loop. This makes it the perfect tool for organized community events and tournaments. I think I’m proud on pushing through the complex parts and now having a solid basis to continue on. Minecraft Plugin coding was the first coding I every did and it was quite nice to go back to it. I defintly had fun on the way.

Nuan

So this will probably be the last Devlog before shipping. I’m proud of what I coded in these many hours. But let’s talk about what I did in the last 10. It was a long do so I’ll keep it short. I did again who guessed bug fixing one was pretty intense and took 1,5 h to fix but it’s fixed. It was about the handleing of left players that were already carrying the hearts of a left players. I also let a friend of mine try everything out, which was pretty effective, we found quite some bugs. After these were all fixed up I set down and tested everything again. Then made sure everything was ready for shipment. I for example look through the readme. Rewrote some stuff on the Demo website and pushed the last things to github. I hope everything keeps working well and have fun looking through my project. Yeey.

Attachment
Attachment
0
Nuan

I realized that Flavortown actually runs until the end of April, not March. Regardless, I am still aiming to finish this first version of the project soon so I can make time for my other hobbies and spend time with friends.

I spent the last 10 hours on heavy bug fixing to ensure a flawless experience during testing. Here is a list of the bugs I’ve fixed so far:
- Fixed Friendly Knockback.
- Fixed the missing Chestplate.
- Fixed the missing snowball drop upon death.
- Fixed snowballs flying out of the map.
- Fixed the incorrect “Pause” message when the Doom Bell rings.
- Fixed an issue where you would be marked as “dead” if a round wasn’t running which lead to errors.
- Winners no longer gets their Lobby inventory.
- Fixed an exploit where players could stay invisible by using the /game-server command to leave the Overlook.
- Restored the “Sneak” text when joining the overlook.
- Renamed “Camera Views” to “Overlook.” and made them work again.
- Snow is now more realistic.
I also you can now watch the game with a Spyglass.

1

Comments

46009361
46009361 15 days ago

They changed the deadline to give people time to do the Optimization sidequest.

Nuan

I just hit the 100-hour mark on this project, and it feels amazing to be this close to finally shipping it. These last ten hours were a major push to get the demo dashboard completely finished. Now, anyone - especially the testers from Flavortown - can finally start up a server and test the plugin with bots to see how it all works.
Getting everything to run smoothly was honestly a huge challenge. It probably would have been a lot easier if I had known exactly what I was doing from the start, but there is something really rewarding about learning it the hard way. It’s been a fun process to figure things out as I go, even when it gets difficult.
I also managed to knock out some bugs in the plugin. I fixed several messages that weren’t being translated properly, and the camera points for watching the game from a higher angle are finally working again. Yeey.

0
Nuan

They say “never change a running system,” and I truly feel that right now. I’ve spent the last ten hours trying to get servers to be created automatically through a web interface. It uncovered several bugs in the plugins; while those are fixed now, I’m sure there are more lurking. But hey, the automatic creation is finally working, and you can even see some stats.

This is a necessary workaround because Flavortown is ending soon. If I had more time, I would have programmed a custom web interface myself, but there just isn’t enough of a window for that. Instead, I set this one up in Tooljet. It’s my first time using it, and while it definitely has room for improvement, it gets the job done.

The stats aren’t live, but they work (except theres still a bug with the red hearts I have to hunt down). My next steps are to get the buttons fully operational and secure the website. After that, it’s just a matter of hunting down the last few bugs and shipping it. Yeey!

0
Nuan

I finally got the barriers set up directly on the border of the game field! They automatically get removed when a player comes close from one side, which actually took quite a bit of effort. I had to go back and rework my old, sloppy system to make it happen, but it’s way more stable now and works smoothly.
Then I shifted focus to getting the project ready to ship. I’ve created the first version of the README, and it covers everything: a list of Quicksetup commands, a summary of the game, my future plans, and an explanation of why the project is in its current state. I even included a full game manual so everyone knows how to play!
Since I have only one week left and I’m nowhere close to a web dashboard, I decided to work on the demo page. After a bit of trial and error, I decided to go with the free self-hosted version of ToolJet to design it and make it work. I already have an Input field where you can add your name, see how many servers are available. The Python script to manage this is already in programmes. More on that Demo Page in the next Devlog.
It’s definitely a race against the clock now, but it’s getting there. Yeey!

Attachment
Attachment
0
Nuan

That was a productive 10-hour session!
First off, I finally added compatibility for players leaving while a game is running. It was a bit of a headache, but the system handles it smoothly now without breaking the game flow. It works by adding the Hearts of the Left Player to another player of his team. Once that was stable, I dove back into the snowball physics. I’ve optimized the drops so they actually reflect off surfaces they hit and you can now hit other snowballs that are dropped to push them away.
Also now, when you get hit, you’re reset to one of three specific respawn positions, these switch after each hit shown by the redstone lamps. For the teams, I’ve made sure dead players are moved to a completely different section of the arena so they’re separated from the spectators. I even added dedicated tunnels so teammates can head straight back toward the field.
Additionally there is now a bell at the back of each side. You can’t get closer than 5 blocks to it, but if a player manages to snip it with a snowball, that team automatically loses. I might make it even harder to hit later.
It’s all coming together way faster than I expected. Yeey!

0
Nuan

That was a massive amount of work, but the plugin is now completely translated! Everything from titles and chat messages down to item names is covered—well, except for some upcoming features, of course.
Once that milestone was checked off, I sat down to map out the ‘must-haves’ for the first release. Honestly? I’m still a bit skeptical if the Web Dashboard is going to make the cut. Anyways, I also gave the Tie-Breaker a much-needed rework, and guess what? It actually works now!
I also finally finished the automatic map switch system, so the maps can now change by command.
On top of some general bug fixing, the Bonus Snowball system now uses a dropper to dispense items. It feels way cooler than just having them magically spawn in. Yeey!

Attachment
0
Nuan

Well, like always, these 10 hours went by like nothing. So, what did I actually do? Multilanguage signs now work - I hope. It took quite a bit of trying around, but now it’s functional. It works by intercepting the sign packets sent to players and translating them on the fly.

I also wrote the helper classes for the implementation of translated messages in the chat, titles, and bossbars. So now it’s just the “writing work” left, which I’ve already started, by the way.

In the process, I fixed up my commands because they were honestly just a mess. Every command now has proper checks with error messages, and the team command now allows for adding random teams. Yeey.

Attachment
1

Comments

oggythebuilder01
oggythebuilder01 about 1 month ago

THATS AMAZING

Nuan

Wow, the last few hours went by fast! Here’s what I’ve been up to:

First of all, all relevant game data is now managed via Redis (yeey!). This is huge because the dashboard will be able to easily access everything in real-time (dashboard coming soon).

I also moved permanent player data over to PostgreSQL. For now, only the player’s language is saved, but that’s the backbone for the new Multi-language Feature. It’s currently just English and German, but once it’s fully integrated, adding more languages will be a breeze. (And for video recordings and the later demo, English will definitely be available!)

But before that, I need to figure out how to handle Multi-language Signs – I’m sure AI will definitely find some ways, but more on that to follow!

Attachment
Attachment
0
Nuan

Sooo, we now have cool signs that show the state of the gates, and side-specific control of the gates. That was actually quite a lot of work, especially because there was a bug I just couldn’t figure out. But now it’s fixed, it works, and I’m happy ^_^. Then I added Bezel as a monitoring tool, nothing fancy, just to see what I maybe shouldn’t do. After I cleaned up my code a bit again, I began testing a method of centralizing the game data so the dashboard can also access it. I decided on a Redis DB and PostgreSQL. Then I wrote - with a bit too many tips from AI - a fancy helper class to make access and saving as easy and performant as I could. And it seems it works!

0
Nuan

That were some 10 hours of work. My first job is getting this Plugin clean, working effectively and reliably. So I almost rewrote the entire main class. Removing doubled code, making code easier to follow and understand and also making my 600 lined main class smaller by putting code in more smaller classes. Also I added well needed testing features. Like a better team managing cmd and a hard reset cmd etc. Also some new features where added the gates are now unlocked and opened by pressure plates to prevent plays from being locked inside, and there’s now a way bigger arena because the other one just was too small and couldn’t house that big teams, the rebuild of the arena is still work in progress and will be continued later. I also started writing all my messages in yml files and translating them to make this plugin German and English, so all hackclub users can understand the plugin.

Attachment
Attachment
0
Nuan

Soo, I’m setting up the basics for my projects. I created a container for my Minecraft Server on my server. I made a workspace in vs code with the three parts of my projects separate from each other (fronted, backend, minecraft-plugin). Then I set up a test project for NestJS and tested Redis. And then the big work began. I dug up my 2 year old snowballmatch plugin and started upgrading it to version 1.21.11 and on the way actually punched out some bugs (because they were pretty annoying). Now the Countdown System works kinda probably. But there’s still a long way till I get this thing running without problems.

Attachment
Attachment
0