# 関数タグ function #click:check_state この関数タグで指定したfunctionは「右クリックが可能である状態をチェックする」ために利用されます。 ## check_state.json 実装例 #### my_datapack/data/click/tags/functions/check_state.json ``` { "replace": false, "values": [ "my_datapack:check_state_implements" ] } ``` 上記のように記述すれば毎 tick に「右クリックが可能である状態をチェックする」際に function my_datapack:check_state_implements が実行されます。 "replace":false; は関数タグを上書きさせず追加させるための設定です。基本 false で問題ありません。 ## my_datapack:check_state_implements 実装例 #### my_datapack/data/my_datapack/functions/check_state_implements.mcfunction ``` execute as @s[nbt={SelectedItem:{id:"minecraft:book"}}] run scoreboard players add @s click_available 1 ``` 上記の記述で「本をメインハンドに持っている状態なら右クリックが可能」となります。 #### click_available click_available は毎 tick の判定前に 0 に設定されます。上記の判定コマンド実行後に click_available が 0(以下)なら右クリック不可能、1 以上なら可能という判定を行います。 要するに、check_state_implements.mcfunction で、右クリックが可能な条件を調べ、それを満たした場合に click_available というスコアボードに 1 加算すればいいのです。 慣習として click_available は「1 加算 (add)」として下さい。「1 設定(set)」ではありません。click_available はデバッグ時に tab キーで閲覧することができるのですが、加算にしておくことで **意図せず2つの条件を満たしている場合** click_available が 2 と表示されるので発見しやすくなります。 ### サンプルでの記述 余談ですが、サンプルでは predicate を使って「本をメインハンドに持った状態でスニークしていれば右クリックが可能」という条件判定を行っています。新実装された predicate の使い方の参考もかねて、サンプルの参照もお勧めします。 #### click_example/data/click_example/functions/check_state_implements.mcfunction ``` execute as @s[nbt={SelectedItem:{id:"minecraft:book"}}] if predicate click_example:sneaking run scoreboard players add @s click_available 1 ``` #### click_example/data/click_example/predicates/sneaking.json ``` { "condition": "minecraft:entity_properties", "entity": "this", "predicate": { "flags": {"is_sneaking": true} } } ```