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을 설치합니다.
마커 설정
Dynmap은 지도에 의해 렌더링된 것 이상의 내용을 지도에 추가하는 메커니즘을 지원합니다. 이 내용은 Markers라고 일괄적으로 언급되며, 마커(마커 아이콘), 마커 영역, 마커 폴리라인으로 구성됩니다.
플레이시티 블록에서 사용하는 마커 설정을 참조하려면 문서 하단 플레이시티 블록 설정 문단을 참조하십시오.
마커 세트
마커는 Marker Sets이라고 불리는 컬렉션으로 수집되고 구성됩니다. 각 마커 세트는 레이블이 지정된 레이어로, 웹 UI의 레이어 선택자를 사용하여 선택할 수 있습니다. 모든 마커는 특정 마커 세트 내에 포함됩니다. 기본적으로 항상 최소한 하나의 마커 세트가 있으며, 이는 Markers라고 레이블이 지정되고, 다른 마커 세트에 특정으로 할당되지 않은 모든 마커를 포함하는 데 사용됩니다. 마커 세트를 삭제하면 세트 내의 모든 마커가 삭제됩니다.
/dmarker addset <markerset-label>
또는 /dmarker addset id:<markerset-id>
명령어를 사용하여 새로운 마커 세트를 생성할 수 있습니다. 추가 매개변수를 사용하여 세트의 동작을 세밀하게 조정할 수 있습니다: prio:<N>
은 레이어 제어에서 다른 세트에 비해 레이어 순서를 제어하는 데 사용됩니다; hide:<true|false>
는 세트가 기본적으로 보이는지(체크됨) 또는 숨겨져 있는지(체크 해제) 제어하는 데 사용됩니다; minzoom:<N>
은 특정 줌 레벨이 선택될 때까지 세트 내의 마커를 숨기는 데 사용됩니다.
기존 마커 세트의 설정은 /dmarker updateset <markerset-label>
또는 /dmarker updateset id:<markerset-id>
명령어를 사용하여 변경할 수 있으며, 이 때 prio:<N>
, hide:<true|false>
또는 newlabel:<new-label>
이 매개변수로 사용됩니다.
0.32버전 이후로, showlabels:<true|false|null>
설정이 지원됩니다. 이 설정은 true 또는 false일 때 마커 레이블의 가시성을 활성화하거나 비활성화합니다(비활성화된 가시성은 마우스 커서가 마커 위에 놓일 때만 레이블을 보여줍니다). null 값은 전역 기본 동작을 사용합니다(이는 configuration.txt의 markers 컴포넌트에서 showlabels 설정에 의해 정의됩니다).
마커 세트(기본 마커 세트인 Markers 제외)는 /dmarker deleteset <markerset-label>
또는 /dmarker deleteset id:<markerset-id>
명령어를 사용하여 삭제할 수 있습니다.
마커
마커는 가장 일반적인 맵 마커로, 관련 레이블과/또는 연관 설명 팝업이 있는 간단한 아이콘입니다. 각 마커는 세계 좌표(X, Y, Z 및 월드 ID)에 정의된 위치, 마커 아이콘 ID, 레이블, 그리고 선택적 설명을 가지고 있습니다. 마커 아이콘 ID는 이 페이지 하단에 표시된 표준 마커 ID 중 하나일 수도 있고, 설치된 아이콘에 해당할 수도 있습니다(아래 마커 아이콘 문단 참조).
마커는 다음 두 가지 방법 중 하나를 통해 추가될 수 있습니다:
/dmarker add <marker-label> icon:<icon-id> set:<markerset-id>
- 이것은 로그인한 플레이어에 의해 작성되어야 하며, 플레이어의 현재 위치에서 마커를 정의하게 합니다. set가 정의되지 않으면, 마커는 기본 마커 세트인 Markers에 포함됩니다. icon이 정의되지 않으면, 기본 마커 아이콘을 사용합니다(default, house).
/dmarker add id:<marker-id> <marker-label> icon:<icon-id> set:<markerset-id> x:<x-coord> y:<y-coord> z:<z-coord> world:<Worldname>
- 위와 동일하나, 마커의 고유 ID, 위치 및 월드가 지정되어 있어 콘솔에서도 실행할 수 있습니다.
표시판 사용: markers 컴포넌트의 enablesigns 설정이 true이면, 적절한 권한(dynmap.marker.sign)을 가진 사용자는 특별히 레이블이 지정된 표시판을 사용하여 마커를 생성할 수 있습니다. 이를 사용하려면, 표시판의 첫 번째 줄은 반드시 [dynmap]이어야 합니다. 그 이후에는 비어 있지 않은 모든 줄이 마커의 레이블에 포함되며, set:<markerset-id>
(마커를 특정 마커 세트에 추가할 수 있게 함) 또는 icon:<icon-id>
(마커를 특정 아이콘을 사용하도록 설정할 수 있게 함) 형식으로 작성된 줄을 제외하고 마커의 레이블에 포함됩니다. 아이콘이 지정되지 않으면, 아이콘 표시가 사용됩니다. 만약 마커가 성공적으로 생성되면, 표시판의 텍스트는 [dynmap], set: 그리고 icon: 줄을 지웁니다. 표시판이 나중에 삭제되면, 해당 맵 마커도 삭제됩니다.
마커가 생성된 후에는 마커를 다음 두 가지 명령 중 하나를 사용하여 편집할 수 있습니다:
/dmarker movehere <marker-label> set:<markerset-id>
또는 /dmarker movehere id:<marker-id> set:<markerset-id>:
이 명령어는 기존의 마커를 플레이어의 현재 위치로 이동시킵니다. 주의: markerset-id는 기본 마커 세트(markers)에 없는 마커를 선택하는 데 필요합니다.
/dmarker update <marker-label> set:<markerset-id> icon:<icon-id> newlabel:<new-label>
또는 /dmarker update id:<marker-id> set:<markerset-id> icon:<icon-id> newlabel:<new-label>
. 주의: markerset-id는 기본 마커 세트(markers)에 없는 마커를 선택하는 데 필요합니다 - 마커 세트 ID는 수정할 수 없습니다.
마커에 설명을 추가하려면, 먼저 /dmarker resetdesc id:<marker-id> set:<set-id>
를 사용하여 기존의 설명을 제거한 다음, /dmarker appenddesc id:<id> set:<set-id> desc:"<marker-description>"
을 사용하여 새 설명을 추가합니다. desc
필드가 문자열임을 정의하려면 주어진 텍스트 주위에 " "
를 사용하십시오.
마커는 /dmarker delete <marker-label> set:<markerset-id>
또는 /dmarker delete id:<marker-id> set:<markerset-id>
명령어를 사용하여 삭제할 수 있습니다.
기존 마커 세트와 그들의 속성은 /dmarker listsets
명령어를 사용하여 표시할 수 있습니다.
기존 마커와 그들의 속성은 /dmarker list set:<markerset-id>
명령어를 사용하여 표시할 수 있습니다.
마커 아이콘
마커 아이콘은 마커의 이미지를 제공하는 이미지 리소스입니다. Dynmap은 항상 존재하고 정의되어 있으며 삭제할 수 없는 여러 표준 마커 아이콘을 제공합니다. 사용 가능한 아이콘 목록은 /dmarker icons
명령어를 실행하여 찾을 수 있습니다.
새 마커 아이콘을 설치하려면 다음을 수행합니다:
- 이미지 파일을 PNG 형식으로 준비하십시오. 이 이미지는 8x8, 16x16 또는 32x32픽셀이어야 하며, 투명 배경이 가능합니다(이는 특히 마커가 아이콘이 아니라 점처럼 보이는 것을 원하는 경우에 유용합니다).
- 이미지 파일을 이 위치에 복사하십시오: <서버 폴더>/plugins/dynmap/. 만약 아이콘 ID가 'myicon'이라면, 파일 이름은 myicon.png여야 합니다.
/dmarker addicon id:<icon-id> <icon-label> file:<path-to-image-file>
명령어를 실행하세요.
이미 존재하는 아이콘 이미지를 업데이트하려면, /dmarker updateicon id:<icon-id> newlabel:<new-label> file:<path-to-image-file>
명령어를 실행하세요.
이미지 파일이 올바르게 복사되고 정상적인 PNG 파일인 경우, myicon이 이제 사용 가능한 아이콘 목록에 포함되어야 합니다.
기존 마커 아이콘을 삭제하려면, /dmarker deleteicon id:<icon-id>
명령어를 실행하세요.
영역 마커
고급 설정
고급 지도 설정
사전 정의된 커스텀 지도 각도 목록
사전에 미리 설정된 커스텀 지도 각도는 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 : 이 셰이더는 렌더링된 블록의 고도에 따라 지형지도를 볼 수 있도록 지도 색상을 설정한다.