-
Notifications
You must be signed in to change notification settings - Fork 7
api
公開 API 一覧。api:namespace に集約されている。
- 共通の使い方
- DamageAPI
- HealAPI
- MPAPI
- ModifierAPI
- Effect付与API
- Mob API
- 神器API
- Object API
- Absorption (緩衝体力) API
- データ取得API
- PlayerVector API
- LostItemsAPI
- GlobalVars API
- Button API
全ての API 関数は以下の規約に従う。
- 引数を
storage api: Argument.<Name>に set してから関数を呼ぶ。 - 関数を
function api:<module>/<function>で実行 (実行者はas @s at @sで渡す)。 - 返り値は
storage api: Return.<Name>かexecute store result ...で取得。 - 関数側で引数は自動 remove される。ただし
damage/heal/effect系のように 複数対象への連続適用を想定して内部で自動 remove していないもの もある。これらは呼び出し側でreset関数を呼ぶ責任があるよ (忘れると次の呼び出しに前回値が混ざってバグる)。
呼び出し例:
# 引数を set
data modify storage api: Argument.Damage set value 10.0f
data modify storage api: Argument.AttackType set value "Magic"
# 実行 (範囲5m以内のゾンビ全員にダメージ)
execute as @e[type=zombie,distance=..5] run function api:damage/
# リセット
function api:damage/reset実行者のエンティティにダメージを与えるよ。
実行者は Health を持つ Entity である必要がある。
特別な理由がない限り、ダメージ値が動的な場合は補正 function(api:damage/modifier)を実行してね。
| 要求データ | 必須 | 型 | 説明 | デフォルト |
|---|---|---|---|---|
| 実行者 | o | Entity | ダメージを与える対象 | - |
| Argument.Damage | o | float | 与えるダメージ | - |
| Argument.AttackType | o |
"Physical"/"Magic"
|
ダメージの第一属性 | - |
| Argument.ElementType | × |
"None"/"Fire"/"Water"/"Thunder"
|
ダメージの第二属性 | "None" |
| Argument.FixedDamage | × | boolean | 全ての補正・耐性を無視する (= 下記 6 つを一括 true) | false |
| Argument.BypassModifier | × | boolean | プレイヤー側の補正値を適用しないか否か | false |
| Argument.BypassArmorDefense | × | boolean | 防具の防御値を無視するか否か | false |
| Argument.BypassToughness | × | boolean | 防具強度を無視するか否か | false |
| Argument.BypassEnchantments | × | boolean | エンチャント耐性を無視するか否か | false |
| Argument.BypassResistance | × | boolean | 耐性エフェクトを無視するか否か | false |
| Argument.BypassDifficulty | × | boolean | 難易度補正を無視するか否か | false |
| Argument.ReduceEnchantment | × | enchID/{id,modifier} | protection 以外で軽減効果を持つエンチャントを追加で計算対象に組み込む (例: "minecraft:fire_protection" を指定すると火耐性エンチャが軽減計算に効く) |
- |
| Argument.DeathMessage | × | TextComponent/TextComponent[] | 通常の死亡メッセージと置き換えて出力するメッセージ (対象がプレイヤーの時のみ使用される) |
- |
| Argument.AdditionalMPHeal | × | int | 当てた時の MP 追加回復量 (神器の MPHealWhenHit で自動指定される) | 0 |
| Argument.DisableLog | × | boolean | ステータスログ表示を抑制 | false |
| Argument.ApplyTrigger | × | boolean | 神器の attack/damage トリガーを発火するか否かfalseにすると IsDoT 扱いになる |
true |
| Argument.Metadata | × | any | 神器・モブのトリガー処理に渡される自由データ | - |
Note: 実装の都合上、 function api:damage/を呼び出しても Argument はリセットされないから、実行後にapi:damage/resetを呼んでね。
function api:damage/補正 function(api:damage/modifier)を実行することで、実行者 (= as で指定したエンティティ) の信仰補正等のダメージ補正値が Argument.Damage に適用されるよ。
通常はダメージを与える場合はこれを使用するんだけど、必ず決まったダメージを与えたい場合とかは実行者の補正値で値が変動するから使用しないようにしてね。
これを実行すると引数の Damage の値が変わるから、一回補正を掛けた後に異なる数値や属性のダメージを再度与える場合は Damage を再設定&補正 function を実行してね。
範囲 5M のゾンビに 7.5 の魔法・雷属性ダメージを与える
# 引数の設定
data modify storage api: Argument.Damage set value 7.5f
data modify storage api: Argument.AttackType set value "Magic"
data modify storage api: Argument.ElementType set value "Thunder"
# 補正functionを実行
function api:damage/modifier
# 範囲5m以内のゾンビを対象に
execute as @e[type=zombie,distance=..5] run function api:damage/
# リセット
function api:damage/reset確定でダメージを与える (補正なし)
data modify storage api: Argument.Damage set value 7.5f
data modify storage api: Argument.AttackType set value "Magic"
data modify storage api: Argument.ElementType set value "Thunder"
data modify storage api: Argument.FixedDamage set value true
execute as @e[type=zombie, distance=..5] run function api:damage/
function api:damage/resetDoT (継続ダメージ) 扱いで神器トリガーを発火させない
data modify storage api: Argument.Damage set value 2.0f
data modify storage api: Argument.AttackType set value "Magic"
data modify storage api: Argument.ApplyTrigger set value false # ← これ
execute as @s run function api:damage/
function api:damage/resetArgument.DeathMessageに TextComponent を指定することで、与えたダメージによってプレイヤーが死亡した際のメッセージを変更できるよ。
- 単体指定 : そのメッセージが死亡時に表示される
- 配列指定 : 複数のメッセージから死亡時にランダムで 1 つ選ばれる
同 tick 内に別の箇所等から同じプレイヤーに対して api:damage/ を実行した場合、死亡メッセージは上書きされる (上書きで未指定になる可能性を含む)。
TextComponent をダブルクォート "" で囲うとエスケープが必要になるため、シングルクォート '' で囲うのがおすすめ。
死亡したプレイヤーの名前は{"selector":"@s"}で取得できる。攻撃元の Entity の名前は、 攻撃元 Entity 探索実装が自動でセットするstorage lib: Return.AttackerNameから取得する。
data modify storage api: Argument.Damage set value 12.0f
data modify storage api: Argument.AttackType set value "Physical"
data modify storage api: Argument.ElementType set value "Thunder"
# %1$s = プレイヤー名、 %2$s = 攻撃元 Entity 名
data modify storage api: Argument.DeathMessage append value '[{"translate":"%1$sは%2$sに串刺しにされた。","with":[{"selector":"@s"},{"nbt":"Return.AttackerName","storage":"lib:","interpret":true}]}]'
function api:damage/modifier
execute as @a[distance=..5] run function api:damage/
function api:damage/reset data modify storage api: Argument.Damage set value 27.0f
data modify storage api: Argument.AttackType set value "Physical"
data modify storage api: Argument.ElementType set value "Water"
data modify storage api: Argument.DeathMessage append value '[{"translate":"%1$sは大量の水に押し潰された。","with":[{"selector":"@s"}]}]'
data modify storage api: Argument.DeathMessage append value '[{"translate":"%1$sは降ってきた大量の水に耐えられなかった。","with":[{"selector":"@s"}]}]'
function api:damage/modifier
execute as @p[distance=..5] run function api:damage/
function api:damage/reset実行者のエンティティを回復させるよ。
実行者は Health を持つ Entity である必要がある。
回復量が固定でない場合は、補正 function(api:heal/modifier)を実行してね。
| 要求データ | 必須 | 型 | 説明 | デフォルト |
|---|---|---|---|---|
| 実行者 | o | Entity | 回復を与える対象 | - |
| Argument.Heal | o | float | 回復する量 | - |
| Argument.FixedHeal | × | boolean | 補正を適用しないか否か | false |
| Argument.DisableLog | × | boolean | ステータスログ表示を抑制 | false |
| Argument.ApplyTrigger | × | boolean | 神器の heal/receive_heal トリガーを発火するか否かfalseにすると IsHoT 扱い |
true |
| Argument.Metadata | × | any | 神器のトリガー処理に渡される自由データ | - |
注: 実装の都合上、 function api:heal/を呼び出しても Argument はリセットされないから、実行後に api:heal/reset を呼んでね。
範囲回復させたい場合
data modify storage api: Argument.Heal set value 7.5f
function api:heal/modifier
execute as @a[distance=..5] run function api:heal/
function api:heal/resetHoT (継続回復) であるため、神器トリガーを発火させたくない場合
data modify storage api: Argument.Heal set value 1.0f
data modify storage api: Argument.ApplyTrigger set value false
function api:heal/
function api:heal/reset対象プレイヤーの MP に関する処理。
任意の数値 MP を増減させるよ。
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | MP を増減させるプレイヤー |
| Argument.Fluctuation | o | int | MP の増減量 |
| Argument.DisableLog | × | boolean | ステータスログ表示を抑制 |
data modify storage api: Argument.Fluctuation set value 10
execute as <selector> run function api:mp/fluctuation任意の数値 MP をその値に設定するよ。
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | MP を設定するプレイヤー |
| Argument.Set | o | int | MP の設定値 |
data modify storage api: Argument.Set set value 50
execute as <selector> run function api:mp/set指定した数値より現在 MP が多いか確認するよ。DevPrivilegeタグを持つプレイヤーは常に Return.IsThresholdOrMore: true を返す。
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | MP をチェックする対象のプレイヤー |
| Argument.Threshold | o | int | MP のしきい値 |
| データ | 想定される値 | 型 | 説明 |
|---|---|---|---|
| Return.IsThresholdOrMore | true/false | boolean | 対象の MP がしきい値以上か否か |
data modify storage api: Argument.Threshold set value 30
execute as <selector> run function api:mp/check
# 取り出し
execute if data storage api: Return{IsThresholdOrMore:true} run say MP足りてるMP の現在値を取得するよ。
execute as <selector> store result score $Result Temporary run function api:mp/get_currentMP の最大値を取得するよ。
execute as <selector> store result score $Result Temporary run function api:mp/get_maxプレイヤーのEquipment.Modifiersや信仰補正を集計して MPMax スコアに反映する。神器の装備変化に合わせて自動で呼ばれるけど、ボーナス系の付与・解除時には手動で呼ぶ必要がある。
execute as <player> run function api:mp/update_maxプレイヤーの与/被ダメージや HP/MP 回復量に掛かる補正に対する API 。神器のEquipment.Modifiersはこの ModifierAPI の上に乗っかってる仕組み。
- Attack
- Base (
attack/base) - Physical (
attack/physical) - Magic (
attack/magic) - Fire (
attack/fire) - Water (
attack/water) - Thunder (
attack/thunder)
- Base (
- Defense
- Base (
defense/base) - Physical (
defense/physical) - Magic (
defense/magic) - Fire (
defense/fire) - Water (
defense/water) - Thunder (
defense/thunder)
- Base (
- Heal (
heal) - Receive Heal (
receive_heal) - MP Heal (
mp_heal) - Max MP (
max_mp) - Fall Resistance (
fall_resistance)
指定したステータスに補正を追加するよ。
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | 補正を与える対象 |
| Argument.UUID | o | int[4] | 補正を後で削除する際の識別子 |
| Argument.Amount | o | double | 補正値 |
| Argument.Operation | o |
"add" / "multiply_base" / "multiply"
|
補正計算方法 計算方法はGamepedia参照 |
function api:modifier/<補正対象>/add# 引数の設定
data modify storage api: Argument.UUID set value [I;1,1,0,0]
data modify storage api: Argument.Amount set value 0.15
data modify storage api: Argument.Operation set value "multiply_base"
# 補正の追加 (この場合与える物理ダメージが15%上昇する)
function api:modifier/attack/physical/add指定したステータスの指定された UUID の補正を削除するよ。
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | 補正を削除する対象 |
| Argument.UUID | o | int[4] | 補正追加時に指定した識別子 |
function api:modifier/<補正対象>/remove data modify storage api: Argument.UUID set value [I;1,1,0,0]
function api:modifier/attack/physical/remove現在の補正値を取得するよ。
function api:modifier/<補正対象>/get
# Return.<対応するキー> に格納されるEffectAsset の付与・解除を行う API 。詳細はエフェクトの作り方を参照。
重要 (reset): 複数対象に連続適用する想定 の
give/remove/from_id/remove/from_levelは内部で Argument を自動 remove しないので、呼び出し側でapi:entity/mob/effect/resetを実行する責任がある。忘れると次の呼び出しにDuration/Stack/FieldOverrideなどの前回値が混ざってバグる。一方get/*は内部で自動 remove するので reset 不要。
data modify storage api: Argument.ID set value <EffectAssetのID>
data modify storage api: Argument.Duration set value <tick数> # オプション
data modify storage api: Argument.Stack set value <スタック数> # オプション
data modify storage api: Argument.DurationOperation set value "replace" # オプション
data modify storage api: Argument.StackOperation set value "replace" # オプション
data modify storage api: Argument.FieldOverride set value {…} # オプション
execute as <target> run function api:entity/mob/effect/give
function api:entity/mob/effect/reset # 必須| 引数 | 必須 | 型 | 説明 |
|---|---|---|---|
| Argument.ID | o | int | EffectAsset の ID |
| Argument.Duration | × | int | 効果時間 (tick)。未指定なら register 値 |
| Argument.Stack | × | int | 付与するスタック数。未指定なら 1 |
| Argument.DurationOperation | × | string |
"replace" / "add" / "forceReplace"
|
| Argument.StackOperation | × | string | 同上 |
| Argument.FieldOverride | × | compound | Field の上書き値 |
data modify storage api: Argument.ID set value <EffectAssetのID>
execute as <target> run function api:entity/mob/effect/remove/from_id
function api:entity/mob/effect/reset # 必須RequireClearLv が指定レベル以下の Effect をまとめて削除する。
data modify storage api: Argument.ClearLv set value 1 # 基本的に 1 or 2 で指定
execute as <target> run function api:entity/mob/effect/remove/from_level
function api:entity/mob/effect/reset # 必須get 系は内部で Argument を自動 remove するので、呼び出し側で reset を呼ぶ必要はないよ。
# 特定 ID の Effect 情報を取得
data modify storage api: Argument.ID set value <ID>
execute as <target> run function api:entity/mob/effect/get/from_id
# Return.Effect に格納される
# Bad_Effect の個数を取得
execute as <target> run function api:entity/mob/effect/get/size/bad
execute store result score $Bad Temporary run data get storage api: Return.EffectSize.Badgive / remove/from_id / remove/from_level を呼んだ後で実行する。これらは「1 回 set した Argument を複数対象に連続適用する」 ことを想定しているので、内部で Argument を消さない設計になっている (= 呼ぶたびに自動 remove されると都度 set し直しになって非効率)。そのぶん最後に呼び出し側でリセットする責務を持つ。
function api:entity/mob/effect/resetArgument.{ID, Duration, Stack, DurationOperation, StackOperation, FieldOverride, ClearLv, ClearType, ClearCount} をまとめて remove する。
カスタム Mob の召喚・キル・体力操作。
指定した ID の MobAsset を召喚するよ。召喚先の座標と向きは実行者の位置・向きが基準になる。
data modify storage api: Argument.ID set value <MobAssetのID>
data modify storage api: Argument.PreInitInterceptFn set value "<関数名>" # オプション (init前に走るfunction)
execute at <pos> run function api:mob/core/summon# remove (Remove トリガーを発火させる形式、主にボスとかに使うことが多い)
execute as <Mob> run function api:mob/remove
# kill (Death トリガーを発火させる形式)
execute as <Mob> run function api:mob/kill# 増減
data modify storage api: Argument.Fluctuation set value -10.0d
execute as <Mob> run function api:mob/modify_health
# 取得
execute as <Mob> run function api:mob/get_health
# Return.Health に格納されるexecute as <entity> run function api:mob/is_asset_mob
# Return.IsAssetMob に格納されるForwardTargetMobUUIDスコアでペアリングした Mob へダメージを転送する。ボスの本体・分身パターンで便利。
execute as <Mob> run function api:mob/apply_to_forward_target/<...>詳細は神器の作り方を参照。
data modify storage api: Argument.ID set value <神器ID>
function api:artifact/give/from_id # 実行者のインベントリに入るdata modify storage api: Argument.ID set value <神器ID>
function api:artifact/spawn/from_id # 実行者の位置にドロップdata modify storage api: Argument.ID set value <神器ID>
data modify storage api: Argument.Slot set value "mainhand"
data modify storage api: Argument.Target set value "@s"
function api:artifact/replace/from_iddata modify storage api: Argument.ID set value <神器ID>
data modify storage api: Argument.Pos set value [I;<x>,<y>,<z>]
function api:artifact/box/from_iddata modify storage api: Argument.ID set value <神器ID>
function api:artifact/storage/from_id
# Return.Artifact にItem NBTが格納されるObjectAsset (射撃体・短命オブジェクト等) の召喚。詳細はオブジェクトの作り方を参照。
data modify storage api: Argument.ID set value <ObjectAssetのID>
data modify storage api: Argument.FieldOverride set value {Speed:8d} # オプション
execute at <pos> rotated <yaw> <pitch> run function api:object/summonプレイヤーの緩衝体力 (黄色いハート部分) を管理する。
data modify storage api: Argument.Amount set value 10.0d
data modify storage api: Argument.UUID set value [I;1,1,0,0]
data modify storage api: Argument.Priority set value 5 # オプション (大きいほど先に消費される)
data modify storage api: Argument.WipedCallback set value "<関数名>" # オプション (全消費時に呼ばれる)
execute as <player> run function api:entity/player/absorption/adddata modify storage api: Argument.UUID set value [I;1,1,0,0]
execute as <player> run function api:entity/player/absorption/removeexecute as <player> run function api:entity/player/absorption/get
# Return.Amount, Return.Modifiers などが格納される実行者の EntityNBT を軽量に取得し、 storage に代入するよ。
この API を Mob に対して利用すると負荷が増えることが想定されるので利用しないでね。
複数の API を連続で呼ぶときの再フェッチを抑える内部キャッシュ (DataCache) があるよ。
対応する NBT
- id / Pos / Motion / Rotation / fallDistance / Fire / Air / OnGround / NoGravity / Invulnerable / PortalCooldown / UUID / CustomName / CustomNameVisible / Silent / Passengers / Glowing / Tags / Health / AbsorptionAmount / HurtTime / DeathTime / FallFlying / SleepingX / SleepingY / SleepingZ / Brain / Attributes / ActiveEffects / NoAI / Team / DataVersion / Dimension / playerGameType / previousPlayerGameType / Score / SelectedItemSlot / SelectedItem / SpawnX / SpawnY / SpawnZ / SpawnForced / SleepTimer / foodLevel / foodExhaustionLevel / foodSaturationLevel / foodTickTimer / XpLevel / XpP / XpTotal / XpSeed / Inventory / EnderItems / abilities / enteredNetherPosition / RootVehicle / ShoulderEntityLeft / ShoulderEntityRight / seenCredits / recipeBook
| 要求データ | 必須 | 型 | 説明 |
|---|---|---|---|
| 実行者 | o | Player | データを取得する対象 |
| データ | 型 | 説明 |
|---|---|---|
api: <データ名> |
storage | 取得した NBT (各キーごとに別) |
function api:data_get/<対応するNBT># データ取得
function api:data_get/health
# 実行者のHealthがapi: Healthに入ってるので出力する
tellraw @a {"storage":"api:","nbt":"Health"}特定のデータを再フェッチさせたい時:
function api:data_get/invalidate_cacheプレイヤーの前 tick からの位置差分 (= 速度ベクトル) を取得する。移動方向に依存する効果を作る時に便利。
function api:player_vector/get
# Return.Vector に [double; 3] (dx, dy, dz) が格納されるプレイヤーが信仰なし死亡で失ったアイテムに対する API 。
没収されたアイテムのスロット数を取得するよ。
execute as <player> store result score $SlotItemCount Temporary run function api:lost_items/get_length没収されたアイテムをランダムに指定したスロット数分返却するよ。
一定の確率で指定したスロット数より少ない数が返却されることがある。
data modify storage api: Argument.Count set value 10
execute as <player> positioned ~ ~3 ~ run function api:lost_items/giveグローバル変数の取得。
function api:global_vars/get_difficulty
# Return.Difficulty に 1 (Normal) / 2 (Hard) / 3 (Blessless) のいずれかが格納されるtellraw で使うクリック可能なボタンの Text Component を生成する。
data modify storage api: Argument.Label set value '"[キャンセル]"'
data modify storage api: Argument.Key set value "cancel"
data modify storage api: Argument.Listener set value "myns:on_cancel"
function api:button/create_text_component
# 生成されたコンポーネントを tellraw で使う
tellraw @s [{"storage":"api:","nbt":"Return.ButtonTextComponent","interpret":true}]Listener を指定すると、その function がボタンクリック時に実行される。
-
Argument を消し忘れる → 次回呼び出しに前回値が混ざる。神器・モブ間で同じ storage を共有してるので注意。多くの API は関数末尾で自動 remove するけど、
damage/heal系はreset関数を別途呼ぶ必要があるよ。 - Return を取り出す前に新規 API を呼ぶ → Return が上書きされる。まず取り出して、必要なら別 storage に退避。
-
DoT 扱いにし忘れて神器が連発される → 継続ダメージ・継続回復は
Argument.ApplyTrigger:falseで IsDoT / IsHoT 扱いに。詳細は神器の作り方 - IsDoT / IsHoT のルール。 -
PersistentArgument を通常の Argument と混同する →
PersistentArgumentは複数 API をまたいで値を持ち回せる特殊な引数 (api: PersistentArgument.*)。主にAdditionalMPHealで使われる。 prefix が違うので混同しないこと。