Calcファンクションの使い方 - TUSB/TheUnusualSkyBlock GitHub Wiki
名前空間calc:
には、各種計算を行うファンクションがたくさん入っている。
ここでは、それぞれできることと使い方についてまとめる。
- 使用用途
0~65535の乱数を取得する。
functionからはstore resultで取得、チャット・コマンドブロックからは$RndMWC Random
を参照する(変更禁止)。 - 使用方法
function calc:random
execute store result score _ _ run function calc:random
- 使用用途
このfunctionを実行したエンティティの
Pos
をMotion
に代入する。
NoGravityを付与していると2tick後に解除されるが、NoGravity
をTagsに入れておくとその後再付与される。 - 使用方法
execute as <projectile> facing entity @a[limit=1,sort=nearest] feet positioned 0.0 0.0 0.0 positioned ^ ^ ^1.15 run function calc:throw_projectile/
- 使用用途
エンティティ間の距離を取得する。
store resultや_ Ret
の参照で距離の100倍を取得することができる。 - 使用方法
基準となるエンティティをasに、距離を取りたいエンティティをatに指定してfunctionを実行する。
execute as @e[type=Enemy,limit=1] at @a[limit=1,sort=nearest] store result score _ _ run function calc:geometry/distance/
- 使用用途
エンティティの視点方向前方に(Blockがある|モブがいる)かを確認する。
探索を終了した地点には0-0-0-0-0
が存在する。 - 使用方法
calc:
ストレージにデータを指定する。
SearchForward:{
Loop: double 探索距離(m)
Stop: [Block,Mob] 探索を終了する条件
Align: byte 1bのときalign xyz
}
・Loop
探索する距離を0.01単位で指定する。
・Stop
探索を終了する条件を指定する。[]
,[Block]
,[Mob]
,[Block,Mob]
が有効。
・Align
1b
のとき0-0-0-0-0
の位置がalign xyz positioned ~0.5 ~ ~0.5
と同じように調整される。
data modify storage calc: SearchForward set value {Loop:5d,Stop:[Block]}
execute anchored eyes positioned ^ ^ ^ anchored feet run function calc:geometry/search_forward/
- 使用用途
エンティティの上方にBlockがあるかを確認する。search/above/
: loopの分だけ探索する。search/above/to_limit
:高度限界に達するまで探索する。 探索を終了した地点(現在のY座標+Loop-1)には0-0-0-0-0
が存在する。 - 使用方法
calc:
ストレージにデータを指定する。
SearchAbove:{
Loop: int 探索距離(m)
Align: byte 1bのときalign xyz
}
SearchAbove:{
Pos: int 現在のY座標
Align: byte 1bのときalign xyz
}
・Loop
探索する距離を決定する。(現在のY座標+Loop)まで探索、その1m下に0-0-0-0-0
が存在する。
・Pos
現在のY座標を代入する。
・Align
1b
のとき0-0-0-0-0
の位置がalign xyz positioned ~0.5 ~ ~0.5
と同じように調整される。
・NothingAbove
search/above/to_limit
を実行した後、0-0-0-0-0
が高度限界以上の座標に存在する(探索を停止させるブロックが実行地点より上にない、空に面している)場合には1b
,そうでなければ0b
となる。
data modify storage calc: SearchForward set value {Loop:5d,Stop:[Block]}
function calc:geometry/search_above/
execute store result storage calc: SearchAbove.Pos int 1 run data get entity @s Pos[1]
function calc:geometry/search_above/to_limit
function calc:geometry/tp_00000
、function calc:geometry/tp_00001
を実行すると、実行位置にUUIDエンティティがtpする。
execute as <UUIDエンティティ> run function calc:geometry/return_marker
を実行すると、UUIDエンティティがarea:control_area 5 5 5
にtpする。
- 使用用途
与えられた数値の総和・総積を計算する。
store resultや_ Ret
の参照で取得することができる。 - 使用方法
calc:
ストレージにデータを指定する。
List: List 計算するための数字群
function calc:list/%1%/%2%
・ %1%
計算方法を指定する。sum
(総和)、product
(総積)を指定できる。
・ %2%
返り値の精度を指定する。x1
(1倍)、x100
(100倍)を指定できる。
data modify storage calc: List set value [2,7,1,9,5,6]
execute store result score _ _ run function calc:list/sum/x100
- 使用用途
底と指数を指定することで、累乗計算をする。
store resultや_ Calc
の参照で取得することができる。 - 使用方法
calc:
ストレージにデータを指定する。
Power: {
Base: int 底
value: int 指数
}
data modify storage calc: Power set value {Base:2,value:10}
function calc:power/
- 使用用途
特定桁のフラグを立てたり落としたり、上からN番目に出てくるBitの桁を計算したりする。
store resultや_ Ret
の参照で取得することができる。 - 使用方法
calc:
ストレージにデータを指定する。
Bit: {
Flags : Int 対象のデータを入力
Digit : Int フラグを立てたり落としたり確認をするときの指定桁を入力
Number : Int 上から何番目に出てくるBitの桁を探すか入力
Operation : Int 以下で説明する数値を入力
}
・ Operation
の説明
Operation | 内容 | 必須入力 | 出力 |
---|---|---|---|
1 | FlagsのDigit桁にフラグを立てる | Flags,Digit | フラグを立てた後のFlags |
2 | FlagsのDigit桁のフラグを落とす | Flags,Digit | フラグを落とした後のFlags |
3 | Flagsの上からNumber番目に出てくるBitの桁を返す | Flags,Number | Number番目に出てきたBitの桁 |
4 | FlagsのDigit桁のフラグを返す | Flags,Digit | Digit桁のフラグの状態(0 or 1) |
data modify storage Bit set value {Flags:393,Digit:3,Operation:1}
function calc:bit/
data modify storage Bit set value {Flags:413,Number:5,Operation:3}
function calc:bit/
data modify storage Bit set value {Flags:413,Digit:4,Operation:4}
function calc:bit/
- 使用用途
サブタイトル・アクションバーに指定文字列を表示する。
プレイヤーが設定できる"テキスト現在位置"の設定位置に表示する。 - 使用方法
calc:
ストレージにデータを指定する。
TextLength : int 指定文字列の長さを指定
Text : String 表示させる文字列を指定 JSONテキストでもよい
function calc:show_text/%1%
・ %1%
表示する場所を指定する。subtitle
、actionbar
を指定できる。
data modify storage calc: Text set value '{"translate":"TEST"}'
data modify storage calc: TextLength set value 4
function calc:show_text/subtitle
- 使用用途
asで指定したエンティティが別のエンティティや座標に視線を向けているときのRotationを取得する。
取得したデータはストレージのcalc: Rotaion.<1~3>
に記録される。
格納先に指定した番号にデータが記録される。 - 使用方法
function calc:get/angle/%1%
・ %1%
格納するデータの番号を指定する。1から3が使用可能。
execute as <SourceEntity> at <Destination> run function calc:get/angle/1
data get storage calc: Rotation.1
execute as <SourceEntity> positioned xyz run function calc:get/angle/3
data get storage calc: Rotation.3
- 使用用途
asで指定したエンティティのRotationをランダムに指定する。 - 使用方法
execute as <entity> run function calc:set/random_rotation
* 使用用途
asで指定した防具たてのPose.Head
をランダムな向きにする。
- 使用方法
execute as @e[type=armor_stand] run functino calc:set/random_pose_head
- 使用用途
10mずつ視線上にいる一番近いEnemyもしくはMobを特定する。
特定された敵の位置に0-0-0-0-0が移動する。 - 使用方法
calc:
ストレージにデータを指定する。
Depth : int 探索する最長距離を指定する。Depth*10mまで探索する。
function calc:target/caster/%1%/catch
・ %1%
探索対象を指定。enemy
かmob
が使用可能。
data modify storage calc: Depth set value 10
function calc:target/caster/enemy/catch
- 使用用途
Rotation.<1..3>[0]
の角度の範囲を0~360に、Rotation.<1..3>[1]
の角度の範囲を-90~90に変更する。 - 使用方法
calc:
ストレージにデータを指定する。
Rotation: {
<1..3>: [ : 使用するデータ。
XRotation, : float 水平方向の角度。
YRotation : float 垂直方向の角度。
]
}
function calc:flip/round/%1%
・ %1%
使用するデータを指定する。1から3が使用可能。
data modify storage calc: Rotation.2 set value [-60.0f,-40.0f]
function calc:flip/round/2
# -> calc: Rotation.2:[300.0f,-40.0f]
- 使用用途
複数のRotationデータを用いて角度を求める。 - 使用方法
calc:
ストレージにデータを指定する。
Rotation: {
<1..3>: [ : 使用するデータ。
XRotation, : float 水平方向の角度。
YRotation : float 垂直方向の角度。
]
}
Rotation.3のデータを操作する。
[0]は180°反転、[1]は上下反転する。
結果にはroundで範囲変更されたものになる。
data modify storage calc: Rotation.3 set value [-40.0f,30.0f]
function calc:flip/base0flip3
# -> calc: Rotation{3:[140.0f,-30.0f]}
Rotation.2のデータとRotation.1のデータを使用して計算した結果をRotation.3に反映する。
大雑把な計算は以下の通りになる。
Rotation.3 = (Rotation.2 * 2) - Rotation.1
function calc:flip/base2flip1to3
# 計算例は省略
- 使用用途
配列の中身を反転させる。 - 使用方法
calc:
ストレージにデータを指定する。
Array: {
reverse: {
Input : list 操作対象の配列
Output : list 反転結果の配列
}
}
data modify storage calc: Array.reverse.Input set value [1,2,3,4,5]
function calc:array/reverse/
tellraw @a {"storage":"calc:","nbt":"Array.reverse.Output"}
# -> [5,4,3,2,1]
- 使用用途
sin、cos、またはその両方を取得する。 - 使用方法
calc:
ストレージにデータを指定する。
入力
Triangle: {
Rotation : float 角度(度数法)
}
出力
Triangle: {
Sin : double sinの計算結果。
Cos : double cosの計算結果。
SinCos : list [0]がsin、[1]がcosの計算結果。
}
sinとcosはexecute store result
でスコアやストレージに直接返すことが可能。この場合10000倍で返される。
function calc:triangle/%1%
-
%1%
計算する三角関数の種類を指定する。
sin
,cos
,sincos
が計算可能。
data modify storage calc: Triangle.Rotation set value 30.0f
excute store result _: Result double 0.0001 run function calc:triangle/sin
tellraw @a {"storage":"_:","nbt":"Result"}
# -> 0.4999d
-
使用用途
0-0-0-0-1をその座標から原点(0.0 0.0 0.0)中心に回転させる。
0-0-0-0-1がarea:control_areaにいてかつ、原点から30m以内にいないと実行しない。 -
使用方法
調査中!十分に情報が集まっていません
後述の入力を行ってから function calc:rotate/quaternion/
入力
calc:
ストレージにデータを指定する。
0-0-0-0-1に回転前の座標を指定する。
Rotate : {
Quaternion: {
Axis[X,Y] : 回転軸を度数法で指定 Rotationと同じ
Angle[Z] : 回転角を度数法(60°など)で指定
}
}
出力
function実行後、0-0-0-0-1の座標が回転後の座標となる。
execute in area:control_area positioned 0.0 1.0 0.0 run teleport ~ ~ ~
data modify storage calc: Rotate.Quaternion.Axis set value [30,45]
data modify storage calc: Rotate.Quaternion.Angle set value [60]
function calc:rotate/quaternion/
tellraw @a {"nbt":"Pos","entity":"0-0-0-0-1"}
直接関連はないですが、3次元の回転のイメージをつかむのに有用です。 オイラー角可視化ツール
- 使用用途
現在の攻略数を取得する。
store resultや_ Calc
の参照で攻略数を取得することができる。 - 使用方法
execute store result score _ _ run function calc:island_clear_count