元指令参数指南
meta
参数是一个元指令区域,以CompoundTag
的形式呈现,被设计用来保障未来更新时的兼容性和扩展性。
你可以根据下列标志的介绍、你的需求及当前版本,来选择性地填写内容。
信息
下列一些值给出了推荐范围。尽管你可能可以在游戏内填写超出推荐范围的值,但我们不推荐您如此做。填写超出推荐范围的值是未定义行为。
喷花筒标记
可用版本:0.3.+
形式:
"tada":1
值类型:布尔值(填写
0
或1
)
表示这是一条喷花筒指令,客户端需计算玩家手部位置并在生成粒子时进行对应偏移。
脉冲
可用版本:0.4.19+
形式:
"pulse":1
值类型:布尔值
将喷花筒的工作模式设定为脉冲式。发射一次粒子后,玩家需抬起右键才能再次发射粒子。
数学表达式:dx、dy、dz
可用版本:0.4.+
形式:
"dx":"<数学表达式f(t)>"
示例:
"dy":"0.2*sin(3t)+0.5*t"
值类型:字符串
你可以填写一个以t
为自变量的函数表达式,来取得对每tick中粒子在X、Y、Z三轴上增量的高级控制。由于直接控制粒子的绝对坐标会极大地影响指令的复用性,所以假设你想要粒子在X轴上的的运动轨迹为F(t)
,你就需要填写其导数f(t)
,以此消除绝对坐标的影响。
同样地,为了消除不同粒子寿命对指令复用性的影响,t
的值域为[0,1]
(对应粒子生成到消失),在实际应用时按照粒子寿命进行放缩。
警告
如果你在此处指定了dx、dy、dz:
- 对应的
gravity
、xDeflection
、zDeflection
将会失效,friction
将会被覆盖; interactWithEntity
(与玩家互动)的效果会叠加;
信息
考虑到复杂的表达式可能会对性能造成影响,目前的计算方式为:
- 若存在指定的dx、dy、dz,则交由其他线程进行粒子对象初始化,每一条指令对应一个线程,初始化一批粒子;
- 初始化过程包含dx、dy、dz的预计算过程:将0.00~1.00之间共101(若粒子寿命小于100,则取粒子寿命+1)个
t
代入所给表达式,求出对应值以供查询;
- 初始化过程包含dx、dy、dz的预计算过程:将0.00~1.00之间共101(若粒子寿命小于100,则取粒子寿命+1)个
- 一批粒子初始化完成后,在适当的时候加入世界;
- 粒子在运动时读取保存的dx、dy、dz数组,以类似
alphaMode
的SIN
模式,使用查表和线性插值得到对应的值。
如此做的好处在于尽量减少粒子对mspt的影响,但目前的弊端是会占用相对较多的内存资源。