跳到主要内容

FreeMinecraftModels 配置

模型的 YAML 设置会在重新加载内容时统一准备。编辑道具的 YAML 后,请先成功重新加载,再创建新道具。请让每个模型 YAML 在所有模型文件夹中都使用唯一的文件名。当两个文件同名(不区分大小写)时,即使位于不同的子文件夹,FMM 也只会加载绝对路径排序最靠前的那个,并以 Duplicate content filename 警告跳过其他文件。若被跳过的副本所有值都与已加载的文件相同,则直接跳过,不产生警告。

本页介绍当前 config.yml 与 shop_config.yml 中对设置、渲染、玩家交互以及可选家具商店有实质影响的设置项。pets.yml 中的宠物设置在宠物页面介绍。

文件位置​

plugins/FreeMinecraftModels/config.yml
plugins/FreeMinecraftModels/shop_config.yml
plugins/FreeMinecraftModels/pets.yml

shop_config.yml 会在首次运行时生成;商店本身在你主动启用之前保持禁用。pets.yml 会在首次运行时以 COSMETIC 模式生成,该模式下野生宠物只会出现在夜间迁徙中。宠物运行的 Lua 模块位于 plugins/FreeMinecraftModels/pet_behaviors/;参见宠物行为模块。

最低服务器版本

plugin.yml 声明了 api-version: 1.21.4,因此 Minecraft 1.21.4 是受支持的最低服务器版本。对更老版本线的支持已被移除;代码中仍存在旧的渲染/输出分支,但在能够加载本插件的服务器上已经无法触及。

config.yml 设置项​

setupDone​

  • 默认值:false
  • 控制首次设置指引是否视为已完成
  • 在此值为 false 期间,拥有 freeminecraftmodels.* 的玩家每次登录约10秒后,若仍在线,就会收到提醒
  • 打开 /fmm setup 会为整个服务器保存 true,停止后续提醒。在 /fmm initialize 中选择完成选项也会保存此值;它不能证明资源包已安装或已送达客户端

nightbreak.autoDownloadPluginUpdates​

  • 默认值:false
  • 共享的 MagmaCore 设置(位于 config.yml 的 nightbreak: 区块下)
  • 为 true 时,FreeMinecraftModels 会在启动时自动下载可用的插件 jar 更新以及内容更新文件
  • 下载的插件和内容更新会在服务器重启后生效,除非 nightbreak.applyPluginUpdatesWithoutRestart 让插件更新更早应用
  • 自动下载插件需要一个有效的 Nightbreak 账户令牌以及一个有效的支持者 Patreon 会员资格。两者缺一时,请把它保持为 false 并改用游戏内的更新按钮
  • 自动内容更新只针对已安装的内容包,并延后重载。它不等于用 /fmm downloadall 批量安装所有可访问的内容包。可通过 /fmm setup 或手动修改此项

nightbreak.applyPluginUpdatesWithoutRestart​

  • 默认值:never
  • 共享的 MagmaCore 设置(位于 config.yml 的 nightbreak: 区块下)。它决定已下载的插件更新何时无需重启即可应用
  • never:更新会等到下次重启。你仍然可以用 /fmm applypluginupdate 手动应用
  • when-empty:更新会在下一次没有玩家在线时应用。FMM 每 30 秒检查一次
  • immediately:更新会在下载完成后立即应用
  • 其他任何值都视为 never
  • 应用更新会禁用 FreeMinecraftModels 以及所有依赖它的 MagmaGuy 插件,替换 jar,然后重新加载并启用它们。这些插件重载时,正在进行的 Boss 战、竞技场和地牢实例都会结束
  • 若有其他作者的插件依赖 FreeMinecraftModels,则无法换入更新,更新会等到重启时再应用。如果新 jar 启用失败,会重新加载之前的 jar,更新保持暂存状态,留待下次重启。参见命令

