//Statements
概要
Switcherサイン、DetectorサインとSkipサインはそれぞれの動作のためにステートメント、つまり条件文を利用します。基本的に三行目と四行目にステートメントを書きますが、場合によっては行数を拡張するため、サインの看板の下にさらに看板を追加することもできます。
ユースケース
列車をワールドの中でさまざまな場所にナビゲーションするとき、経路探索システムが向いています。もしそれぞれのトロッコを何らかの状態で識別したり、条件に応じて動作させるサインを選択したりしたいときには、ステートメントを利用できます。次にいくつかの利用例を掲載します。
空き車両を破壊する
もしトロッコに乗客がいなければ、Destroyサインを起動するようにします。
アイテムの積み込みが終わったら発車する
トロッコにアイテムが積み込まれたとき、Stationサインを起動します。
特定のプレイヤーのもとへ列車を送る
もしトロッコのオーナーにプレイヤーが指定されていれば、線路の分岐はそのプレイヤーのもとへ向かうように切り替わります。
記法
ビックリマークをステートメントの頭に入れると、NOT――つまり否定――として動作します。もし一行目に[cart]を利用する場合は、動作・判定の対象が列車の代わりに個別のトロッコになります。name@<array>形式のステートメントは配列ステートメントと呼ばれ、特定のプロパティの複数の要素を判定することができます。たとえば、i@woodは列車の中のアイテムを覗いて、そこに木材が含まれているかどうかを調べます。複数のアイテムを利用したいときには、セミコロンで区切ることが可能です。たとえばed@north;southと書くと、北もしくは南に向かう列車のみを対象にします。
多くのステートメントは演算子を利用します。演算子は次のとおりです。
- =:イコール(〜と等しい)
- !=:ノットイコール(〜ではない)
- >=:〜以上
- <=:〜以下
- >:より大きい
- <:より小さい
演算子を使う際は、ステートメントの末尾に付け加えて使用します。たとえばminecarts>=5とすると、列車の中に通常のトロッコが五個以上含まれているか、という意味になります。trainsize>=5とすると、チェストつきやかまどつきのトロッコも含めて数えます。ほか、演算子は配列ステートメントにおいても利用でき、i@stone=64とすると、列車の中にちょうど一スタックの石が含まれているかをチェックします。トロッコに乗っているモブをチェックするm@cow>5など、数量を利用するすべてのステートメントは演算子が利用できます。もし演算子が書かれていない場合は、デフォルトで>0――ゼロより大きい――がついているものとしてみなされます。ただしアイテムの場合は、アイテム名の頭につけられた数量が使われます。
| ステートメント | 意味 |
|---|---|
| passenger | 列車に乗客がいるか。 |
| items | 列車がチェストを含み、中にアイテムがあるか。 |
| empty | 列車には乗客もアイテムもない。 |
| fuel | 列車には燃料の入ったかまどがあるか。 |
| trainsize | 列車に含まれるトロッコの数。たとえばtrainsize>=3などです。 |
| chest_minecart | 列車に含まれるチェスト付きトロッコの数。たとえばchest_minecart>=1など。同じように、hopperやpoweredなどのトロッコのタイプでも動作します。 |
| velocity speed |
列車の移動速度の数値や、移動しているかどうか。 |
| powered | 列車にかまどつきトロッコがあるか。 |
| storage | 列車にチェスト付きトロッコがあるか。 |
| minecart | 列車に普通のトロッコがあるか。 |
| redstone | このサインに信号が供給されているか。 |
| maxspeed | 最大速度。 |
| mobenter | mobenterのプロパティ。 |
| playerenter | playerenterのプロパティ。 |
| playerexit | playerexitのプロパティ。 |
| destination | 列車に目的地が設定されているかどうか。 |
| random | 50%の確率。 |
| n@<names> name@<names> |
列車名が指定された複数の名前のどれかにマッチする。 |
| i@<items> | 列車が指定された複数のアイテムのどれかを格納している。 |
| o@<owner> | 列車に所有者が乗っている。 |
| d@<destination> | 列車のトロッコのひとつがその目的地を設定している。 |
| p@<player> | 列車がそのプレイヤーに乗られている。 |
| m@<mobnames> | 列車がそれらのモブのどれかに乗られている。 |
| pi@<items> | プレイヤーの一人が、インベントリにそのアイテムのひとつを持っている。 |
| ph@<items> | プレイヤーが手にそのアイテムのひとつを持っている。 |
| ed@<directions> | 列車がその方向に動いている。Switcherサインの場合、列車がサインを起動した際の向きを参照します。 |
| rs@<directions> | サインの看板がその方向からレッドストーン信号を受けている。 |
| [email protected] | 30%の起動確率。デフォルトは0.5(50%)。1.0は100%を表します。 |
| anything t@<tags> |
それ以外のことについては、列車にタグがあるかどうかをプラグインが確認します。 |
AND演算
通常はすべてOR演算で評価されますが、両方の条件を満たしているか調べたい場合は、二つのステートメントを反転させ、反転したサインに信号を出力すると実装できます。
| もしmeに所有されていない、またはタグaを持っていない場合、アイテムを輸送しない。 | |
| もしmeに所有されており、かつタグaを持っている場合はアイテムを輸送します。 | |
もし三つ以上のステートメントを評価したい場合など、この方法では難しいのであれば、複数のSwitcherとレッドストーン回路を組み合わせて用いて実装する必要があります。
タグ
For all statements other than in the syntax table above, the name is compared to tags on the train. To find the tags, you can use wildcards to check for multiple tags at once:
* - has a tag !* - has no tags *a - has a tag ending with 'a' a* - has a tag starting with 'a' *a* - has a tag containing 'a' *ab*cd* - has a tag containing both 'ab' and 'cd'
For example, the following sign uses tags to switch tracks. If the train contains a tag starting with station it goes left, if it contains a tag containing main it will go right. If it contains both, it will go straight ahead.
