tag式反転機構

投稿者:ヘイホーの叫び
投稿日:2024/7/30
ジャンル:アルゴリズム 機構・技術
環境:通常
情報番号:5

説明

通常、コマンドにおける条件検索は論理積 (AND、かつ)*1しか使えません
しかし、「ド・モルガンの法則」を利用すれば、論理和 (OR、または)*2を使える場合があります
場合は以下の二つ
一:元の条件の否定 (NOT、~でない) が可能である場合
二:元の条件の否定 (NOT、~でない) が不可能または困難である場合
このページでは二について解説しています
一についてはOR条件をご覧ください

原理

二の条件(例)

r=v (rm=v は v が含まれてしまい、計算が面倒)
c=w (対象エンティティ数が定数でない場合などは困難)
dx=x,dy=y,dz=z (エンティティごとに当たり判定が異なるため、多くの場合困難)

元の条件が上記のようなものである場合、コマンドが複数必要となります

/tag <object>[tag=true] remove true
/tag <object>[r=v] add true
/tag <object>[tag=!true,c=w] add true
/tag <object>[tag=!true,dx=x,dy=y,dz=z] add true
/<command> ※<object>[tag=true]

なお、tagを付与する代わりにscoreを加算していき、そのscoreが1以上であることを条件とすることも可能です*3
この場合、いくつの条件を満たしたかが分かります
使いどころは多くないと思われますが、排他的論理和 (XOR)*4の実装などには有効かもしれません

これらのコマンドはコマンドブロックで使う場合、場合実行座標がそれぞれ異なってしまうので、executeコマンドを用いて実行座標を固定する必要があります
functionを使う場合は固定する必要はありません

補足
  • セレクター引数scoresはスコアを保有しない対象を反転できないため厳密にはr,rmの関係と似ています
  • tagコマンドの対象をセレクター引数tagで絞る必要はありません(どっちがいいのか分からない)
  • この機構は「負の条件付き」と呼ばれる場合があります
最終更新:2024年12月22日 14:10
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|

*1 すべての条件を満たしていなければならない

*2 一つでも条件を満たしていればよい

*3 この場合score式反転機構と呼ばれます

*4 二つ以上の条件のうち、どちらか一方だけを満たしていなければならない