useDisplayEntitiesWhenPossible​

  • 默认值:true
  • 当服务器与客户端路径支持时,告知 FreeMinecraftModels 优先使用 display 实体来渲染
  • 设为 false 会让 Java 客户端使用盔甲架渲染骨骼。保留的 1.19.4 之前的旧分支不代表支持旧服务器
  • 启用基岩版模型且原生自定义实体桥接可用时,基岩版玩家使用该显示方式。否则,其骨骼渲染路径使用盔甲架。此设置不会强制所有玩家使用同一后端

maxModelViewDistance​

  • 默认值:60
  • 设置常规观察距离上限。在模型稀少的世界中,小于10格的近距离例外会跳过距离与遮挡检查,因此低于10的值在这些世界中不是严格上限
  • 较低的值能减少密集模型区域内的数据包和客户端渲染压力
  • 单个实体可在运行时通过 ModeledEntity.setViewDistanceOverride(int) 覆盖此值 —— 参见 API 指南

maxInteractionAndAttackDistance​

  • 默认值:3
  • 适用于静态和动态模型化实体
  • 用于运行时的交互和命中检测

maxInteractionAndAttackDistanceForProps​

  • 默认值:6
  • 适用于道具实体
  • 此值与静态/动态实体的交互距离相互独立

sendCustomModelsToBedrockClientsV2​

  • 默认值:true
  • 控制 FreeMinecraftModels 是否尝试向基岩版客户端发送自定义模型
  • 此键替代了较旧的 sendCustomModelsToBedrockClients(其默认值为 false)。改名为 V2 后默认值被翻转,因此基岩版玩家默认就能看到模型;如果你以前显式设置了旧键,可以直接删除,由新的 V2 键接管
  • 如果禁用,基岩版玩家会回退到底层的原版实体(若存在),且伪装对他们不会渲染
  • 如果启用,请确保你的基岩版/Geyser/Floodgate 资源包链路已为这些客户端准备就绪
  • 基岩版诊断日志不是配置项。请用 /fmm debug bedrock on|off 切换,并在收集证据后明确关闭。/fmm reload 不会重置此标记,重新启动服务器才会。参见 命令

skipUnchangedBoneUpdates​

  • 默认值:true
  • 为 true 时,如果跟踪的变换没有超出比较容差,便跳过骨骼的移动和元数据更新。展示实体骨骼跟踪位置、旋转和缩放;盔甲架骨骼跟踪位置和旋转
  • 静止骨骼通常跳过这些更新,但染色等明确标记为已更改的状态会强制重新发送
  • 定期完整同步仍会纠正客户端偏差;此选项不会抑制所有类型的模型数据包
  • 只有在为了调试而需要恢复旧的"每 tick 重发每根骨骼"行为时,才把它设为 false

useDeltaMetadataPackets​

  • 默认值:true
  • 为 true 时,展示实体模型骨骼的每 tick 元数据数据包只发送发生变化的值(该骨骼的变换),而不是每 tick 都重新序列化整个 item-display 数据块(物品模型 + 自定义模型数据)
  • 当玩家首次看到某个模型时以及在周期性重新同步时,仍会发送完整状态
  • 为了调试或对比而需要恢复旧的"每 tick 完整快照"行为时,把它设为 false

displayBonesRideTheirEntity​

  • 默认值:true
  • 为 true 时,动态模型的展示骨骼在 Java 版客户端上作为乘客骑乘在其实体上。客户端会根据它为该实体及其骑乘者所使用的同一个平滑位置来放置每根骨骼,因此坐骑、骑乘者和移动的模型会保持在一起,而不是拖在后面,而且骨骼不会发送位置数据包
  • 这适用于 /fmm mount 这类坐骑,以及其隐藏实体通过 modelViewersTrackHiddenBodies 被追踪的模型。只有当每位 Java 查看者的客户端都在追踪该实体时,骨骼才会骑乘。查看者看到的模型可能比服务器追踪其实体的距离更远(模型最远可显示到 maxModelViewDistance,默认 60 格,而 Spigot 默认只追踪 48 格内的怪物),插件也可以对某位查看者隐藏该实体。在这些情况下,以及模型死亡期间,骨骼会回到逐骨骼传送
  • 不影响基岩版玩家
  • 设为 false 可让所有模型保持原先的逐骨骼传送

