1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Minecraft CommandAdvent Calendar 2024

Day 17

右クリック検知って、結局何を使えばいいの?

Last updated at Posted at 2024-12-16

この記事はhttps://qiita.com/advent-calendar/2024/mccmd シリーズ2、13日目の記事です。

はじめに

初めまして!sonichitsuiiです。
今回の記事では、初心者が行き詰まりやすい、右クリック検知について色々と試行錯誤したので、その結果をまとめようと思います。

方法

まず、右クリック検知の多くに使われているのがニンジン付きの棒を利用した方法です。
この方法が一番簡単で扱いやすいのでよく使われています。

# 先に実行しておいてね
scoreboard objectives add hoge minecraft.used:minecraft.carrot_on_a_stick
tick.mcfunction
# 人参棒の使用を検知
execute as @a[scores={hoge=1..}] at @s run summon tnt ~ ~ ~

# スコアリセット
scoreboard players set @a[scores={hoge=1..}] hoge 0

こんな感じですね。summon tnt ~ ~ ~の部分は好きに変えてください。
見たとおり、これだけでできるのでとても簡単です。
ガバガバですが、長押しも一応検知出来なくもないです。
他にも、特定の場所への右クリックと左クリックを検知する方法にinteractionエンティティを利用した方法や村人を利用した方法がありますが、ここでは省きます。

次は長押し検知の方法を紹介します。
主に使われていたのは、弓を使った方法です。

using_bow.json
{
  "criteria": {
    "use_bow": {
      "trigger": "minecraft:using_item",
      "conditions": {
        "player": {
          "slots": {
            "weapon.mainhand": {
              "items": "minecraft:bow",
              "components": {
                "minecraft:custom_data": {
                  "custom_item": 1
                }
              }
            }
          }
        }
      }
    }
  },
  "rewards": {
    "function": "hoge:main"
  }
}

このファイルは、custom_dataコンポーネントのcustom_item=1の弓を使用中、関数hoge:mainが実行される進捗です。hoge:mainには、この進捗を削除するコマンドを書いてください。これで、長押しすると毎tick実行されるようになります。
そして、押し終わりも検知したいですね。

scoreboard objectives add use_bow minecraft.used:minecraft.bow

これで押し終わるとこのスコアボードに1が足されます。これを利用して、長押しと押し終わりを検知できるのです。
しかし、この方法には
・弓なのでインベントリに矢が必要
・音と矢が消えるまでに一瞬かかる
という問題点があります。

ですが、上記の問題点を解決できる方法があります。
それが、consumeableを利用する方法です。
consumeableとは、食べ物やポーションに記述されているコンポーネントです。
食べるのにかかる時間をすっごく長くして、食べるアニメーションと食べる時の音とパーティクルも消せば、長押しを検知できるアイテムの完成です。
これを進捗で検知しましょう。

{
  "criteria": {
    "a": {
      "trigger": "minecraft:using_item",
      "conditions": {
        "player": {
          "slots": {
            "weapon.mainhand": {
              "components": {
                "minecraft:custom_data": {
                  "custom_item": 1
                }
              }
            }
          }
        }
      }
    }
  },
  "rewards": {
    "function": "hoge:main"
  }
}

さっきと同様、hoge:mainでこの進捗を消すコマンドを書いておいてください。
これで右クリックをしている間実行される関数の完成です。
押し終わりは実行が途切れたことなどで検知してください。私の使用している例を挙げておきます。

main.mcfunction
# 進捗消去
advancement revoke @s only sorcery:using_wand

# スタート
tag @s add Click.Check
tag @s add Click.Right
tick.mcfunction
# 押し終わるとClick.Checkが消えるので検知が可能
execute as @a at @s if entity @s[tag=Click.Right,tag=!Click.Check] run summon tnt ~ ~ ~
execute as @a at @s if entity @s[tag=Click.Right,tag=!Click.Check] run scoreboard players set @s Click.Right 0

# 長押し中はスコア増加
execute as @a at @s if entity @s[tag=H.Click.Check] run scoreboard players add @s Click.Right 1

# タグ消去
tag @s remove Click.Check

こんな感じですね。先ほどと同様、summon tnt ~ ~ ~の部分は好きなコマンドに変えてもらって大丈夫です。

おわりに

いかがでしたか?
consumeableは死ぬほど万能なので、是非使ってください!
あと、この記事に乗っているコマンドもすべて好きに使ってください。
皆さんのコマンド制作の参考になれば幸いです。
それでは!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?