Java-zu-Bedrock-Konvertierung
ResourcePackManager kann das zusammengeführte Java-Ressourcenpaket in ein Bedrock-Ressourcenpaket umwandeln, damit GeyserMC-Clients dieselben benutzerdefinierten Inhalte wie Java-Clients sehen. Diese Funktion ist standardmäßig aktiviert.
Was konvertiert wird
Der Konverter ist nicht mehr ausschließlich für FreeMinecraftModels gedacht. Er durchläuft zwei Pipelines hintereinander über das zusammengeführte Java-Paket:
- FreeMinecraftModels-Bone-Scanner — erfasst FMM-Bone-Modelle unter
assets/freeminecraftmodels/models/und wandelt jeden Bone in ein Bedrock-Attachable um. - Generische Items-Definitions-Pipeline — durchläuft jede
assets/<namespace>/items/*.json-Datei im Format 1.21.4+ (überspringt dabei die Namespacesminecraftundfreeminecraftmodels). Für jedes Blattmodell wird entweder:- ein flaches Bedrock-Inventarsymbol ausgegeben (für einfache
minecraft:item/generated- und ähnliche flach-eingebaute Eltern) oder - Bedrock-Geometrie, ein Attachable, eine Animationsdatei und ein softwaregerendertes 2D-Inventarsymbol ausgegeben (für echte 3D-Modelle).
- ein flaches Bedrock-Inventarsymbol ausgegeben (für einfache
Pro (Modell × Basis-Item)-Paar wird ein eindeutiger Bedrock-Identifikator erzeugt, sodass z. B. ein einzelnes Schwertmodell, das mehreren Basis-Items zugeordnet ist, auf der Geyser-Seite nicht kollidiert.
Benutzerdefinierte Rüstungssets werden erkannt, wenn eine benachbarte Datei assets/<namespace>/equipment/<material>.json existiert. Der Konverter verdrahtet ein Rüstungs-Attachable, das die Vanilla-Rüstungsgeometrie mit der Java-Textur als sichtbarer Schicht kombiniert, sodass Bedrock-Spieler beim Tragen des Items die richtige Rüstungstextur sehen.
Die Manifest-UUID des Bedrock-Pakets wird deterministisch aus dem Paketnamen abgeleitet und bleibt damit über alle Rebuilds stabil; nur das Versions-Tripel wird pro Build hochgezählt (Cache-Bust-Token aus der Build-Zeit abgeleitet).
Live-Auslieferung pro Session
Wenn Geyser-Spigot erkannt wird, registriert ResourcePackManager einen SessionLoadResourcePacksEvent-Subscriber. Jeder Bedrock-Spieler, der nach einem frischen Mix beitritt, erhält das neueste Bedrock-Paket direkt von der Festplatte ausgeliefert; für Textur- oder Modellbearbeitungen ist kein Serverneustart erforderlich.
Geysers Mappings für benutzerdefinierte Items (das JSON in custom_mappings/) sind weiterhin beim Booten eingefroren, daher erfordert das Hinzufügen neuer oder das Entfernen bestehender Custom-Items einen Serverneustart, bevor Bedrock-Clients diese Änderungen sehen. RSPM stellt die Mapping-Datei des vorherigen Laufs früh beim Startup bereit, damit Geysers Custom-Item-Registrierung sie beim Booten automatisch aufgreift.
Aktuell verbundene Bedrock-Spieler behalten das Paket, das sie beim Beitritt erhalten haben — das ist eine Einschränkung des Bedrock-Protokolls, nichts, was das Plugin mitten in der Session überschreiben kann.
Ausgabedateien
Nach einem erfolgreichen Mix liegen die Bedrock-Dateien in:
plugins/ResourcePackManager/output/ResourcePackManager_Bedrock.zip
plugins/ResourcePackManager/output/rspm_geyser_mappings.json
Wenn Auto-Deploy aktiviert ist und Geyser erkannt wurde, wird die Mapping-Datei zusätzlich kopiert nach:
<geyser-folder>/custom_mappings/rspm_geyser_mappings.json
Die Bedrock-Paket-ZIP wird nicht in <geyser-folder>/packs/ kopiert — sie wird stattdessen live pro Session ausgeliefert. RSPM entfernt außerdem jede Altkopie, die ältere Plugin-Versionen in diesem Ordner hinterlassen haben, damit Geyser das Paket nicht doppelt ausliefert (doppelte UUIDs würden den Bedrock-Client verwirren).
Einstellungen in config.yml
# Schaltet die Java-zu-Bedrock-Konvertierung insgesamt ein/aus.
bedrockConversionEnabled: true
# Kopiert die Datei mit den benutzerdefinierten Geyser-Mappings bei jedem Mix
# in das Verzeichnis custom_mappings/ des erkannten Geyser-Ordners.
bedrockAutoDeployToGeyser: true
# Manuelle Überschreibung für den Geyser-Datenordner. Leer = automatische Erkennung.
# Kann absolut oder relativ zum Verzeichnis plugins/ sein.
bedrockGeyserFolder: ""
Die automatische Erkennung prüft in dieser Reihenfolge:
bedrockGeyserFolder, falls gesetzt (wird zuerst als absoluter Pfad behandelt, dann als Pfad relativ zuplugins/).plugins/Geyser-Spigot/plugins/Geyser-*/(jede Variante)config/Geyser-*/(für Fabric-/NeoForge-Setups)
Feinjustierung der Anzeige gehaltener Items: bedrock_display_offsets.yml
Bedrock rendert das gehaltene Item über einen Eltern-Bone, dessen Ruhepose von den Java-Transformationen für Ego- und Drittperson abweicht, sodass die algorithmische Konvertierung einen Basis-Offset zusätzlich zu dem anwenden muss, was die display-Transformation des Java-Modells vorgibt. Die Standard-Offsets funktionieren für typische rechtshändige Java-Modelle, aber Sonderfälle können Anpassungen erfordern.
Ego- und Drittpersonperspektive sind zwei vollständig getrennte Bedrock-Render-Durchläufe (unterschiedliche Eltern-Bones, unterschiedliche Ruheposen), daher hat jede ihren eigenen unabhängigen Satz von sechs Stellschrauben. Die eine zu tunen wirkt sich nicht auf die andere aus.
# ===== Egoperspektive (rechte Hand, vom Träger gesehen) =====
firstPersonBaseRotationX: -90.0 # pitch (Kippen zur Kamera hin/weg). Standardwert hebt die Eltern-Rotation auf.
firstPersonBaseRotationY: 0.0 # yaw (Drehung um die vertikale Achse)
firstPersonBaseRotationZ: 0.0 # roll (um die Achse Richtung Kamera)
firstPersonBasePositionX: 0.0 # vertikal auf dem Bildschirm (positiv = oben)
firstPersonBasePositionY: 12.5 # Tiefe (positiv = weiter in die Szene hinein)
firstPersonBasePositionZ: 0.0 # horizontal auf dem Bildschirm (positiv = rechts)
# ===== Drittpersonperspektive (rechte Hand, von anderen Spielern / F5 gesehen) =====
thirdPersonBaseRotationX: 90.0 # pitch wie Beobachter es sehen
thirdPersonBaseRotationY: 0.0 # yaw
thirdPersonBaseRotationZ: 0.0 # roll um die Längsachse des Items
thirdPersonBasePositionX: 0.0 # horizontal quer zum Körper des Trägers (positiv = nach außen)
thirdPersonBasePositionY: 12.5 # vertikal (positiv = hebt das Modell an)
thirdPersonBasePositionZ: 0.0 # Tiefe relativ zum Träger (positiv = nach vorne)
Positionswerte sind in Pixeln angegeben, wobei 1 Pixel = 1/16 Block. Rotationen sind in Grad angegeben.
Der Bedrock-Client lädt Attachable-JSON live nach, ohne neu zu starten. Wenn ein Bedrock-Testclient eingeloggt ist, ändere den Wert, führe /rspm reload aus, und der nächste Bedrock-Beitritt (oder in manchen Fällen derselbe verbundene Spieler nach einer kleinen In-World-Aktion, die das Attachable neu bindet) zeigt den neuen Offset. Iteriere, bis es passt.
Einschränkungen und bekanntes Verhalten
- 3D-Inventarsymbole werden softwareseitig aus der
display.gui-Transformation des Java-Modells gerendert. Das Ergebnis ist passabel, aber nicht pixelgenau; wenn das Symbol falsch aussieht, ist die häufigste Ursache eine fehlende/falsch benannte Texturdatei, auf die das Modell verweist. - Flipbook-Texturen, die als Item-Symbole verwendet werden, werden auf Frame 0 zugeschnitten — Bedrocks
item_texture.jsonunterstützt keine animierten Symbole, sondern nur animierte Block-/Terrain-Texturen überflipbook_textures.json. - Die Geometrie-Formatversion von Attachables ist fest auf
1.21.0festgelegt (war1.16.0in älteren Plugin-Versionen); aktualisiere Geyser, falls deine Installation sie nicht parsen kann. - Vanilla-Item-Modelle (
shield.json,crossbow.json) werden nicht paketübergreifend rekursiv zusammengeführt, um eine paketübergreifende Beschädigung des Prädikatsbaums zu vermeiden; für diese beiden gewinnt speziell die Kopie des Pakets mit der höchsten Priorität. - Wenn der Konverter eine referenzierte Textur- oder Modelldatei nicht auflösen kann, wird dieses Blatt übersprungen und eine
[BedrockConverter]-Warnung protokolliert; die restliche Pipeline läuft weiter.