Configuration de FreeMinecraftModels
registerCraftingRecipes dans config.yml vaut true par défaut. Passez-le à false et redémarrez pour une économie fondée uniquement sur les achats : les recettes restent visibles dans les menus et la boutique, mais leurs recettes Bukkit sont retirées. Les instructions de fabrication de cette page nécessitent true.
Cette page couvre les paramètres actuels de config.yml et shop_config.yml qui affectent matériellement l'installation, le rendu, l'interaction des joueurs et la boutique de mobilier optionnelle.
Emplacements des fichiers
plugins/FreeMinecraftModels/config.yml
plugins/FreeMinecraftModels/shop_config.yml
shop_config.yml est généré à la première exécution ; la boutique elle-même reste désactivée jusqu'à ce que vous y adhériez.
plugin.yml déclare api-version: 1.21.4, donc Minecraft 1.21.4 est la version de serveur minimale prise en charge. La prise en charge des lignes plus anciennes a été abandonnée ; les branches héritées de rendu/sortie existent toujours dans le code mais ne sont plus atteignables sur un serveur capable de charger le plugin.
Paramètres de config.yml
setupDone
- Défaut :
false - Contrôle si les conseils de configuration initiale sont considérés comme terminés
- Les joueurs disposant de permissions FreeMinecraftModels larges sont invités à exécuter
/fmm setuptant que cela reste àfalse - Le flux de configuration bascule cette valeur pour vous ; vous n'avez pas besoin de l'éditer à la main lors de l'onboarding normal
nightbreak.autoDownloadPluginUpdates
- Défaut :
false - Paramètre MagmaCore partagé (vit sous la section
nightbreak:deconfig.yml) - Lorsque
true, FreeMinecraftModels télécharge automatiquement les mises à jour disponibles du jar du plugin et les fichiers de mise à jour de contenu au démarrage - Les mises à jour téléchargées du plugin et du contenu ne sont appliquées qu'après le redémarrage du serveur
- Les téléchargements automatiques du plugin nécessitent un jeton de compte Nightbreak valide et un abonnement Patreon supporter actif. Sans les deux, laissez cette valeur à
falseet utilisez plutôt le bouton de mise à jour en jeu - C'est l'équivalent en clé de config d'exécuter
/fmm downloadpluginupdate//fmm downloadallà chaque démarrage ; basculez-le depuis le menu/fmm setupou à la main
useDisplayEntitiesWhenPossible
- Défaut :
true - Indique à FreeMinecraftModels de préférer le rendu via display-entity lorsque le serveur et le client le permettent
- Le plugin retombe toujours sur les affichages via armor-stand lorsque les display entities ne sont pas disponibles (le commentaire de config cite les serveurs antérieurs à 1.19.4 et les clients Bedrock ; en pratique, le plugin actuel déclare
api-version: 1.21.4, donc le repli que vous rencontrerez réellement est celui de Bedrock) - Les clients Bedrock sont un cas particulier, donc ne supposez pas que cela force le même chemin de rendu pour tous les joueurs
maxModelViewDistance
- Défaut :
60 - Limite la distance à laquelle les entités modélisées sont envoyées aux observateurs
- Des valeurs plus faibles réduisent la charge de paquets et de rendu client dans les zones denses en modèles
- Les entités individuelles peuvent surcharger cette valeur au runtime via
ModeledEntity.setViewDistanceOverride(int)— voir le guide de l'API
maxInteractionAndAttackDistance
- Défaut :
3 - S'applique aux entités modélisées statiques et dynamiques
- Utilisé par les vérifications d'interaction et de détection de coup runtime
maxInteractionAndAttackDistanceForProps
- Défaut :
6 - S'applique aux entités prop
- Cette valeur est distincte de la distance d'interaction des entités statiques/dynamiques
sendCustomModelsToBedrockClientsV2
- Défaut :
true - Contrôle si FreeMinecraftModels tente d'envoyer des modèles personnalisés aux clients Bedrock
- Cette clé remplace l'ancienne
sendCustomModelsToBedrockClients(qui avait pour défautfalse). Le renommage enV2inverse le défaut afin que les joueurs Bedrock voient les modèles par défaut ; si vous aviez auparavant défini explicitement l'ancienne clé, vous pouvez la supprimer et la nouvelle clé V2 prend le relais - Si désactivé, les joueurs Bedrock retombent sur l'entité vanilla sous-jacente lorsqu'elle existe (et les déguisements ne s'affichent pas pour eux)
- Si vous l'activez, assurez-vous que votre chaîne resource-pack Bedrock/Geyser/Floodgate est réellement prête pour ces clients
- Le logging de diagnostic runtime pour le pipeline d'affichage Bedrock n'est pas une clé de config — il est basculé au runtime via
/fmm debug bedrock on|offafin qu'il ne reste jamais accidentellement activé en production. Voir Commandes
skipUnchangedBoneUpdates
- Défaut :
true - Lorsque
true, un os de modèle n'envoie ses paquets de déplacement/métadonnées par tick aux spectateurs que si sa position, sa rotation ou son échelle ont réellement changé depuis le tick précédent - Les os parfaitement immobiles (props statiques, parties inertes d'un modèle) n'envoient rien, ce qui réduit fortement la charge en paquets par client dans les zones denses telles que les hubs de PNJ et les villes
- La resynchronisation complète périodique s'exécute toujours, de sorte qu'une dérive rare du client se corrige d'elle-même
- Ne le passez à
falseque pour rétablir l'ancien comportement « toujours renvoyer chaque os à chaque tick » à des fins de débogage
useDeltaMetadataPackets
- Défaut :
true - Lorsque
true, le paquet de métadonnées par tick des os de modèle en entités d'affichage n'envoie que les valeurs qui ont changé (la transformation de l'os) au lieu de re-sérialiser à chaque tick l'intégralité du bloc d'affichage d'item (item model + custom model data) - L'état complet est toujours envoyé lorsqu'un joueur voit un modèle pour la première fois ainsi qu'à la resynchronisation périodique
- Passez-le à
falsepour rétablir l'ancien comportement d'instantané complet à chaque tick, à des fins de débogage ou de comparaison
maxModelsForProximityOverride
- Défaut :
25 - Pseudo-répartiteur de charge pour la surcharge de visibilité à courte portée
- Normalement, un modèle situé à moins de 10 blocs d'un joueur est toujours affiché, en sautant le raytrace de ligne de vue afin que les modèles à côté desquels vous vous tenez n'apparaissent pas brusquement
- Dans une zone dense (par exemple un hub de PNJ à plusieurs étages), cette surcharge transforme des dizaines de modèles que le joueur ne peut pas réellement voir — à d'autres étages, derrière des murs — en spectateurs qui envoient des paquets à chaque tick
- Lorsqu'un monde contient au moins ce nombre de modèles chargés, la surcharge à courte portée est désactivée dans ce monde, de sorte que le raytrace d'occlusion s'exécute même de près et élimine les modèles pour lesquels le joueur n'a pas de ligne de vue. Les mondes peu denses conservent la surcharge, et donc l'absence d'apparition brusque
- La décision est prise par monde, et non globalement, afin qu'un monde hub surchargé ne pénalise pas les mondes calmes
- Montez-le très haut pour rétablir de fait le comportement de surcharge systématique ; réglez-le à
0pour toujours exiger une ligne de vue /fmm packetdebugest l'outil prévu pour en mesurer l'effet — voir Commandes
preventPropPlacementInProtectedRegions
- Défaut :
true - Lorsque
true, FreeMinecraftModels demande aux fournisseurs de protection enregistrés auprès de MagmaCore si ce joueur précis peut construire dans la case que le prop occuperait, et refuse le placement si la réponse est non - Les joueurs disposant de la permission
freeminecraftmodels.bypassregionprotection(défaut :op) sautent entièrement la vérification et ne sont jamais bloqués - Les fournisseurs intégrés tenant compte du joueur couvrent actuellement WorldGuard et GriefPrevention. N'importe quel autre plugin peut enregistrer un fournisseur de protection MagmaCore et sera honoré de la même façon. Sans fournisseur enregistré, la vérification n'a aucun effet
- Le message de refus est
You don't have permission to place a model here!
La vérification tient compte du joueur, pas de la région. Les versions antérieures demandaient « cet emplacement est-il à l'intérieur d'une région protégée ? » et bloquaient tout le monde. La vérification actuelle demande « ce joueur peut-il construire ici ? », de sorte qu'un joueur qui possède légitimement le claim, ou qui en est un membre de confiance, ou qui se trouve dans sa propre région WorldGuard, peut y placer des props normalement. Seuls les joueurs qui ne pourraient pas poser un bloc vanilla dans cette case sont refusés.
Chaque placement reçoit une vérification à case unique ; les props voxelisés en reçoivent une seconde, sur tout le volume :
| Type de prop | Cases vérifiées |
|---|---|
| Prop normal (forme libre) | La seule case adjacente à la face de bloc cliquée — la case que le prop occupera |
Prop voxelize: true | Cette même case adjacente d'abord, puis chaque case de l'empreinte pivotée du prop (largeur x hauteur x profondeur) autour du point de placement aligné sur la grille. Si une seule case de ce volume est interdite, tout le placement est refusé |
La vérification de volume existe parce qu'un prop voxelisé peut faire plusieurs blocs de large : ne tester que la case cliquée permettrait à un joueur de chevaucher une limite de claim et de déposer un gros prop dans la construction de quelqu'un d'autre. Elle s'exécute après la vérification d'espace libre, de sorte que Not enough space to place this model! reste prioritaire lorsque l'empreinte est physiquement obstruée.
La permission de contournement est vérifiée avant l'interrogation du fournisseur : accorder freeminecraftmodels.bypassregionprotection est donc la manière prévue de laisser le staff placer des props partout sans désactiver cette clé à l'échelle du serveur.
shop_config.yml
La boutique de mobilier optionnelle adossée à Vault vit dans sa propre config afin de pouvoir être activée ou ajustée indépendamment du comportement principal du plugin. La boutique refuse de s'enregistrer si Vault ou un fournisseur d'économie manque.
Clés de haut niveau
| Clé | Défaut | Description |
|---|---|---|
enabled | false | Interrupteur principal pour /fmm shop. La commande ne s'enregistre que lorsque ceci est true et que Vault + un fournisseur d'économie sont tous deux présents |
defaultPrice | 100.0 | Prix écrit dans les fichiers de recette qui ne définissent pas leur propre shopPrice lors du prochain chargement |
menuTitle | &8FMM - Furniture Shop | Titre affiché en haut de l'inventaire de la boutique (supporte les codes de couleur &) |
priceLoreFormat | &7Price: &e{price} | Ligne de lore ajoutée à chaque objet de la boutique montrant son prix. Placeholder : {price} |
clickToBuyLoreFormat | &aClick to purchase | Ligne de lore ajoutée à chaque objet de la boutique invitant à l'achat |
Clés de messages (messages.*)
Toutes les chaînes de message supportent les codes de couleur &.
| Clé | Défaut | Placeholders |
|---|---|---|
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. | aucun |
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} |
Champs de boutique par recette
Chaque fichier de recette dans plugins/FreeMinecraftModels/recipes/<model_id>.yml reçoit deux champs supplémentaires :
| Champ | Défaut | Description |
|---|---|---|
shopEnabled | true | Indique si cette recette est visible dans /fmm shop. Les recettes avec shopEnabled: false sont toujours craftables mais jamais listées à l'achat |
shopPrice | defaultPrice depuis shop_config.yml | Coût en monnaie Vault pour cet objet spécifique |
L'éditeur de recettes (/fmm craftify) écrit ces deux champs à l'enregistrement, donc ajuster le prix se fait par une simple édition de texte.
Permissions
Enregistrées dans plugin.yml
| Permission | Défaut | Description |
|---|---|---|
freeminecraftmodels.* | op | Wildcard accordant les permissions admin, deleteall, de déguisement self/others et de contournement de la protection des régions |
freeminecraftmodels.admin | op | Accès à /fmm admin (le navigateur de contenu admin) et /fmm giveitem. Les autres commandes admin/debug (/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) vérifient le wildcard freeminecraftmodels.* à la place |
freeminecraftmodels.deleteall | op | Enfant du wildcard ; accès à /fmm deleteall |
freeminecraftmodels.disguise.self | op | Autorise /fmm disguise / /fmm undisguise sur l'expéditeur |
freeminecraftmodels.disguise.others | op | Autorise le déguisement/dé-déguisement ciblé plus /fmm disguiselist |
freeminecraftmodels.bypassregionprotection | op | Placer et interagir avec les props partout où un autre plugin bloquerait le placement normal de blocs, même lorsque preventPropPlacementInProtectedRegions est activé |
freeminecraftmodels.menu | true | Accès au menu d'objets craftables /fmm |
freeminecraftmodels.shop | true | Accès à /fmm shop |
nightbreak.login | op | Enregistrée par MagmaCore, pas par plugin.yml. Requise par les commandes partagées /nightbreaklogin et /nightbreaklogout |
Configuration YML du modèle
Chaque fichier .bbmodel peut avoir un fichier .yml compagnon (même nom, même répertoire) qui contrôle les paramètres spécifiques au modèle. Le format YML unifié supporte les champs suivants :
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
| Champ | Type | Description |
|---|---|---|
isEnabled | boolean | Indique si le modèle est chargé (défaut : true) |
scripts | liste de chaînes | Noms de fichiers de scripts Lua à attacher depuis plugins/FreeMinecraftModels/scripts/. Incluez .lua pour plus de clarté ; les entrées de config sans .lua sont acceptées et résolues vers des fichiers .lua. |
voxelize | boolean | Lorsque true, le prop s'aligne sur des incréments de rotation de 90 degrés et s'aligne sur la grille de blocs au placement. L'empreinte est calculée à partir des dimensions de hitbox du modèle (arrondies à des blocs entiers). Le placement vérifie que tous les blocs de l'empreinte sont non solides. |
solidify | boolean | Lorsque true (nécessite voxelize: true), des blocs barrières uniquement par paquets sont placés dans chaque bloc de l'empreinte du prop, lui donnant une collision côté client. Ces barrières sont invisibles et n'existent que dans les paquets — elles ne sont pas placées dans le monde. Les barrières sont automatiquement retirées lorsque le prop est ramassé ou détruit. |
material | string | Un nom de matériau Bukkit (par ex. DIAMOND_SWORD, PAPER). Lorsqu'il est défini, le modèle devient un objet personnalisé que les joueurs peuvent tenir et équiper |
name | string | Nom d'affichage de l'objet personnalisé (supporte les codes de couleur &) |
lore | liste de chaînes | Lignes de lore pour l'objet personnalisé (supporte les codes de couleur &) |
enchantments | liste de chaînes | Enchantements au format ENCHANTMENT_NAME,LEVEL (par ex. SHARPNESS,3) |
Lorsque material est défini, le modèle est enregistré comme un objet personnalisé. Les joueurs peuvent le recevoir via /fmm giveitem, le fabriquer si une recette est configurée, et il obtient l'accès aux 22 hooks Lua d'objet.
Les props exécutent chaque script listé sous scripts: en tant qu'instances indépendantes. Les objets personnalisés n'utilisent actuellement que le premier script valide de la liste ; les entrées supplémentaires après la première sont ignorées pour le binding runtime de l'objet.
Notes opérationnelles
/fmm reloadré-importe le contenu et régénère le pack de sortie, donc les changements de configuration qui affectent le comportement de rendu sont plus simples à valider après un reload. UnFmmReloadedEventest dispatché à chaque reload afin que les plugins dépendants puissent ré-attacher leurs modèles.- Le pack généré est stable au niveau des octets : le régénérer à partir d'un ensemble de modèles inchangé produit un zip et un SHA1 identiques. C'est ce qui permet à ResourcePackManager de sauter un re-téléversement redondant. Voir Sortie du resource pack.
- FreeMinecraftModels ne fait que générer le resource pack ; il ne l'héberge pas de lui-même.
- ResourcePackManager reste le chemin de livraison recommandé pour les clients Java et le chemin documenté le plus sûr pour les configurations mixtes.
- WorldGuard, WorldEdit, GriefPrevention, Vault, floodgate et Geyser-Spigot sont déclarés
softdependdansplugin.yml— aucun d'eux n'est requis pour démarrer le plugin, mais ils débloquent des fonctionnalités spécifiques lorsqu'ils sont présents : WorldGuard/WorldEdit/GriefPrevention alimentent à la fois les prédicats Lua conscients de la protection et la vérification de placement de props tenant compte du joueur, Vault active la boutique de mobilier, et floodgate/Geyser-Spigot activent le backend de rendu Bedrock.
Quand modifier ces valeurs
Utilisez cette config pour ajuster le comportement runtime, pas pour la gestion des packs de contenu.
- Utilisez
/fmm setup,/fmm downloadallet/fmm updatecontentpour le cycle de vie des packs officiels - Utilisez le dossier
importspour l'import manuel de.bbmodelou d'autres contenus locaux - Utilisez
config.ymllorsque vous devez ajuster le mode de rendu, la distance de visibilité, la distance d'interaction, le comportement Bedrock, l'application de la protection des régions ou les téléchargements automatiques de mises à jour - Utilisez
skipUnchangedBoneUpdates,useDeltaMetadataPacketsetmaxModelsForProximityOverridepour l'ajustement des paquets/de la bande passante dans les mondes denses en modèles. Les trois utilisent par défaut le comportement optimisé ; les réglagesfalse/ très élevés existent pour le débogage et la comparaison A/B, et non comme valeurs de production recommandées - Utilisez
shop_config.yml(et les champs par recetteshopEnabled/shopPrice) pour ajuster la boutique de mobilier sans toucher au code
Limitations connues
- Le comportement Bedrock dépend à la fois de
sendCustomModelsToBedrockClientsV2et de votre configuration Floodgate/Geyser/resource pack plus large, donc restez prudent dans vos affirmations à moins d'avoir testé votre stack exacte. - La boutique se désactive silencieusement si Vault ou un fournisseur d'économie manque. Utilisez
/fmm versionet vérifiez la console au démarrage si/fmm shopest inexplicablement absent.