【YukiWirelessSignal】Ver4.0
改造元システム:hi03氏 ATSControllerパック
作者　真冬 雪々（yukiyuki_mahuyu）
連絡先：　https://twitter.com/MahuyuYukiyuki　
TwitterID：　@MahuyuYukiyuki

【説明】
YukiWirelessSignalは信号機やATCを使った保安装置用に使う、Signalのデータを無線化出来るRTM照明モデルTileEntity群、及びRTMのATCモデルです。
直下の32ブロック以内のコマンドブロックに簡単なjsonを書いて入れておくことで、そのチャンクが読み込まれている間、ワイヤレスにSignalを送受信する事が可能です。
閉塞信号を組むには、チャンクローダーの置かれた指令室的な場所で、路線を縮小したようなミニ閉塞回路を作り、それを現地の信号が読み込まれた際にデータを参照して表示させます。（集中制御式の考え方）
jsonにsignal値を予め設定しておき、signal値の参照を行わないで定数を出力する事も出来ます。

【用語の基礎解説】
・Signal　    ：RealTrainModの信号機やATCを使った保安装置に用いるデータの値。整数型(int)を使う
・int        ：整数のこと。0や1,2,3……などの少数が付かない数で、コンピューターが8bit(1バイト)で処理できる0～255までを使うことが多い
・RS         ：レッドストーンの略。「RS入力」はレッドストーン信号の入力を指し、「RSブロック」はそのままレッドストーンブロックを指す。
・entity     ：Minecraftにおいて、座標に縛られない設置物・物体全般を指す用語。プレイヤー(entity.player)や動物・モンスター(mob)、ボートやトロッコなどもentityであり、
             RealTrainModにおいては列車や台車、信号機や車止め、列車検知器、ATCなどが該当する。
・TileEntity　：Minecraftにおいて、座標に縛られる設置物・ブロックなどに内包されているシステム上のentityのようなデータの入れ物。ただしentityとは全く別物なので、使用できるメソッドや
             システム上の取り扱いが全く異なる。RealTrainModにおいては照明ブロック、改札機、踏切、架線柱などが該当する。
・DataMap    ：entityやTileEntityが様々なデータを書き込んで保存しておくことができる領域。主にスクリプトを使った列車やRTMモデルで使用される。


【内容物一覧】
・YukiSignalTransmitter
　送信元Signal生成機。RS入力の有無で、設定した値のSignalデータを生成する。RTM照明モデル

・YukiSignalReceiver
　受信・中継・情報処理機。参照元座標にある信号機モデル、又はYukiWirelessSignalの機械からSignalを参照し、指定座標の信号機やTileEntityに出力する。RTM照明モデル

・YukiSignalATC
　受信・列車Signal書き込み・情報保持機。YukiSignalReceiverの地上子版。
参照元座標にある信号機モデル、又はYukiWirelessSignalの機械からSignalを参照し、直上を通過した列車の制御車へ書き込む

・YukiSignalATC_D
　YukiSignalATCの方向指定版。地上子の文字の向きを基準として正方向から進入した場合のみ作動する。逆方向からの進入では作動しない

・YukiSignalATC_R
　YukiSignalATCのレール出力版。RealTrainMod純正のATCのように、自身の設置されているレール全体にsignalを発信する

・YukiDataMapWriter
　列車Datamap書き込み機。直下にあるコマンドブロックからDataMapを参照し、直上を通過した列車の制御車へ書き込む。規定方向から進入した場合のみ作動する

・YukiSignalComparator
　数値比較・情報保持機。参照元座標にある複数の信号機モデル、又はYukiWirelessSignalの機械からSignalを参照し、最も大きい・最も小さい値のSignalを保持する　
　また、比較参照元の数と同数の出力座標を設定でき、自身が最大・最小であるか否かでレッドストーンブロックやガラスブロックを置くことができる。
　レッドストーンブロックとガラスブロックの出力は本装置の近くにレッドストーンブロックを置くと反転でき、同じように鉄格子を置いた場合、鎖錠のようにブロックのセット処理を止めることが出来る。RTM照明モデル。

・YukiSignalSelector
　受信・中継・情報処理機。参照元座標にある2つの信号機モデル、又はYukiWirelessSignalの機械からSignalを参照し、
　レッドストーンブロックの有無で選択された方のSignalを指定座標の信号機やTileEntityに出力する。RTM照明モデル

