MCManager

MCManager

20 devlogs
148h 46m
•  Ship certified
Created by MHanak

[YOU CAN ACTUALLY USE THIS TO PLAY MINECRAFT RIGHT NOW! THERE IS NO FAKE BACKEND LIKE MOST PROJECTS HAVE]
[this is mostly a backend project, and i spent most of my time writing that. there is a bunch of things that are in the backend, but not frontend]

A Minecraft server management platform written in Rust and a Vue frontend (although the API is frontend agnostic).

It supports multiple Users, with each having their own limits on how many worlds they can have, and resources they can use.

Timeline

Ship 1

0 payouts of shell 0 shells

MHanak

10 days ago

MHanak Covers 20 devlogs

I've added a profile page, which displays user info, as well as their limits

Update attachment
MHanak MHanak 10 days ago
perchance
Youssef Youssef 10 days ago
minecraft movie reference

i did some fixes to the console, and got custom world icons working on the minecraft side

Update attachment

Added the proper console, which utilizes SocketIO (I will deploy it tomorrow)

Update attachment

Made the UI more responsive
Added a console placeholder
some other minor improvements

Update attachment
Youssef Youssef 14 days ago
nice ui

Did a bunch of things:
<br>
Switched my minecraft proxy from Velocity to Infrarust. this gives better compatibility and performance
<br>
Added recursive queries: instead of querying for the world, getting the version id, querying the version, getting the loader id, and finally querying the loader, the backend can recursively query values, and return all of them at once
<br>
Improved caching

Update attachment

Apart from some boring backend changes, i have added world icon uploads to the frontend.

Implemented the server.properties editing in the frontend, together with limits on what users can edit. the server admin can configure the values users can edit, as well as limit the values they set (all enforced server-side of course). In the video, on the left there is a user with almost no restrictions to editing, and on the right is a standard user with default restrictions.

There was also a bug where only one operation on any world could be performed at the same time, meaning if user was to delete a world, which takes around 10 seconds, other requests trying to get the status of any other world would have to wait for that deletion to finish. this is now fixed.

Ah also scrolling and toasts are broken on chromium no idea why

Heyy i think i'm starting to get the hang of this. Now you can create and start a server all from a UI

(in the video @0:40 you can skip to 1:00)

- Improved the world creation screen

- Implemented proper world images (no uploads done in the frontend yet)

- New /world/{id} page

- World option editing

- World starting/stopping

- Some minor backend changes

Spent like 4 hours trying to get shadcn to work

added the world creation screen, world list and a theme switcher

- Migrated from warp to axum (suspiciously painless)
- Added icon uploading and downloading in the backend (with support for animated icons!)
- Sessions, users and groups are now cached

Added a registration screen
* the registrations screen varies based on server settings (whether it requires an invite link or not), it can also include a custom message (which i forgot to include in the video).
* invite link is checked before account creation, and locks the form if it is invalid (through a public API endpoint)
* Redid the input forms
* added input validation
* the app checks if the username is taken (through a public API endpoint)
* Improved styling and made the app fit mobile screens

Started working on the front-end. i have settled on Vue, as i couldn't find a decent way of fetching data from the API when not pre-rendering the page in SvelteKit

MHanak MHanak about 1 month ago
uhhhh… i forgot to transcode the file, so here it is: https://files.mhanak.net/share/zky-2ot4

Added PostgreSQL support.

Update attachment
Youssef Youssef about 1 month ago
lmao

Now the sqlx-based code actually works. i mostly rewrote the database code to utilize a custom query builder

as a side effect, query filters now work better, and allow for < and > operands, as well as dates and base64 encoded blobs (haven't tested this one). they now also actually validate the filter data

Update attachment
Youssef Youssef about 1 month ago
nice, ur really a try harder at this point

Switched the database library from rusqlite to sqlx

Lost my sanity

The code still doesn't work

GIF unrelated

Update attachment
Youssef Youssef about 2 months ago
lol, what the dog is doing here ?
MHanak MHanak about 2 months ago
If anyone is curious to what exactly happened, here’s a slack thread where i documented my insanityhttps://hackclub.slack.com/archives/C015M4L9AHW/p1750957920742539

Added the feature of account creation using an invite link. this marks the API being fully implemented, which means i can start working on the frontend now.

oh also now removing users actually removes all of their worlds and mods

Update attachment

Now when the backend server is first launched, it will initialize the folder structure, prompt the user for the username and password of the default admin account, and then download the latest version of velocity

I have also revamped the permission system. Now instead of the permissions being stored per-user, users are assigned to a group, which holds their permissions. this makes managing large amounts much easier

Update attachment

Now the Minecraft servers themselves can be hosted on a separate machine from the API server.
This is an important stepping stone towards hosting containerized Minecraft servers with Kubernetes

Update attachment

updates:
* changed like 1/3 of the codebase to be asynchronous
* lost my mind
* remote server still doesn't work
* @channel i may be going insane

Update attachment

I've made the velocity proxy traffic to the correct server based on the hostname, and:
* added server.properties editing
* improved app config handling

Update attachment
Youssef Youssef about 1 month ago
noice