对于Painter API的介绍和使用可以参考官方WIKI或是BBS综合教程

须知:因为光靠原版和KJS不能直接播放gif、mp4等“动态影像”,这里采用了按帧分解的方法,网上很容易找到在线工具,把gif转化成数字编号的图片。然后快速依次播放,给人动起来的错觉。

先上代码:

onEvent('player.chat', function (event) {
let quanti=40;
let speed=5;
    for (i = 1; i < quanti; i++) {
        event.server.schedule((i/speed) * SECOND, event.player, function (callback) {
            let number = callback.timer*speed / 1000
            event.player.paint({
                example_rectangle: {
                    type: 'rectangle',
                    x: 0,
                    y: 0,
                    alignX: 'center',
                    alignY: 'center',
                    w: 60,
                    h: 40,
                    Draw: 'always',
                    texture: 'kubejs:image/remake/' + number + '.png'
                }
            })
        })
    }
event.server.schedule(quanti* SECOND/speed, event.player, function (callback) {
            
            event.player.paint({
                example_rectangle: {
                    type: 'rectangle',
                    x: 0,
                    y: 0,
                    alignX: 'center',
                    alignY: 'center',
                    w: 60,
                    h: 40,
                    Draw: 'always',
                    remove: true
                }
            })
        })


})

使用player.chat是为了方便触发以进行测试,实际上也可以监听其他事件,这样就能做出过场PPT、战斗特写战败CG等效果。

quanti是用来组成动图的图片总数,可根据实际情况自行修改。

speed是图片播放速度,可根据实际情况自行修改调整。

x,y:相对坐标。w,h:矩形宽高。

texture是图片的路径,实际相当宽松,不需要有对应的注册物品/方块,只需要用资源包等方式,放在某个modid下即可。这里我就在kubejs\assets下创建了kubejs\image\remake路径,然后把源樱被撞的gif帧放了进去。

number对应此时该播放的图片序号。

在播放完所有帧后,按时间顺序,通过remove: true停止渲染。

重载脚本并触发,就能在屏幕上看到这张动图了。


简单在MC里看“动图”——使用KUBEJS的PAINTER API-第1张图片