brunch

minecraft, spigot 1.15.2

그리고 python. 서버-클라이언트 분리 설치기

by 투오아

나의 주말을 모두 잡아먹은 이 작업을 어딘가에 정리를 하여 공유를 하여야겠기에 여기 브런치에 적는다.


작년부터 시작한 아이들과의 하브루타 시간에 아이들이 초등학교 6학년, 3학년이 된 관계로 프로그래밍을 친숙하게 해야겠다 싶어서 프로그래밍 주제도 넣어 보기로 하였다.


인터넷에서 조금 찾아보니 마인크래프트라는 우리 아이들이 좋아하는 게임을 통해서 프로그래밍을 할 수가 있고 이와 관련된 책도 있어서 바로 이게 좋겠다 싶어서 준비를 시작하였다.


하지만 세상일이란 항상 뜻과는 상관없이 흘러가는 법.


책에 나와 있는 데로 진행을 하려고 하니 문제가 발생을 하였다. 첫 번째는 책에서 나온 설명은 예전 버전의 마인크래프트였다. 게다가 필요한 프로그램들을 저자가 묶어서 배포하다 보니 최신 버전 패치가 진행되지 않아 최신 버전에 적용할 수가 없었다. 두 번째는 최신 버전의 경우는 컴퓨터 리소스를 많이 사용하였다. 그래서인지 컴퓨터가 매우 느려지는 현상이 발생하였다.


결국 이를 해결하기 위해서는 서버-클라이언트를 분리하여야 하였고 이로 인해 서버를 내가 직접 세팅해야 하는 상황이 발생하였다. 그래서 이것저것 시도하다가 현재 세팅에 성공한 상황이라 이 내용을 여기에 정리한다.


우선 우리 집의 컴퓨터 상황이다.

minecraft_server_client.png

위 그림처럼 WINDOWS 노트북에는 minecraft client launcher를 깔고 Ubuntu 리눅스 노트북에는 minecraft server를 설치하였다.


우선 필요한 것은 다음과 같다.


minecraft client

1. minecraft launcer : 마인크래프트 공식 사이트에 가서 3만 원을 주고 개인 라이선스를 구매한다. 그런 다음 컴퓨터에 설치하였다. 윈도우는 .msi 파일을 설치하면 되고 리눅스 등 다른 배포판에서 하고 싶으면 거기에 맞는 자바 파일을 내려받아서 설치하면 된다. 나의 경우는 윈도우용이므로 .msi 파일을 내려받았다.

https://www.minecraft.net/

설치하고 나면 아래와 같은 화면이 나오는데 최신 버전으로 플레이를 누르면 최신 버전을 내려받고 게임이 실행된다.

minecraft_server_client (5).png

원래는 영어로 나오지만 설정에서 언어를 한국어로 바꾸면 이렇게 한글로 나오게 된다.


minecraft server

1. java 설치: 서버를 실행하기 위해서는 java 가 필요하다. Oracle java 8을 내려받아도 되지만 4월 이후 라이선스가 변화될 예정이라고 나와있어서 openjdk를 내려받았다. 우분투의 경우 sudo apt install 명령어를 사용하였다.

minecraft_server_client (4).png 현재 설치된 java 버전

그다음 spigot-1.15.2를 내려받는다.


중요!! spigot-1.15.2와 minecraft 릴리즈 버전은 정확히 일치해야 한다. 그렇지 않으면 게임이 실행되지 않는다.
정보!! minecraft 서버는 minecraft 개발사인 Mojang에서 배포하는 vanilla 서버도 있다. 하지만 spigot 이 좋다는 이야기가 많아서 spigot으로 실행하였다.

spigot 은 다음에서 내려받았다.

https://getbukkit.org/download/spigot

내려받은 이후에 아무 디렉토리나 원하는 곳에 만들고 거기에서 다음의 3단계를 실행한다.

i. java 실행 파일: start.sh

