質問: 汎用右クリックコマンド追加データパック click 対応バージョン ------- minecraft 20a16w 以降 ダウンロード ------ click ver. 0.9.0 ドキュメント ------ click datapack documents ライセンス ----- mitライセンスです。 著作権を維持したまま皆さんのデータパックに組み込んだり、 自由に改変ができるようにしたかったので、非常に優しいライセンスにしました。 利用条件は1つ! 「license_click-x.x.x.txt」というテキストファイルをあなたのデータパックに 同梱するだけです。それだけでmitライセンス上okとなります。 これはデータパックを広める上で絶対必要になってくるかなと思って 自作のデータパック spellcode から抽出して構築しなおしました! ![](https://i.imgur.com/ri5t9qe.gif) **あなたのデータパックに右クリックを!** というわけで、データパックを作るための補助データパックです。 この click というデータパックを導入し、 さらにあなたのデータパックに4つのファイルを実装するだけで **割と自由に右クリックコマンドを実装できます!** 実際実装するのは以下のような4ファイルです。 my_datapack はあなたのデータパック名です。 #### my_datapack/data/click/tags/functions/check_state.json ``` { "replace": false, "values": [ "my_datapack:check_state_implements" ] } ``` #### my_datapack/data/click/tags/functions/on_click.json ``` { "replace": false, "values": [ "my_datapack:click" ] } ``` #### my_datapack/data/my_datapack/functions/check_state_implements.mcfunction ``` #本をメインハンドに持った状態なら右クリックが可能! #あなたがどのような条件で右クリックが可能かを判定して、 #右クリックが可能ならスコアボードの click_available に 1 加算してください。 #@sは判定対象のプレイヤーとなります。 execute as @s[nbt={selecteditem:{id:"minecraft:book"}}] run scoreboard players add @s click_available 1 ``` #### my_datapack/data/my_datapack/functions/click.mcfunction ``` #あなたが発動させたいコマンドを自由に記述してください! #@sは発動するプレイヤーとなります。 say "right clicked !!" ``` フォルダ構造がちょっとめんどいかもしれませんが、 click_example.zip というサンプルも同梱しています。 解凍してぜひ参考にしてみてください! バグがあったらぜひともご一報を!!
回答: ktyrmp 返信遅れて申し訳ありません。 可能ですよ! というより、データパックは他のデータパックと競合しないように 個別にloadとtickを持てるようになっています。 【minecraft:load (my_datapack/data/minecraft/tags/functions/load)】 ``` { "replace": false, "values": [ "my_datapack:install" ] } ``` このようにあなたのデータパックでmy_datapack:installを定義すると、 clickデータパックを含み、他のデータパックで競合することなく my_datapack:installはデータパック(再)読み込み時に ちゃんと実行されます。 つまり、click:installも同時に実行されるわけです。 【minecraft:tick (my_datapack/data/minecraft/tags/functions/tick)】 ``` { "replace": false, "values": [ "my_datapack:update" ] } ``` minecraft:tickについても同様です。 このように定義すれば毎ティックmy_datapack:updateは実行されますし、 click:updateも妨害されることなく毎ティック実行されることになります。 ただ、競合しないようにするには1つだけ条件があって、上記の記述内で **`"replace : false"`**が指定されている必要があります。 ``` { "replace": false, ←これが false であること!! "values": [ "my_datapack:update" ] } ``` というのも、"replace"がtrueになると他のデータパックが定義した minecraft:loadやminecraft:tick関数タグを全部上書きして 消去してしまうのです。 正直"replace"がtrueになって得するデータパックはまずないので、 falseを定型文として覚えてもらって、ぜひ活用していってください! 【補足】 ちなみにですが、click:installとmy_datapack:installは データパックの(再)読み込み時に両方実行されますが、 **どちらが先に実行されるかは不定です**。 click:updateとmy_datapack:updateも同様です。 必ず毎ティック実行されますが、click:updateが先に実行されるのか、 my_datapack:updateが先に実行されるのかは決まっていません。 この順番が重要になることもあるかもしれませんが、 clickデータパックではまず重要にはならないので、一応豆知識程度に...。