riddenBoneInterpolationTicks​

  • 默认值:1
  • Java 版客户端让骑乘中的骨骼滑行到下一个动画姿势所用的 tick 数。0 表示每个 tick 都直接跳到位。1 表示在一个 tick 内滑行,这也会让旋转更平滑
  • 仅对骑乘其实体的骨骼生效;参见 displayBonesRideTheirEntity
  • /fmm boneglide <ticks> 无需编辑此文件即可修改它,直到 FMM 重载为止。参见命令

modelViewersTrackHiddenBodies​

  • 默认值:true
  • 为 true 时,每位能看到某个实体被隐藏的动态模型的 Java 玩家,还会收到该实体,作为一个装备已被剥离的隐形躯体。这样模型的骨骼就可以骑乘它,如 displayBonesRideTheirEntity 所述
  • 其他玩家和基岩版玩家仍像以前一样看不到该实体
  • 设为 false 可让隐藏的实体保持不被追踪,其骨骼也保持逐骨骼传送

idleWalkBlendTicks​

  • 默认值:5
  • 实验性。模型在 idle 与 walk 动画之间交叉淡入淡出所用的 tick 数。淡入淡出期间两个动画都继续播放
  • 0 表示立即切换,与旧版本一致
  • 基岩版玩家获得相同的淡入淡出时间。它被写入生成的基岩版动画控制器,所以他们要在资源包重新生成之后才能看到变化
  • 参见动画混合

deathBlendTicks​

  • 默认值:4
  • 实验性。模型从当前保持的姿势淡入其 death 动画所用的 tick 数。0 表示立即切换,与旧版本一致
  • 资源包重新生成后,基岩版玩家获得相同的淡入淡出时间

weightedTurning​

  • 默认值:true
  • 实验性。为 true 时,动态模型会带着惯性转向其生物的朝向:先加速,以有上限的速度转动,然后减速并停在新的朝向上而不会过冲。更大的模型转得更慢
  • 只有模型这样转向。生物本身仍然与之前完全一样地转向和行走
  • 当玩家直接骑乘其生物,或坐在其某个 m_ 座位上时,模型会瞬间转向
  • 设为 false 可让模型随其生物瞬间转向,与旧版本一致
  • 关于大小如何改变这些限制,参见转向惯性

turnSpeedCap​

  • 默认值:30
  • 实验性。大小为一格的模型的最高转向速度,单位为度/tick
  • 该上限除以模型大小的平方根,且不会超过每 tick 90 度

turnAcceleration​

  • 默认值:6
  • 实验性。大小为一格的模型每个 tick 在转向速度上增加或减少的度数
  • 它会除以模型的大小,所以更大的模型加速和减速更慢
  • 值为 0 或更小,与 turnSpeedCap 为 0 或更小一样,会让模型瞬间转向

maxModelsForProximityOverride​

  • 默认值:25
  • 近距离可见性覆盖的伪负载均衡器
  • 通常,距离玩家小于10格的模型会跳过用于选择观察者的距离和遮挡检查;其他可见性规则仍然适用
  • 在密集区域(例如多层的 NPC 中枢),这一覆盖会把玩家实际根本看不到的数十个模型 —— 位于其他楼层、墙壁背后 —— 变成每 tick 都发包的观察对象
  • 当某个世界中已加载的模型数达到此值时,该世界会禁用近距离例外。即使很近,也必须通过配置的距离和可见性检查。可见性检查采样模型中心与碰撞箱角点;没有碰撞箱则通过检查。模型稀少的世界保留例外
  • 该判断是按世界而非全局进行的,因此拥挤的中枢世界不会拖累安静的世界
  • 把它调得非常高即可实际恢复始终覆盖的行为;设为 0 则始终要求视线可见
  • /fmm packetdebug 是用来测量其效果的工具 —— 参见命令