$ cat start.sh
java -Xmx1024M -Xms1024M -jar spigot-1.15.2.jar nogui

윈도우즈라면 .bat 파일을 동일한 내용으로 만든다.

ii. start.sh 실행

최초 실행을 하면 바로 에러가 나고 죽는다. 죽고 나서 디렉토리를 보면 여러 가지 파일이 생성이 되어있는데 그중에서 eula.txt 파일을 열어서 false를 true로 바꾸어준다.

iii. start.sh 실행: creative mode 실행하고자 할 때

최초는 survival 모드로 실행된다. creative 모드로 플레이하고 싶으면 두 번째 실행 시에 내용이 채워지는 server.properties 파일에 관련 항목을 수정해야 한다. start.sh를 실행하다가 ctrl-C를 눌러서 종료하고 server.properties 파일을 열어서 creative 모드로 바꾼다.

스크린샷, 2020-04-05 20-20-54.png 위의 gamemode 가 처음에는 survival이다. creative로 바꾼다.

2. rasberrypiJuice 플러그인 설치 (중요!)

이 부분이 책에 적혀 있지 않고 그냥 넘어간 부분이어서 엄청 헤맨 부분이다. python을 통해 게임을 외부에서 제어하기 위해서는 이 플러그인이 필요하다.

raspberryJuice 내려받기

위의 내려 받은 .jar 파일을 spigot 서버 디렉토리의 plugins 디렉토리에 옮겨 놓는다.

(참고 youtube: https://www.youtube.com/watch?v=9J5v41fPphA)

minecraft_server_client (8).png

4. spigot 서버 실행

위에서 만든 start.sh를 실행한다. 나의 경우 우분투 리눅스이므로 shell 창에서 'sh start.sh'를 하였다.

윈도우라면 start.bat을 파일 탐색기에서 더블클릭하면 된다.


python library mcpi 설치

이제 거의 다 끝났다. 우분투의 경우

pip install mcpi

를 통해서 설치해도 되고 github에 가서 내려받아서 사용해도 된다.

나의 경우 pip를 통해서 설치하였다.

github를 통해서 내려받아서 사용하고 싶으면 아래 유튜브를 참고한다.

https://www.youtube.com/watch?v=BWk3OZQ5TAw


minecraft client에서 서버 연결

windows 컴퓨터에서 minecraft를 실행하고 multiplayer에 들어간 뒤에 서버 추가를 선택하여 우분투 컴퓨터의 IP를 입력하고 추가한다. 그리고 접속하면 된다.


python 프로그램의 시작

이제 시작이다.


서버에서 python 프로그램을 시작하려면 아래와 같이 프로그램을 작성하거나 python prompt에 입력한다.

from mcpi.minecraft import Minecraft

mc = Minecraft.create()

만약에 client에서 server로 접속하려면

mc = Minecraft.creat('<server ip>')

를 하면 된다.


프로그램은 어디서 하든 상관없다. 여유로운 컴퓨터에서 실행하자.


*** 참고 ***

서버 가동 시에 plugin 이 잘 작동되는지 확인해야 한다.

start.sh를 시작 한 뒤에 이런 메시지가 출력되는지 보자

minecraft_server_client (7).png RaspberryJuice v1.12.1 이 실행되었다는 메시지.

이게 없으면 아무리 python에서 Minecraft.create()를 하여도 계속 서버에서 거부하였다는 메시지밖에 안 나온다. 참고한 책에서는 이 문제가 java 문제 때문이라고 하였는데 나의 경우는 java 문제 때문이 아니라 plugin 이 없었기 때문이었다. 설명이 많이 아쉬웠던 부분이다.

준비 끝! 이제 프로그래밍을 시작하자.


참고 문서:

마인크래프트로 배우는 파이썬 프로그래밍. 제이펍 출판. 크레이그 리처드슨 지음 배장열 옮김. pp.1~36, pp.367~pp.377


keyword
작가의 이전글요리하는 아침