・YukiEasyPosSetter
　簡単座標セット機能起動ブロック。後述の座標設定補助機能の起動トリガーに使う

・YukiEasyPosSetterKiller
　上記の簡単座標セット機能起動ブロックをワールド上のアクティブなチャンクから除去する機械。トリガーの撤去し忘れ等防止に役立つ

・YukiSignalInputPosMarker
 簡単座標セット指定マーカー。後述の座標設定補助機能でsignalの参照元(inputpos)を指定するのに使う

・YukiSignalOutputPosMarker
 簡単座標セット指定マーカー。後述の座標設定補助機能でsignalやブロックの出力先(outputPos)を指定するのにに使う

・yukiBlockTeleporter
 ブロック複製設置機。RSブロックを周囲に置くと、直下のブロックを検索し、同じブロックを出力先へ設置する


【設定方法】
・Receiver、ATCのjson設定
{
    "outputPos":[x,y,z],←データの送信先座標（※1）
    "inputPos":[x,y,z], ←データの参照元座標（※2）
    "directSetSignal":(Int) ←データ値の直接指定【任意】（※3）
    "railCode":"hoge",←線路識別記号【任意】（※4）
}

・Transmitterのjson設定
{
    "signalLevelON":[(Int)],←RS入力がONの時のSignal値
    "signalLevelOFF":[(Int)], ←RS入力がOFFの時のSignal値
    "directSetSignal":(Int) ←データ値の直接指定【任意】（※3）
}

・DataMapWriterのjson設定
{
    "dataMapName":"hoge",←書き込みたいDataMapのキー名
    "value":[data]←書き込みたい実データ値
}

・Comparatorのjson設定
{
    "outputPos":[x,y,z],←分岐用ブロックの設置先座標（※5）
    "inputPos":[x,y,z], ←データの参照元座標（※2）
}

・Selectorのjson設定
{
    "outputPos":[x,y,z],←データの送信先座標（※1）
    "inputPos":[x,y,z], ←データの参照元座標（※2）
}

・BlockTeleporterのjson設定
{
    "outputPos":[x,y,z],←ブロックの置き換え設置先座標（※6）
}

（※1）データの送信先座標(outputPos)
この項目は任意設定です。信号の参照元座標を指定するには、[x,y,z]のように、半角数字とコンマで指定します。[[x,y,z],[x,y,z]]のようにすれば、いくつでも設定できます。
座標の符号がマイナスだとF3で見れるプレイヤー中心の絶対座標情報から1ずれるので、少数の付いた座標の後に表示されるカッコ内の数値（ブロック座標）の方を入れて下さい。
ATCタイプの奴は直上を通過した列車の制御車、あるいはレールに書き込むのでこの項目は設定出来ません。

（※2）データの参照元座標(inputPos)
※2と※3はどちらか片方の設定必須で、この設定が無いと基本的に本装置は動きません。
本装置は、この項目で指定した座標にあるTileEntityのSignal値を監視して、ワイヤレスで参照します。記入は[x,y,z]のように、半角数字とコンマで指定します。

（※3）データ値の直接指定(directSetSignal)
ここが設定されてた場合、inputPosから拾ってきたsignalを無視して指定したsingal値をsetするようになります。記入は256までのInt型です。

（※4）線路識別番号
複々線や駅構内などで、自身の走行している線路上のATCを識別するための文字列です。列車がATCを探索する際、同じ識別記号の地上子を探し、隣接線路のATCなどを誤検知するのを防止します。これを活用するには列車のスクリプト側も対応が必要。

（※5）RSブロック設置先座標
基本的には、信号の現示が高い（signalの大きい）方の線路へ分岐を切り替えるために使います。signal参照元の中で自身が最大・最小であるかを判断し、RSブロックか赤いガラスブロックを出力します。付近にRSブロックがあると出力されるブロックが反転します。
付近に鉄格子があると、信号鎖錠状態になって、signalなどの状態が変化してもブロックが変わらなくなります。

（※6）ブロックの置き換え設置先座標
※5のRSブロック設置先座標と同じように、直下のブロックをコピーして設置する座標を指定します。


【簡単座標セット機能(推奨)】
・YukiEasyPosSetter
・YukiSignalInputPosMarker
・YukiSignalOutputPosMarker
・YukiEasyPosSetterKiller

