fabric.mod.json 26.1.2
Ein Leitfaden zur fabric.mod.json Spezifikation.
Die Datei fabric.mod.json ist eine Metadatendatei, die vom Fabric Loader zum Laden von Mods verwendet wird. Die Datei muss im Stammverzeichnis der JAR abgelegt werden, damit der Mod geladen wird.
Eine vordefinierte fabric.mod.json-Datei ist im Vorlagen-Mod enthalten oder kann mit Fabric Loom generiert werden.
Du kannst den Quellcode der Spezifikation für fabric.mod.json v1 einsehen. Nachstehend findest du auch die Datei fabric.mod.json, die vom Beispiel-Mod dieser Website verwendet wird.
fabric.mod.json des Beispiel-Mods
json
{
"schemaVersion": 1,
"id": "example-mod",
"version": "1.0.0",
"name": "Example Mod",
"icon": "assets/example-mod/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"com.example.docs.ExampleMod",
"com.example.docs.event.ExampleModEvents",
"com.example.docs.command.ExampleModCommands",
"com.example.docs.effect.ExampleModEffects",
"com.example.docs.potion.ExampleModPotions",
"com.example.docs.sound.ExampleModSounds",
"com.example.docs.damage.ExampleModDamageTypes",
"com.example.docs.item.ExampleModItems",
"com.example.docs.enchantment.ExampleModEnchantments",
"com.example.docs.block.ExampleModBlocks",
"com.example.docs.block.entity.ExampleModBlockEntities",
"com.example.docs.menu.ExampleModMenuType",
"com.example.docs.component.ExampleModComponents",
"com.example.docs.advancement.ExampleModDatagenAdvancement",
"com.example.docs.networking.ExampleModNetworking",
"com.example.docs.networking.basic.ExampleModNetworkingBasic",
"com.example.docs.debug.ExampleModDebug",
"com.example.docs.saveddata.ExampleModSavedData",
"com.example.docs.entity.attribute.ExampleModAttributes",
"com.example.docs.recipe.ExampleModRecipes",
"com.example.docs.entity.ExampleModEntity",
"com.example.docs.gamerule.ExampleModGameRules"
],
"client": [
"com.example.docs.client.command.ExampleModClientCommands",
"com.example.docs.ExampleModBlockEntityRenderer",
"com.example.docs.ExampleModDynamicSound",
"com.example.docs.ExampleModClient",
"com.example.docs.ExampleModScreens",
"com.example.docs.rendering.CustomRenderPipeline",
"com.example.docs.rendering.HudRenderingEntrypoint",
"com.example.docs.rendering.RenderingConceptsEntrypoint",
"com.example.docs.network.basic.ExampleModNetworkingBasicClient",
"com.example.docs.appearance.ExampleModAppearanceClient",
"com.example.docs.keymapping.ExampleModKeyMappingsClient",
"com.example.docs.ExampleModRecipesClient",
"com.example.docs.entity.ExampleModCustomEntityClient"
],
"fabric-datagen": ["com.example.docs.datagen.ExampleModDataGenerator"]
},
"mixins": [
"example-mod.mixins.json",
{
"config": "example-mod.client.mixins.json",
"environment": "client"
}
],
"depends": {
"fabricloader": ">=0.19.0",
"minecraft": "~26.1",
"java": ">=25",
"fabric-api": "*"
},
"accessWidener": "example-mod.classtweaker"
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Verpflichtende Felder
Die folgenden Felder sind verpflichtend, damit Fabric deinen Mod laden kann.
schemaVersionMuss der erste Eintrag sein und der Wert muss immer1sein. Ist erforderlich, damit der Fabric Loader die Datei korrekt verarbeiten kann.idEin String Wert, der die Bezeichnung des Mods definiert. Muss mit einem Buchstaben beginnen. Darf nur ASCII-Buchstaben, Ziffern, Unterstriche oder Bindestriche enthalten. 2 bis 64 Zeichen.versionEin String, der die Version des Mods angibt und der der Spezifikation Semantic Versioning 2.0.0 entsprechen sollte.
json
"schemaVersion": 1,
"id": "example-mod",
"version": "1.0.0"1
2
3
2
3
Metadaten
name: Ein String, der den nutzerfreundlichen Namen des Mods definiert. Falls nicht angegeben, wird standardmäßig die id verwendet.description: Ein String, der die Beschreibung des Mods definiert. Falls nicht angegeben, wird standardmäßig ein leerer String verwendet.
json
"name": "Example Mod",
"description": "This is an example description! Tell everyone what your mod is about!",1
2
2
Kontakt
contact: Ein Verzeichnis, das die Kontaktdaten für das Projekt enthält. Zu den gängigen Feldern gehören:
email: Ein String, der die Kontakt-E-Mail-Adresse für den Mod angibt. Muss eine gültige E-Mail-Adresse sein.homepage: Ein String, der die Website des Projekts oder Nutzers definiert. Muss eine gültige HTTP-/HTTPS-Adresse sein.irc: Ein String, der den zu dem Mod gehörenden IRC-Kanal angibt. Muss ein gültiges URL-Format sein - zum Beispiel:irc://irc.esper.net:6667/charsetfür#charsetbei EsperNet - der Port ist optional und wird, falls nicht angegeben, mit 6667 angenommen.issues: Ein String, der den Issue-Tracker des Projekts definiert. Muss eine gültige HTTP-/HTTPS-Adresse sein.sources: Ein String, der das Quellcode-Repository des Projekts definiert. Muss eine gültige URL sein - es kann sich jedoch auch um eine spezielle URL für ein bestimmtes VCS (wie Git oder Mercurial) handeln.
Die Liste ist nicht vollständig - Mods können zusätzliche nicht standardmäßige Schlüssel angeben, wie beispielsweise discord, slack, twitter... Wenn möglich, sollten diese gültige URLs sein.
json
"contact": {
"homepage": "https://fabricmc.net",
"sources": "https://github.com/FabricMC/fabric-example-mod"
}1
2
3
4
2
3
4
Autoren und Mitwirkende
authorsEin Array mit den Autoren des Mods. Einträge können entweder ein String oder ein Objekt mit den unten aufgeführten Feldern sein.contributorsEin Array von Mitwirkenden an dem Mod. Einträge können entweder ein String oder ein Objekt mit den unten aufgeführten Feldern sein.
Felder:
nameEin verpflichtender String, für den echten Namen oder Nutzername der Person.contactEin optionales Objekt für die Kontaktinformationen der Person. Das gleiche wie auf der übergeordneten Ebenecontact.
json
"authors": [
"Me!",
{
"name": "Tiny Potato",
"contact": {
"homepage": "https://fabricmc.net",
"sources": "https://github.com/FabricMC/fabric-example-mod"
}
}
]1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Lizenz
licenseEin String oder Array, das die Lizenzinformationen definiert. Zur Unterstützung automatisierter Tools wird empfohlen, für Open-Source-Lizenzen SPDX-Lizenzbezeichnungen zu verwenden.
Dies sollte die Mindestanzahl an Lizenzen abdecken, die für das gesamte Mod-Paket erforderlich sind. Mit anderen Worten: Wer deinen Mod nutzen oder weiterverbreiten möchte, muss lediglich die hier aufgeführten Lizenzen einhalten. Falls Teile deines Codes unter zwei Lizenzen stehen, wähle die bevorzugte Lizenz aus. Diese Liste verbietet dir nicht unbedingt, bestimmten Personen im Einzelfall zusätzliche Rechte zu gewähren oder andere Lizenzen anzuwenden.
json
"license": "CC0-1.0"1
Symbol
iconEin String oder Verzeichnis, dass das Symbol des Mods definiert. Symbole sind quadratische PNG-Dateien. Minecraft-Ressourcenpakete verwenden eine Auflösung von 128×128, doch das ist keine zwingende Voraussetzung - eine Potenz von zwei wird jedoch empfohlen. Kann auf zwei Arten angegeben werden:- Ein Pfad zu einer einzelnen PNG-Datei.
- Ein Verzeichnis mit Bildbreiten und deren Dateipfaden.
json
"icon": "assets/example-mod/icon.png"1
Laden von Mods
Umgebung
environment: Ein String-Wert, der angibt, in welchen Umgebungen der Mod ausgeführt werden sollte:*: Läuft in allen Umgebungen. Standard.client: Läuft auf der physischen Client-Seite. Wenn gesetzt, wird dein Mod auf dedizierten Servern nicht geladen.server: Läuft auf der physischen Server-Seite. Wenn gesetzt, wird dein Mod auf den Clients nicht geladen, dies schließt auch den Einzelspielermodus und LAN ein.
json
"environment": "*"1
Einstiegspunkte
entrypointsEin Objekt, das die Hauptklassen definiert, die dein Mod laden wird.mainEin Array von String Klassennamen, dieModInitializerimplementieren.clientEin Array von String Klassennamen, dieClientModInitializerimplementieren. Dieser Einstiegspunkt wird nachmainausgeführt, und zwar ausschließlich auf der physischen Client-Seite.serverEin Array von String Klassennamen, dieDedicatedServerModInitializerimplementieren. Dieser Einstiegspunkt wird nachmainausgeführt, und zwar ausschließlich auf der physischen Server-Seite.
Fabric Loader bietet diese drei Haupteinstiegspunkte, aber andere Mods können ihre eigenen bereitstellen. Beispielsweise stellt die Fabric-API fabric-datagen Einstiegspunkte für die Datengenerierung bereit.
Jeder Einstiegspunkt kann mehrere Klassen und sogar Methoden oder statische Felder laden. Zum Beispiel:
json
"main": [
"net.fabricmc.example.ExampleMod",
"net.fabricmc.example.ExampleMod::handle"
]1
2
3
4
2
3
4
TIP
Wenn du Java nicht verwendest, solltest du die Dokumentation des Sprachadapters konsultieren. Für Kotlin ist es die Fabric Language Kotlin's README.
JARs
jars: Ein Array von JARs, die in deinem Mod eingebettet werden sollen. Wenn du bei deinen Abhängigkeitenincludeverwendest, füllt Loom dieses Feld automatisch aus. Jeder Eintrag ist ein Objekt, das einen Schlüsselfileenthält, der den Pfad zu der in deinem Mod enthaltenen verschachtelten JAR angibt. Zum Beispiel:
json
"jars": [
{
"file": "nested/vendor/dependency.jar"
}
]1
2
3
4
5
2
3
4
5
Sprachadapter
languageAdapters: Ein Verzeichnis an Klassen, dieLanguageAdapterimplementieren.
json
"languageAdapters": {
"kotlin": "net.fabricmc.language.kotlin.KotlinAdapter"
}1
2
3
2
3
Mixins
mixins: Eine Liste an Mixin-Konfigurationsdateien. Jeder Eintrag ist entweder ein Pfad zu einer Mixin-Konfigurationsdatei innerhalb der JAR deines Mods oder ein Objekt, das die folgenden Felder enthält:config: Der Pfad zu der Mixin-Konfigurationsdatei innerhalb der JAR deines Mods.environment: Verhält sich genau wie das obige environment Feld. Zum Beispiel:
json
"mixins": [
"example-mod.mixins.json",
{
"config": "example-mod.client-mixins.json",
"environment": "client"
}
]1
2
3
4
5
6
7
2
3
4
5
6
7
Zugriffserweiterer
accessWidener: Ein String, der eine Zugriffserweiterer- oder Klassenoptimierer-Datei identifiziert.
json
"accessWidener": "example-mod.classtweaker"1
Provides
provides: Ein Array an Mod-IDs, die als Aliase für den Mod dienen. Der Fabric Loader behandelt diese IDs so, als ob die entsprechenden Mods vorhanden wären. Wenn ein anderer Mod eines davon verwendet, wird er nicht geladen.
json
"provides": [
"example_mod"
]1
2
3
2
3
Auflösung von Abhängigkeiten
Die folgenden Schlüssel akzeptieren ein Verzeichnis mit Abhängigkeiten. Weitere Informationen zum Aufbau des Verzeichnis findest du weiter unten:
depends: Für die zur Ausführung erforderlichen Abhängigkeiten. Wenn irgendwelche fehlen, wird der Fabric Loader einen Absturz auslösen.recommends: Für die zur Ausführung nicht erforderlichen Abhängigkeiten. Für jede fehlende Abhängigkeit, wird der Fabric Loader eine Warnung loggen.suggests: Für die zur Ausführung nicht erforderlichen Abhängigkeiten. Verwende dies als eine Art Metadaten.breaks: Für Mods, die in Kombination mit deinen zu einem Spielabsturz führen könnten. Wenn irgendwelche vorhanden sind, wird der Fabric Loader einen Absturz auslösen.conflicts: Für Mods, die in Kombination mit deinem zu Fehlern oder Ähnlichem führen. Für jeden vorhandenen Mod, der zu Konflikten führt, loggt der Fabric Loader eine Warnung.
Semantische Versionierung
Der Schlüssel jedes Eintrags ist die Mod-ID der Abhängigkeit.
Der Wert jedes Schlüssels ist ein String oder ein Array von Strings, die die unterstützten Versionsbereiche der Abhängigkeit angeben. Wenn es sich um ein Array handelt, muss nur einer der Bereiche übereinstimmen, damit die Bedingung erfüllt ist.
Hier sind einige Beispiele für Bereiche und was sie aussagen. Probiere die jubianchis Semver-Prüfung aus, um zu testen, welche Werte die Bedingung erfüllen.
Beispiel für semantische Versionierung
Hinweis: Minecraft hält sich nicht an die Regeln der semantischen Versionierung. Wenn nötig, wandelt Fabric eine Minecraft-Version in die entsprechende Version nach der semantischen Versionierung um. Beispiele schließen ein 26.1->26.1.0, 26.1-snapshot-1->26.1-alpha.1, 26w14a->26.1.1-alpha.26.14.a.
| Bereich | Beschreibung | Stimmen überein | Nicht kompatibel |
|---|---|---|---|
* | Jegliche Version (nicht empfohlen) | 26.1.2, 24w14potato... | Keine |
26.1.2 | Nur die genaue Version | 26.1.2 | 26.1, 26.1.1, 26.2... |
| <Range r="26.1.0 | 26.1.1" /> | Entweder der eine oder der andere Bereich | |
[26.1.0, 26.1.1] | Entspricht 26.1.0 || 26.1.1 | 26.1, 26.1.1 | 26.1.2, 26.2`... |
>26 | Über einer Version (exklusiv) | 26.1.2, 26.2`... | 26, 25.x... |
>=26.1 | Diese Version oder höher (inklusiv) | 26.1, 26.1.2, 26.2... | 26.0, 25.x... |
<=26.1 | Diese Version oder niedriger (inklusiv) | 26.1, 26.0, 25.x... | 26.1.2, 26.2`... |
>26 <26.2 | Zwischen zwei Versionen (beide exklusiv) | 26.1, 26.1.2, Snapshots... | 26, 26.2... |
>=26.1 <26.2 | Zwischen zwei Versionen (inklusive der unteren Grenze) | 26.1, 26.1.2, Snapshots... | 26.0, 26.2... |
26.1.x | Jeglicher Patch einer Minor-Version | 26.1, 26.1.2, Snapshots... | 26.2, 27.x... |
~26.1 | Gleich wie 26.1.x | 26.1, 26.1.2, Snapshots... | 26.2, 27.x... |
^26.1 | Jegliche Version in der selben Major-Version | 26.1.2, 26.2, 26.3... | 25.x, 27.x... |
json
"depends": {
"example-mod": "*",
"minecraft": [
"26.1",
"26.1.1"
]
}
"suggests": {
"another-mod": ">1.0.0"
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Benutzerdefinierte Felder
Du kannst jedes beliebige Feld in das Feld custom einfügen. Der Loader würde diese ignorieren. Es wird jedoch dringend empfohlen, deinen Feldern einen Namensraum zuzuweisen, um Konflikte mit anderen Mods zu vermeiden.






