カスタム
#playanimation
アニメーションをカスタムすることもできます。
アニメーションには角度や位置などの要素にvariable(変数)が含まれているものがあります。
停止条件はmolangというマインクラフト独自のプログラミング言語で書く必要があるのですが、実はこのmolangでvariableの値を変更できるのです。
code:style.json
"animation.parrot.moving" : {
"loop" : true,
"bones" : {
"body" : {
"position" : 0.0, "variable.wing_flap * 0.3", 0.0
},
"tail" : {
"rotation" : "60.0 + math.cos(query.anim_time * 38.17) * 17.0 - this", 0.0, 0.0
},
"wing0" : {
"rotation" : 0.0, 0.0, "-5.0 - variable.wing_flap * 57.3"
},
"wing1" : {
"rotation" : 0.0, 0.0, "5.0 + variable.wing_flap * 57.3"
}
}
}
これは、animation.parrot.movingの中身です。boneというのは体のパーツのことで、boneの中にあるbodyは胴体を意味します。
見ると、bodyのpositionのyにvariable.wing_flapという変数があります。つまり、この値を変更すれば、胴体のyの位置も変わるということです。
/playanimation @a animation.parrot.moving none 0 "variable.wing_flap=10;" ybodypos
このコマンドを実行すると、胴体の位置が少し上に行きます。もちろん、30にしたらもっと上に行き、-10にしたら下に行きます。
variableはvと省略することもできます。
variable.wing_flapとv.wing_flapはまったく同じです。
カスタムできるアニメーションはvariableが含まれているアニメーションのみです。
そのエンティティがデフォルトで持つ変数はアニメーション実行時に初期化され、ちらつきが発生します。
例
playanimation @a animation.player.attack.rotations none 0 "v.attack_body_rot_y=90;" bodyyrot
というコマンドを反復で実行すると、実行した瞬間v.attack_body_rot_yの値が(本来あるべき値に)初期化されるため、1fのみアニメーションが解除されたようになります。
初期化後は普通に値が代入されるため、ちらつきを少しでも抑えるには、遅延を入れるか、tagなどを使用して1回しか実行しないように制御する必要があります。