📝 CustomNameplates 更新:2.4 版本到 3.0 概览

CustomNameplates插件得到了重大更新,其灵感来自 Minecraft 1.19.4+ 中引入的文本展示实体。本文将详细介绍 2.4 版本到 3.0 版本的所有更新,涵盖之前版本的问题修复和性能优化。

内置占位符系统: 该插件不再对 PlaceholderAPI 具有硬依赖性。它现在包含一个内置的占位符解析系统,速度更快、效率更高。所有内置占位符均以%np_开头,而 PlaceholderAPI 中的扩展占位符以%nameplates_开头。与 PlaceholderAPI 相比,使用内置占位符可显着提高性能,使解析过程显着加快!

3.0 版本性能优化

在 2.x 版本中,插件引入了refresh-intervalcheck-interval选项,以减少条件和变量解析带来的性能消耗。虽然这些选项在一定程度上降低了更新频率并提高了性能,但复杂的解析过程仍然导致对相同条件和变量的重复解析。

/configs/bossbar.yml (2.0)

在 3.0 版本中, CustomNameplates 的性能现在仅取决于所使用的变量类型和刷新间隔。这意味着即使同一个变量或条件被多次使用,插件也只会更新一次,大大减少了因重复解析带来的资源消耗。如果你对这种优化是如何实现的感兴趣,可以查看 GitHub 上的源代码,其中包括一个复杂的预解析系统。

config.yml中添加了三个新的配置选项,以更好地管理解析频率:

  • default-condition-refresh-interval (默认条件解析间隔)

  • default-placeholder-refresh-interval (默认占位符解析间隔)

  • placeholder-refresh-interval (特定变量的自定义解析间隔)

这些间隔以游戏刻(每刻 50 毫秒)为单位进行测量。通过这些配置,用户可以为性能要求较高的变量(例如基于 JavaScript 的变量)分配更长的解析间隔,以减少服务器负载。

config.yml

对于条件,配置如下所示(使用refresh-interval ):

conditions:
  示例_条件:
    type: "一些_条件"
    value: ...
    refresh-interval: 100 # 单位为刻
/configs/bossbar.yml (3.0)

动态条件解析调整

新版本支持根据条件使用的上下文动态调整解析间隔:

  • 不同刷新间隔处理相同条件:如果同一个条件在多个地方使用的刷新间隔不同,插件会根据需求动态调整解析。例如,一个条件在 BossBar 显示中刷新间隔为10,而在 conditional-text 中间隔为5,则插件会先以 10 的间隔解析该条件,但在解析 conditional-text 时会调整为5。

准确的字符前进量计算

在 3.0 版本中,字符前进量的计算方法变得更加精确,已与最新的 Minecraft 客户端更新保持一致。font-width-data.yml文件已更名为advance-data.yml,并且在config.yml中新增了一个较大的配置部分,font-templates,用于管理Minecraft字体提供者提供的各种字符类型

  • 字体配置选项:

    • file :指向/CustomNameplates/font目录中的文件。

    • custom :指定是否使用客户端提供的默认 PNG 位图字体。

    • generate :指示是否在生成的资源包中包含此字体的副本。

这些选项允许您自定义插件中使用的字体并管理它们的来源或生成方式和位置。

缓存与内存优化

所有生成的字体前进量数据将临时存储在/CustomNameplates/tmp文件夹中,这样可以加快后续服务器启动,避免每次都重新计算字体数据。这种缓存机制提高了启动性能。

将 Descent-Text 重命名为 Shift-Text

由于现代字体日益复杂,单个descent参数已不再足够。因此, descent-text已重命名为shift-text 。 ( %nameplates_descent_xxx% -> %np_shift_xxx% ) 此更改还允许某些配置仅使用必要的字体子集。例如,显示剩余货币的动作栏可能仅使用 ASCII 字符集,从而减少不必要的字体集加载,进而最大限度地减小资源包大小并提升客户端性能。