filmicMode​

注意

不建议在录制以外的场合使用。电影模式会向每位玩家发送多得多的数据包,并让服务器为每个已加载的模型播放动画。在繁忙的服务器上会造成卡顿。

  • 默认值:false
  • 用于通过 ReplayMod 或类似的录制模组录制预告片和视频
  • 通常,只有当模型处于 maxModelViewDistance 范围内并通过视线检查时,玩家才会收到该模型。隐藏的模型会从该客户端移除并停止播放动画。回放只包含录制客户端收到的内容,因此回放镜头对准这些模型时,它们会缺失或静止不动
  • 为 true 时,每位玩家都会收到其已加载区块中的所有已加载模型,并且这些模型会持续播放动画,即使位于墙后或超出 maxModelViewDistance 也一样。已加载区块的范围是世界的视距(受客户端渲染距离限制)再加一个区块。未加载区块中的模型仍不会显示
  • 如果只想在录制期间开启,请使用 /fmm filmic on|off,而不是编辑此文件。参见命令

particleEffectsEnabled​

  • 默认值:true
  • 为 false 时,模型、道具和手持物品上都不会播放任何 Blockbench 粒子效果。模型照常加载和播放动画
  • 修改会在 /fmm reload 或重启后生效。Java 版玩家在 FMM 重载后即可看到变化。基岩版玩家要在收到重新生成的资源包后才会看到变化,因为他们的效果包含在资源包中
  • 参见粒子

maxParticlesPerEmitter​

  • 默认值:100
  • 单个模型上单个粒子效果的存活粒子数上限。若粒子文件自身的 max_particles 更低,则以其为准
  • Java 版玩家看到的每个粒子都是一个数据包实体,因此数值过高会消耗带宽

maxParticlesPerViewer​

  • 默认值:400
  • 单个 Java 版玩家在所有模型上能看到的存活粒子数上限
  • 超过上限后,该玩家的新粒子会被跳过,直到旧粒子消失。基岩版玩家在自己的客户端上绘制粒子,不计入此数量

preventPropPlacementInProtectedRegions​

  • 默认值:true
  • 为 true 时,FreeMinecraftModels 会询问 MagmaCore 已注册的保护提供者:这位具体的玩家是否可以在道具将要占据的格子里建造;如果答案是否,则拒绝此次放置
  • 拥有 freeminecraftmodels.bypassregionprotection 权限(默认:op)的玩家跳过这项 FMM 保护检查。空间检查和其他插件的限制仍然有效
  • 内置的玩家权限提供者支持 WorldGuard 和 GriefPrevention,其他插件也可注册提供者。提供者拒绝或报错都会拒绝放置;MagmaCore 还会拒绝受保护位置所有者覆盖的地点。没有拒绝的提供者,也没有受保护所有权时,此检查不增加限制
  • 拒绝时的消息为 You don't have permission to place a model here!

提供者检查这位玩家能否建造,因此领地成员身份可以允许放置。受保护位置所有权是另一项检查,没有针对玩家的豁免。这是在查询已注册的集成,并非模拟原版方块放置事件,所以不能重现所有插件的放置规则。

每次放置都会进行一次单格检查;体素化道具还会额外进行一次覆盖整个体积的检查:

道具类型检查的格子
普通(自由形态)道具与被点击方块面相邻的那一个格子 —— 也就是道具将要占据的格子
voxelize: true 道具先检查同一个相邻格子,然后检查围绕网格对齐放置点的道具旋转后占地范围(宽 x 高 x 深)内的每一个格子。只要该体积中任意一个格子不可用,整次放置就会被拒绝

体积检查之所以存在,是因为体素化道具可能有好几格宽,只测试被点击的格子会让玩家跨在领地边界上把一个大型道具塞进别人的建筑里。它在空间检查之后运行,因此当占地范围在物理上被阻挡时,Not enough space to place this model! 仍然优先。

