我的世界简单在MC里看“动图”——使用KUBEJS的PAINTER API
对于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停止渲染。
重载脚本并触发,就能在屏幕上看到这张动图了。