MCversions | Development Journal

Image © Mauro M.

I guess it all started in the SyteSpace group DM where Adam suggested we create something similar to mcversions.net but have it index other types of Minecraft server .jars like Spigot and Forge but still provide the Vanilla ones.

It is a known problem that Mojang only provides the server.jar for the latest version, forcing people to turn to 3rd party services to get the older versions, please keep in mind, that all of these services, ours included, don't rehost the files (as it would be against the ToS) they simply index the correct links that are provided by Mojang. It's not easy to find them but I'll get into that further on

Regarding the design, I knew I wanted something simple and get as far away as possible from mcversions.net's hateful and ad-ridden design. During two days I tried about 20 possibilities before settling on the final design: duotone colour scheme, clean illustration and white background. It was also the first prototype to feature a wizard button. When I wrote "wizard" into that small CTA (Call to Action) I had a minor epiphany, it was the perfect fit for a project like this and provided a much needed USP in an oversaturated market.

After finalizing the designs came the development, only then did I start to comprehend the sheer scale of the task I'd accepted. The minute I started broadly imaging the project I knew I'd be, once again, utilizing Flask. Inevitably, I started with the landing page and for some, now unquestionably dense motive, I decided to align everything using a CSS grid. A few hours later I realised my total retardation when I got to inspect the code on a higher resolution monitor, needless to say, it scaled horribly.

The terrible scaling

I sighed, bit the bullet and re-coded the landing page using float. Another difficulty I had was coding the custom underline for the title, I managed to fix this using a CSS background-image trick that you can see below.


                    .header mark {
                        background: none;
                        background-image: linear-gradient(120deg, #b5b1ff 0%, #b5b1ff 100%);
                        background-repeat: no-repeat;
                        background-position: 0 80%;
                        background-size: 100% 0.3em;
                        padding-right: 4px;
                        padding-left: 1px;
                    }
                

Then came the back end, bearing a cornucopia of challenges. I started by making the wizard, I decided to harness Jinja2's astounding template engine to make the page load dynamically. Then I needed to find a way to track the user's answered questions, first I used Flask's session but that didn't scale and I wasn't in the mood to write up a privacy policy (since session is cookie based). By far the hardest part of the backend was getting the Minecraft versions and their corresponding links, it took me about 5 hours to find the actual version manifest (provided by Mojang). When I'd finally procured the manifest I had to iterate through it to find the releases, then, for each release, I had made a request, decode JSON, iterate through the JSON and then return the value, in development this whole process led to 3-4 second page-load times, I shudder to think what it'd be like in production, so I was forced to implement a static caching system.

Overall it was a challenging project, good thing I like challenges, it was also a lot of fun to do the entire stack. I am immensely thankful for all the support that the team @ SyteSpace gave me