
インベントリ内に「必殺技発動」やら「ロビーに戻る」などのボタンを設置して、クリックすると何かが起こる、という仕掛けの作り方を解説します。RPG風の戦闘を作ったり、テレポートなどに使えそうな仕掛けです。レゴブロックリソースパックの作者であるSaziumR氏から頂いたコマンドを、私の手でなんとかマルチプレイ(バージョン1.8~)に対応させました。
[2016年2月1日追記] 死亡時にイベントが誤作動するとのご指摘を頂き、コマンドを修正しました。必要なスコアボードも増えていますので、申し訳ないのですが装置の作り直しをお願いします。
インベントリのアイテムをクリックする仕掛けとは

サーバー内のテレポートなど、「いつでも押したら○○する」機能を作りたい場合、あなたならどうしますか? tellrawコマンドで「クリックで○○する」などと放送してクリックさせたりもできますが、常時放送し続けるわけにはいきません。

そこで、インベントリ内にアイテムを設置して、ボタンとしてクリックさせる仕掛けはいかがですか。このボタンアイテムは動かすことはできませんが、状況に応じて表示/非表示を切り替えることもできます。

この仕掛けの例として、この前紹介した配布ワールド「The Heist」では、インベントリのトランシーバーをクリックするとそのフロアを再スタートできる仕掛けがありましたね。そんなの知らねえよ! って方はダウンロードして遊んでみてください。ハマりますよ。日本語化もされています。
- 日本語化もされているパズル系配布ワールド「The Heist」
//exr-nap.sakura.ne.jp/napoan.com/the-heist-supported-japanese/

実は以前、レゴブロックリソースパックでおなじみのSaziumR氏が、この「インベントリのアイテムをクリックする」仕掛けを作って下さりました!(ワールドのダウンロードはこちら) 1.8/1.9両対応とのことで、非常にありがたかったのですが...
残念なことに、SaziumR氏の機構はマルチプレイでうまく動かなかったのです。そこで私が無理やりマルチプレイに対応させました。これで大きなサーバーでも「アイテムをクリックする」仕掛けが使えます!
クリックするとテレポートできるアイテムのコマンドの解説

それでは、クリックするとテレポートできるアイテムの作り方を解説します。
下準備! アイテムを設置してスコアボードを作成
まずはインベントリの真ん中に、クリックするとテレポートするアイテムを設置します。
- プレイヤーのインベントリの真ん中にテレポートアイテムを設置するコマンド
- /replaceitem entity @a slot.inventory.13 minecraft:diamond 1 0 {display:{Name:"ロビーに戻る",Lore:["クリックでロビーに戻ります"]}}
▲この仕掛けを動かす前に、必ずこのコマンドを実行してアイテムを設置して下さい。

次に、以下のscoreboardコマンドでオブジェクトを作成しておきます。
- クリックするとテレポートするアイテムの動作に必要なスコアボードを作成
- /scoreboard objectives add clickLobbyItem dummy
/scoreboard objectives add spawnTime stat.timeSinceDeath
▲「stat.timeSinceDeath」のスコアは、死ぬと0になりリスポーンすると増え続けます。死んだ時にイベントを一時無効化するためのスコアなんです。
いつものfillクロックの設置

いつものfillクロックを設置します。
Aのコマンドブロック | /fill ~ ~-1 ~ ~3 ~-1 ~ redstone_block |
---|---|
Bのコマンドブロック | /fill ~ ~1 ~ ~3 ~1 ~ stone |
常時実行する6つのコマンドを解説

