Dynmap은 마인크래프트에서 웹 지도를 렌더링하고 사용할 수 있게 해주는 플러그인이다. 다이나믹맵이라고도 부른다. 서버의 지도를 웹으로 볼 수 있기 때문에 건축 서버에서 특히 유용한 플러그인이다.
특징
지도 렌더링 플러그인인 만큼 서버 자원을 많이 소모한다는 것이 특징이다. 그렇기 때문에 대형 서버에서는 일정 수준 이상의 서버 성능을 필요로 할 수 있다.
다이나믹맵은 각 청크를 배율별로 사진 찍듯 렌더링하는 방식이기 때문에 서버에 각기 다른 이미지 파일로 저장되며, 따라서 맵이 큰 서버의 경우 렌더링 시간이 오래 걸리는 것은 물론 서버에 저장되는 파일 수도 기하급수적으로 늘어나 서버 이전 또는 파일 삭제에 애를 먹을 수도 있다. 향후 다이나믹맵 렌더링 이미지 타일을 삭제하거나 이동시킬 때는 SSD를 사용하는 것이 속도 향상에 도움이 될 것이다.
설정
웹 설정
내부 서버를 사용하는 경우
마인크래프트 서버를 구동하는 서버와 다이나믹맵이 렌더링한 타일과 웹 구성 파일을 저장하는 서버가 동일한 경우를 말한다. 대부분의 사례가 이에 해당할 것이며, 플러그인을 설치하고 별도의 설정을 하지 않았다면 기본적으로 플러그인 폴더 내에 웹 구성 파일과 맵 타일 이미지가 저장된다.
외부 서버를 사용하는 경우
반면에 외부 서버를 이용해 마인크래프트 서버를 구동하는 컴퓨터와 다른 서버에서 웹 지도를 운영할 수도 있는데, 다이나믹맵 서버를 굴리기 위해서는 어느 정도 감당 가능한 트래픽 용량과 성능이 필요하다는 것을 감안하여야 한다. 만약 서버가 켜져있지 않은 상태에서도 웹 지도를 계속 구동하고 싶다면 본 문단에서 소개하는 방법을 사용하면 된다. 물론 지도 타일 이미지가 별도 서버에 저장되는 만큼 서버 파일 이동도 비교적 자유롭다.
이 문단은 백엔드 웹 개발에 대한 지식을 어느정도 갖추었다는 가정하에 작성되었습니다.
MySQL/MariaDB 설정하기
데이터베이스 기능을 활용하기 위해서는 MySQL 또는 MariaDB[1] 설정이 필요합니다.
데이터베이스 만들기
다음 쿼리 문을 이용해 데이터베이스를 생성해줍니다.
mysql -u 유저이름 -p 비밀번호(존재할 경우)
mysql> CREATE DATABASE 생성할데이터베이스이름;
mysql> exit
Dynmap 플러그인 설치
마인크래프트 서버에 Dynmap 플러그인을 설치하고 서버 실행 후 종료합니다.
configuration.txt 파일 수정
다이나믹맵 플러그인 폴더 내에 있는 configuration.txt을 수정합니다. 만일을 대비해 수정하기 전 파일을 미리 다른 곳에 백업해주세요.
수정 전:
storage:
# Filetree storage (standard tree of image files for maps)
type: filetree
# SQLite db for map storage (uses dbfile as storage location)
#type: sqlite
#dbfile: dynmap.db
# MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
#type: mysql
#hostname: localhost
#port: 3306
#database: dynmap
#userid: dynmap
#password: dynmap
#prefix: ""
#flags: "?allowReconnect=true"
수정 후:
storage:
# Filetree storage (standard tree of image files for maps)
#type: filetree <- 꼭 주석 처리하세요!
# SQLite db for map storage (uses dbfile as storage location)
#type: sqlite
#dbfile: dynmap.db
# MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
type: mysql
hostname: <mysql 서버 ip주소>
port: <mysql 서버포트: 대개 3306>
database: <앞서 생성했던 데이터베이스 이름>
userid: <mysql 사용자명>
password: <mysql 사용자비밀번호>
prefix: "" #접두어를 달고 싶다면 이 부분을 수정하세요.
flags: "?allowReconnect=true"
컴포넌트 설정 변경하기
configuration.txt 폴더에서
- class: org.dynmap.InternalClientUpdateComponent
이 부분을 찾아 다음과 같이 수정합니다.
모두 주석 처리해주는 것입니다.
수정 전:
- class: org.dynmap.InternalClientUpdateComponent
sendhealth: true
sendposition: true
allowwebchat: true
webchat-interval: 5
hidewebchatip: true
trustclientname: false
includehiddenplayers: false
# (optional) if true, color codes in player display names are used
use-name-colors: false
# (optional) if true, player login IDs will be used for web chat when their IPs match
use-player-login-ip: true
# (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
require-player-login-ip: false
# (optional) block player login IDs that are banned from chatting
block-banned-player-chat: true
# Require login for web-to-server chat (requires login-enabled: true)
webchat-requires-login: false
# If set to true, users must have dynmap.webchat permission in order to chat
webchat-permissions: false
# Limit length of single chat messages
chatlengthlimit: 256
# # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
# hideifshadow: 4
# # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
# hideifundercover: 14
# # (Optional) if true, players that are crouching/sneaking will be hidden
hideifsneaking: false
# If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
protected-player-info: false
# If true, hide players with invisibility potion effects active
hide-if-invisiblity-potion: true
# If true, player names are not shown on map, chat, list
hidenames: false
수정 후:
# - class: org.dynmap.InternalClientUpdateComponent
#sendhealth: true
#sendposition: true
#allowwebchat: true
#webchat-interval: 5
#hidewebchatip: false
#trustclientname: false
#includehiddenplayers: false
# (optional) if true, color codes in player display names are used
#use-name-colors: false
# (optional) if true, player login IDs will be used for web chat when their IPs match
#use-player-login-ip: true
# (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
#require-player-login-ip: false
# (optional) block player login IDs that are banned from chatting
#block-banned-player-chat: true
# Require login for web-to-server chat (requires login-enabled: true)
#webchat-requires-login: false
# If set to true, users must have dynmap.webchat permission in order to chat
#webchat-permissions: false
# Limit length of single chat messages
#chatlengthlimit: 256
# # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
# hideifshadow: 4
# # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
# hideifundercover: 14
# # (Optional) if true, players that are crouching/sneaking will be hidden
#hideifsneaking: false
# If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
#protected-player-info: false
# If true, hide players with invisibility potion effects active
#hide-if-invisiblity-potion: true
# If true, player names are not shown on map, chat, list
#hidenames: false
그 다음 바로 아래에 있는 항목의 주석 처리를 제거해줍니다.
수정 전:
#- class: org.dynmap.JsonFileClientUpdateComponent
# writeinterval: 1
# sendhealth: true
# sendposition: true
# allowwebchat: true
# webchat-interval: 5
# hidewebchatip: false
# includehiddenplayers: false
# use-name-colors: false
# use-player-login-ip: false
# require-player-login-ip: false
# block-banned-player-chat: true
# hideifshadow: 0
# hideifundercover: 0
# hideifsneaking: false
# # Require login for web-to-server chat (requires login-enabled: true)
# webchat-requires-login: false
# # If set to true, users must have dynmap.webchat permission in order to chat
# webchat-permissions: false
# # Limit length of single chat messages
# chatlengthlimit: 256
# hide-if-invisiblity-potion: true
# hidenames: false
수정 후:
- class: org.dynmap.JsonFileClientUpdateComponent
writeinterval: 1
sendhealth: true
sendposition: true
allowwebchat: true
webchat-interval: 5
hidewebchatip: false
includehiddenplayers: false
use-name-colors: false
use-player-login-ip: false
require-player-login-ip: false
block-banned-player-chat: true
hideifshadow: 0
hideifundercover: 0
hideifsneaking: false
# # Require login for web-to-server chat (requires login-enabled: true)
webchat-requires-login: false
# # If set to true, users must have dynmap.webchat permission in order to chat
webchat-permissions: false
# # Limit length of single chat messages
chatlengthlimit: 256
hide-if-invisiblity-potion: true
hidenames: false
Dynmap 내부 서버 중지하기
configuration.txt 파일에서 disable-webserver
항목을 찾아 false
를 true
로 바꿔줍니다.
Web Sever URL 변경
수정 전:
url:
# configuration URL
#configuration: "up/configuration"
# update URL
#update: "up/world/{world}/{timestamp}"
# sendmessage URL
#sendmessage: "up/sendmessage"
# login URL
#login: "up/login"
# register URL
#register: "up/register"
# tiles base URL
#tiles: "tiles/"
# markers base URL
#markers: "tiles/"
수정 후:
url:
# configuration URL
configuration: "웹서버주소/MySQL_configuration.php"
# update URL
update: "웹서버주소/MySQL_update.php?world={world}&ts={timestamp}"
# sendmessage URL
sendmessage: "웹서버주소/MySQL_sendmessage.php"
# login URL
login: "웹서버주소/MySQL_login.php"
# register URL
register: "웹서버주소/MySQL_register.php"
# tiles base URL
tiles: "웹서버주소/MySQL_tiles.php?tile="
# markers base URL
markers: "웹서버주소/MySQL_markers.php?marker="
웹서버주소
는 해당 파일이 위치한 경로를 정확하게 입력하여야 합니다.
서버 구동 후 종료
서버 구동 후 정상 작동하는지 확인한 다음 다시 종료합니다.
로그인 기능 활성화하려면
다이나믹맵 로그인 기능을 활성화하려면 SSL을 설치합니다.
마커 설정
고급 설정
고급 지도 설정
사전 정의된 커스텀 지도 각도 목록
사전에 미리 설정된 커스텀 지도 각도는 perspective.txt
에서 찾을 수 있다. 참고로 아래에 없는 각도도 custom-perspectives.txt
에 추가하여 사용할 수 있으며, 기존에 정의된 각도를 수정할 때도 되도록 custom-perspectives.txt
사용을 권장한다.
- 기본값: 동남쪽 뷰, 방위각 135도, 기울기 60도, 스케일 4
다음은 HD Map 기준 사전 정의된 각도 명칭이다.
- iso_S_60_vlowres
- iso_S_60_lowres
- iso_S_60_medres
- iso_S_60_hires
- iso_SE_60_vlowres
- iso_SE_60_lowres
- iso_SE_60_medres
- iso_SE_60_hires
- iso_E_60_vlowres
- iso_E_60_lowres
- iso_E_60_medres
- iso_E_60_hires
- iso_NE_60_vlowres
- iso_NE_60_lowres
- iso_NE_60_medres
- iso_NE_60_hires
- iso_N_60_vlowres
- iso_N_60_lowres
- iso_N_60_medres
- iso_N_60_hires
- iso_NW_60_vlowres
- iso_NW_60_lowres
- iso_NW_60_medres
- iso_NW_60_hires
- iso_W_60_vlowres
- iso_W_60_lowres
- iso_W_60_medres
- iso_W_60_hires
- iso_SW_60_vlowres
- iso_SW_60_lowres
- iso_SW_60_medres
- iso_SW_60_hires
- iso_S_30_vlowres
- iso_S_30_lowres
- iso_S_30_medres
- iso_S_30_hires
- iso_SE_30_vlowres
- iso_SE_30_lowres
- iso_SE_30_medres
- iso_SE_30_hires
- iso_E_30_vlowres
- iso_E_30_lowres
- iso_E_30_medres
- iso_E_30_hires
- iso_NE_30_vlowres
- iso_NE_30_lowres
- iso_NE_30_medres
- iso_NE_30_hires
- iso_N_30_vlowres
- iso_N_30_lowres
- iso_N_30_medres
- iso_N_30_hires
- iso_NW_30_vlowres
- iso_NW_30_lowres
- iso_NW_30_medres
- iso_NW_30_hires
- iso_W_30_vlowres
- iso_W_30_lowres
- iso_W_30_medres
- iso_W_30_hires
- iso_SW_30_vlowres
- iso_SW_30_lowres
- iso_SW_30_medres
- iso_SW_30_hires
- iso_N_90_vlowres
- iso_N_90_lowres
- iso_N_90_medres
- iso_N_90_hires
- iso_S_90_vlowres
- iso_S_90_lowres
- iso_S_90_medres
- iso_S_90_hires
- iso_E_90_vlowres
- iso_E_90_lowres
- iso_E_90_medres
- iso_E_90_hires
- iso_W_90_vlowres
- iso_W_90_lowres
- iso_W_90_medres
- iso_W_90_hires
커스텀 지도 각도 설정
커스텀 조명
lightings.txt
를 수정하면 사용자 정의 조명 값을 사용할 수 있다.
현재 DefaultHDLighting
와 ShadowHDLighting
설정을 사용할 수 있다.
DefaultHDLighting
는 셰이더의 색상 값을 수정하지 않으며 모든 블럭이 받는 일광량이 일정해 그림자 표현이 없다.
ShadowHDLighting
는 주변 조명 강도를 반영하고 그림자 강도를 정할 수 있다. 또한 필요시 낮과 밤 타일을 구분하여 렌더링할 수 있다.
일반적인 조명 설정값은 다음과 같다.
lightings:
- class: org.dynmap.hdmap.ShadowHDLighting
name: my-custom-lighting
shadowstrength: 1.0
ambientlight: 4
night-and-day: true
smooth-lighting: false
ShadowHDLighting
의 설정
- name : 각 조명 설정의 고유 이름으로, custom-lightings.txt에 사용자 지정 설정을 추가하고 불러올 때 이 것을 기준으로 설정을 구분한다.
- shadowstrength : 그림자 세기를 설정한다. 기본 값은
0.0
[2]이며, 일반적인 그림자는1.0
값을 사용한다. 이보다 크면 인위적인 세기의 그림자가 생성되며1.0
보다 작으면 그림자가 연해진다.
- ambientlight : 하늘에서 내리는 빛의 양을 조절한다. 기본적인 낮의 빛 강도는
15
이며, 일반적으로 달빛이 비추늠 밤은4
값을 사용한다.
- night-and-day : 이 항목의 값을
true
로 설정하면 주간과 야간 버전 타일이 모두 생성되며 서버 시간의 흐름에 따라 다이나믹맵의 낮 밤 타일이 자동으로 변경된다. 기본 값은false
- smooth-lighting :
0
또는1
을 사용해 부드러운 조명 옵션을 토글한다. 이 기능을 활성화하면 렌더링 성능이 약 10% 가량 더 소모되지만 그림자와 조명이 훨씬 부드럽게 렌더링된다. 만약 정의되지 않은 경우 configuration.txt의 smooth-lighting값이 사용된다.
커스텀 셰이더
shaders.txt
에 사전 정의된 셰이더 설정을 사용하거나 custom-shaders.txt
에 사용자 지정 설정을 추가[3]하여 사용할 수 있다.
- org.dynmap.hdmap.DefaultHDShader : 이 셰이더는 기본설정에 입각해 다양한 블록과 바이옴을 지원하여 렌더링한다.
- org.dynmap.hdmap.CaveHDShader : 이 셰이더는 동굴을 렌더링할 수 있다.
- org.dynmap.hdmap.TexturePackHDShader : 이 셰이더는 마인크래프트 기본 리소스팩을 포함하여 마인크래프트 리소스팩을 사용할 수 있도록 해준다.
- org.dynmap.hdmap.TopoHDShader : 이 셰이더는 렌더링된 블록의 고도에 따라 지형지도를 볼 수 있도록 지도 색상을 설정한다.