오늘 강좌는 세렌이 아니라 최가 쓰고 있습니다.


레일크래프트(Railcraft)


원 개발자: 코버트재규어 (CovertJaguar)

강좌에 사용된 버전:10.3.1

마인크래프트 버전:1.10.2

주의사항: 조합법은 JEI를 참고하도록 합시다. 레시피 변경이 잦습니다.


#105 - 스위치와 라우팅


기본편(4)에서 살펴본 분기점 트랙들은 스위치 트랙은 직진, 와이어 트랙은 우회전이 기본 설정으로 되어 있습니다. 이를 바꿔 방향 전환 용도로 쓰기 위해서는 다른 기계가 필요합니다. 이번 강좌에서는 해당 기계들을 살펴보도록 합시다.


스위치 액추에이터 레버(Switch Actuator Lever)

경로 설정을 위한 도구 중 가장 기초적인 장치입니다.

모양새.

조합법입니다.

이 장치는 트랙의 진행방향을 수동으로 바꿉니다. 선로용 레버라고 보시면 됩니다.

스위치 액추에이터 레버의 뒤쪽 검은색 막대기와 빨간 화살표, 와이어 트랙의 모양에 주의하세요.

우클릭을 해 주면 반대쪽으로 변하는 것을 볼 수 있습니다.

스위치 트랙도 마찬가지로 변합니다.

가장 기본적이고 사실 크게 쓸 만한 곳이 없습니다. 수동으로 할 이유가 없기 때문에...

스위치 액추에이터 모터(Switch Actuator Motor)

조합법. 녹색 판때기는 리시버 서킷(receiver circuit)입니다.

청금석은 지옥석영으로 대체 가능합니다.

스위치 액추에이터 모터와 다르게 레드스톤 신호로 작동합니다.

꺼져 있을 때는 기본 방향을 가리키고 있다가

신호를 받으면 방향이 바뀌는 식.

또 이 블럭을 우클릭해 보면 이런 GUI가 뜹니다. 신호기 설정에 쓰이는데, 다음 강좌에서 알아보도록 합시다.

레드스톤 신호를 받아들이니 수동인 레버보다는 좀 쓸모가 생겼습니다만 카트 디텍터 같은 장치를 따로 사용해야 하니 좀 실용성이 낮습니다. 스스로 열차를 감지해 주는 장치는 없을까요?


라우팅 스위치 액추에이터 모터(Routing Switch Actuator Motor)

이 강좌의 꽃이라고 할 수 있습니다. 가장 응용 방법이 다양하고 또 그만큼 사용법도 복잡한 장치입니다.

조합법. 왼쪽에 있는 것은 스위치 액추에이터 모터입니다.

오른쪽에 있는 것은 카트 디텍터-라우팅(Cart Detector-Routing). 기능상으로 보자면 라우팅 스위치 모터는 이 카트 디텍터를 일체형으로 만든 것입니다. 후술할 라우팅 스위치 모터와 동일하게 쓰일 수 있지만 트랙을 직접 바꾸지는 못하고 레드스톤 신호만 내는 일반적인 카트 디텍터입니다.

이 라우팅 스위치 모터를 쓰기 위해서는, 라우팅 테이블(Routing Table)이 필요합니다.

바닐라 아이템 깃펜과 책(Book and Quill)이 필요합니다.

라우팅 테이블을 우클릭해서 펼쳐보면 이런 GUI가 나옵니다.

Name: 라우팅 테이블끼리 구분하기 위해 이름을 붙일 수 있습니다.

Help: 인게임 매뉴얼.

Done: 라우팅 테이블에 쓴 내용을 저장합니다. 이걸 누르지 않고 ESC로 닫으면 써놓은 내용이 죄다 날아갑니다.

Name을 누르고 Tutorial을 입력해 보았습니다.

이렇게 끝에 이름을 표시해 줍니다. 라우팅 테이블 여러 권을 들고 다니면서 선로를 설정할 때 유용합니다.

주의: 라우팅 테이블은 여러 권을 한 스택에 넣을 수 있습니다. 같은 스택에 넣기 위해서는 내용이 같아야 하고, 스택을 우클릭해서 편집하면 스택에 든 책이 모두 동시에 편집됩니다.

라우팅 테이블을 사용할 때는 손에 들고 라우팅 스위치 모터에 우클릭하면 자동으로 넣어지고, 아니면 라우팅 스위치 모터를 테이블을 들지 않은 손으로 우클릭해서 GUI를 열어 넣거나, 혹은 뺄 수 있습니다.

