SlopScore
10 crowdincl. 1 critic

minecraft-java-rs-core

A Rust library that provides the core logic for launching Minecraft Java Edition.
Open repo on GitHubgithub.com/Fitzxel/minecraft-java-rs-core
Rust · ★ 2 · 0 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)other
listed 53 minutes ago by Fitzxel · last checked 53 minutes ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-26: A Rust library that provides the core logic for launching Minecraft Java Edition.; its own README says "Because of that, the code is — in principle — 100% AI-generated". 2 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as Fitzxel. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
A Rust library that provides the core logic for launching Minecraft Java Edition.
topics
minecraftminecraft-clientminecraft-coreminecraft-forgeminecraft-launcherminecraft-mod
created
2026-05-27 · pushed 2 months ago · 35 commits · 1 contributor
languages
Rust 100%
paperwork
licensereadme 42% health
dependencies
no dependency graph (no manifest, or disabled) · OSV.dev, checked 53 minutes ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
other
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
rust
topic (detected)
minecraftminecraft-clientminecraft-coreminecraft-forgeminecraft-launcherminecraft-mod
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: A Rust library that provides the core logic for launching Minecraft Java Edition.; its own README says "Because of that, the code is — in principle — 100% AI-generated". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

minecraft-java-rs-core

A Rust library that provides the core logic for launching Minecraft Java Edition. It handles everything the official launcher does — downloading game files, assets, Java runtimes, mod loaders, and spawning the game process — exposing a clean async API with real-time progress events.

Features

  • Vanilla & modded — supports Forge, NeoForge, Fabric, LegacyFabric, and Quilt out of the box
  • Automatic downloads — game JARs, libraries, assets, and Java runtimes fetched on demand
  • Integrity checks — SHA-1 verification before every launch
  • Instance isolation — each instance gets its own game directory
  • Event-driven — progress, speed, logs, and exit codes delivered over a tokio channel
  • Async — built on tokio; non-blocking from download to process management

Installation

Add to your Cargo.toml:

[dependencies]
minecraft-java-rs-core = { git = "https://github.com/fitzxel/minecraft-java-rs-core" }
tokio = { version = "1", features = ["full"] }

Quick start

use minecraft_java_rs_core::{
    launcher::{
        events::LaunchEvent,
        options::{JavaOptions, LaunchOptions, LoaderConfig, MemoryConfig, ScreenConfig},
        Launcher,
    },
    models::{loader::LoaderType, minecraft::Authenticator},
    utils::auth::offline_uuid,
};
use tokio::sync::mpsc;

#[tokio::main]
async fn main() {
    // 1. Configure the authenticator (offline mode)
    let auth = Authenticator {
        access_token: "offline".into(),
        name: "Steve".into(),
        uuid: offline_uuid("Steve"),
        xbox_account: None,
        user_properties: None,
        client_id: None,
        client_token: None,
    };

    // 2. Build launch options
    let options = LaunchOptions {
        path: "./minecraft".into(),
        version: "1.21.1".into(),
        authenticator: auth,
        memory: MemoryConfig {
            min: "2G".into(),
            max: "4G".into(),
        },
        loader: LoaderConfig {
            enable: false,
            ..Default::default()
        },
        timeout_secs: 30,
        download_concurrency: 10,
        java: JavaOptions::default(),
        screen: ScreenConfig::default(),
        verify: false,
        game_args: vec![],
        jvm_args: vec![],
        instance: None,
        url: None,
        mcp: None,
        intel_enabled_mac: false,
        bypass_offline: true,
    };

    // 3. Create launcher and event channel
    let launcher = Launcher::new(options);
    let (tx, mut rx) = mpsc::channel::<LaunchEvent>(512);

    // 4. Spawn event listener
    tokio::spawn(async move {
        while let Some(event) = rx.recv().await {
            match event {
                LaunchEvent::Progress { downloaded, total, kind } => {
                    println!("[{kind}] {downloaded}/{total}");
                }
                LaunchEvent::Data(line) => println!("[MC] {line}"),
                LaunchEvent::Close(code) => println!("Exited with code {code}"),
                _ => {}
            }
        }
    });

    // 5. Launch
    let mut child = launcher.start(tx).await.expect("Failed to launch");
    child.wait().await.ok();
}

With a mod loader

Set the loader field in LaunchOptions:

use minecraft_java_rs_core::models::loader::LoaderType;
use minecraft_java_rs_core::launcher::options::LoaderConfig;

// Fabric — latest build
let loader = LoaderConfig {
    enable: true,
    loader_type: Some(LoaderType::Fabric),
    build: "latest".into(),
    path: None,
    config: None,
};

// NeoForge — specific build
let loader = LoaderConfig {
    enable: true,
    loader_type: Some(LoaderType::NeoForge),
    build: "21.1.231".into(),
    path: None,
    config: None,
};