ReceiverのinputPosの設定で、いちいち座標調べて手書きで設定するのは面倒なので、これを使うと多少楽できます。
使い方は簡単、簡単座標セット対応の機械の周辺（3×3×3の範囲）にYukiEasyPosSetterを置いて簡単座標セットモードを起動。YukiSignalInputPosMarkerや、YukiSignalOutputPosMarkerの照明モデルを、
座標設定したい相手の機械の1ブロック真上にポンと置くだけ。（OutputPosMarkerでブロック設置座標を設定する場合は、Markerを置いたその場所に設置されるので、ずらさず設定したい場所に置いてください。）
YukiSignalPosMarkerの照明モデルはガラスブロックに変わり、簡単座標セットモードになってた機械直下のコマンドブロックが自動で書き換わってjsonが記入されます。セットする瞬間だけはセット元とセット先のチャンクがロードされてないと動きませんので注意。
なお、複数回PosSetter機能を使った場合、Inputは参照元の座標情報が上書きされ、Outputは出力先の数が増えます。例外的にYukiSignalComparatorのみInputが複数保存可能ですが、使用されるのは最初に登録した2座標のみです。
一つ注意点として、YukiEasyPosSetterを撤去し忘れると、別の機械の座標登録時に誤作動して登録してしまうので、座標セット作業終了時はどこでもいいので、ワールドにYukiEasyPosSetterKillerを数秒設置するといいでしょう。PosSetterKillerが
作動すると、自動でワールド内の読み込まれていてアクティブなチャンク内にあるYukiEasyPosSetterを白いガラスに置き換えて無効化してくれます。


【その他信号回路用オプションブロック】
・金/鉄ブロック
数値増減用オプションブロックです。金、及び鉄ブロックを本装置を中心とする縦横3*3、深さ10マスまでのに置くことで、参照してきた数値から増減した値を表示・出力するようになります。
金なら加算、鉄なら減算で、本装置とブロックとの相対位置によって増減値が変わります。装置と同じ高さが±0で、ブロックの相対的な高さが低くなるほど加算・減算値は大きくなります。
単純な閉塞信号を組む場合は、Receiverなどの真下に金ブロックを置くと、signalが装置を中継するごとに高くなり、信号の現示が1ずつ上がります。
また、Comparatorにおいては少々特殊で、加算・減算とは異なるオプションモードの設定に使います。
Comparatorはデフォルトでinput先の中で最大の値を選択・RSブロック出力するようになっていますが、金ブロックを置くと最小の値を選択するようになります。

・RSブロック
RSブロックを本装置を中心とした周囲3*3*3の範囲に設置すると、信号の値を強制的に1に固定します。hi03氏の検知器などと合わせて在線情報と連動させるといいでしょう。

・ラピスラズリブロック
RTMデフォルト信号用オプションブロックです。デフォルトの4灯式信号などで黄色が連続するのが嫌だったので、本装置の周囲3*3*3の範囲にラピスラズリブロックを置くと、signal値が2だった場合は強制的に3に変換されるようにしました。
また、6を超えて数値が増えすぎないよう、信号用オプション適応時は6以上に数値が増えないようになります。

……元々自分用に作ったパックなので、かなり仕様が複雑です。使い方で分からない事があったら、私のTwitterのDMまでご相談ください。

解説おわり



【規約等】
・著作権は私に帰属します。
・当パックの使用によって生じたいかなる損害も、当方は責任を負いかねます。
・無断転載や無断での改造を、一切禁止します。
・ただし、私に直接改造許可を取った場合はその限りではありません。
・スクリプトに関しては、参考にしたり、流用するのは自由です。（もっとも、えげつないスパゲッティーコード過ぎて理解できるかは分かりませんが……。）
・改造等される場合は「必ず事前に」、私までご相談ください。ただし、必ず許可をお出しできるとは限りません。
・動画やSNSなどでの掲載は可能です。連絡は任意ですが、連絡があれば私が喜んで小躍りします。
・商用利用（収益化動画投稿など）は全面的に許可しますが、規約は必ず守ってください。
・当パックの使い方は基本的に自由ですが、私、及びパーツ・素材作者様に迷惑をかけず、過度に失礼な使い方はおやめください。
・当アドオンパック内のデータを閲覧する、又はMinecraftに導入して起動した時点で、上記の規約を理解し同意したものとみなします。同意できない場合は、ただちに当パックを削除してください。
