diff --git a/TheSkyBlessing/data/lib/functions/motion/_index.d.mcfunction b/TheSkyBlessing/data/lib/functions/motion/_index.d.mcfunction index 2dd0cee3a2..5bce948782 100644 --- a/TheSkyBlessing/data/lib/functions/motion/_index.d.mcfunction +++ b/TheSkyBlessing/data/lib/functions/motion/_index.d.mcfunction @@ -4,6 +4,7 @@ #> Val # @within function lib:motion/core/*/* #declare score_holder $VectorMagnitude + #declare score_holder $VectorSquared #declare score_holder $KnockbackResist #> api diff --git a/TheSkyBlessing/data/lib/functions/motion/core/looking/.mcfunction b/TheSkyBlessing/data/lib/functions/motion/core/looking/.mcfunction index fb683728af..9f3cbce8e1 100644 --- a/TheSkyBlessing/data/lib/functions/motion/core/looking/.mcfunction +++ b/TheSkyBlessing/data/lib/functions/motion/core/looking/.mcfunction @@ -12,8 +12,8 @@ execute if data storage lib: Argument{KnockbackResist:1b} run function lib:motion/core/looking/knockback_resistance # 適用 - execute if entity @s[type=player] run function lib:motion/core/looking/player - execute if entity @s[type=!player,tag=!Uninterferable] run function lib:motion/core/looking/non-player + execute if entity @s[type=player] unless score $VectorMagnitude Temporary matches 0 run function lib:motion/core/looking/player + execute if entity @s[type=!player,tag=!Uninterferable] unless score $VectorMagnitude Temporary matches 0 run function lib:motion/core/looking/non-player # リセット scoreboard players reset $VectorMagnitude Temporary diff --git a/TheSkyBlessing/data/lib/functions/motion/core/looking/non-player.mcfunction b/TheSkyBlessing/data/lib/functions/motion/core/looking/non-player.mcfunction index fe183241f2..977cf6c07d 100644 --- a/TheSkyBlessing/data/lib/functions/motion/core/looking/non-player.mcfunction +++ b/TheSkyBlessing/data/lib/functions/motion/core/looking/non-player.mcfunction @@ -15,18 +15,18 @@ # 演算処理 data modify storage lib: Pos set from entity 0-0-0-0-0 Pos - execute store result score $VectorX Temporary run data get storage lib: Pos[0] 10 - execute store result score $VectorY Temporary run data get storage lib: Pos[1] 10 - execute store result score $VectorZ Temporary run data get storage lib: Pos[2] 10 + execute store result score $VectorX Temporary run data get storage lib: Pos[0] 1000 + execute store result score $VectorY Temporary run data get storage lib: Pos[1] 1000 + execute store result score $VectorZ Temporary run data get storage lib: Pos[2] 1000 scoreboard players operation $VectorX Temporary *= $VectorMagnitude Temporary scoreboard players operation $VectorY Temporary *= $VectorMagnitude Temporary scoreboard players operation $VectorZ Temporary *= $VectorMagnitude Temporary # 適用 - execute store result storage lib: Pos[0] double 0.00001 run scoreboard players get $VectorX Temporary - execute store result storage lib: Pos[1] double 0.00001 run scoreboard players get $VectorY Temporary - execute store result storage lib: Pos[2] double 0.00001 run scoreboard players get $VectorZ Temporary + execute store result storage lib: Pos[0] double 0.0000001 run scoreboard players get $VectorX Temporary + execute store result storage lib: Pos[1] double 0.0000001 run scoreboard players get $VectorY Temporary + execute store result storage lib: Pos[2] double 0.0000001 run scoreboard players get $VectorZ Temporary data modify entity @s Motion set from storage lib: Pos # リセット diff --git a/TheSkyBlessing/data/lib/functions/motion/core/xyz/.mcfunction b/TheSkyBlessing/data/lib/functions/motion/core/xyz/.mcfunction index 13d5f29764..39aa5323e3 100644 --- a/TheSkyBlessing/data/lib/functions/motion/core/xyz/.mcfunction +++ b/TheSkyBlessing/data/lib/functions/motion/core/xyz/.mcfunction @@ -8,9 +8,19 @@ execute if data storage lib: Argument{KnockbackResist:1b} store result score $KnockbackResist Temporary run attribute @s generic.knockback_resistance get 100 execute if data storage lib: Argument{KnockbackResist:1b} run function lib:motion/core/xyz/knockback_resistance +# ベクトルの大きさ(の2乗)を取得する + function lib:array/session/open + data modify storage lib: Array set from storage lib: Argument.Vector + function lib:array/math/sqr + data modify storage lib: Array set from storage lib: SqrResult + function lib:array/math/sum + execute store result score $VectorSquared Temporary run data get storage lib: SumResult 10000 + function lib:array/session/close + # 適用 - execute if entity @s[type=player] run function lib:motion/core/xyz/player - execute if entity @s[type=!player,tag=!Uninterferable] run data modify entity @s Motion set from storage lib: Argument.Vector + execute if entity @s[type=player] unless score $VectorSquared Temporary matches 0 run function lib:motion/core/xyz/player + execute if entity @s[type=!player,tag=!Uninterferable] unless score $VectorSquared Temporary matches 0 run data modify entity @s Motion set from storage lib: Argument.Vector # リセット + scoreboard players reset $VectorSquared Temporary scoreboard players reset $KnockbackResist Temporary