检查范围使用 Math.round 对碰撞箱各维度取整,最小为一格。数据包屏障范围使用 ceil(size - 0.4),因此可能不同;放置检查并不保证覆盖与客户端每个碰撞格完全相同的范围。

备注

在查询提供者前会先检查权限。授予 freeminecraftmodels.bypassregionprotection 可让管理人员免于 FMM 的保护检查,同时为其他玩家保留此设置。它不会绕过空间检查,也不会撤销其他插件取消的事件。

registerCraftingRecipes​

  • 默认值:true
  • 如需仅允许购买,请设为 false 并重启。有效且已启用的配方条目仍留在商店目录中,但其 Bukkit 合成配方会被移除
  • 玩家 /fmm 可合成物品菜单及配方详情要求配方实际注册,因此关闭合成的条目不会显示在那里
  • 单个配方的 isEnabled: false 会将它从已加载目录中移除,包括商店。shopEnabled: false 仅隐藏购买入口

shop_config.yml​

可选的、基于 Vault 的家具商店有自己的配置文件,可以与主插件的行为独立启用或调整。当 Vault 或经济提供方缺失时,商店会拒绝注册。

顶级键​

键默认值描述
enabledfalse/fmm shop 的总开关。只有此项为 true 且同时存在 Vault 与经济提供方时,命令才会注册
defaultPrice100.0缺少 shopPrice 的配方所用默认价格;非正数回退为 100.0。修改此默认值不会改变已经保存的配方价格
menuTitle&8FMM - Furniture Shop显示在商店物品栏顶部的标题(支持 & 颜色代码)
priceLoreFormat&7Price: &e{price}附加到每个商店物品的 Lore 行,用于显示价格。占位符:{price}
clickToBuyLoreFormat&aClick to purchase附加到每个商店物品的 Lore 行,提示进行购买

消息键(messages.*)​

所有消息字符串都支持 & 颜色代码。

键默认值占位符
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.无
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}

每条配方的商店字段​

plugins/FreeMinecraftModels/recipes/<model_id>.yml 中的每个配方文件都会获得两个额外字段:

字段默认值描述
shopEnabledtrue该配方是否在 /fmm shop 中显示。false 本身不会禁用合成;配方启用状态与 registerCraftingRecipes 仍然适用
shopPriceshop_config.yml 中的 defaultPrice该具体物品的 Vault 货币售价

配方编辑器(/fmm craftify)在保存时会写入这两个字段,所以调整价格只需做一次文本编辑即可。

权限​

在 plugin.yml 中注册​

权限默认描述
freeminecraftmodels.*op通配符,授予 admin、deleteall、自身/他人伪装、绕过区域保护以及宠物管理员的权限
freeminecraftmodels.adminop可访问 /fmm admin(管理员内容浏览器)与 /fmm giveitem。其他管理/调试命令(/fmm location、/fmm spawn、/fmm mount、/fmm itemify、/fmm craftify、/fmm reload、/fmm stats、/fmm hitbox visualize、/fmm debug、/fmm packetdebug、/fmm filmic、/fmm boneglide、/fmm setup、/fmm initialize、/fmm recommendedplugins、/fmm downloadall、/fmm downloadallcontent、/fmm updatecontent、/fmm downloadpluginupdate、/fmm applypluginupdate、/fmm forcereinstallcontent)检查的是通配符 freeminecraftmodels.*
freeminecraftmodels.deleteallop通配符的子权限;可访问 /fmm deleteall
freeminecraftmodels.disguise.selfop允许在发送者本人身上使用 /fmm disguise / /fmm undisguise
freeminecraftmodels.disguise.othersop允许针对目标玩家进行伪装/解除伪装,以及 /fmm disguiselist
freeminecraftmodels.bypassregionprotectionop绕过 FMM 的放置与交互保护检查,包括启用 preventPropPlacementInProtectedRegions 时;不覆盖其他插件的事件取消或空间要求
freeminecraftmodels.menutrue可访问 /fmm 可制作物品菜单
freeminecraftmodels.shoptrue可访问 /fmm shop
freeminecraftmodels.petstrue可访问 /fmm pets
freeminecraftmodels.pets.adminop通配符的子权限;可访问 /fmm petadmin 和 /fmm petmigrate
nightbreak.loginop由 MagmaCore 注册,而不是由 plugin.yml 注册。共享的 /nightbreaklogin 与 /nightbreaklogout 命令需要它
nightbreak.pluginsop由 MagmaCore 注册,而不是由 plugin.yml 注册。共享的 /nightbreak plugins 命令需要它

