更新日:
1. アイテムを捨てたら発動する
# 最初に1回だけ
scoreboard objectives add drop minecraft.custom:minecraft.drop
# 反復・常時実行
execute as @a[scores={drop=1..}] run tellraw @s {"text":"アイテムを捨てました","color":"gray"}
# チェーン・常時実行
scoreboard players reset @a[scores={drop=1..}] drop
minecraft.drop は、アイテムを捨てた回数を数えるスコアです。捨てた人のスコアが1以上になるので、その人にコマンドを実行してからスコアを0に戻します。
2. 投げ入れると交換できる祭壇
# 反復・常時実行
execute positioned 0 64 0 as @e[type=item,distance=..1.5] if items entity @s contents minecraft:diamond run tag @s add offered
# チェーン・常時実行
execute as @e[type=item,tag=offered] at @s run give @p minecraft:emerald 5
# チェーン・常時実行
kill @e[type=item,tag=offered]
座標(0, 64, 0)のまわり1.5ブロックに落ちたダイヤを見つけて目印を付け、一番近いプレイヤーにエメラルド5個を渡してから、ダイヤを消します。contents は、落ちているアイテムの中身を調べるときの書き方です(1.20.5以降)。範囲の決め方は 決まった範囲に入ったら発動するコマンド も参考にしてください。
3. 捨ててもすぐ戻ってくるアイテム
/give @s minecraft:compass[custom_name="大事なコンパス",custom_data={bound:1b}]
# 反復・常時実行
execute as @e[type=item] if items entity @s contents *[custom_data~{bound:1b}] at @s run tp @s @p
# チェーン・常時実行
execute as @e[type=item] if items entity @s contents *[custom_data~{bound:1b}] run data modify entity @s PickupDelay set value 0s
目印(bound:1b)の付いたアイテムが落ちると、一番近いプレイヤーの足元へ移動し、すぐに拾える状態にします。うっかり捨てても手元に戻るので、ミニゲームの大事なアイテムに使えます。* は「どのアイテムでも」という意味です。
4. 落ちているアイテムをまとめて消す
/kill @e[type=item]
地面に落ちているアイテムを全部消します。サーバーが重いときの対策にもなります(killコマンドの使い方)。
5. 統合版の場合
統合版には、アイテムを捨てた回数のスコアや、落ちているアイテムの中身を調べる if items の書き方がありません。この記事のコマンドはJava版で使います。
うまくいかないときの確認ポイント
- 祭壇が反応しない:座標と
distanceの範囲に、アイテムが落ちる場所が入っているか確認します。 - 報酬の数が思ったのと違う:ダイヤを何個もまとめて投げると、1つの落ちているアイテムとして数えられ、報酬は1回分です。逆に1個ずつ投げると、その数だけもらえます。
- if itemsでエラーになる:1.20.5より前の版では使えません。
よくある質問
投げたアイテムの数で報酬を変えられますか?
落ちているアイテムの数は、データの count で調べられます。execute store で数をスコアに入れて比べると、数に応じた報酬にできます。
捨てられないようにするだけの方法はありますか?
Java版には捨てること自体を止めるコマンドはありません。この記事のように、捨てたアイテムをすぐ戻す方法を使います。
統合版でもできますか?
統合版では、捨てたことや落ちているアイテムの中身を調べる方法がないので、この記事の方法は使えません。