Zum Hauptinhalt springen

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.mcmeta
  • pack.png
  • assets/minecraft/atlases/blocks.json
  • assets/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.

DateiWird geschrieben, wennZweck
assets/freeminecraftmodels/rspm_item_bases/display/{modelId}.jsonDas Modell ein Display-Modell hat und seine begleitende .yml ein material setzt, das der Server kennt. Ein Lederfarbsuffix wie LEATHER_CHESTPLATE:ff8800 überspringt die DateiNennt 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}.jsonDas Modell ein Display-Modell und eine Animation mit Partikel-Keyframes hatListet 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}.jsonDas Modell einen Partikeleffekt verwendetTeilt 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_*) und hitbox aus. Selbst erstellte tag_-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 auf 1.0 x 2.0 zurü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):

BedingungVerwendetes 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:

BedingungVerwendetes 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 auch hitbox-Bones (nur Kollision), tag_name-Positionsanker, FMMs automatisch erzeugte fmm_nametag_bone_*-Varianten und reine Wrapper-/Anker-Bones ab.

Diese Fixes werden automatisch angewendet; keine Konfiguration erforderlich.

Hinweis

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/FreeMinecraftModels neu auf
  • regeneriert es output/FreeMinecraftModels.zip
  • führt es resourcepackmanager reload aus, falls ResourcePackManager aktiviert ist
  • plant es FmmReloadedEvent im 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.