前言
首先,这个mod的实现逻辑是基于3D动画中常用的关键帧。
什么是关键帧呢?通俗来说就是设定好一个3D物体的起始和最终状态,由电脑补全这中间的物体变化过程。
在放置方块这个动画中,方块的最终状态已经完全决定了,那么我们要完成的则是设定好方块的起始状态
正文
安装完mod后,先ESC-选项-资源包-左侧待选界面,找到A Good Place Sample Pack资源包,不要装上,打开包文件夹。
最好使用一款能不解压进行修改的压缩软件打开A Good Place Sample Pack.zip,一路打开进最里面的文件夹,我们可以看见
flowers.json
old_animation.json
pop_in.json
readme.md
其中readme是模组作者写的简介及对应参数含义,在github上也可以看到,用网页翻译得到这张表
打开pop_in.json,以下黄色部分文字为我的解释,不要复制
{
"predicates": [
],
这一段是指定哪些方块生效动画,在flowers.json里,这一段是
"predicates": [
{
"type": "matching_blocks",
"blocks": "#minecraft:flowers"
}
意思是只有原版内容里的花会生效,由于这里没写,所以是作用于所有方块
"priority": 1,
这是优先级,由于这篇代码的优先级为1,并且没有筛选方块,所以如果没有更高优先级,它会作用于所有方块。但是flowers.json的优先级更高,所以原版内容里的花会使用flowers.json的动画预设
"duration": 4,
这是动画长度,单位是tick,20游戏刻等于一秒,建议在调试动画时设置为100以便观察其变化
"scale": 0.3,
初始大小(一定要看这篇教程的前言),这里的0.3指的是方块大小的0.3倍
"scale_curve": -0.7,
大小变化曲线,是一个较复杂的东西,这里不好做出解释,想了解的建议去b站学习3D动画曲线相关教程。
这个值的范围在-1~1之间,为0时将会随时间均匀变化大小,为-0.999或0.999这样的极端值时会出现随时间加速和减速变化。
"translation": {
"x": 0,
"y": 0,
"z": 0
},
这是设定动画的初始位置,据测试这里的坐标均是相对于朝向。
"translation_curve": 0,
和上面曲线参数相同,设置变化速度属性
"rotation": {
"x": 0,
"y": 0,
"z": 0
},
设定动画的初始旋转与下面的参数配合使用,最大值为180,且正值为逆时针,下面的参数是旋转中心点,中心点和translation的点位设置原理一样
"rotation_pivot": {
"x": 0,
"y": 0,
"z": 0
},
"rotation_curve": -0.08,
不再赘述
"height": 1,
设定方块初始高度,实在测试不出来与scale的关系,但可以明确的是这个值越大初始方块越长。
"height_curve": 0
}
有兴趣的可以看一下模组作者在GitHub上做的教程,除了上面截取的截图,这里再截图几段比较重要的
下面是模组作者关于谓词的示例
{
"predicates": [
{
"predicate_type": "any_of",
"predicates": [
{
"predicate_type": "block_match",
"blocks": "#minecraft:flowers"
},
{
"predicate_type": "block_match",
"blocks": [
"minecraft:sweet_berry_bush"
]
}
]
},
{
"predicate_type": "not",
"predicate": {
"predicate_type": "is_double_block"
}
},
{
"predicate_type": "not",
"predicate": {
"predicate_type": "has_collision"
}
}
]
}
In this example we are selecting all flowers + sweet berry bush and excluding all blocks that are not double flowers and have collision(模组作者原话)
实例演示
一段方块由细长条旋转放置的动画
{
"predicates": [
],
"priority": 1,
"duration": 5,
"scale": 0.2,
"scale_curve": 0,
"translation": {
"x": 0,
"y": 0,
"z": 0
},
"translation_curve": 0,
"rotation": {
"x": 0,
"y": 180,
"z": 0
},
"rotation_pivot": {
"x": 0,
"y": 0,
"z": 0
},
"rotation_curve": -0.08,
"height": 1.8,
"height_curve": 0
}