Skip to content

libraries

Chuzume edited this page May 29, 2022 · 47 revisions

乱数ライブラリ

疑似乱数生成

乱数を取得します

使い方

execute store result ... run function lib:random/

乱数として生成される値は0~65535までの範囲です。

注: このライブラリはもやんのせいでfunction内以外から実行すると6しか取得できません。function内で実行する分には問題ないからバグ報告しないでね☆

# 25%の確率で「excellent!」,50%の確率で「great」,25%の確率で「miss」と出力するコマンド
    # 疑似乱数取得
        execute store result score $Random Temporary run function lib:random/
    # ほしい範囲に剰余算
        scoreboard players operation $Random Temporary %= $100 Const
    # メッセージ出力
        execute if score $Random Temporary matches 00..24 run say excellent!
        execute if score $Random Temporary matches 25..74 run say great
        execute if score $Random Temporary matches 75..99 run say miss
    # リセット
        scoreboard players reset $Random Temporary

固定確率predicates

指定した確率でtrueを返すpredicateです。

使い方

execute if predicate lib:random_pass_per/<確率>

@a[predicate=lib:random_pass_per/<確率>

確率に指定可能な値は1 ~ 99までの範囲です。

# 30%の確率で「pass!」と出力するコマンド
    execute if predicate lib:random_pass_per/30 run say pass!

攻撃元Entity探索実装

そのtickにそのプレイヤー攻撃したEntityを特定する実装です。
使用可能な個所にて@e[type=#lib:living,type=!player,tag=Attacker]
で対象にすることが可能です。

攻撃先Entity探索実装

そのtickにそのプレイヤー攻撃したEntityを特定する実装です。
使用可能な個所にて@e[type=#lib:living,type=!player,tag=Victim]
で対象にすることが可能です。

天候チェックpredicates

指定した天候の場合trueを返すpredicateです。

使い方

execute if predicate lib:weather/is_<sunny|raining|thundering>

# 天候が雨の場合のみ「rain!」と出力するコマンド
    execute if predicate lib:weather/is_raining run say rain!

ディメンションチェックpredicate

実行ワールドが指定したディメンションの場合trueを返すpredicateです。

使い方

execute if predicate lib:dimension/is_<overworld|nether|end>

# ディメンションがendの場合のみ「ending!」と出力するコマンド
    execute if predicate lib:dimension/is_end run say ending!

MotionLib

実行Entity(type=!player)に実行方向のArgument.VectorMagnitude分のMotionを付与します。
at,rotatedと併用してください

引数

要求データ 必須 説明 デフォルト
実行者 o Entity 動かす実行者 -
Argument.VectorMagnitude o double 実行位置からどのくらい離すか -
Argument.KnockbackResist × boolean ノックバック耐性を考慮するか false

使い方

function lib:motion/

# 5m以内のEntityに1Block分の視点方向のMotionをかけるコマンド
    data modify storage lib: Argument.VectorMagnitude set value 1
    execute as @e[type=!player,distance=..5] at @s run function lib:motion/
    data remove storage lib: Argument
# ノックバック耐性を考慮して5m以内のEntityが自分めがけて飛んでくるコマンド
    data modify storage lib: Argument.VectorMagnitude set value 5
    data modify storage lib: Argument.KnockbackResist set value true
    execute as @e[type=!player,distance=..5] at @s facing entity @p feet run function lib:motion/
    data remove storage lib: Argument

前方拡散Lib

実行entityを実行方向のランダムな位置に移動させます。

また、それ用途のスニペット(forwardSpreadLib)がTheSkyBlockリポジトリに登録されています

引数

要求データ 必須 説明 デフォルト
実行者 o Entity 動かす実行者 -
Argument.Distance o double 実行位置からどのくらい離すか -
Argument.Spread o double 離れた位置でどのくらい拡散するか -

note: Spreadの値が-4.634~4.634の範囲を出る場合、内部処理でオーバーフローし正常に動作しなくなります。

使い方

function lib:forward_spreader/<square|circle>

# 10mで2.5mのブレが発生する矢を放つコマンド
    #> SpreadLib
    # @private
    #declare tag SpreadMarker

    # 拡散させるEntityを召喚する
        summon marker ~ ~ ~ {Tags:["SpreadMarker"]}
    # ステータス設定
        data modify storage lib: Argument.Distance set value 10
        data modify storage lib: Argument.Spread set value 2.5
    # 拡散
        execute as @e[type=marker,tag=SpreadMarker,limit=1] run function lib:forward_spreader/circle
    # 矢を召喚して飛ばす
        execute anchored eyes run summon arrow ^ ^ ^ {Tags:[ArrowInit]}
        scoreboard players set $VectorMagnitude 250
        execute as @e[type=arrow,tag=ArrowInit,distance=..2] at @s facing entity @e[type=marker,tag=SpreadMarker,limit=1] feet anchored eyes positioned ^ ^ ^ run function lib:motion/
    # リセット
        tag @e[type=arrow,tag=ArrowInit,distance=..2] remove ArrowInit
        kill @e[type=marker,tag=SpreadMarker]

Entity拡散Lib

実行Entityを実行座標を中心としたランダムな座標へ移動させます。

引数

要求データ 必須 説明 デフォルト
実行者 o Entity 動かす対象Entity -
実行座標 o Pos 移動の中心座標 -
Argument.Bounds o double[2][3] X,Y,Zの-,+方向の最大移動範囲 -

使い方

function function lib:spread_entity/

# 実行座標を中心として-x方向に1、+x方向に1、-y方向に0.2、+y方向に0.8、-z方向に1、+z方向に1の立方体内のランダムな位置にmarkerを移動
    summon marker ~ ~0.5 ~ {Tags:["Exemple"]}
    data modify storage lib: Argument.Bounds set value [[1d,1d],[0.2d,0.8d],[1d,1d]]
    execute as @e[type=marker,tag=Exemple] at @s run function lib:spread_entity/

Clone this wiki locally