FreeMinecraftModels Konfiguration
registerCraftingRecipes in config.yml ist standardmäßig true. Setze es für eine reine Kaufwirtschaft auf false und starte neu: Rezepte bleiben in Menüs und Shop sichtbar, ihre Bukkit-Crafting-Rezepte werden jedoch entfernt. Die Crafting-Anleitungen auf dieser Seite setzen true voraus.
Diese Seite behandelt die aktuellen Einstellungen in config.yml und shop_config.yml, die Einrichtung, Rendering, Spielerinteraktion und den optionalen Möbelshop wesentlich beeinflussen.
Dateispeicherorte
plugins/FreeMinecraftModels/config.yml
plugins/FreeMinecraftModels/shop_config.yml
shop_config.yml wird beim ersten Start generiert; der Shop selbst bleibt deaktiviert, bis du ihn aktivierst.
plugin.yml deklariert api-version: 1.21.4, Minecraft 1.21.4 ist also die minimal unterstützte Serverversion. Die Unterstützung für ältere Versionslinien wurde eingestellt; Legacy-Render-/Ausgabezweige existieren im Code weiterhin, sind aber auf einem Server, der das Plugin laden kann, nicht mehr erreichbar.
config.yml-Einstellungen
setupDone
- Standard:
false - Steuert, ob die Ersteinrichtungsführung als abgeschlossen gilt
- Spieler mit umfassenden FreeMinecraftModels-Berechtigungen werden daran erinnert,
/fmm setupauszuführen, solange diesfalsebleibt - Der Einrichtungsablauf schaltet diesen Wert für dich um; du musst ihn beim normalen Onboarding nicht manuell bearbeiten
nightbreak.autoDownloadPluginUpdates
- Standard:
false - Gemeinsame MagmaCore-Einstellung (befindet sich im
nightbreak:-Abschnitt vonconfig.yml) - Wenn
true, lädt FreeMinecraftModels verfügbare Plugin-Jar-Updates und Inhalts-Update-Dateien beim Start automatisch herunter - Heruntergeladene Plugin- und Inhalts-Updates werden erst nach dem Server-Neustart angewendet
- Automatische Plugin-Downloads erfordern ein gültiges Nightbreak-Konto-Token und eine aktive Supporter-Patreon-Mitgliedschaft. Ohne beides lasse dies auf
falseund verwende stattdessen den Update-Button im Spiel - Dies ist das Config-Schlüssel-Äquivalent dazu,
/fmm downloadpluginupdate//fmm downloadallbei jedem Start auszuführen; schalte es über das/fmm setup-Menü oder manuell um
useDisplayEntitiesWhenPossible
- Standard:
true - Weist FreeMinecraftModels an, das Display-Entity-Rendering zu bevorzugen, wenn Server und Client-Pfad dies unterstützen
- Das Plugin fällt weiterhin auf Armor-Stand-Displays zurück, wenn Display-Entitäten nicht verfügbar sind (der Config-Kommentar nennt Server älter als 1.19.4 und Bedrock-Clients; in der Praxis deklariert das aktuelle Plugin
api-version: 1.21.4, der Fallback, den du tatsächlich erlebst, ist also der Bedrock-Fall) - Bedrock-Clients sind ein Sonderfall; gehe also nicht davon aus, dass dies für jeden Spieler denselben Rendering-Pfad erzwingt
maxModelViewDistance
- Standard:
60 - Begrenzt, wie weit modellierte Entitäten an Betrachter gesendet werden
- Niedrigere Werte reduzieren die Paket- und Client-Renderinglast in dicht modell-gefüllten Bereichen
- Einzelne Entitäten können dies zur Laufzeit über
ModeledEntity.setViewDistanceOverride(int)überschreiben — siehe das API-Handbuch
maxInteractionAndAttackDistance
- Standard:
3 - Gilt für statische und dynamische modellierte Entitäten
- Wird von den Laufzeit-Interaktions- und Trefferprüfungen verwendet
maxInteractionAndAttackDistanceForProps
- Standard:
6 - Gilt für Prop-Entitäten
- Dies ist getrennt von der Interaktionsdistanz statischer/dynamischer Entitäten
sendCustomModelsToBedrockClientsV2
- Standard:
true - Steuert, ob FreeMinecraftModels versucht, benutzerdefinierte Modelle an Bedrock-Clients zu senden
- Dieser Schlüssel ersetzt den älteren
sendCustomModelsToBedrockClients(dessen Standardfalsewar). Die Umbenennung inV2kehrt den Standard um, sodass Bedrock-Spieler Modelle standardmäßig sehen; falls du zuvor den alten Schlüssel explizit gesetzt hast, kannst du ihn löschen, und der neue V2-Schlüssel übernimmt - Bei Deaktivierung fallen Bedrock-Spieler auf die zugrunde liegende Vanilla-Entität zurück, wo diese existiert (und Verkleidungen werden für sie nicht gerendert)
- Wenn du dies aktivierst, stelle sicher, dass dein Bedrock-/Geyser-/Floodgate-Ressourcenpaket-Pfad tatsächlich für diese Clients bereit ist
- Laufzeit-Diagnose-Logging für die Bedrock-Display-Pipeline ist kein Config-Schlüssel — es wird zur Laufzeit über
/fmm debug bedrock on|offumgeschaltet, damit es nie versehentlich im Produktivbetrieb aktiv bleibt. Siehe Befehle
skipUnchangedBoneUpdates
- Standard:
true - Wenn
true, sendet ein Modell-Bone seine Bewegungs-/Metadatenpakete pro Tick nur dann an Betrachter, wenn sich seine Position, Rotation oder Skalierung seit dem letzten Tick tatsächlich geändert hat - Vollkommen stillstehende Bones (statische Props, unbewegte Teile eines Modells) senden nichts, was die Paketlast pro Client in dichten Bereichen wie NPC-Hubs und Städten stark senkt
- Die periodische vollständige Resynchronisierung läuft weiterhin, sodass seltene Client-Abweichungen sich selbst heilen
- Setze es nur auf
false, um zum alten Verhalten „immer jeden Bone in jedem Tick erneut senden" zum Debuggen zurückzukehren
useDeltaMetadataPackets
- Standard:
true - Wenn
true, sendet das Metadatenpaket pro Tick für Display-Entity-Modell-Bones nur die geänderten Werte (die Transformation des Bones), statt in jedem Tick den gesamten Item-Display-Blob (Item-Modell + Custom Model Data) neu zu serialisieren - Der vollständige Zustand wird weiterhin gesendet, wenn ein Spieler ein Modell zum ersten Mal sieht, sowie bei der periodischen Resynchronisierung
- Setze es auf
false, um zum alten Verhalten mit vollständigem Snapshot pro Tick zum Debuggen oder Vergleichen zurückzukehren
maxModelsForProximityOverride
- Standard:
25 - Pseudo-Lastverteiler für die Nahbereichs-Sichtbarkeitsüberschreibung
- Normalerweise wird ein Modell innerhalb von 10 Blöcken um einen Spieler immer angezeigt, wobei der Sichtlinien-Raytrace übersprungen wird, damit Modelle, neben denen du stehst, nicht plötzlich aufpoppen
- In einem dichten Bereich (zum Beispiel einem mehrstöckigen NPC-Hub) verwandelt diese Überschreibung Dutzende Modelle, die der Spieler gar nicht sehen kann — auf anderen Etagen, hinter Wänden —, in Betrachter, die in jedem Tick Pakete senden
- Wenn eine Welt mindestens so viele geladene Modelle enthält, wird die Nahbereichsüberschreibung in dieser Welt deaktiviert, sodass der Verdeckungs-Raytrace auch aus der Nähe läuft und Modelle aussortiert, zu denen der Spieler keine Sichtlinie hat. Dünn besiedelte Welten behalten die Überschreibung und damit das Verhalten ohne Aufpoppen
- Die Entscheidung fällt pro Welt, nicht global, sodass eine überfüllte Hub-Welt ruhige Welten nicht bestraft
- Setze den Wert sehr hoch, um faktisch das Immer-Überschreiben wiederherzustellen; setze ihn auf
0, um immer Sichtlinie zu verlangen /fmm packetdebugist das vorgesehene Werkzeug, um die Wirkung zu messen — siehe Befehle
preventPropPlacementInProtectedRegions
- Standard:
true - Wenn
true, fragt FreeMinecraftModels die bei MagmaCore registrierten Schutz-Provider, ob dieser konkrete Spieler in der Zelle bauen darf, die der Prop einnehmen würde, und lehnt die Platzierung ab, wenn die Antwort nein lautet - Spieler mit der Berechtigung
freeminecraftmodels.bypassregionprotection(Standard:op) überspringen die Prüfung vollständig und werden nie blockiert - Die eingebauten spielerbewussten Provider decken derzeit WorldGuard und GriefPrevention ab. Jedes andere Plugin kann einen MagmaCore-Schutz-Provider registrieren und wird genauso berücksichtigt. Ist kein Provider registriert, hat die Prüfung keine Wirkung
- Die Ablehnungsnachricht lautet
You don't have permission to place a model here!
Die Prüfung ist spielerbewusst, nicht regionsbewusst. Frühere Versionen fragten „liegt dieser Ort in irgendeiner geschützten Region?" und blockierten alle. Die aktuelle Prüfung fragt „darf dieser Spieler hier bauen?", sodass ein Spieler, der den Claim rechtmäßig besitzt, ein vertrautes Mitglied darin ist oder sich in seiner eigenen WorldGuard-Region befindet, dort normal Props platzieren kann. Nur Spieler, die in dieser Zelle keinen Vanilla-Block setzen könnten, werden abgelehnt.
Jede Platzierung erhält eine Einzelzellenprüfung; voxelisierte Props zusätzlich eine volumenweite:
| Prop-Typ | Geprüfte Zellen |
|---|---|
| Normaler (freiformiger) Prop | Die einzelne Zelle neben der angeklickten Blockfläche — die Zelle, die der Prop einnehmen wird |
Prop mit voxelize: true | Zuerst dieselbe Nachbarzelle, dann jede Zelle im rotierten Grundriss des Props (Breite x Höhe x Tiefe) rund um den rasterausgerichteten Platzierungspunkt. Ist irgendeine Zelle in diesem Volumen tabu, wird die gesamte Platzierung abgelehnt |
Die Volumenprüfung existiert, weil ein voxelisierter Prop mehrere Blöcke breit sein kann; nur die angeklickte Zelle zu prüfen würde einem Spieler erlauben, eine Claim-Grenze zu überspannen und einen großen Prop in den Bau eines anderen zu setzen. Sie läuft nach der Freiraumprüfung, sodass Not enough space to place this model! weiterhin Vorrang hat, wenn der Grundriss physisch blockiert ist.
Die Bypass-Berechtigung wird vor der Provider-Abfrage geprüft, daher ist die Vergabe von freeminecraftmodels.bypassregionprotection der vorgesehene Weg, um Team-Mitgliedern das Platzieren von Props überall zu erlauben, ohne diesen Schlüssel serverweit zu deaktivieren.
shop_config.yml
Der optionale Vault-gestützte Möbelshop hat eine eigene Konfiguration, sodass er unabhängig vom Verhalten des Hauptplugins aktiviert oder angepasst werden kann. Der Shop verweigert die Registrierung, wenn Vault oder ein Wirtschafts-Provider fehlt.
Schlüssel der obersten Ebene
| Schlüssel | Standard | Beschreibung |
|---|---|---|
enabled | false | Haupt-Umschalter für /fmm shop. Der Befehl registriert sich nur, wenn dies true ist und Vault + ein Wirtschafts-Provider beide vorhanden sind |
defaultPrice | 100.0 | Preis, der beim nächsten Laden in Rezeptdateien geschrieben wird, die keinen eigenen shopPrice setzen |
menuTitle | &8FMM - Furniture Shop | Titel, der oben im Shop-Inventar angezeigt wird (unterstützt &-Farbcodes) |
priceLoreFormat | &7Price: &e{price} | Lore-Zeile, die an jedes Shop-Item angehängt wird und seinen Preis zeigt. Platzhalter: {price} |
clickToBuyLoreFormat | &aClick to purchase | Lore-Zeile, die an jedes Shop-Item angehängt wird und zum Kauf auffordert |
Nachrichten-Schlüssel (messages.*)
Alle Nachrichtenstrings unterstützen &-Farbcodes.
| Schlüssel | Standard | Platzhalter |
|---|---|---|
messages.purchaseSuccess | &aPurchased &f{item} &afor &e{price}&a. Balance: &e{balance}&a. | {item}, {price}, {balance} |
messages.insufficientFunds | &cYou need &e{price} &cto buy &f{item}&c. Balance: &e{balance}&c. | {item}, {price}, {balance} |
messages.shopDisabled | &cThe furniture shop is currently unavailable. | keine |
messages.itemNotForSale | &cThat item is not currently for sale. | {item} |
messages.inventoryFull | &eYour inventory was full; &f{item} &ehas been dropped at your feet. | {item} |
Shop-Felder pro Rezept
Jede Rezeptdatei in plugins/FreeMinecraftModels/recipes/<model_id>.yml erhält zwei zusätzliche Felder:
| Feld | Standard | Beschreibung |
|---|---|---|
shopEnabled | true | Ob dieses Rezept in /fmm shop sichtbar ist. Rezepte mit shopEnabled: false sind weiterhin craftbar, werden aber nie zum Kauf angeboten |
shopPrice | defaultPrice aus shop_config.yml | Vault-Währungskosten für dieses spezifische Item |
Der Rezept-Builder (/fmm craftify) schreibt beim Speichern beide Felder, sodass eine Preisanpassung nur eine Textbearbeitung entfernt ist.
Berechtigungen
In plugin.yml registriert
| Berechtigung | Standard | Beschreibung |
|---|---|---|
freeminecraftmodels.* | op | Wildcard, die Admin-, Deleteall-, Selbst-/Fremd-Verkleidungs- und Regionsschutz-Umgehungsberechtigungen gewährt |
freeminecraftmodels.admin | op | Zugriff auf /fmm admin (den Admin-Inhaltsbrowser) und /fmm giveitem. Andere Admin-/Debug-Befehle (/fmm location, /fmm spawn, /fmm mount, /fmm itemify, /fmm craftify, /fmm reload, /fmm stats, /fmm hitbox visualize, /fmm debug, /fmm packetdebug, /fmm setup, /fmm initialize, /fmm recommendedplugins, /fmm downloadall, /fmm downloadallcontent, /fmm updatecontent, /fmm downloadpluginupdate, /fmm forcereinstallcontent) prüfen stattdessen die Wildcard freeminecraftmodels.* |
freeminecraftmodels.deleteall | op | Kind der Wildcard; Zugriff auf /fmm deleteall |
freeminecraftmodels.disguise.self | op | Erlaubt /fmm disguise / /fmm undisguise auf den Sender |
freeminecraftmodels.disguise.others | op | Erlaubt gezielte Verkleidung/Enthüllung sowie /fmm disguiselist |
freeminecraftmodels.bypassregionprotection | op | Platzieren von und Interagieren mit Props überall dort, wo ein anderes Plugin normales Blocksetzen blockieren würde, selbst wenn preventPropPlacementInProtectedRegions aktiviert ist |
freeminecraftmodels.menu | true | Zugriff auf das /fmm-Menü craftbarer Items |
freeminecraftmodels.shop | true | Zugriff auf /fmm shop |
nightbreak.login | op | Wird von MagmaCore registriert, nicht von plugin.yml. Erforderlich für die gemeinsamen Befehle /nightbreaklogin und /nightbreaklogout |
Modell-YML-Konfiguration
Jede .bbmodel-Datei kann eine begleitende .yml-Datei haben (gleicher Name, gleiches Verzeichnis), die modell-spezifische Einstellungen steuert. Das vereinheitlichte YML-Format unterstützt folgende Felder:
isEnabled: true
voxelize: true
solidify: true
scripts:
- my_script.lua
material: DIAMOND_SWORD
name: "&bFrost Blade"
lore:
- "&7A sword forged in ice"
- "&7Deals frost damage"
enchantments:
- SHARPNESS,3
- UNBREAKING,2
| Feld | Typ | Beschreibung |
|---|---|---|
isEnabled | boolean | Ob das Modell geladen wird (Standard: true) |
scripts | Liste von Strings | Dateinamen von Lua-Skripten, die aus plugins/FreeMinecraftModels/scripts/ angehängt werden sollen. Gib .lua zur Klarheit an; Config-Einträge ohne .lua werden akzeptiert und zu .lua-Dateien aufgelöst. |
voxelize | boolean | Wenn true, rastet der Prop auf 90-Grad-Rotationsschritte ein und richtet sich beim Platzieren am Blockraster aus. Der Grundriss wird aus den Hitbox-Abmessungen des Modells berechnet (auf ganze Blöcke gerundet). Die Platzierung prüft, dass alle Blöcke im Grundriss nicht-solide sind. |
solidify | boolean | Wenn true (erfordert voxelize: true), werden paket-only Barrier-Blöcke in jedem Block des Prop-Grundrisses platziert, was ihm clientseitige Kollision verleiht. Diese Barrieren sind unsichtbar und existieren nur in Paketen — sie werden nicht in der Welt platziert. Barrieren werden automatisch entfernt, wenn der Prop aufgenommen oder zerstört wird. |
material | string | Ein Bukkit-Materialname (z. B. DIAMOND_SWORD, PAPER). Wenn gesetzt, wird das Modell zu einem benutzerdefinierten Item, das Spieler halten und ausrüsten können |
name | string | Anzeigename für das benutzerdefinierte Item (unterstützt &-Farbcodes) |
lore | Liste von Strings | Lore-Zeilen für das benutzerdefinierte Item (unterstützt &-Farbcodes) |
enchantments | Liste von Strings | Verzauberungen im Format ENCHANTMENT_NAME,LEVEL (z. B. SHARPNESS,3) |
Wenn material gesetzt ist, wird das Modell als benutzerdefiniertes Item registriert. Spieler können es über /fmm giveitem erhalten, es craften, falls ein Rezept konfiguriert ist, und es erhält Zugriff auf alle 22 Lua-Item-Hooks.
Props führen jedes unter scripts: aufgeführte Skript als unabhängige Instanz aus. Benutzerdefinierte Items verwenden derzeit nur das erste gültige Skript in der Liste; weitere Einträge nach dem ersten werden für die Item-Laufzeitbindung ignoriert.
Betriebshinweise
/fmm reloadimportiert Inhalte erneut und regeneriert das Ausgabepaket, sodass Konfigurationsänderungen, die das Rendering-Verhalten betreffen, am einfachsten nach einem Reload überprüfbar sind. Bei jedem Reload wird einFmmReloadedEventgesendet, damit abhängige Plugins ihre Modellanhänge erneut binden können.- Das erzeugte Paket ist byte-stabil, sodass eine Neugenerierung aus einem unveränderten Modellsatz ein identisches Zip mit identischem SHA1 ergibt. Genau das erlaubt es ResourcePackManager, einen überflüssigen erneuten Upload zu überspringen. Siehe Ressourcenpaket-Ausgabe.
- FreeMinecraftModels generiert das Ressourcenpaket nur; es hostet es nicht selbst.
- ResourcePackManager bleibt der empfohlene Auslieferungsweg für Java-Clients und der sicherste dokumentierte Pfad für gemischte Setups.
- WorldGuard, WorldEdit, GriefPrevention, Vault, floodgate und Geyser-Spigot sind als
softdependinplugin.ymldeklariert — keines davon ist erforderlich, um das Plugin zu starten, aber sie schalten bestimmte Funktionen frei, wenn sie vorhanden sind: WorldGuard/WorldEdit/GriefPrevention speisen sowohl die schutz-bewussten Lua-Prädikate als auch die spielerbewusste Prop-Platzierungsprüfung, Vault aktiviert den Möbelshop, und floodgate/Geyser-Spigot aktivieren das Bedrock-Rendering-Backend.
Wann diese Werte ändern
Verwende diese Konfiguration für die Feinabstimmung des Laufzeitverhaltens, nicht für die Verwaltung von Inhaltspaketen.
- Verwende
/fmm setup,/fmm downloadallund/fmm updatecontentfür den Lebenszyklus offizieller Pakete - Verwende den
imports-Ordner für manuelle.bbmodel- oder andere lokale Inhaltsimport-Arbeit - Verwende
config.yml, wenn du Rendering-Modus, Sichtweite, Interaktionsdistanz, Bedrock-Verhalten, die Durchsetzung des Regionsschutzes oder automatische Update-Downloads anpassen musst - Verwende
skipUnchangedBoneUpdates,useDeltaMetadataPacketsundmaxModelsForProximityOverridezur Paket-/Bandbreiten-Feinabstimmung in modelldichten Welten. Alle drei stehen standardmäßig auf dem optimierten Verhalten; diefalse- bzw. sehr hohen Einstellungen existieren zum Debuggen und für A/B-Vergleiche, nicht als empfohlene Produktivwerte - Verwende
shop_config.yml(und dieshopEnabled/shopPrice-Felder pro Rezept), um den Möbelshop anzupassen, ohne Code zu berühren
Bekannte Einschränkungen
- Das Bedrock-Verhalten hängt sowohl von
sendCustomModelsToBedrockClientsV2als auch von deinem umfassenderen Floodgate-/Geyser-/Ressourcenpaket-Setup ab; bleibe also bei Aussagen konservativ, sofern du nicht genau deinen Stack getestet hast. - Der Shop deaktiviert sich stillschweigend selbst, wenn Vault oder ein Wirtschafts-Provider fehlt. Verwende
/fmm versionund prüfe die Konsole beim Start, falls/fmm shopunerwartet fehlt.