Setting up
You need JDK 25 and Git. Gradle comes with the project (./gradlew).
Create the project
Use the addon template (GitHub’s Use this template), or clone it.
Rename it
- the mod id
my-addoninsrc/main/resources/fabric.mod.json, insettings.gradle, and in the mixin config’s file name (my-addon.mixins.json); - the package
com.example.addonand the classMyAddon; maven_groupandarchives_base_nameingradle.properties.
Run it
./gradlew runClientMinecraft starts with Myriad, Essentials and your addon, the menu open.
Build it
./gradlew buildThe jar is in build/libs/.
The build
repositories {
exclusiveContent {
forRepositories(maven {
name = "Myriad"
url = "https://maven.myriadclient.dev/releases"
})
filter { includeGroup "dev.myriadclient" }
}
}
dependencies {
minecraft "com.mojang:minecraft:${project.minecraft_version}"
implementation "net.fabricmc:fabric-loader:${project.loader_version}"
implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
implementation "dev.myriadclient:myriad:${project.myriad_version}"
// Only in the dev client, to test next to the stock modules. Don't use its classes: players can remove it.
localRuntime "dev.myriadclient:myriad-essentials:${project.essentials_version}"
}Myriad’s artifacts (dev.myriadclient:myriad, with sources and javadoc, and dev.myriadclient:myriad-essentials) are
on https://maven.myriadclient.dev/releases. Your IDE shows the javadoc of every API class: it’s written to be read.
To build against Myriad changes that aren’t released yet: run ./gradlew publishToMavenLocal in a Myriad checkout and
add mavenLocal() to forRepositories(...).
fabric.mod.json
{
"schemaVersion": 1,
"id": "my-addon",
"version": "${version}",
"name": "My Addon",
"description": "What it does, in one line.",
"authors": ["You"],
"icon": "assets/my-addon/icon.png",
"contact": {
"sources": "https://github.com/you/my-addon",
"issues": "https://github.com/you/my-addon/issues"
},
"environment": "client",
"entrypoints": { "myriad": ["com.example.addon.MyAddon"] },
"mixins": ["my-addon.mixins.json"],
"depends": { "myriad": ">=0.3.0", "minecraft": "~26.2" }
}entrypoints.myriadis yourMyriadAddon.contact.sourcespointing at your GitHub repository lets Myriad update your addon.depends.myriadis the oldest Myriad you support (see Compatibility).
The dev client
The template’s loom.runs.client sets Myriad’s dev options as system properties. Add the ones you want:
loom {
runs {
client {
property("myriad.openDesktop", "true") // the menu open on start
property("myriad.devConsole", "run/myriad-dev-inbox") // scripted steps (below)
property("myriad.auditMixins", "true") // apply every mixin at start, so a bad target fails at once
property("myriad.screenshotEvery", "10") // a screenshot every 10 s into run/screenshots
programArgs("--quickPlaySingleplayer", "New World") // straight into a world
}
}
}The dev console reads commands from the inbox file (one per line) and logs what happens: Myriad commands,
hold forward,sprint 20, look <yaw> <pitch>, wait <ticks>, screenshot <name>, menu open, panel <id>, and
selftest (turns every module on and off and reports any that throw). See Testing.
Only use dev.myriadclient.api. Anything in dev.myriadclient.impl is internal and changes without notice; an
addon that touches it breaks on the next release.