라우팅 스위치 모터에 잘못된 내용의 라우팅 테이블을 넣으면 GUI가 켜지면서 X자가 표시됩니다. X에 커서를 대면 오류를 일으킨 사유가 표시되는데 Unrecognized Keyword ""라는 에러가 뜬다면 라우팅 테이블에 빈 줄(엔터만 치고 아무것도 안 쓴 줄)이 있기 때문입니다. 커서를 맨 밑으로 내려서 빈 줄을 삭제하시면 됩니다. 참으로 멍청한 컴파일러입니다. 이것 때문에 꽤나 고생했습니다.


GUI를 켠 김에 설명하자면, Public Railway라고 쓰인 버튼은 Private Railway로 바꿀 수 있으며 이는 열차 주인에 상관없이 작동할지, 아니면 주인이 자신인 열차에 대해서만 작동할 지 결정합니다. 자물쇠 모양의 버튼은 열린 자물쇠와 잠긴 자물쇠로 바꿀 수 있습니다. 잠긴 상태면 주인이나 서버 OP만 조작할 수 있습니다. 열차 트롤을 당하기가 워낙 쉽기 때문에...


라우팅 테이블(Routing Table)

라우팅 테이블은 간단한 조건문으로 프로그래밍하는 것과 같습니다. 인식에 쓰이는 조건문들을 지금부터 설명하겠습니다.

1. Dest 조건문

Dest 조건문은 기관차의 목적지를 감지합니다. 목적지를 설정하는 법은 기관차 강좌에서 따로 다루겠습니다.

이렇게 입력하면 Home이라는 목적지를 가진 열차만 분리합니다. 라우팅 스위치 액추에이터 모터도 감지하지 않을 때는 기본 방향을 가리키고 있다가, 조건에 맞는 열차가 감지되면 화살표와 트랙 방향을 바꾸는 방식. 뒤로 라우팅 모터가 오른쪽(와이어 트랙의 기본 방향)을 가리키고 있는 것을 볼 수 있습니다.

이렇게 분류됩니다. 목적지를 여러 개 설정해 주고 싶다면 Dest문을 여러 번 써 주시면 됩니다.

이런 식으로. Mine이나 Home으로 설정된 열차를 분류해 줍니다.

만약 목적지가 설정되지 않은 열차만 분류하고 싶다면 Dest=null을 입력하면 됩니다. 그렇다고 목적지를 진짜 'null'이라고 설정한 열차까지 분류해 주진 않습니다.


2. Name 조건문

카트의 이름을 인식합니다. 모루로 붙이는 그 이름이요.

모루로 붙이는데다 경험치가 드니까 이걸 왜 하나 싶지만...

기관차가 없이 부스터 트랙에 창고 카트만 실어서 쓰는 단거리 수송노선(연료를 안 쓰니 훨씬 편합니다)은 목적지 설정이 안 되므로 카트에 이름을 박아서 쓸 수 있습니다.

일반 카트, 탱크 카트, 상자 카트 등등 전부 이름 달면 분류됩니다. 이거 쓰다 생각난 건데 기관차랑 카트 리뉴얼 강좌가 아직 없는데...


3. Type조건문

쓰기 더럽습니다. Type=(모드명):(아이템ID)로 씁니다. give 명령어에 필요한 그겁니다. minecraft:minecart, minecraft:chest_cart, railcraft:tank_cart 이런 것들...

앞에서 모루로 이름 붙이는 것처럼 기관차 없는 기차에나 쓸 만합니다. 무엇보다 기관차가 있으면 기관차부터 인식하고 보거든요. 거기다가 기관차는 후술할 조건문인 loco를 가지고 구분이 가능합니다.

이렇게. 기관차가 연결되어 있으면 마인카트가 앞에 있어도 인식이 안 됩니다.

기관차 없이 열차를 구성하면 맨 앞에 가는 카트를 인식해서 분류합니다. 디커플러 트랙을 쓰고 분류해서 커플러로 다시 구성하는 자동조차가 가능하긴 하지만 트레인 디스펜서가 있어서...


4.Owner 조건문

열차 주인 이름을 인식합니다. 싱글플레이로 공략을 작성하고 있는 고로 생략하겠습니다.


5. Rider 조건문

열차 탑승자를 인식합니다. 조건으로 쓸 수 있는 문장이 다양합니다.

any: 무엇이든 타고 있으면 됩니다.

none: 아무도 타고 있지 않습니다.

mob, animal, unnamed: 각각 몹, 동물, 이름이 없는 몹이나 동물입니다.

player: 플레이어. player:(닉네임)으로 씁니다.

named: 이름이 붙은 몹이나 동물. 마찬가지로 named:(이름)입니다.

entity: 엔티티의 종류를 특정합니다. entity:sheep, entity:chicken처럼 씁니다.