fillクロックの上に「1」~「6」までのコマンドブロックを設置して、内容を入力します。
「1」のコマンド |
---|
/scoreboard players remove @a clickLobbyItem 1 後で作成する「clickLobbyItem」のスコアは、常に1づつ減らされていきます。 |
「2」のコマンド |
/scoreboard players set @a clickLobbyItem 1 {Inventory:[{Slot:22b,id:"minecraft:diamond",Count:1b,tag:{display:{Name:"ロビーに戻る",Lore:["クリックでロビーに戻ります"]}}}]} インベントリに「ロビーに戻る」アイテムがあるプレイヤーは、「clickLobbyItem」の値が1になります。この際、「Slot:22b」というのはインベントリの真ん中を意味していますのでそれ以外の場所に置いても「ない」と判断されます。 ![]() ▲公式Wikiのこちらのページの画像です。この画像を参考に、「Slot:○○b」の数字を適宜変更して下さい。 |
「3」のコマンド |
/tp @a[score_clickLobbyItem=-1,score_spawnTime_min=4] テレポート先のx y z もしプレイヤーがアイテムをクリックしたら、インベントリからアイテムが一時的になくなるので「clickLobbyItem」スコアは減らされてしまいます。「-1」まで減らされたら(つまりアイテムをクリックして浮かせたら)テレポートを実行します。 [2016年2月1日修正]「spawnTime」スコアはリスポーン時に0から増え続けるので、ここで「spawnTimeが4以上」と書くことでリスポーン直後はイベントを無効化しています。 |
「4」のコマンド |
/clear @a[score_clickLobbyItem=-1,score_clickLobbyItem_min=-1] minecraft:diamond 0 1 {display:{Name:"ロビーに戻る",Lore:["クリックでロビーに戻ります"]}} 「3」と同時に実行されます。インベントリ上のテレポートアイテムを消します。 |
「5」のコマンド |
/replaceitem entity @a[score_clickLobbyItem=-1] slot.inventory.13 minecraft:diamond 1 0 {display:{Name:"ロビーに戻る",Lore:["クリックでロビーに戻ります"]}} 「3」と同時に実行されます。アイテムが無くなった場所に即座にテレポートアイテムを再設置します。「slot.inventory.13」の数字は、「2」のコマンドブロックの「Slot:○○b」の数字とは違いますのでご注意下さい。例えば装備なら「slot.armor.head」などで、手持ちバーなら「slot.hotbar.○○」です。 |
「6」のコマンド |
/execute @a[score_spawnTime=0] ~ ~ ~ kill @e[type=Item,c=1] {Item:{id:"minecraft:diamond",Name:"ロビーに戻る",Lore:["クリックでロビーに戻ります"]}} 「spawnTime」スコアは死亡時に0になるので、死んだ時に実行されます。死亡時に落としたアイテムを後で回収した時に、イベントが誤発動するのを防止するために、死亡時にアイテムを消します。 |
クリックするアイテムの位置を変えるには

