マイクラ統合版で『ダメージを受けたら~』というトリガーをコマンドで作ってみます。
被ダメをトリガーとして拾うことは出来ない?
あくまで筆者の知る限りの話ではありますが、マイクラ統合版では『自分のキャラクターがダメージを受けたら~』に該当するイベントが無いようです。
が、コマンドでいろんなゲームを作っていると
『被ダメきっかけで○○を発動したい』的なケースに割と出くわします。
殴られたら鬼交代とか、殴られたら大爆発とか。
なので、コマンドで疑似的に被ダメトリガーを作ります。
防具の耐久度を利用する
プレイヤーの体力の変化を監視できるトリガーが無いので、代わりに防具の耐久値を利用します。
clear (ターゲット) leather_chestplate 0 0
ターゲットの耐久値MAXの革胸防具を0個削除する
このコマンドでは、ターゲットから防具をクリアする際に、防具に『データ値0(耐久値MAX)』『個数0』を指定することで
・耐久値MAXの防具を持っている→clear成功
・耐久値が削れた防具を持っている→clear失敗
という結果を拾うことが出来ます。
削除する個数は0なので、clearコマンドが成功しても防具はなくなりません。
そのためこのコマンドは反復で実行し、「常に耐久値MAXの防具を持っている」という状況を監視し続けられます。
ただし、今回は被ダメをトリガーとして拾うことが目的なので、コマブロからコンパレーターで成功(信号ON)失敗(信号OFF)を取り出したうえでトーチで反転し
・耐久値MAXの防具を持っている→クリア成功→反転→信号OFF
・耐久値が削れた防具を持っている→クリア失敗→反転→信号ON
とします。
clearコマンドを反復で実行することで防具の耐久を常時監視しながら、
『プレイヤーがダメージを受ける=防具の耐久値が削れる』ことでONの信号を拾えるようになります。
なお、ON信号を拾った後は↓
replaceitem entity (ターゲット) slot.armor.chest 0 leather_chestplate 1 0 {“item_lock”:{“mode”:”lock_in_slot”}}
耐久値MAXの防具に置き換えるコマンドを実行して被ダメ待ち(信号OFF)の状態に戻します。
※clearコマンドではアイテム名の後に(データ値)(個数)と並びますが、
replaceitemコマンドではアイテム名の後に(個数)(データ値)と並ぶ点に注意しましょう。
これのせいで毎回「どっちだっけ?」と考えるハメになります。
削れ幅を限定できれば反転は要らないかも
上記の方法では『ダメージを負って防具が削れる』ことをトリガーとしていますが、『耐久がいくつ削れるか』はわかっていません。
なので「耐久MAX→反転→ではない」という条件で削れ幅を限定しないようにしています。
もしも削れ幅を限定してコントロールするなら、反転は使用せずに『データ値(耐久値)〇なら』という条件をピンポイントで狙えるんじゃないでしょうか。