“金額不足だったらアナウンスしてくれるショップ”がコマンド6つで作れちゃう?!【応用コマンド講座 Extra#1】

どうも、応用コマンド講座不定期担当のとれんさーです。今回が初めての記事となります。よろしくお願いします!


さて今回は、前回紹介した機構を用いて、物々交換ショップの一例を皆さんにご紹介したいと思います!具体的な仕組みとなるので、ある程度細かく噛み砕いて説明していこうと思います。

前回の記事はこちら!

今回作る仕組みの大まかな流れはこのようになっています。

通貨となるアイテム(以降「通貨」と表記)をプレイヤーから剥奪
⬇︎[負の条件付き]
「通貨が足りない」というアナウンスを出す

第1回では、ブロックを使って負の条件付きを動作させましたが、今回はデータ値の異なる同アイテムの剥奪を利用していきます。仕組みを文で説明していてもいまいちピンとこない方もいると思うので、具体的なコマンドを見ていきましょう。
コマンドブロックを6つ直線上に並べており、先頭から(デフォルト)(チェーン常時実行)(チェーン条件付き常時実行)(チェーン条件付き常時実行)(チェーン常時実行)(チェーン条件付き常時実行)と並べている画像のようにコマンドブロックを設定して下さい。しっかり6つが同時動作するように置かれていれば、並べ方はどう置いても構いません。

※今回は通貨や商品となるアイテム(以降「商品」と表記)などの具体的なアイテムIDと、その数量が必要となります。[通貨のアイテムID]や「[通貨の必要数量]」などと表記されているところは、対応するアイテムのアイテムIDや数量を正しく入力するようにしてください。

①/replaceitem entity @p slot.armor.head 0 [通貨のアイテムID] 1 1

インベントリの頭装備のスロットに別データ値の通貨を置くコマンドです。

ここで/giveではなく/replaceitemを使うのは、通貨を持っていてさらに通貨がスタック可能アイテムだった場合に、データ値にかかわらず通貨がスタックされてしまうためです。

逆に言うと、スタック不可能なアイテム(道具や武器、水入りバケツやトーテムなど)を通貨に使う場合は/giveを使用できるということです。/giveを使う方が、頭装備をしているプレイヤーの場合でも使用が可能になります。

②/clear @p [通貨のアイテムID] 0 [通貨の必要数量]

交換で必要な通貨の数量ぶんだけプレイヤーからアイテムを剥奪するコマンドです。

※/clearでは/replaceitemや/giveと異なり、アイテムIDの後に[データ値] [(最大で剥奪する)数量]の順で書きます。混同し書き間違いのないように!

③/give @p [商品のアイテムID] [商品の交換数量]

②のコマンドブロックに条件付きでつなげ、通貨が必要数量あった場合に商品を与えるコマンドです。

④/clear @p [通貨のアイテムID] 1 1

さらに条件付きでつなげ、①で与えた別データ値の通貨を剥奪するコマンドです。
これを忘れると、商品と交換できたのに「通貨が足りない」というアナウンスが流れるようになってしまう恐れがあるので忘れないようにしましょう。

⑤/clear @p [通貨のアイテムID] 1

④と全く同じコマンドですが、ここから負の条件付きの部分となります。

プレイヤーが通貨を持っておらず②が実行されなかった場合、①で与えた別データ値の通貨を検知する という具合です。

⑥/say §lExchange is failed.

⑤のコマンドブロックに条件付きでつなげ、交換が成功しなかったことをアナウンスするコマンドです。文は各々好きな文言を入れましょう。「金持って出直してこいオラァ!」でも「交渉は不成立だ、残念だったな。」でも構いません。

また、/sayや/meなどをコマンドブロックで実行する際には、「コメント」欄に人物などの名前を入れることでアナウンス感がより出るので、工夫してみると面白いですね。


ここまでどうでしたか?実際に「負の条件付き」をショップ機構に適用してみましたが、これはまだベースを作っただけで、これにさらに機能を追加していくことはもちろん可能です。交換成功の時にアナウンスをつけたり、通貨の数量が1つ足りないのを検知したり…
もっともっとコマンドを追加・変更したりして、皆さんもより良い仕組みを作っていって下さいね!

また、今回具体的な仕組みをご紹介したため、「実際に作ってみたけど成功しなかった」なんてこともあるかもしれません。そのときは、この記事のコメント欄から質問していただければ、なるべく答えようと思います!Twitterで直接質問していただいても構いません。

ということで、今回の応用コマンド講座はこれで。お疲れ様でした。


前回(第1回応用コマンド講座)⬇︎

次回(第2回応用コマンド講座)⬇︎