// Forge — recommended build
let loader = LoaderConfig {
    enable: true,
    loader_type: Some(LoaderType::Forge),
    build: "recommended".into(),
    path: None,
    config: None,
};

Available loader types: Forge, NeoForge, Fabric, LegacyFabric, Quilt.

Valid build values: "latest", "recommended", or an exact version string (e.g. "0.19.2").

Utilities

offline_uuid

Generates a deterministic offline UUID from a username. Useful when building your own offline-mode Authenticator without a real Microsoft account.

use minecraft_java_rs_core::utils::auth::offline_uuid;

let uuid = offline_uuid("Steve");
// e.g. "2a6b3c4d-1e2f-3a4b-8c9d-0e1f2a3b4c5d"

The same username always produces the same UUID, so the player's inventory and world progress are preserved across sessions.

Download only (no launch)

Download and verify all game files without spawning the game process:

launcher.download_game(tx).await.expect("Download failed");

Listening to events

All progress and game output is delivered as LaunchEvent variants over a tokio::sync::mpsc channel:

Event Description
Progress { downloaded, total, kind } Download batch progress. kind is e.g. "libraries", "assets", "java"
Speed(f64) Current download speed in bytes/sec
Estimated(f64) Estimated seconds remaining
Check { current, total, kind } File integrity check progress
Extract(String) A file is being extracted from an archive
Patch(String) A Forge processor step is running
GameDownloadFinished All files downloaded and verified
Data(String) A line of stdout/stderr from the Minecraft process
Close(i32) Minecraft exited; carries the exit code
Error(String) Non-fatal warning from the launcher
while let Some(event) = rx.recv().await {
    match event {
        LaunchEvent::Progress { downloaded, total, kind } => {
            let pct = downloaded * 100 / total.max(1);
            println!("[{kind}] {pct}%");
        }
        LaunchEvent::Speed(bps) => {
            println!("Speed: {:.1} MB/s", bps / 1_048_576.0);
        }
        LaunchEvent::GameDownloadFinished => {
            println!("All files ready!");
        }
        LaunchEvent::Data(line) => {
            println!("[MC] {line}");
        }
        LaunchEvent::Close(code) => {
            println!("Game exited: {code}");
            break;
        }
        _ => {}
    }
}

Running the built-in example

The repo ships an example launcher at examples/launch.rs:

# Vanilla 1.21.1
cargo run --example launch -- --version 1.21.1 --username Steve

# With Fabric (latest)
cargo run --example launch -- --version 1.21.1 --username Steve --loader-type fabric

# With NeoForge (specific build)
cargo run --example launch -- --version 1.21.1 --username Steve --loader-type neoforge --loader-build 21.1.231

# With Forge (recommended)
cargo run --example launch -- --version 1.21.1 --username Steve --loader-type forge --loader-build recommended

# With Quilt (latest)
cargo run --example launch -- --version 1.21.1 --username Steve --loader-type quilt

# Use a named instance (saves to ./minecraft/instances/myworld)
cargo run --example launch -- --version 1.21.1 --username Steve --instance myworld

# Download only (no game launch)
cargo run --example launch -- --version 1.21.1 --only-download

# Custom memory and auto-close after 60 seconds
cargo run --example launch -- --version 1.21.1 --username Steve --min-mem 2G --max-mem 6G --auto-close 60

Example options

Flag Default Description
--version <VERSION> 1.20.4 Minecraft version
--username <NAME> Player Offline username
--path <PATH> ./minecraft Root game directory
--instance <NAME> — Instance name (<path>/instances/<name>)
--min-mem <SIZE> 2G JVM minimum heap
--max-mem <SIZE> 4G JVM maximum heap
--loader-type <TYPE> — forge | neoforge | fabric | legacyfabric | quilt
--loader-build <BUILD> latest latest | recommended | exact version
--only-download — Download files without launching
--auto-close <SECS> — Kill Minecraft after N seconds

A note on AI-assisted development

My programming background is mainly web development. While I've been picking up Rust along the way, this project was born out of necessity rather than passion for the language or a desire to practice it. I needed a solid Minecraft Java launcher core in Rust and there are very few options that actually cover what this project aims to do.

Because of that, the code is — in principle — 100% AI-generated. If this ends up public it isn't a "look what I can build" statement. It's closer to "I built this, it's useful to me, and maybe it'll be useful to someone else too."

Bug reports, improvements, and pull requests are genuinely welcome.

License

MIT

Read the rest on GitHub

Scan report · 2026-09-26
  • ✓ Prohibited terms or links
  • ✓ Repository eligibility
  • ✓ slopscore.md paperwork
  • ✓ Content policy
  • ✓ Risk review

From the balcony · 1 of 4 clapped

  1. Crusoeclapped
    No vulnerable dependencies, clear local-only architecture for Minecraft launching, no credential requests or telemetry concerns evident.

Schnitzel, Cap'm Slop and Princess read it and passed. Their reasons are on the balcony, with every other verdict.

Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

0 comments

log in to comment.

report this listing — log in to report