/configs/custom-placeholders.yml

Shift-Text 格式示例:

# custom-placeholder.yml
shift-text:
  player_name:
    text: "%player_name%"
    font: shift_0

font字段必须在config.ymlshift-fonts部分中注册。例如:

shift-fonts:
  shift_0:
    - space
    - nonlatin_european:7
    - accented:9
    - ascii:7
    - unifont_jp
    - unifont
  shift_2:
    - space
    - ascii:-15

冒号:后面跟着的数字表示用于调整字符位置的偏移值。

对于位图字体,数字越大, y值越高。对于 TrueType 字体 (TTF),数字越大, y值越低。

Shift-Text 内存优化

在以前的版本中,创建多个支持 Unicode 的descent-text实例会导致缓存冗余字体前进量数据,每个副本包含超过 50,000 个字符。然而在 3.0 版本中,创建多个shift-text实例将不再增加内存使用量,消除冗余数据存储并改进内存管理。

自动字符宽度计算

在之前的版本中,用户需要手动输入width参数来设置字符前进量,这往往会导致结果不准确。新版本中,插件采用与客户端相同的计算方式,自动计算添加字符的前进量。因此, width选项已被弃用,从而简化了过程并提高了准确性。

新版本删除了bubble设置中的display nametext format配置。这些选项现已移至/configs/bubble.yml以适应新的多行气泡功能。这一变化使得气泡的组织更加合理,也提供了更多自定义的灵活性,以便与更新的系统相匹配。

/contents/bubbles/chat.yml (2.0)
/configs/bubble.yml (3.0)

您会注意到该插件注册了一种名为shift_0字体,该字体没有偏移量。这是因为有一个特殊的客户端选项叫“强制使用Unicode字体”。当用户启用此选项时,他们会看到更细的字体,从而导致铭牌、背景、气泡和文本之间的对齐问题。为了解决这个问题,该插件注册了shift_0字体,以确保客户端和服务器的字体前进量数据保持同步,强制字体正确对齐。这保证了即使在使用Unicode字体时,插件的最终视觉效果也能与预期设计一致。

边距配置调整

在以前的版本中, left-marginright-margin是背景配置的一部分。在 3.0 版本中,这些选项已移至background-text 。另外, nameplate-text中引入了边距的概念,允许用户更灵活地配置铭牌的边距。

/contents/backgrounds/bedrock_1.yml
/configs/custom-placeholder.yml (3.0)

您会注意到之前的remove-shadow: true选项现在已更改为shadow: false 。这是由于新版本使用更新的颜色代码<#F0F0F0>来消除阴影,这与旧版本的处理方式不同,特别是在处理半透明图像时。如果您继续使用remove-shadow ,它将应用旧版本的颜色代码。如果您对之前的行为感到满意,则无需更改此选项。

动态颜色前缀支持

新版本删除了铭牌中的玩家名字颜色选项,并通过switch-text将其替换为可自定义的颜色前缀。这允许用户完全自定义颜色,包括动态渐变颜色,使铭牌更加灵活和视觉吸引力。

/contents/nameplates/cat.yml
/configs/custom-placeholder.yml
/configs/nameplate.yml

玩家标签显示的变化

玩家标签现在直接以文本形式显示在玩家身上,省去了与基于团队的插件兼容性需求。因此,铭牌只需在后端服务器上安装,所有针对队伍插件的兼容性设置已从config.yml中移除。

这种文本显示的显示方式显著减少了服务器带宽使用,并在玩家骑乘其他实体(例如船或马)时表现更佳。此外,玩家可以立即预览他们的铭牌,毫无延迟。

config.yml (2.0)

着色器移除了旧版本的实体名称文本偏移代码,并添加了一种新的去除阴影的方法。同时,为了向后兼容,它保留了旧的去阴影方法。这让用户可以根据自己的偏好或需求在新旧去阴影技术之间进行选择。

着色器 (2.0)
着色器 (3.0)

这有帮助吗?