FreeMinecraftModels Ressourcenpaket-Ausgabe
FreeMinecraftModels schreibt sein generiertes Paket nach output.
Standard-Ausgabepfade
Das Plugin baut diesen Ordner beim Start und bei /fmm reload neu auf:
plugins/FreeMinecraftModels/output/FreeMinecraftModels
Es zippt diesen Ordner anschließend in:
plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip
Dieser Zip-Pfad ist derjenige, den ResourcePackManager erwartet, wenn er sich mit FreeMinecraftModels integriert.
Die Generierung löscht alles in output außer der zuletzt veröffentlichten FreeMinecraftModels.zip und baut den Inhalt dann neu auf. Bewahre selbst erstellte Modelle und andere Dateien außerhalb davon auf. Kann FMM den Ordner nicht leeren, schlägt die Generierung mit Failed to prepare output folder fehl und FMM schließt die Initialisierung nicht ab.
Was generiert wird
Die Generierung kopiert die mitgelieferten Paketmetadaten, das Symbol und den Atlas und ergänzt anschließend die geladenen Modelle und Texturen:
pack.mcmetapack.pngassets/minecraft/atlases/blocks.jsonassets/freeminecraftmodels/...Modell- und Textur-Ausgabe
Eine fehlende mitgelieferte Ressource oder ein Ordner, den FMM nicht anlegen kann, lässt die Generierung fehlschlagen. Ein Fehler beim Schreiben der Dateien eines einzelnen Modells wird protokolliert und die Generierung läuft weiter; prüfe daher neben der Ausgabe auch die Konsole. Vor dem Erstellen der ZIP ergänzt FMM explizite Atlas-Einträge für seine Entity-Texturen, einschließlich der Partikeltexturen, und ersetzt seine verzeichnisbasierte Entity-Atlas-Quelle. Andere Atlas-Quellen bleiben erhalten. Ein Lese- oder Schreibfehler beim Atlas lässt die Generierung fehlschlagen.
FreeMinecraftModels generiert Item-Modell-Definitionsdateien unter:
assets/freeminecraftmodels/items
Der Code enthält noch einen älteren Override-Pfad für Leder-Pferderüstungen auf Servern vor 1.21.4. Das Plugin deklariert jedoch api-version: 1.21.4, daher verwendet kein Server, der es laden kann, diesen Zweig.
Display-Modell-Ausgabe (1.21.4+)
Wenn ein Modell eine gültige begleitende .json-Display-Modelldatei hat (siehe Hinweise zur Modellerstellung), verarbeitet FMM deren textures-Map und schreibt sie nach:
assets/freeminecraftmodels/models/display/{modelId}.json
Es generiert außerdem eine entsprechende Item-Definition unter:
assets/freeminecraftmodels/items/display/{modelId}.json
Texturwerte mit Namespace bleiben unverändert. Andere Werte werden über einen numerischen Texturindex aufgelöst; als Ersatz dient eine verfügbare extrahierte Textur. Fehlerhaftes Display-JSON erzeugt eine Warnung und wird nicht registriert. Über die Laufzeitregistrierung kann FMM das verarbeitete Display-Modell dem Aussehen eines Items in der Hand und im Inventar zuweisen.
Partikel-Sprites
Für jeden Partikeleffekt, den ein Modell verwendet, schreibt FMM die Textur des Effekts und pro Sprite ein flaches Item-Modell:
assets/freeminecraftmodels/textures/entity/fmm_particles/{modelId}/{effect}.png
assets/freeminecraftmodels/models/particle/{modelId}/{effect}/{index}.json
assets/freeminecraftmodels/items/particle/{modelId}/{effect}/{index}.json
Nur Java-Spieler sehen diese Sprites. Bedrock-Spieler erhalten den Effekt als nativen Partikel aus dem unten beschriebenen Bedrock-Bundle.
Begleitdateien für ResourcePackManager
FMM schreibt kleine JSON-Dateien, die ResourcePackManager liest, während es das Paket für Bedrock konvertiert. Auf Java-Clients haben sie keine Wirkung.
| Datei | Wird geschrieben, wenn | Zweck |
|---|---|---|
assets/freeminecraftmodels/rspm_item_bases/display/{modelId}.json | Das Modell ein Display-Modell hat und seine begleitende .yml ein material setzt, das der Server kennt. Ein Lederfarbsuffix wie LEATHER_CHESTPLATE:ff8800 überspringt die Datei | Nennt das Vanilla-Item, auf dem das benutzerdefinierte Item basiert, etwa minecraft:blaze_rod, damit Bedrock das Modell auf dem richtigen Basis-Item zeigt statt auf einem aus dem Dateinamen erratenen |
assets/freeminecraftmodels/rspm_item_particles/display/{modelId}.json | Das Modell ein Display-Modell und eine Animation mit Partikel-Keyframes hat | Listet die Effekte, Locators und die geloopte Partikel-Timeline auf, die ResourcePackManager dem Bedrock-Attachable des Items hinzufügt |
assets/freeminecraftmodels/rspm_item_java_only/particle/{modelId}/{effect}.json | Das Modell einen Partikeleffekt verwendet | Teilt ResourcePackManager mit, die Sprite-Items dieses Effekts nicht in benutzerdefinierte Bedrock-Items umzuwandeln |
Solange particleEffectsEnabled auf false steht, überspringt FMM die rspm_item_particles-Dateien und die Bedrock-Partikeldateien. Die Java-Partikel-Sprites und ihre rspm_item_java_only-Dateien werden weiterhin geschrieben.
Bedrock-Custom-Entity-Bundle
Neben den Java-Paket-Assets versucht FreeMinecraftModels, für jedes geladene Modell mit Texturen ein Bedrock-Custom-Entity-Bundle zu exportieren nach:
plugins/FreeMinecraftModels/output/FreeMinecraftModels/assets/freeminecraftmodels/rspm_bedrock_pack
Jedes Modell steuert seine Texturen, Geometrie, seinen Render-Controller, Animationen, Animations-Controller und seine Entity-Definition bei, alles unter dem Namespace freeminecraftmodels: (freeminecraftmodels:<model_id>). Ein Modell mit Partikeleffekten steuert außerdem particles/<model_id>_<effect>.json (Bezeichner fmm:<model_id>_<effect>) bei sowie, wenn FMM die Textur des Effekts gefunden hat, textures/entity/fmm_particles/<model_id>/<effect>.png. Siehe Partikel.
Beim Erstellen relevante Hinweise:
- Ein Modell ohne Texturen wird übersprungen, mit
Skipping Bedrock custom entity export for <id>: model has no textures.in der Konsole - Der Java-Importer akzeptiert eine solche texturlose Definition weiterhin; ausdrücklich übersprungen wird nur ihr Eintrag im Bedrock-Custom-Entity-Bundle
- Die Bedrock-Geometrie schließt Reitpunkt-Bones (
m_), erzeugte Nametag-Bones (fmm_nametag_bone_*) undhitboxaus. Selbst erstelltetag_-Anker bleiben enthalten, häufig ohne Würfel. - Ein Modell ohne Animationen exportiert trotzdem einen einzelnen
idle-Animationsslot - Die Geometrie eines Modells hängt an einem generierten Bone
freeminecraftmodels_lean, außer das Modell hat mehr als 672 Animationen. Der Bone zeigt Bedrock-Spielern die Bewegungsausrichtung und die Zentrierung. Animationskanäle mit MoLang-Keyframes werden wie erstellt geschrieben, sodass Bedrock-Clients sie auswerten - Laufzeit-Hitbox-Breite und -Höhe für die Bedrock-Entity stammen vom
hitbox-Bone des Modells; ohne einen solchen wird auf1.0x2.0zurückgefallen
Eine leere Hitbox-Gruppe hat Abmessungen von null und verwendet diese Ersatzwerte nicht. Das Präfix b_ blendet die Java-Darstellung aus, wird aber nicht aus der Bedrock-Geometrie gefiltert. Der Bedrock-Animationsexport enthält keine vorberechnete Lösung der FMM-Laufzeit-IK; siehe Animationen. Exportfehler werden protokolliert und können unvollständige Bundle-Dateien hinterlassen.
Das Bedrock-Laufzeit-Backend benötigt ein aktiviertes Plugin namens floodgate, Geyser-Spigot oder Geyser. Diese Prüfung ignoriert Groß- und Kleinschreibung. Die Erkennung einzelner Spieler prüft getrennt Floodgate oder Geyser-Spigot; ein aktiviertes Backend belegt daher weder die Spielererkennung noch die Paketauslieferung. Auf einem reinen Java-Server exportiert FMM weiterhin die Bundle-Dateien, erstellt und tickt dieses Backend jedoch nicht.
Bedingte Item-Ausgabe für Bogen und Armbrust
Wenn FMM einen vollständigen Satz geladener Bogen- oder Armbrust-Zustandsmodelle mit registrierten Display-JSONs erkennt (siehe Hinweise zur Modellerstellung), generiert es eine Item-Definition unter der Basis-ID des Modells. Diese Definition schaltet die Zustände auf dem Client um. Das konfigurierte Item muss das passende Material BOW oder CROSSBOW verwenden.
Bogen-Ausgabe
Bei Bögen verwendet die generierte Item-Definition minecraft:condition auf using_item mit einer minecraft:range_dispatch auf use_duration (Skalierung 0.05):
| Bedingung | Verwendetes Modell |
|---|---|
| Item wird nicht benutzt | _idle |
| Wird benutzt, Fallback (gerade gestartet) | _draw_start |
Wird benutzt, Schwellwert 0.65 | _draw_half |
Wird benutzt, Schwellwert 0.9 | _draw_full |
Armbrust-Ausgabe
Bei Armbrüsten verwendet die generierte Item-Definition minecraft:select auf charge_type. Wenn geladen (Pfeil oder Rakete), zeigt sie das _charged-Modell. Der ungeladene Fallback verwendet minecraft:range_dispatch auf crossbow/pull:
| Bedingung | Verwendetes Modell |
|---|---|
| Wird nicht benutzt, nicht geladen | _idle |
| Wird benutzt, Fallback (gerade gestartet) | _draw_start |
Wird benutzt, Schwellwert 0.58 | _draw_half |
Wird benutzt, Schwellwert 1.0 | _draw_full |
| Geladen (Pfeil oder Rakete) | _charged |
Ausgabe-Speicherort
Die generierte bedingte Item-Definition wird neben anderen Item-Definitionen geschrieben unter:
assets/freeminecraftmodels/items/display/{baseModelId}.json
Die Basis-ID wird zum öffentlich verfügbaren Display-Item. Die Item-Definitionen der einzelnen Zustände werden aus der Ausgabe und der Laufzeitregistrierung entfernt. Ihre Display-Geometrie bleibt bestehen, weil die bedingte Definition darauf verweist.
Kompatibilitätskorrekturen für Minecraft 26.1+
Der Paket-Generator wendet diese Korrekturen auf allen unterstützten Versionen an, einschließlich Minecraft 26.1 und neuer:
- UV-Begrenzung: Flächen-UVs werden auf die UV-Grenzen der Textur begrenzt (
0–textureWidth/0–textureHeight), bevor sie in Minecrafts 16x16-UV-Raum umskaliert werden. Diese Grenzen verwenden vorhandene UV-Metadaten der Textur, sonst die Bildabmessungen oder die Ersatzauflösung des Modells. Das Begrenzen negativer oder übergroßer Koordinaten kann Texturdetails auf der betroffenen Fläche entfernen. - Leere und reine Anker-Bones werden übersprungen: Ein Bone ohne Cubes schreibt keine Geometrie-JSON, sodass eine Item-Modell-Definition für ihn eine hängende Referenz hinterlassen würde. 1.21.x tolerierte das still; 26.1+ protokolliert jede davon als
Missing block model: freeminecraftmodels:.... Der Generator überspringt jetzt sowohl die Geometriedatei als auch die Item-Definition für solche Bones. Das deckt auchhitbox-Bones (nur Kollision),tag_name-Positionsanker, FMMs automatisch erzeugtefmm_nametag_bone_*-Varianten und reine Wrapper-/Anker-Bones ab.
Diese Fixes werden automatisch angewendet; keine Konfiguration erforderlich.
Ein tag_-Namensschildanker benötigt keine Cubes. Anker ohne Cubes erzeugen keine Geometrie; das Präfix allein blendet aber nicht jeden selbst erstellten Bone mit Cubes aus. Der exakte Name tag_name wird gesondert behandelt. Siehe Namensschildanker.
Deterministische Ausgabe
FMM reduziert unnötige Änderungen durch Maps mit Einfügereihenfolge für Item-Definitionen pro Bone und die display-Blöcke der Modelle. Der ZIP-Schreiber setzt außerdem feste Zeitstempel für die Einträge.
Identische ZIP-Bytes sind nicht garantiert: Der ZIP-Schreiber durchläuft Verzeichnisse in der Reihenfolge des Dateisystems, ohne die Einträge zu sortieren. Änderungen an Modellen, Texturen, Display-JSON, Konfiguration oder Generator-/Serverversion können das Paket ebenfalls berechtigterweise verändern.
Ändert sich der Paket-Hash unerwartet, vergleiche neben den Eingaben der Generierung auch Inhalt und Reihenfolge der Archiveinträge. Ein wiederholter Download allein erklärt die Ursache nicht.
Reload-Verhalten
Bei /fmm reload importiert FMM zuerst Inhalte und bereitet die neuen Item-, Verzauberungs- und Rezeptkataloge vor, während die aktuelle Laufzeit aktiv bleibt. Schlägt diese Vorbereitung fehl, lehnt FMM das Neuladen ab und behält den bisherigen Katalog. Nach erfolgreicher Vorbereitung:
- entfernt es aktive Modelle, Props, Verkleidungen, Skript-Laufzeiten, Listener-Zustände und Skript-Cooldown-Speicher vor deren Neuerstellung
- lädt es Konfiguration und Rezepte neu
- baut es den Ordner
output/FreeMinecraftModelsneu auf - regeneriert es
output/FreeMinecraftModels.zip - führt es
resourcepackmanager reloadaus, falls ResourcePackManager aktiviert ist - plant es
FmmReloadedEventim Hauptthread für 40 Ticks später ein, damit abhängige Plugins ihre Modellverknüpfungen wiederherstellen können
FMM schreibt das Archiv zuerst nach output/FreeMinecraftModels.zip.pending und verschiebt es dann über FreeMinecraftModels.zip. Schlägt das Schreiben oder Verschieben fehl, schlägt die Generierung fehl und die vorherige ZIP bleibt bestehen. Eine vollständige ZIP belegt keine Auslieferung; prüfe daher auch die Auslieferung durch ResourcePackManager und die Annahme im Client. Unter Konfiguration wird zwischen vollständigem Neuladen und einer Aktualisierung importierter Inhalte unterschieden.