跳到主要内容

动画

动画让文字行随着时间变化,例如逐字打出来、一直变色、跑马灯。 物品、头颅、生物行没有动画。

写法​

把要动的文字包在动画标签里:

<#ANIM:名称>文字</#ANIM>
<#ANIM:名称:参数1,参数2>文字</#ANIM>
例子说明
<#ANIM:typewriter>欢迎来到星落小镇</#ANIM>最基本的写法
<#ANIM:wave:&b,&f>欢迎来到星落小镇</#ANIM>带参数:参数之间用逗号,不能有空格
{#ANIM:typewriter}欢迎{/#ANIM}大括号也可以
<ANIM:typewriter>欢迎</ANIM># 可以省略
&7[ <#ANIM:colors>公告</#ANIM> &7]一行里只有一部分在动
  • 名称不分大小写:typewriter、Typewriter、TYPEWRITER 都可以;colors 也可以写成英式拼法 colours。
  • 名称写错(找不到这个动画)时,标签会原样显示在看板上。
  • 一行可以放好几个动画标签。

内置动画​

名称效果速度播完停留参数
typewriter打字机:一个字一个字打出来每 3 tick 一个字约 1 秒无
colors整段文字不停换颜色每 4 tick 换一次无可选:颜色清单
wave一段亮色从左扫到右每 2 tick 移一个字2 秒可选:底色,亮色(默认 &b,&f)
burn从左到右逐字「烧」成另一个颜色每 2 tick 一个字2 秒可选:原色,烧过的颜色(默认 &e,&c)
scroll跑马灯:文字往左卷动每 3 tick 移一个字无无

内置动画的速度是固定的;想要别的速度,请做 自定义动画。

typewriter 打字机​

- '&f<#ANIM:typewriter>欢迎来到星落小镇</#ANIM>'

从空白开始,每 3 tick 多显示一个字,全部打完后停约 1 秒,再从头开始。

colors 变色​

- '<#ANIM:colors>&l限时活动进行中</#ANIM>'
- '<#ANIM:colors:&e,&6>金色闪烁</#ANIM>'
  • 不写参数时,依序是 &c 红、&6 金、&e 黄、&a 绿、&b 青、&d 粉红,每 4 tick 换一次。
  • 写参数就用你给的颜色清单,例如 :&e,&6、:&#FF5555,&#5555FF。自己的颜色清单只影响这个标签,不会改到其他行、其他看板的 colors 或 &u,所以不同行可以各用一组颜色。
  • 名称也可以写 colours(英式拼法),效果相同。
  • 这个动画是把颜色代码加在文字前面,所以粗体等格式要写在标签里面(&l 放在文字前),写在外面会被颜色代码清掉。

wave 扫光​

- '<#ANIM:wave>不写参数:青色底、白色扫光</#ANIM>'
- '<#ANIM:wave:&e,&f>黄色底、白色扫光</#ANIM>'
- '<#ANIM:wave:&7>只写底色时亮色是白色</#ANIM>'
  • 第一个参数是底色(不写就是 &b 青色),第二个是扫过去的亮色(不写就是 &f 白色)。
  • 亮的那一段长度约是整段文字的四分之一,扫完后停 2 秒再重来。

burn 燃烧​

- '<#ANIM:burn>不写参数:黄色烧成红色</#ANIM>'
- '<#ANIM:burn:&f,&8>白色烧成深灰色</#ANIM>'
  • 第一个参数是还没烧到的颜色(不写就是 &e 黄色),第二个是烧过之后的颜色(不写就是 &c 红色)。文字从左到右逐字变成第二个颜色,全部烧完停 2 秒,再从头开始。
  • 只写一个参数时,那是「还没烧到」的颜色,烧过的颜色仍是 &c。

scroll 跑马灯​

- '&e<#ANIM:scroll>今晚八点举办建筑比赛,奖品是钻石一组!</#ANIM>'
  • 一次显示约三分之二的文字,每 3 tick 往左移一个字,卷到尾巴后接一个空格再从头出现。
  • 适合比较长的文字;只有一两个字时会显示成空白。

内置动画与颜色​

typewriter、wave、burn、scroll 会拿掉标签里面的 & 颜色代码(只保留 &l &o &n &m &k 这类格式)。所以:

写法结果
&b<#ANIM:typewriter>文字</#ANIM>正确:颜色写在标签外面
<aqua><#ANIM:typewriter>文字</#ANIM></aqua>正确:MiniMessage 颜色也写在外面
<#ANIM:typewriter>&b文字</#ANIM>&b 被拿掉,没有颜色
<#ANIM:typewriter><aqua>文字</aqua></#ANIM>标签被当成字一个个打出来,会显示成乱码

&#RRGGBB 与 MiniMessage 标签都不要放进这四种动画的标签里面。

&u 变色代码​

- '&u这段文字会一直变色'

&u 是 colors 动画的简写:它会变成一个每 4 tick 换一次的颜色代码,影响后面的文字(不是每个字不同颜色的彩虹)。 颜色顺序与 colors 的默认相同(红、金、黄、绿、青、粉红)。

自定义动画​

在 plugins/CloudHologram/animations/ 放一个 .yml 文件,就是一个新动画,可以自己决定每一帧显示什么。

文件格式​

# plugins/CloudHologram/animations/blink.yml
speed: 10 # 每一帧显示几 tick(20 tick = 1 秒),默认 1,不能是 0
pause: 20 # 最后一帧额外停留几 tick,默认 1
steps: # 每一帧的内容,由上到下播放;{text} 会换成标签里的文字
- '&e{text}'
- '&6{text}'
- '&e&l{text}'
  • 动画名称 = 文件名(去掉 .yml)。文件名开头的 animation_ 会被去掉:animation_blink.yml 的名称也是 blink。使用时不分大小写,<#ANIM:Blink> 也可以。
  • 文件名只能用英文字母、数字、_、-。请放在 animations/ 资料夹本身,不要放进子资料夹。
  • 新增或修改后执行 /clh reload。控制台会显示「已载入 N 个动画」;文件写错时会用一句话说明是哪个文件、错在哪里。
  • 名称和内置动画相同时(例如 colors.yml),会取代内置的那一个。
  • 每一帧可以用任何 颜色写法,包括 MiniMessage 标签与渐变。

使用​

- '<#ANIM:blink>限时活动</#ANIM>' # {text} = 限时活动
- '<#ANIM:loading></#ANIM>' # 不需要文字的动画,标签中间留空

帧的时间怎么算​

  • 前面每一帧都显示 speed tick。
  • 最后一帧显示的时间约等于 pause(会被调整成 speed 的倍数)。
  • 所以 pause 要至少等于 speed,否则最后一帧根本不会出现。最简单的做法是把 pause 设成和 speed 一样。

例子:转圈的读取符号

# plugins/CloudHologram/animations/loading.yml
speed: 3
pause: 3
steps:
- '&7◐ &f读取中'
- '&7◓ &f读取中'
- '&7◑ &f读取中'
- '&7◒ &f读取中'
- '<#ANIM:loading></#ANIM>'

例子:渐变来回流动

# plugins/CloudHologram/animations/flow.yml
speed: 5
pause: 5
steps:
- '<gradient:#78EFFF:#CB9CFF>{text}</gradient>'
- '<gradient:#9AD8FF:#B8A6FF>{text}</gradient>'
- '<gradient:#CB9CFF:#78EFFF>{text}</gradient>'
- '<gradient:#B8A6FF:#9AD8FF>{text}</gradient>'

(MiniMessage 渐变需要 Paper 1.18.2+。)

动画里的变量​

  • 标签里的文字可以直接放变量:<#ANIM:typewriter>欢迎 %player_name%</#ANIM>。变量会先替换,再做动画,不需要改设定。

  • 自定义动画的帧(steps)里放变量,需要在 config.yml 开启:

    allow-placeholders-inside-animations: true

    开启后,每个 tick 都会为每位玩家重新解析一次变量,CPU 占用会明显增加。不是必要就保持 false。

播放规则与效能​

  • 所有动画共用一个时钟:开服(或 /clh reload)时从 0 开始,每 tick 前进一步。所以同一种动画在不同看板、不同玩家眼中完全同步。
  • 动画每 tick 计算一次,只有文字真的变了才会发送给玩家。
  • 只对在看板 update-range(更新范围)内的玩家播放。
  • 动画很多、很长、看的人很多时会增加负担。可以:
    • 缩小看板的 update-range(/clh hologram setupdaterange <看板> <范围>);
    • 不需要动的看板或行加上 DISABLE_ANIMATIONS 旗标。
加了 DISABLE_ANIMATIONS 之后

动画标签不会被处理,<#ANIM:...> 与 &u 会原样出现在文字里。停用动画时请顺便把标签拿掉。