개요

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 항목을 찾아 falsetrue로 바꿔줍니다.

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를 수정하면 사용자 정의 조명 값을 사용할 수 있다.

현재 DefaultHDLightingShadowHDLighting 설정을 사용할 수 있다.

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 : 이 셰이더는 렌더링된 블록의 고도에 따라 지형지도를 볼 수 있도록 지도 색상을 설정한다.

각주

  1. MySQL과 완전히 호환되는 기능을 사용할 수 있으며, 일반적으로 더 권장됩니다.
  2. 그림자 없음
  3. 권장하는 방법이다.