宠物命令的说明见宠物。

模型 YML 配置​

模型的配套 .yml 与 .bbmodel 使用相同的基本名称并位于同一目录。道具与手持物品使用不同的配置部分。

道具​

isEnabled: true
name: "&6Oak Table"
lore:
- "&7Seats four"
voxelize: true
solidify: true
scripts:
- my_prop.lua
字段描述
isEnabled是否启用定义;默认为 true
name道具放置物品的显示名称。支持颜色代码。未设置时,物品以模型命名,例如 ✦ Oak Table ✦
lore放置物品的描述。支持颜色代码。任何 lore 键都会替换默认描述(放置和拾取提示以及模型 ID),空列表(lore: [])则将其移除
scripts来自 plugins/FreeMinecraftModels/scripts/ 的独立道具 Lua 脚本
voxelize按方块网格及90度增量对齐放置和旋转,并检查旋转后整个占用范围的空余空间
solidify配合体素化发送仅存在于数据包中的屏障方块,提供客户端碰撞;它们不是世界方块,会随道具一同移除

放置物品的 name 和 lore 适用于 FMM 创建该物品的所有地方:/fmm itemify、制作配方的产出、商店购买,以及从管理员菜单中取出的物品。菜单条目,例如商店的商品列表及其购买消息,仍显示由模型 ID 生成的名称。已经在背包中的物品保留旧的名称和描述。

手持物品​

isEnabled: true
material: DIAMOND_SWORD
name: "&bFrost Blade"
lore:
- "&7A sword forged in ice"
enchantments:
- "minecraft:sharpness,3"
- "minecraft:unbreaking,2"

material 选择 Bukkit 物品材质,注册手持物品而不是道具。name 和 lore 支持颜色代码。附魔使用带命名空间的小写 ID 及正整数等级。当某个附魔是套装时,物品的描述会在包含 $itemSet 的描述行处显示该套装的部件,没有这样的行时则显示在描述之后。通过 /fmm giveitem <id> 或管理员菜单获取已注册物品。道具配方和商店创建的是纸质放置物品,并非这里由作者定义的手持物品。

要为皮革盔甲染色,请在材质后添加不带 # 的 RGB 十六进制颜色,写法与 EliteMobs 装备相同:material: LEATHER_CHESTPLATE:ff8800。该后缀只对名称以 LEATHER_ 开头的材质有效,例如各部位皮革盔甲和皮革马铠。在其他材质上使用后缀,或值不是一到六位十六进制数字时,物品目录会被拒绝:/fmm reload 会保留当前目录,控制台会指出出问题的文件。已在物品栏中的物品保持原来的颜色。

更新兼容性

装备物品的 Lua 脚本已停用。手持物品定义若包含非空 scripts:、SHARPNESS,3 等无命名空间的旧附魔,或服务器上不可用的材质,会被跳过并输出诊断。FMM 不会更改作者文件。请移除旧物品脚本绑定,通过附魔定义编写效果;道具脚本仍受支持。

魔杖和法杖请添加魔法武器定义。不要把武器行为放进道具脚本或已停用的物品钩子。