플레이어를 쓴 경우의 예시.

마찬가지로 양.

여러 량의 열차가 연결 중인 경우 한 개의 카트라도 조건을 만족하면 분류됩니다(none은 예외. 열차가 비어야 합니다).

이전의 riding, ridden 조건문을 하나로 합친 셈. 가축수송차의 실용성에 대해서는 아는 바가 없습니다.


6.Color 조건문

기관차에서만 쓸 수 있습니다. Color=(상부 색):(하부 색)으로 씁니다.

조건은 마인크래프트의 16색(첫 글자는 대문자로 쓰고, 연회색이나 하늘색은 LightGray와 LightBlue로 씁니다)에 Any로 쓸 수 있습니다. Any는 어떤 색깔이든 인식할 수 있습니다.

Color=Any,Black으로 설정한 경우. 오른쪽에 있는 기관차의 하부 색이 모두 검은색인 것을 알 수 있습니다.


7.NeedsRefuel 조건문

거의 증기기관차 전용 조건문. 연료나 물이 부족한지 인식합니다. NeedsRefuel=true/false로 씁니다.

이 '부족하다'의 정의가 애매한데, 실험해본 결과 연료(목탄, 원목 등) 16개 이하, 물은 1.5버킷 이하로 보입니다. 너무 적지 않나 싶습니다.


8. Loco 조건문

기관차의 종류를 인식합니다. Loco=steam/electric/creative/none 중 하나를 씁니다. none은 열차에 기관차가 없는 경우입니다. 중간에 끼웠다고 none으로 인식하지는 않습니다.


9. Redstone 조건문

라우팅 모터 블럭이 레드스톤 신호를 받고 있는지 인식합니다. Redstone=true/false로 씁니다.


이상의 조건을 하나만 쓰는 경우도 있지만 여러 개를 복합으로 쓰는 경우도 있습니다. 여러 개 중 하나만 충족해도 된다면 그냥 여러 줄에 걸쳐서 쓰면 되지만 동시에 충족해야 하거나 조건을 충족하지 않아야 하는 경우는 논리연산자를 쓸 수 있습니다.

OR 연산자

다음에 오는 두 줄 중 하나 혹은 둘 다 충족합니다. 자체만 쓰는 것은 의미가 없고 다른 연산자의 하위에서 조건을 묶기 위해 씁니다.

NOT 연산자

바로 다음 줄에 있는 조건을 만족하지 않아야 인식합니다.

NOT과 OR을 같이 쓴 예시. 목적지가 Home이나 Forest가 아닌 열차만 인식합니다. OR이 빠지면 바로 다음 줄에 있는 Dest=Home만 인식하게 됩니다.

AND 연산자

다음에 오는 두 줄을 모두 충족합니다. 3개 이상의 조건을 인식시키려면 중첩으로 씁니다.

3개의 조건을 쓰는 AND문. AND문 하위에서 다시 AND를 쓸 수 있습니다.

4개의 조건을 쓰는 AND문. AND문 하위에 다시 AND문을 2개 넣었습니다.

AND(AND(Dest=home;Loco=electric);AND(Color=yellow,black;Rider=player:Bunting_chj))같은 형태라고 볼 수 있습니다.

IF문

IF문은 다음에 오는 줄 3개를 각각 조건(COND), 참(THEN), 거짓(ELSE)으로 씁니다.

조건이 충족되면: 참(THEN)을 실행합니다.

조건이 충족되지 않으면: 거짓(ELSE)를 실행합니다.

THEN이나 ELSE의 자리에는 TRUE(분류함), FALSE(분류하지 않음), 0~15까지의 숫자(레드스톤 신호 세기)

IF문의 참이나 거짓에 다시 IF문을 쓸 수 있습니다.

라우팅 모터보다는 카트 디텍터-라우팅에 적절한 조건문입니다. 라우팅 모터의 경우 결과로 실행할 것이 TRUE, FALSE밖에 없지만 카트 디텍터의 경우 아날로그 출력(0~15까지의 레드스톤 신호 세기)을 사용 가능하기 때문.

기관차가 전기기관차라면 세기 8의 레드스톤 신호를, 아니라면 아무것도 하지 않는 설정입니다. 아날로그 출력을 설정한 라우팅 테이블을 라우팅 모터에 집어넣어도 에러가 생기는 것은 아니지만 레드스톤 신호를 내지는 않고 0 이상의 값이면 TRUE와 동일하게 받아들입니다.(0은 당연히 FALSE)


강좌 종료.

다음 강좌는 더 정교하게(그리고 더 어렵게) 라우팅 테이블을 쓰는 법에 대해 다룹니다.

+ Recent posts