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