运行说明​

  • /fmm reload 首先导入并验证作者定义的物品、附魔和道具配方,同时保留当前目录运行。验证失败会拒绝重载;验证成功则完整重新初始化,包括 config.yml、shop_config.yml、pets.yml、配方、模型、宠物物种、宠物行为模块及资源包输出。同时发起的初始化或重载请求会被拒绝
  • 完整初始化成功后会安排在40 tick 后发出 FmmReloadedEvent,供依赖插件重新绑定附着模型。导入器触发的较小范围内容重载也会在成功时发出事件。它会重建模型、物品、附魔、道具脚本和配方,但不会重新读取 config.yml 或 shop_config.yml。如果该内容路径清空运行中的注册表后失败,FMM 会被禁用。道具配方失败是例外:FMM 会记录 Prop recipe catalog rejected 并保持之前的配方有效。验证被拒绝不等于重载完成
  • 卸载世界时,FMM 移除道具的运行时模型,保留持久化的底层盔甲架。重新加载这些实体时,会去重并恢复道具。这不同于永久拾取或销毁道具
  • 固定的 ZIP 时间戳和有序的模型映射可减少不必要的变化,但文件系统的遍历顺序仍可能在模型不变时改变 ZIP 字节和 SHA1。因此不保证输出完全相同。参见资源包输出。
  • FreeMinecraftModels 只负责生成资源包,并不会自行托管。
  • 对于 Java 客户端,ResourcePackManager 仍是推荐的分发途径;对于混合环境,也是文档明确推荐的最稳妥路径。
  • WorldGuard、WorldEdit、GriefPrevention、Vault、floodgate 和 Geyser-Spigot 在 plugin.yml 中声明为 softdepend。WorldGuard 与 GriefPrevention 提供内置保护查询;WorldEdit 不是单独的保护提供者。Vault 加经济提供者可启用商店。对应的基岩版显示方式需要客户端识别、渲染桥接和资源包分发都可用

何时该改这些值​

本配置用于运行时行为调优,而不是内容包管理。

  • 官方包的生命周期管理请使用 /fmm setup、/fmm downloadall 和 /fmm updatecontent
  • 手动 .bbmodel 或其他本地内容导入请使用 imports 文件夹
  • 需要调整渲染模式、可视距离、交互距离、基岩版行为、保护区强制执行或自动更新下载时使用 config.yml
  • 在模型密集的世界里进行数据包/带宽调优时,使用 skipUnchangedBoneUpdates、useDeltaMetadataPackets 和 maxModelsForProximityOverride。这三项都默认为已优化的行为;false / 极高的取值是为调试和 A/B 对比而存在的,并不是推荐的生产配置
  • 仅在录制视频时使用 filmicMode(或 /fmm filmic on),录制结束后再关闭
  • 使用 idleWalkBlendTicks、deathBlendTicks、weightedTurning、turnSpeedCap 和 turnAcceleration 来调整模型的动画与转向方式。把混合时间设为 0,并把 weightedTurning 设为 false,即可恢复旧版本的瞬间切换与瞬间转向
  • displayBonesRideTheirEntity 和 modelViewersTrackHiddenBodies 默认开启。把它们设为 false 会恢复较旧的逐骨骼传送方式,此时移动的模型和坐骑可能拖在其实体后面
  • 如果粒子较多的模型消耗了过多带宽,请调低 maxParticlesPerEmitter 和 maxParticlesPerViewer,或设置 particleEffectsEnabled: false
  • 不必动代码就能调优家具商店时,使用 shop_config.yml(以及每条配方的 shopEnabled/shopPrice 字段)

已知注意事项​

  • 基岩版行为同时取决于 sendCustomModelsToBedrockClientsV2 与你更大范围的 Floodgate/Geyser/资源包链路,因此除非你已经在你具体的栈上验证过,否则请保持保守的承诺。
  • 如果商店已启用但缺少 Vault 或经济提供者,商店仍不可用,并会在启动时记录具体警告。/fmm version 仅报告插件版本;/fmm shop 缺失时请检查这些警告。