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.jsonfor mod metadata- Fabric entrypoints (
ModInitializer,ClientModInitializer, etc.) for lifecycle callbacks - Fabric Mixin for bytecode transformation
FabricLoaderAPI 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.jsonResources 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.**