콘텐츠로 이동

MCHPRS

레드스톤을 위해 만들어진 1.20.4 Minecraft 서버다. Rust로 작성되었고, 512x512 크기의 영역마다 별도의 스레드에서 돌아가기 때문에 성능이 매우 높다.

MCHPRS는 일반적인 서버와 많이 다르다. 레드스톤 연산에 맞춰 만든 서버라서 바닐라에 있는 많은 요소가 여기에는 없다.

MCHPRS를 빌드하려면 Rust와 Cargo가 필요하다. 설치 방법은 직접 검색해 보자.

Terminal window
git clone https://github.com/MCHPR/MCHPRS.git
cd MCHPRS
cargo build --release

빌드가 끝나면 운영체제에 따라 ./target/release/mchprs 또는 ./target/release/mchprs.exe에 실행 파일이 생긴다.

CPU에 맞춰 더 최적화하고 싶다면(대신 호환성은 떨어진다) 다음 명령으로 빌드한다.

Terminal window
RUSTFLAGS="-C target-cpu=native" cargo build --release

직접 빌드하기 싫다면 GitHub Action에서 빌드된 파일을 내려받아도 된다.

설정 파일은 Config.toml이다.

필드설명기본값
bind_address바인드 주소와 포트0.0.0.0:25565
motdMOTD"Minecraft 高性能红石服务器"
chat_format채팅 메시지 형식(중괄호로 username, message 변수를 넣는다)<{username}> {message}
max_players최대 동시 접속자 수99999
view_distance시야 거리8
whitelist화이트리스트 사용 여부(whitelist.json 파일을 읽는다)false
schematiOpen Redstone Engineers의 Schemati 플러그인 검증 방식과 디렉터리 구조를 흉내 낸다false
block_in_hitbox플레이어 히트박스 안에 블록 설치 허용(충돌 판정 로직을 단순화한다)true
auto_redpiler레드스톤 컴파일러 자동 사용false

MCHPRS 자체는 플레이어 인증을 지원하지 않지만, Velocity의 modern 포워딩은 지원한다.

Velocity IP 포워딩을 쓰려면 Velocity 프록시를 설치하고 설정해야 한다. Velocity 설정에서 player-info-forwarding-mode가 modern인지 확인한 뒤, 다음 내용을 Config.toml에 추가한다.

[velocity]
enabled = true
# Velocity 설정의 `forwarding-secret-file` 파일 안에 있는 비밀 키 내용이다.
# 파일 경로가 아니다.
secret = "<비밀 키>"
명령어줄임말설명
/rtps [rtps|무제한]없음영역의 초당 레드스톤 틱을 [rtps]로 설정한다. 기본값: 10. (레드스톤 틱 1 = 게임 틱 2)
/radvance [틱 수]/radv영역을 [틱 수] 레드스톤 틱만큼 진행시킨다
/teleport [플레이어]/tp대상 플레이어 위치로 텔레포트한다
/teleport [x] [y] [z]/tp지정한 좌표로 텔레포트한다(상대 좌표 지원, 부동소수점 형식은 Rust 공식 문서 참고)
/speed [속도]없음비행 속도를 설정한다
/gamemode [모드]/gmc, /gmsp게임 모드를 바꾼다
/container [종류] [신호 세기]없음비교기로 감지했을 때 지정한 신호 세기를 출력하는 컨테이너(통 등)를 얻는다
/worldsendrate [빈도]/wsr월드 전송 빈도(클라이언트에 월드 업데이트를 보내는 빈도)를 [빈도]로 설정한다. 범위: 1 ~ 1000. 기본값: 60.
/toggleautorp없음레드스톤 컴파일러 자동 컴파일을 켜고 끈다
/stop없음서버를 종료한다

Redpiler는 MCHPRS의 핵심으로, 레드스톤 시뮬레이션을 다른 방식보다 훨씬 빠르게 만들어 준다. Redpiler가 동작하는 동안에는 모든 레드스톤 연결이 미리 계산되어 있으므로 월드와의 상호작용이 제한된다. Redpiler가 동작 중일 때 블록을 설치하거나 부수면 Redpiler가 초기화되고 비활성화된다.

명령어별칭설명
/redpiler compile/rp c레드스톤 컴파일러를 수동으로 시작한다. 아래 인자를 여러 개 쓸 수 있다.
/redpiler reset/rp r레드스톤 컴파일러를 멈춘다.
인자줄임말설명
--optimize-o레드스톤 컴파일 최적화를 켠다. 경고: 현재 빌드 상태가 망가질 수 있으니 사용 전에 월드를 백업하자.
--io-only-i입출력 관련 블록(다락문, 레드스톤 램프, 소리 블록, 버튼, 레버, 압력판)의 상태만 업데이트한다. 지연을 크게 줄이고 시뮬레이션 속도를 높인다.
--wire-dot-out-d점 모양 레드스톤 가루를 -i 인자의 출력 블록으로 취급한다(컬러 디스플레이 등에 유용하다).
--update-u레드스톤 컴파일러가 초기화된 뒤 모든 블록 상태를 업데이트한다.
--export-e컴파일된 그래프를 바이너리 형식으로 내보낸다. 컴파일 그래프를 활용하는 서드파티 개발용이다.
--export-dot없음백엔드 그래프의 graphviz dot 파일을 만든다. 디버깅/개발용이다.
--print-after-all없음레드스톤 컴파일러가 빌드할 때마다 RIL 회로 디버그 정보를 출력한다. 디버깅/개발용이다.
--print-before-backend없음백엔드 컴파일 전마다 RIL 회로 디버그 정보를 출력한다. 디버깅/개발용이다.
  • 시작이 매우 빠르다. 설정 파일이 이미 생성된 상태라면 2 ms면 켜진다.
  • 메모리 사용량이 매우 적다. 시작 직후 메모리 사용량이 1 MB 정도다.
  • 레드스톤에 특화된 최적화로 비교할 수 없을 만큼 뛰어난 성능을 낸다.

MCHPR에 대한 더 자세한 소개는 README를 참고하자.