全息图🔗
简介🔗
自 9.6.2.0 版本起,全息图在 1.20+ 服务器上将默认使用新的改进外观。本页大部分示例都基于这一新系统。
CMI 全息图功能让你能够以全息方式显示文本或图标。
你甚至可以创建可点击的全息图,以玩家身份或控制台身份执行任意命令。
全部基于数据包(packet)实现,物品仅存在于客户端侧,可防止它们被第三方插件移除。
游戏内编辑器允许你添加、编辑和删除行,使全息图可点击、将全息图重新定位到你的位置、调整全息图的位置、更改激活范围、更新范围等。
支持 PlaceholderAPI,允许你在全息图中显示来自其他插件的信息,且可为不同玩家显示不同信息。创建行时可使用诸如 %cmi_user_name% 之类的占位符。完整列表可在 zrips.net/cmi/placeholders 查看。
全息图可以有多个页面,在需要时显示。你可以在本页找到如何设置的示例。
全息图的行可以按需以一定间隔更新,当不需要快速更新时可节省服务器资源。
当你移得太远时,全息图会隐藏以最小化客户端负载,并且只在玩家靠近时更新。
图标可用于全息图的行中以进一步自定义。
如果玩家无法直接看到全息图,它将被隐藏。这有助于最小化客户端的 TPS 损失(由于 Minecraft 的处理较差),因为玩家不会看到位于墙后或另一层的全息图。
创建全息图🔗
要创建新的全息图,使用 /cmi hologram new [name]。例如,要创建一个名为 head 的新全息图,命令为 /cmi hologram new head。你也可以直接执行 /cmi hologram 然后点击 [+] 开始创建新的全息图。
现在你可以通过点击绿色 [+] 号并在聊天中输入要显示的内容来向全息图添加行。这将定义全息图中的每一行。或者,你可以看着全息图并执行 /cmi hologram aimlines 快速打开你所看全息图的行编辑器。
要调整全息图的设置,点击 <Open settings GUI>(打开设置界面)。这将允许你进行更改,例如:更新频率、更新范围、使其可点击,甚至移动到新位置。或者,你可以在看着要编辑的全息图时执行 /cmi hologram aimgui。
要查看所有全息图的列表,只需输入 /cmi hologram,你将得到按与当前位置距离排序的列表。这意味着离你最近的全息图会排在列表顶部。你可以点击所需的全息图名称开始编辑它。
ICON:[value]🔗
每行只能有一个图标。
浮动图标仅适用于 1.10+ 及以上版本的服务器。使用新的显示方法(1.20+ 服务器)时,ICON 和 SICON 都会产生相同的静态图标。
基础语法为:ICON:[itemName/id]:[data]
示例:
- ICON:stone 将创建一个浮动的石头图标,而 ICON:stone:3 将显示浮动的闪长岩。
- ICON:head:[playerName] 将显示指定玩家的头颅。
- ICON:head:%cmi_user_name% 将显示正在查看全息图的玩家的头颅。
- ICON:head:base64 将显示来自 minecraft-heads.com 等网站的自定义 base64 皮肤头颅(那一长串字符)。
- ICON:Stone%enchanted% 将显示附魔图标,在你的当前语法后添加 %enchanted%。发光图标同理,把 %enchanted% 换成 %glowing% 即可。
- ICON:Stone-64 可通过使用 - 并指定数量来显示一组物品。
- ICON:%itemInHand% 可用于显示玩家手持的物品作为图标。
要显示带自定义模型数据的图标,在你的语法后添加 %customModelData:[id]%,例如:ICON:bow%customModelData:4%。使用此格式你可以实现类似效果:ICON:materialName%customModelData:[id]% 将显示带自定义模型数据的图标,把 %customModelData:[id]% 添加到当前语法末尾。
SICON:[value]🔗
定义不会上下浮动的静态图标。
静态图标使用与浮动图标相同的语法。区别在于基础变量是 SICON 而不是 ICON。
全息图底板 (Hologram Boards)🔗
自 9.8.6.0 版本起,全息图可以拥有底板(Board),为全息图提供背景支撑。
这可以为全息图引入一定的厚度。通常任何方块都可以在这里使用,并能以常规方式进行方向设置,如缩放、偏移和旋转。请注意旋转在每条轴上限制为每侧 90 度。增加底板的厚度会将文本向前移动,这也会影响交互平面,但只影响正面。
动画 (Animations)🔗
全息图可以有两种主要动画,一是淡入/淡出,二是围绕其轴自动旋转。 淡入/淡出以出现或消失所需的 tick 数来定义,默认是即时的,而设置为 5 tick 之类的值可以达到渐显效果(见素材截图)。
虽然效果很小,但它可以为全息图出现在玩家面前时增添额外的流畅感,而不是瞬间出现。
围绕其轴的旋转将允许全息图自动旋转。
但请注意,素材示例并非特殊功能,而只是 3 个重复的全息图,具有 120 度的不同 yaw 偏移,从而创造出旋转错觉。旋转发生在全息图的原点上,但你可以偏移整个全息图,创造它围绕完全不同点旋转的错觉。
可点击全息图 (Clickable holograms)🔗
默认情况下,全息图不可点击。你需要为每个全息图在 GUI 中点击 Stick(木棍)图标来启用它。
然后你可以通过点击 Bow(弓)图标来定义要执行的命令。支持专有命令(specialized commands)。请注意,这将定义玩家点击全息图交互区域任意位置时要执行的命令。要基于玩家点击的位置进行更精确的命令,你需要使用 CText 格式,全息图行应看起来像 <T>Click Me</T><C>cmi heal [playerName]</C>,当玩家点击这段特定文本时将执行所定义的命令。这会覆盖已定义的全局命令:只有当玩家点击 CText 文本时才执行其中定义的命令,否则将触发全局命令。每行可以使用多个可点击文本,只需重复输入 <T>Heal Me!</T><C>cmi heal [playerName]</C><T> Feed Me!</T><C>cmi feed [playerName]</C>。
在全息图中使用 CText 时需要考虑的一点是,文本宽度是估算的,因为我们实际上并不真正了解客户端上文本的精确边界,这基于他们的资源包和所使用的字体,可能导致检测错位。默认检测基于默认的 Minecraft 字体,你仍然可以通过内置 GUI 调整检测区域,所以请确保标记的检测区域(蓝点)从边缘到边缘完全覆盖整个文本,以获得最佳和最准确的检测。这应包括整个文本而不仅仅是可点击部分,插件应该能根据文本自动大致准确地检测其区域,但如果你有占位符,则可能不完全准确,因此请根据需要调整。
要记住的一点是,由于整个检测基于玩家的视线方向和位置,你移动相机与全息图反映之间可能会有明显延迟,大约 0.25 秒,这不算多,但可能让它看起来卡顿,这只是游戏的一般工作方式,我们对此无能为力。
你可以通过点击 Paper(纸)图标来切换玩家点击全息图时显示的特殊粒子。粒子默认启用。
悬停效果 (Hovering Effect)🔗
自 CMI 9.1.2.x 版本起,插件可以检测玩家悬停在全息图上,并创建粒子效果或更改玩家正在查看的行的文本。
悬停效果遵循与自定义文本相同的格式,但有一些限制。
可以使用文本、悬停和命令变量,配合专有命令支持,提供了完整的功能范围。
以下变量被识别:
- <T>Text</T> – 定义将要显示的文本
- <H>Hover-over text</H> – 定义悬停在行上时显示的文本
- <C>cmi heal</C> – 定义点击此行时以控制台身份执行的命令
如果你的 CText 带有命令且不包含悬停部分,那么我们会自动为纯文本和悬停时包含不同的颜色(可在 GUI 中更改),这仅在提供的 CText 包含命令时才有效;而如果你只想有不同的悬停效果而不触发命令,则需要手动定义。
你可以创建类似这样的示例:
<T>{#gray>}Free heal{#edward<}</T><H>{#edward>}&lFree heal{#gray<}</H><C>asConsole! gcooldown:3?! cmi heal [playerName]</C>
多个命令可用 ;; 分隔。
你仍然可以有一个在玩家点击任意全息图行时执行的命令,同时如果玩家点击特定行,则可以有不同的命令。
悬停粒子可以通过点击全息图设置 GUI 中的 Green Carpet(绿色地毯)图标来禁用。
粒子类型可以通过点击其下方的图标更改。
要更改悬停粒子的数量,点击 Oak Fence(橡木栅栏)图标。
粒子的额外高度、宽度和偏移可通过点击 Brick Wall(砖墙)和 Stone Brick Wall(石砖墙)图标更改。
交互区域可以通过更改其大小和实际相对位置来调整。请注意,如果你使用带底板的双面全息图,那么引入的厚度可能导致背面错误检测悬停位置,因为我们只为了效率检查单个平面,所以要么使用薄的底板,要么避免可点击的双面加厚底板。
创建多页 (Creating pages)🔗
默认情况下,所有文本都在一个页面中。
要创建另一个页面,只需插入一行文本 !nextpage!。
玩家只会看到第一页(直到第一个 !nextpage! 为止)。
执行 /cmi hologrampages [holoName] (playerName) (next/prev/[pageNumber]) 将改变玩家正在查看的页面。
请注意,每个玩家看到的是自己的页面。
你可以拥有任意多的页面,但通过游戏内编辑器管理它们可能更困难,因为一次能显示的行数有限。
例如,让我们创建一个名为 Rules 的全息图并添加以下行:
接下来,通过点击聊天中的 <Open settings GUI> 打开设置 GUI。然后通过点击 stick(木棍)图标使全息图可交互,再点击 Book(书)图标启用自动分页按钮,这些按钮将包含在全息图底部,玩家点击它们可在全息图页面之间导航。或者你也可以创建自己的导航按钮,创建包含如 <T><<<< </T><C>[prevPage]</C><T> >>>></T><C>[nextPage]</C> 文本的行,在这种情况下 [prevPage] 和 [nextPage] 是特殊变量,点击时会触发此特定全息图的页面切换。
点击类型 (Click Types)🔗
当你有可交互的全息图时,可以使用 5 种点击类型:
click:left!– 命令只在玩家左键点击且未潜行时执行。例如:click:left! cmi heal [playerName]click:leftshift!– 命令只在玩家左键点击且潜行时执行。click:right!– 命令只在玩家右键点击且未潜行时执行。例如:click:right! cmi feed [playerName]click:shiftright!– 命令只在玩家右键点击且潜行时执行。- 以上均不是 – 任何点击类型都会触发命令。
其他设置 (Other settings)🔗
针对 1.20+ 服务器🔗
- 显示方法(Display method) – 1.20+ 服务器默认使用新的显示方法。较旧的服务器必须使用过时的方法。1.20+ 服务器可以选择新方法或旧方法,但强烈建议使用现代方法,它对服务器和客户端都更高效。或者你可以给玩家 cmi.hologram.seeold 权限节点,让玩家看到旧类型全息图,这在你的服务器有无法处理现代全息图的旧客户端时很有用,但请记住旧全息图限制更多,应避免更改缩放、偏移等,因为这些不会对旧类型全息图产生相同效果。默认情况下新老类型全息图的尺寸应匹配。
- 启用(Enabled) – 如果你不再希望全息图显示给玩家,可以禁用它。或者启用查看它的权限要求,可以将其对其他所有人隐藏,同时仍允许工作人员或特定玩家看到并与之交互。
- 跟随类型(Follow type) – 固定(Fixed)、垂直(Vertical)、水平(Horizontal)、居中(Center)。在垂直模式下,全息图将始终面向玩家并在 Y 轴上旋转。固定位置始终面向同一侧,可以修改或动画化。水平模式将在 X 轴上跟踪玩家。居中模式将始终面向玩家。
- 双面(Double sided) – 仅在跟随类型设置为固定或水平时可用。这将创建全息图的背面,使其可从两侧看到。
- 文本对齐(Text alignment) – 居中(Center)、左(Left)、右(Right)。
- 文本阴影(Text shadow) – 启用或禁用文本的阴影。
- 文本透明度(Text Alpha) – 0 到 255 之间的值,定义文本的透明度。
- 文本宽度(Text width) – 自动换行前的文本宽度,如果你有可交互的全息图,则避免文本行换行,因为它可能扰乱交互检测。
- 文本填充(Text filler) – 定义要填充空格以达到的行宽。这有助于将文本对齐到两侧,例如排行榜。在你的全息图行中使用 %filler% 以自动填充空格达到所需宽度。
- 文本透视(Text seethrough) – 启用从方块后面看到全息图文本的能力。这仅适用于文本部分。如果与底板组合,你可以让文本在从方块后面看之前不可见。
- 光照等级(Light levels) – 全息图的光照,可以覆盖世界中的一般光照等级。设为 -1 将自动调整。
- 背景颜色(Background color) – 背景的基础颜色。
- 背景透明度(Background alpha) – 背景的透明度,0 到 255 之间的值。
- 基础偏移、方向、缩放(Base offset, direction, scale) – 定义全息图的一般位置、缩放和方向,将同时影响底板、文本和图标。
- 启用底板(Board enabling) – 将在全息图后面创建类似方块的底板作为支撑。建议在启用底板时将背景透明度设为 0 以获得最佳效果。
- 底板缩放、方向和偏移(Board scale, direction and offset) – 影响底板的位置、缩放和方向。这与全息图其余元素无关。
- 底板材质(Board material) – 可以是任意方块类型材质。
- 图标缩放、方向和偏移(Icon scale, direction and offset) – 平等地影响所有图标。
针对盔甲架全息图🔗
- 视线(Line of sight) – 定义全息图在方块后面时是否应该消失,仅适用于旧全息图。
位置与范围页面 (Location and Range Page)🔗
- 更新范围(Update range) – 定义玩家必须处于其中(以方块为单位)的范围,全息图的行才会更新。这基于从全息图原点开始的球形范围。
- 显示范围(Show range) – 定义玩家必须处于其中(以方块为单位)的范围,全息图的行才会出现。这基于从全息图原点开始的球形范围。
- 所需权限(Permission required) – 定义玩家是否应需要 cmi.hologram.[hologramname] 权限节点才能看到全息图。
- 提示:你可以使用
&u使该行变成每次更新都会变化的随机颜色。
交互页面 (Interaction Page)🔗
全息图交互默认禁用,只有在需要与全息图交互时才应启用。
- 显示悬停粒子(Show hover particles) – 启用或禁用围绕可交互全息图显示的粒子。这主要帮助作为视觉指示器,当玩家悬停在全息图上时提示可点击。
- 粒子(Particles) – 要生成的粒子数量,默认粒子会顺时针围绕全息图移动,如果定义了多个,则它们会等距分布在全息图周边。
- 粒子类型(Particle type) – 可以是任何带自定义选项的粒子,从特殊的 GUI 编辑器中选择。
- 粒子间距(Particle spacing) – 粒子每 tick 生成一次,并将围绕周边移动所定义的量。可以是负值让它们"向后"移动。
- 粒子缩放与偏移(Particle scale and offset) – 将定义粒子应显示的平面,这与交互平面无关,允许你根据需要更精确地调整粒子路径。
- 启用分页按钮(Enable pagination buttons) – 将自动在全息图底部包含分页按钮,让你可以简单地点击切换全息图页面。这仅在全息图有多于一个页面时有效。
- 命令(Commands) – 定义点击全息图任意位置时执行的全局全息图命令。
- 显示粒子(Show particles) – 显示或隐藏点击全息图时的粒子,这仅影响全局命令而非 CText 命令,后者使用配置文件中的粒子预设。
- 交互尺寸与偏移(Interaction size and offset) – 编辑时你应该看到几个蓝点指示交互区域,如果区域未自动正确检测,你可以调整它以正确适配现有文本。边界应从边缘到边缘包含文本部分且不多,这将使悬停检测更准确,尤其在使用 CText 可点击行部分时。
- 基础与悬停前缀(Base and Hover prefix) – 当 CText 行带有命令时使用的颜色代码,这将自动在可点击文本前以及悬停时包含所定义的颜色代码,简化仅应在悬停时改变颜色的可点击部分的设置。
动画页面 (Animations Page)🔗
- 页面切换间隔(Page change interval) – 定义自动切换全息图页面的间隔(以秒为单位)。如果玩家手动切换页面,将跳过此切换周期。
- 更新间隔(Update interval) – 定义更新全息图行的间隔(以秒为单位)。如果你有静态文本,请将更新间隔设为 0。可交互全息图可以绕过此间隔,并在需要时独立于实际更新间隔更新文本。
- 自动旋转(Auto rotate) – 定义每次 tick yaw 角度应变化的度数,可以设为负值使其逆时针旋转。
- 淡入(Fade In) – 显示全息图所需的 tick 数,更高的数字会让全息图出现得更慢,设为 0 则立即出现。
- 淡出(Fade out) – 与淡入相同,只是用于淡出。
图片与动画 (Images and Animations)🔗
自 CMI 9.0.2.0 版本起,你可以借助全息图添加图片或创建简单动画。 请注意,透明像素将填充 _| 以保持每行的适当间距。
要添加图片,你需要使用以下格式之一:
img:helmet:[playerName],将显示带覆盖层的玩家头颅。例如:img:helmet:Zrips。目前无法使用动态玩家名。img:head:[playerName],将显示不带覆盖层的玩家头颅。例如:img:head:Zrips。目前无法使用动态玩家名。- 最后一个选项是提供 CMI/Images 文件夹中的直接图片路径,例如
img:diamond.png。
并非所有图片都是你想要的大小。要调整图片大小,你可以添加 2 个额外变量。
要将图片高度设为 12 像素,你可以使用 img:diamond.png 12,而宽度将根据原始图片的大小自动缩放。
你可以使用 img:diamond.png 6 6 同时定义两种尺寸,这将保持图片为 6×6 大小,无论原始图片多大。
如果你只想设置宽度而自动缩放高度,可以使用 0。img:diamond.png 0 9 将把图片宽度设为 9 像素,并根据原始图片大小自动缩放高度。
默认情况下,如果未定义,图片将为 8 像素高。
Nyan cat 的基础示例(用多页 + 快速页面间隔实现简单动画):
PageInterval: 0.1
Range: 46
RangeExtra: 46
Spacing: 0.25
SpacingIcon: 0.5
Lines:
- img:nian/0.gif 32
- '!nextpage!'
- img:nian/1.gif 32
- '!nextpage!'
- img:nian/2.gif 32
...
注意!如果使用旧的盔甲架方法,避免创建超过 100 行的全息图。服务器可以处理更大的甚至动画的全息图,但客户端不能。
编辑或删除全息图🔗
你可以输入:/cmi hologram,这将按"离你最近"的顺序列出全息图。
你可以通过按下它前面的红色 X 删除全息图。此操作无法撤销。
要编辑全息图,你可以点击名称打开其设置。完成后,顶部会有文本"X 删除它。
便捷命令 (Convenient commands)🔗
- /cmi hologram aimgui – 打开你所看的全息图 GUI
- /cmi hologram aimlines – 打开你所看的全息图行编辑器
- /cmi hologram lastgui – 打开你上次编辑的全息图 GUI
- /cmi hologram lastlines – 打开你上次编辑的全息图行编辑器
保存文件示例 (Save File Examples)🔗
顶部游戏时长 (Top playtime)🔗
topplaytime:
Loc: LT_Craft;457.9;156.22;996.6
Board:
Enabled: true
Dimensions: 4;2.8;1.21
Material: ACACIA_SHELF
Direction: 180;0;0
Offset: 0;0;0.98
Text:
Shadow: false
BAlpha: 0
Settings:
Interval: 600
Lines:
- '{#73C144}&l&nᴛᴏᴘ 10 ᴘʟᴀʏᴛɪᴍᴇ'
- <head:%cmi_playtimetop_cname_1%:false> {#73C144}1. {#E7E7E7}%cmi_playtimetop_name_1%%filler%&r {#E7E7E7}%cmi_playtimetop_time_1%
- <head:%cmi_playtimetop_cname_2%:false> {#73C144}2. {#E7E7E7}%cmi_playtimetop_name_2%%filler%&r {#E7E7E7}%cmi_playtimetop_time_2%
- <head:%cmi_playtimetop_cname_3%:false> {#73C144}3. {#E7E7E7}%cmi_playtimetop_name_3%%filler%&r {#E7E7E7}%cmi_playtimetop_time_3%
- <head:%cmi_playtimetop_cname_4%:false> {#73C144}4. {#E7E7E7}%cmi_playtimetop_name_4%%filler%&r {#E7E7E7}%cmi_playtimetop_time_4%
- <head:%cmi_playtimetop_cname_5%:false> {#73C144}5. {#E7E7E7}%cmi_playtimetop_name_5%%filler%&r {#E7E7E7}%cmi_playtimetop_time_5%
- <head:%cmi_playtimetop_cname_6%:false> {#73C144}6. {#E7E7E7}%cmi_playtimetop_name_6%%filler%&r {#E7E7E7}%cmi_playtimetop_time_6%
- <head:%cmi_playtimetop_cname_7%:false> {#73C144}7. {#E7E7E7}%cmi_playtimetop_name_7%%filler%&r {#E7E7E7}%cmi_playtimetop_time_7%
- <head:%cmi_playtimetop_cname_8%:false> {#73C144}8. {#E7E7E7}%cmi_playtimetop_name_8%%filler%&r {#E7E7E7}%cmi_playtimetop_time_8%
- <head:%cmi_playtimetop_cname_9%:false> {#73C144}9. {#E7E7E7}%cmi_playtimetop_name_9%%filler%&r {#E7E7E7}%cmi_playtimetop_time_9%
- <head:%cmi_playtimetop_cname_10%:true> {#73C144}10. {#E7E7E7}%cmi_playtimetop_name_10%%filler%&r {#E7E7E7}%cmi_playtimetop_time_10%
多页示例 (Multi page example)🔗
holopages:
Loc: LT_Craft;474.34;153.9;989.9
Board:
Enabled: true
Dimensions: 0.82;0.12;0.04
Direction: 90;0;0
Interaction:
Particle:
Spacing: 0.04
Effect: Trail;8;{#FFFFFF}
Count: 6
Dimension: 0.28;0.02
HoverPrefix: '&7&n'
Enabled: true
Dimension: 0.33;0.01
Animation:
In: 5
Out: 5
Text:
Align: LEFT
BAlpha: 0
Double: true
Page:
Auto: true
Settings:
Dir: 0;90;0
Range:
Visual: 16
Lines:
- '{#f7d486}Ah, a new face.'
- '{#f7d486}That’s a rare sight around here.'
- '{#f7d486}Most folks pass through'
- '{#f7d486}without really seeing the place.'
- '!nextpage!'
- '{#f7d486}If you’ve got time, stay a while.'
- '{#f7d486}There’s more here than it first shows'
- '{#f7d486}just have to know where to look.'
价值显示与点击全息图出售 (Worth display and selling by clicking on hologram)🔗
Worth:
Loc: LT_Craft;444.12;154.24;995.73
Board:
Enabled: true
Dimensions: 0.8;0.7;0.01
Material: BLACKSTONE
Offset: 0;-0.31;0
Interaction:
Particle:
Effect: Dolphin
Commands:
- asConsole! cmi sell hand [playerName]
Enabled: true
Dimension: 0.95;1.38
Offset: 0.95;1.38
Text:
Shadow: false
BAlpha: 0
Double: true
Icon:
Scale: 1.5;1.5;2
Offset: 0;-0.32;0
Settings:
Scale: 1.1;1.1
Range:
Update: 16
Visual: 16
Interval: 1
Lines:
- '&r {#gray} %cmi_iteminhand_displayname% {#white}x %cmi_iteminhand_amount% &r'
- '{#gray}Worth:{#white} %cmi_iteminhand_worth%'
- ICON:%iteminhand%
悬停检测测试 (Hover detection test)🔗
grid:
Loc: LT_Craft;430.08;153.72;995.43
Interaction:
Enabled: true
Dimension: 0.21;0
Lines:
- <T>⬛</T><C>cmi heal</C><T>⬛</T><C>cmi heal</C>...
该示例通过大量 <T>⬛</T><C>cmi heal</C> 组合构成网格,用于测试悬停检测区域是否精确覆盖每一小格文本。
(内容由AI生成,仅供参考)