Main Game

Main Game

Disclaimer: This is not related to Minecraft. Quantum Voxel is an independent voxel game that uses Fabric Loader as its modding platform.

Overview

Quantum Voxel is built on Fabric Loader 0.17.3. It is launched via KnotClient and uses the standard Fabric GameProvider SPI. Modding follows standard Fabric conventions:

  • fabric.mod.json for mod metadata
  • Fabric entrypoints (ModInitializer, ClientModInitializer, etc.) for lifecycle callbacks
  • Fabric Mixin for bytecode transformation
  • FabricLoader API for runtime queries (paths, environment, mod list)

Quick Start

Project Structure

my-mod/
├── build.gradle.kts
├── src/
│   └── main/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           ├── ExampleMod.java
│       │           └── ExampleMixin.java
│       └── resources/
│           ├── fabric.mod.json
│           └── mixins.my-mod.json
└── settings.gradle.kts  (optional, for multiproject)

Build Script (build.gradle.kts)

plugins {
    java
}

repositories {
    mavenCentral()
    maven("https://maven.ultreon.dev/")
}

dependencies {
    implementation("net.quantumvoxel:client:0.1.0-alpha.2026.06.16")
    implementation("net.quantumvoxel:server:0.1.0-alpha.2026.06.16")
}

tasks.jar {
    manifest {
        attributes["ModSide"] = "CLIENT" // or "UNIVERSAL"
    }
}

Mod Metadata (fabric.mod.json)

{
  "schemaVersion": 1,
  "id": "my-mod",
  "version": "1.0.0",
  "name": "My Mod",
  "description": "A Quantum Voxel mod",
  "authors": ["You"],
  "contact": {
    "homepage": "https://example.com/",
    "issues": "https://example.com/issues",
    "sources": "https://github.com/you/my-mod"
  },
  "entrypoints": {
    "main": [
      "com.example.ExampleMod"
    ],
    "client": [
      "com.example.ExampleClientMod"
    ]
  },
  "mixins": [
    "mixins.my-mod.json"
  ],
  "depends": {
    "fabricloader": ">=0.14.0",
    "quantum": ">=0.1.0"
  }
}

Entrypoints

package com.example;

import net.fabricmc.api.ModInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ExampleMod implements ModInitializer {
    public static final String MOD_ID = "my-mod";
    public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

    @Override
    public void onInitialize() {
        LOGGER.info("Hello from my mod!");
        // Register blocks, items, entities, recipes, events, etc.
    }
}
package com.example;

import net.fabricmc.api.ClientModInitializer;

public class ExampleClientMod implements ClientModInitializer {
    @Override
    public void onInitializeClient() {
        // Register screens, key bindings, HUD overlays, particle factories, etc.
    }
}

Mixin Config (mixins.my-mod.json)

{
  "required": true,
  "package": "com.example.mixin",
  "compatibilityLevel": "JAVA_21",
  "client": [
    "ExampleMixin"
  ]
}
package com.example.mixin;

import net.quantumvoxel.client.QuantumClient;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(QuantumClient.class)
public class ExampleMixin {
    @Inject(method = "render", at = @At("HEAD"))
    private void onRender(CallbackInfo ci) {
        // This runs before each frame render
    }
}

Using the FabricLoader API

import net.fabricmc.loader.api.FabricLoader;

// Game data directory (platform-specific)
Path gameDir = FabricLoader.getInstance().getGameDir();
// Windows: %APPDATA%/QuantumVoxel/
// macOS:   ~/Library/Application Support/QuantumVoxel/
// Linux:   ~/.config/QuantumVoxel/

// Config directory
Path configDir = FabricLoader.getInstance().getConfigDir();

// Development environment check
boolean isDev = FabricLoader.getInstance().isDevelopmentEnvironment();

// Game version
String version = FabricLoader.getInstance().getRawGameVersion();

// Query loaded mods
boolean loaded = FabricLoader.getInstance().isModLoaded("some-mod");

Installation

Drop the built JAR into the mods/ folder:

OS Path
Windows %APPDATA%/QuantumVoxel/mods/
macOS ~/Library/Application Support/QuantumVoxel/mods/
Linux ~/.config/QuantumVoxel/mods/

The mods/ directory is created automatically on first launch.


Version Compatibility

Dependency Version
Fabric Loader 0.17.3 (>=0.14.0 for mods)
Quantum Voxel >=0.1.0
Java 25+
Mixin 0.16.4+mixin.0.8.7

Resources

Mod assets go under assets/<mod-id>/ in your JAR:

src/main/resources/
├── assets/
│   └── my-mod/
│       ├── textures/
│       │   ├── blocks/
│       │   └── items/
│       ├── models/
│       ├── shaders/
│       │   ├── opengl/
│       │   └── vulkan/
│       ├── sounds/
│       └── lang/
│           └── en_us.json
├── fabric.mod.json
└── mixins.my-mod.json

Resources are accessed via NamespaceID using your mod ID as the namespace.


Fabric API

Fabric API is available but optional. Add it as a dependency in your fabric.mod.json:

"depends": {
  "fabric-api": ">=0.x.y"
}

And in your build script:

repositories {
    maven("https://maven.fabricmc.net/")
}

dependencies {
    modImplementation("net.fabricmc.fabric-api:fabric-api:0.x.y+1.21")
}

The game does not bundle Fabric API; mods that use it must ship it or declare it as a dependency.


Guide generated from source. Last updated: June 2026.**