GN⁺: COBOL로 작성된 Minecraft 서버
(github.com/meyfa)-
CobolCraft
- COBOL로 작성된 Minecraft 서버로, Minecraft 1.21.4 버전을 지원함
-
기능
- 다음 기능들이 이미 구현되어 있음
- 무한 지형 생성 및 동적 청크 로딩
- 월드 및 플레이어 데이터 디스크 저장
- Minecraft 파일 형식 지원 (기존 월드 가져오기)
- 최대 10명의 동시 플레이어를 지원하는 멀티플레이어
- 핑/서버 상태 (서버 목록에 온라인으로 표시)
- 블록 파괴 및 배치
- 블록 상호작용 (오른쪽 클릭, 예: 문 열기)
- 플레이어 인벤토리 (창의적 모드로 제한)
- 채팅
- 명령어 (게임 내 및 대화형 콘솔을 통해)
-
server.properties
를 통한 설정 - 화이트리스트 (지속적;
whitelist.json
에 저장)
- 다중 상태, 방향, 상호작용 블록은 많은 전문 코드가 필요하며, 이 프로젝트의 범위를 초과함
- 일부 지원되는 블록: 횃불, 슬래브, 계단, 회전된 기둥, 버튼, 문, 트랩도어, 침대
- 다음 기능들이 이미 구현되어 있음
-
사용 방법
- GnuCOBOL을 사용하여 개발되었으며, Linux에서 실행하도록 설계됨
- Windows와 같은 다른 운영 체제에 대한 지원은 테스트되지 않았으나, Docker를 사용하여 플랫폼 독립적 배포 가능
- Linux에서 배포하려면 다음 전제 조건이 설치되어야 함
-
cobc
,make
,g++
,zlib
,curl
, 최신 Java 버전
-
-
make
를 실행하여 빌드하고,make run
으로 포트 25565에서 서버 시작 - Docker 사용 시:
- Docker Hub에서 이미지 가져오기 또는 직접 빌드 가능
- Docker 컨테이너 실행 시 외부에서 접근 가능하도록 설정 가능
-
왜?
- COBOL에 대한 많은 소문과 오명이 있어, 프로젝트를 통해 이 언어에 대해 더 알아보고자 함
- COBOL은 비즈니스 애플리케이션에 적합하며, Minecraft 프로토콜이 요구하는 저수준 데이터 조작에는 적합하지 않음
- 그러나 작동하는 프로토타입을 만들기 전에는 포기하지 않음
- 데이터 인코딩 및 디코딩을 통해 성능을 확보함
-
프로그램 개요
-
소스 구성 요소
- 프로그램 진입점은
main.cob
이며, 나머지 COBOL 소스는src/
디렉토리에 위치 - TCP 소켓은
CBL_GC_SOCKET
소켓 라이브러리로 관리됨
- 프로그램 진입점은
-
패킷 블롭
- Wireshark를 통해 캡처된 네트워크 데이터를 사용하며,
blobs/
디렉토리에 위치
- Wireshark를 통해 캡처된 네트워크 데이터를 사용하며,
-
데이터 추출
- 공식 Minecraft 서버 및 클라이언트 애플리케이션에서 많은 데이터를 추출 가능
- CobolCraft
Makefile
은 .jar 파일을 다운로드하고 JSON 데이터를 추출하는 타겟을 포함함
-
-
법적 고지
- 이 프로젝트는 MIT 라이선스 하에 있으며, 3자 라이브러리 CBL_GC_SOCKET은 LGPL v3 라이선스 하에 있음
- "Minecraft"는 Mojang Synergies AB의 상표이며, CobolCraft는 Mojang과 관련이 없고 승인되지 않음
Hacker News 의견
-
COBOL에 대한 소문과 오명이 많음. 이를 알아보기 위해 프로젝트를 통해 COBOL을 경험해보고 싶음. 새로운 사람이 COBOL을 사용하며 얻은 통찰을 알고 싶음
- 고등학교 졸업 프로젝트로 축구 베팅 확률을 자동화하는 COBOL 시스템을 작성했음. 시대에 뒤떨어졌지만, 재미있었음
- COBOL은 펀치 카드 시절을 떠올리게 하는 매력이 있음
-
간단한 언어로 작성된 작은 프로젝트가 인상적임. 반면, Rust 같은 현대 언어로 작성된 프로젝트는 비효율적임
- 간단한 언어는 아이디어를 구현하기 쉽지만, 현대 언어는 지속 가능한 코드를 작성하도록 강요함
-
1978년 이후 COBOL 사용을 중단했음. 다시는 이 코드를 보고 싶지 않음
-
COBOL 코드는 절차적 언어 배경이 있는 사람에게 이해하기 쉬움. 20년 전 VB로 작성된 게임 서버를 떠올리게 함
-
COBOL 코드는 매우 읽기 쉬움. 현대 언어와 비교했을 때 이해하기 쉬움
-
파키스탄 작은 마을에서 고등학교 시절 COBOL을 배움. 금융 보고서를 시뮬레이션하는 프로젝트를 했음. COBOL의 오명을 이해하지 못함
-
COBOL은 멋진 언어로 보임. 코드가 잘 정리되어 있음
-
40년 후, 전 세계의 경영진들이 "COBOL Minecraft 서버는 사라졌다"라고 말할 것임
-
COBOL Minecraft 서버가 레드스톤을 지원하는지 알 수 없음. README에 언급이 없고, 코드에서는 레드스톤 횃불만 언급됨