The first iteration of Cauldron and why it Failed
PortableMC
First, I would like to talk about portablemc by mindstorm38. It describes itself as
A fast, reliable and cross-platform command-line Minecraft launcher and API for developers. Including fast and easy installation of common mod loaders such as Fabric, Forge, NeoForge and Quilt.
This project offers a command line Minecraft launcher. This project was incredibly helpful in learning what is required to launch a session of Minecraft and gave me inspiration on what features to focus on for my launcher, specifically offline access.
portablemc_npm
From this I tried to create my own Minecraft Launcher but quickly ran into a roadblock, Authentication. Since the migration from Mojang Accounts to Microsoft Accounts, the Yggdrasil authentication method has been deprecated and replaced by the MAS or the Microsoft Authentication Scheme. This change meant that you needed to have an Azure account with permission to use the Minecraft API.
Whilst waiting for permission, I decided to create a Node.js wrapper for portablemc called portablemc_npm this now deprecated package added the ability to execute basic functions inside a Node.js project. This package allowed me to continue building my own launcher client without needing to handle authentication myself
It had the following functions:
config
- Used to provide information on where portablemc is located and where it should store the game files.authenticate
- Used to Log the user in and store the credentials into a separate JSON file.getAuthedUsers
- List users stored in the JSON filelogout
- Logout User and remove from a stored JSON file.executeMC
- Executes command to portablemc instance.launchGame
- Launches Minecraft
Complete Documentation can be found here
This package while basic provided a way to launch a Minecraft instance from a Node.js application
The issues
While this did provide a quick way to launch Minecraft, it lacked some of the more complex features that portablemc offered. Additionally, using this means that the client needs to have Python and portablemc installed on the system.
Because of this, I decided that I should just look into building my own launcher completely without using portablemc as a dependency.