クリックするためのアイテムの位置を変更するには、「2」と「5」のコマンドブロックのこれらの数字をずらします。同じスロットを指定したい場合でも、「Slot:○○b」「inventory.○○」それぞれで指定する数字が違いますのでご注意下さい。
また、アイテムの位置を変更する前にかならずその位置に該当するアイテムを設置して下さい! でないとテレポートなどが発動してしまいます。
いかがでしたか。この仕掛けを使った楽しい配布ワールドが沢山作られるのを楽しみにしています。この仕掛けを応用して素晴らしい仕掛けを作ってみてください。また、皆さんがコマンドや回路で気になることなどコメント下さい。
これBukkitのChestCommandsGUIに似てるような希ガス
すげーーー
アイテムが無くなったという検知を遅延無しでやりたかったのでこの記事は本当に参考になりました。
ありがとうございます。
あの~、これを頭装備にして作動させるにはどう書き換えればいいのでしょうか ?
(マルチならプラグインサーバーでできる…)
がすとぉ
返信遅れて申し訳ありません。
「2」のコマンドは
/scoreboard players set @a clickLobbyItem 1 {Inventory:[{Slot:103b,id:”装備品のID”,Count:1b,tag:{display:{Name:”アイテム名”,Lore:[説明文]}}}]}
「5」のコマンドは
/replaceitem entity @a slot.armor.head 装備品のアイテムID 1 0 {display:{Name:”アイテム名”,Lore:[説明文]}}
になります。「Inventory」内では「Slot:”103b”」、replaceitemコマンドでは「slot.armor.head」が頭装備です。
「2」のslotのところはどこがこの数字みたいなわかる方法はありますか?
こちらの公式Wikiのページに、数字の一覧があります。
http://minecraft.gamepedia.com/Player.dat_format#Inventory_slot_numbers
ありがとうございます!
どんどんコマンドの可能性が広がっていく…
[5]のコマンドのslot.inventory.13の13とはどういう意味ですか?
ホットバーに、例えば花があるとして、それを釣竿使うみたいに右クリックすると、スコア追加して、スキルが使えるみたいなコマンドわかりませんか?
質問です!クリックで取ったダイヤモンドはゲットできてしまうんですか?
サバイバルモードかアドベンチャーモードで試してみてください。それらのモードではアイテムは増えないはずです。すぐに戻されます。
インベントリ(手持ちバーは含まない)の左上を0とした時、そこから右へ数えて13番目という意味です。scoreboardコマンドやtestforコマンドで使う「{Inventory:[{Slot:”22b”,id:”…”}]}」ではプレイヤーのアイテムがセットできる場所全てを通算して数えているので、同じ場所でも「Slot:”22b”」となりますが、replaceitemコマンドではバラバラで数えるので3×9のインベントリの中で0+13番目、ということで「slot.inventory.13」となります。
例えば手持ちバーの真ん中を指定する時は、データタグだと{Inventory:[{Slot:”4b”,id:”…”}]}、replaceitemコマンドだと「slot.hotbar.4」と書きます。手持ちバーはreplaceitemコマンドだと「hotbar」として別扱いなんです。
インベントリの番号が数えるの面倒だったがこんな感じのイラスト作っとけばよかったのか。なるほど。
って、ページ要素追加されとる!
こちらを どうぞ。
http://exr-nap.sakura.ne.jp/www.napoan.com/43174379/
あ、「5」のコマンドに@a[score_clickLobbyItem=-1] がないのですが、
いらないのでしょうか?
おっと忘れていました! ご指摘ありがとうございます。正しくは
/replaceitem entity @a[score_clickLobbyItem=-1] slot.armor.head 装備品のアイテムID 1 0 {display:{Name:”アイテム名”,Lore:[説明文]}}
です。
あと、なぜかクリックしてとったアイテムがとれてしますのでなぜでしょうか?
クリエイティブモードでは残念ながら増殖できてしまいます。サバイバルやアドベンチャーなら増えないと思いますので再度お確かめ下さい。
一回アドベンチャーモードでやってもなぜか増えてしますのです・・・
再度確認してみましたが、私の環境では増えませんでした。
クリックするアイテムのIDや名前、説明文と、各コマンドの内容が一致しているかもう一度ご確認下さい。
死んでしまってリスポーンした時に、コマンドで設定したTPの座標にテレポートしてしまうのですが、なぜでしょうか?私の環境でだけ起こることなのでしょうか?
申し訳ないです、死ぬとアイテムが無くなってクリックしたことになってしまうことを全然考えてませんでした… 現在対処法を試行錯誤中ですので、応急処置として「/gamerule keepInventory true」で死亡時のアイテムドロップを無効化してお使いください
只今記事を修正し、死亡時にイベントが誤作動しないようにしました。
コマンドが6つに増えていて、既存のコマンドにも少し変更があります。お手数おかけしますがコマンドの書き換えをお願いします。それと必要なスコアボードも増えましたので、記事を参考に作成をお願いします。
③のコマンド「/tp @a[score_clickLobbyItem=-1,score_spawnTime_min=2] テレポート先のx y z」の「score_spawnTime_min=2」を「score_spawnTime_min=3」にしないと正常に動きませんでした(´;ω;`)
訂正: 3 にしても正常に動かないことがあったため 4 にしてみたら安定しました。
ご指摘ありがとうございます。修正しました。
クリックではなく右クリックもしくは左クリックにできないでしょうか?
右クリックと左クリックの区別ですが、アイテムが無くなったタイミングを検知しているので区別は無理です…
それと私Hypixel遊んだこと無いのでコンパスをクリックすると何が起こるのか教えて頂ければアドバイスできるかもしれません。
右クリックでした。
右クリックするとラージチェストみたいなのが出てきます
コマンドでは”右クリックだけ”は無理ですが、左クリックでも構わないならば、「3」のコマンドを
/execute @a[score_clickLobbyItem=-1,score_spawnTime_min=4] ~ ~ ~ setblock ~ ~ ~ minecraft:chest 0 replace
とすれば擬似的にそういう機能が作れますが… ただ単にチェストが設置されるだけです。自動で画面を開く、という機能はコマンドでは無理なので残念ながらMODやサーバーのプラグインに頼るしかありません…
TPした状態で永遠にTPされうごけなくなりワールドがパーになってしまったんですけどなにが悪いのでしょうか
MCEditで3のコマンドブロックを消去すれば直ります。MCEditでAltキーを押せばブロックの中身を確認できるので、3のtpコマンドを探してブロックを削除してください。
次に、spawnTimeスコアを作成できているか、それと装置をONにする時に、
(1.9以上なら先頭のリピートコマブロを「レッドストーン信号が必要」にすればレバーでオンオフ可能になります)
インベントリの真ん中に該当するアイテムを置いてから装置を動かしてください。
6のコマンドの説明の最後に/td>がついてますよ
ご指摘ありがとうございます。修正しました。
質問なんですが、ミニゲームをする際にワープするものを削除or無効化したいんです。
でもclear @p をするとコマンドの関係でロビーに戻されます。
ミニゲームの時だけ無効化や削除することってできますか?
ミニゲーム中のプレイヤーにだけタグ(ここではnowGameというタグとする)をつけ、
TPコマンドの部分のセレクターでtag=!nowGameを指定すればできるかと思います。
さん本人ではございませんので保証できませんが。。。
失礼しました。この記事では1.8での解説ですので、1.8でしたらタグ機能使えませんよね。。。
僕自身1.8でのコマンドに詳しくありませんので保証しかねますが、スコアボードでゴリ押しすればなんとかなる。。。と思います。
これを、1つのアイテムにまとめて、そのアイテムを右クリックしたら、このページで解説されているアイテムが出てくるみたいなのはできないのでしょうが?
まぁ、海外鯖によくあるサーバーメニューみたいなやつです!
なんか、ロビーから動けなくなりました。
どうしたらいいですか??