OR条件 (ド・モルガンの法則)
通常、コマンドにおける条件検索は論理積 (かつ, AND) しか使えません。しかし「ド・モルガンの法則」を利用すれば、論理和 (または, OR) を使える場合があります。
2つの場合に分け、原理と具体的なコマンドを合わせて説明していきます。
①元の条件の否定 (~でない, NOT) が可能である場合
条件の例:
tag=a
scores={b=..10}
type=player
元の条件が上記のようなものである場合、否定が可能なので1つのコマンドで済みます。
code:tex
\bar{A}\land\bar{B}=\overline{A\lor B} \tag{1}
code:tex
\bar{A}\lor\bar{B}=\overline{A\land B} \tag{2}
上記はド・モルガンの法則ですが、今回は (1) を用います。
(1) について両辺を否定すると、以下のような等式が成り立ちます。
code:tex
\overline{\bar{A}\land\bar{B}}=\overline{\overline{A\lor B}}=A\lor B
AND条件を用いたOR条件が可能であることが分かったので、次に具体的なコマンドを掲示します。
上記の例を用いて例を示すために、まずそれぞれの条件の否定を考えます。
以下のようになります。
tag=!a
scores={b=11..}
(BEに限りscores={b=!..10}も可能)
type=!player
そして、以下が上記の等式から記述したコマンドです。
code:command
/execute
as <object>
unless entity @stag=!a,scores={b=11..},type=!player
run <command>
(今回は条件を3つにしましたが、何個でも可能です。当然元の等式のように、2つでも可能です。)
元の式との対応関係は以下の通りです。
code:tex
\LARGE\color{dodgerblue}\overline{\color{orange}\bar{\color{black}A}\color{green}\land\color{orange}\bar{\color{black}B}}
https://scrapbox.io/files/67ae02320671c6c905751f53.png
以上が、元の条件の否定 (~でない, NOT) が可能である場合の原理及びコマンドです。
②元の条件の否定 (~でない, NOT) が不可能または困難である場合
条件の例:
r=v (rm=v は v が含まれてしまい、計算が面倒)
c=w (対象エンティティ数が定数でない場合などは困難)
dx=x,dy=y,dz=z (エンティティごとに当たり判定が異なるため、多くの場合困難)
元の条件が上記のようなものである場合、コマンドが複数必要です。
原理としては①に比べて遥かに簡単であり、それぞれの条件を満たした対象にtagを付与していくだけです。実行したいコマンドの条件として、そのtagを持つ対象を指定することで実現できます。
/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以上であることを条件とすることも可能です。
この場合、いくつの条件を満たしたかが分かります。
使いどころは多くないと思われますが、排他的論理和 (XOR) の実装などには有効かもしれません。