• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

Dynmap

来自Minecraft插件百科
Sheep-realms留言 | 贡献2021年8月15日 (日) 16:50的版本
跳转到导航 跳转到搜索
Minecraft插件百科提醒您,此条目或需要大幅度整改,建议新用户不要模仿此条目格式建立新条目。

原因在于:

  • 缺少概述表
  • 滥用一级标题
  • 需要重新调整段落结构以易于读者阅读
  • 存在维基语法错误
若您清楚改善现状的方法,可以尝试帮忙改进

Dynmap 是一个像谷歌地图一样的、为 Minecraft 服务器设计的地图插件,让你可以在浏览器查看地图。

你可以使用 Dynmap 的集成的网络服务器立即上手,也可以将其部署到 Apache 等现有的网络服务器,易于使用。

Dynmap 可以使用不同的渲染器渲染你的地图,有的适用于高性能,而有的可以展示更详细的细节。

原始的项目是由 k-red 开发。

联络方式

用户相关

不使用内部服务器安装

我们猜测

  • 你对你正在使用的独立Web服务器有相当的经验
  • 你的Web服务器与CraftBukkit运行在同一台机器上
  • 你的Web服务器支持PHP (仅用于Web到Minecraft的聊天)
  • 如果你在使用Linux,你应该知道如何使用终端和chmod。

将以下信息:

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    allowwebchat: true
    webchat-interval: 5
  #- class: org.dynmap.JsonFileClientUpdateComponent
  #  writeinterval: 1
  #  sendhealth: true
  #  allowwebchat: false

更改为

  #- class: org.dynmap.InternalClientUpdateComponent
  #  sendhealth: true
  #  allowwebchat: true
  #  webchat-interval: 5
  - class: org.dynmap.JsonFileClientUpdateComponent
    writeinterval: 1
    sendhealth: true
    allowwebchat: false

关闭内部更新机制并开启json文件更新机制,这将在 writeinterval 的间隔后在你的web路径写入文件 standalone/dynmap_world.json。

将 plugins/dynmap/web 中的文件复制进你的Web服务器中的某个文件夹,将 configuration.txt 的指向 tilespath 和 webpath 更改至你放置Web文件的地方。


Linux

# tile文件放置的路径
tilespath: /path/to/web/server/dynmap/web/tiles

# web文件放置的路径
webpath: /path/to/web/server/dynmap/web

或 Windows

# tile文件放置的路径
tilespath: c:\\path\\to\\web\\server\\dynmap\\web\\tiles

# web文件放置的路径
webpath: c:\\path\\to\\web\\server\\dynmap\\web

现在重启你的Minecraft服务器。加入你的服务器并(随机)放置一些方块来激活Dynmap给你的地图生成tiles。

你也可以输入 dynmap fullrender worldname 于你的服务器控制台来渲染整个 worldname 世界。

现在刷新你的浏览器,应该在 http://mywebserver/dynmap/ 显示你的在线人数,保持更新。

故障排除

如果你没有在地图看见任何tiles,检查tiles目录来查看他们是否已经被生成。如果没有任何tiles,那么可能Minecraft没有在web路径写入tiles的权限,或者你没有正确填写 tilespath 。

如果你没有看见任何玩家或者他们没有移动,前往 http://mywebserver/standalone/dynmap_world.json ( world 是世界的名称)。你应该能看见一些代码,并且随着时间流逝刷新能看见代码的改变、 如果没有这个文件或者这个文件没有更新,那么你可能填写了错误的 webpath 。

在 Linux,如果web到Minecraft的聊天没有工作,你应该 chmod 'standalone' 文件夹到 775 或者 777:

$ chmod -R 775 standalone

这允许 sendmessage.php 创建json文件。这一步是必须的,因为是你的Web服务器创建文件而不是Minecraft服务器。

如果在IIS web到Minecraft的聊天没有运行,你可能要安装PHP。

在Linux下建立动态地图插件

我们猜测

  • 你的Minecraft服务器目录为 /opt/minecraft_server/。
  • 你安装了最新的CraftBukkit
  • 你的Minecraft服务器托管于 localhost。

安装并测试Dynmap:

  • 将文件 dynmap.jar 和文件夹 dynmap 复制到 /opt/minecraft_server/plugins/。
  • 重启你的Minecraft服务器。
  • 加入你的Minecraft服务器。
  • 放置一些方块。
  • 开启浏览器。
  • 前往 http://localhost:8123/。

你应该在左上方看到了你的地图和名字。一旦你点击了名称,地图会平移到你的位置,你应该能看见一部分生成的地图。

发布 如果你想让你的地图能被其他人访问,你需要做这两步:

  • 将 TCP 端口 8123 转发。
  • 将地图托管到大型Web服务器上,大型Web服务器必须能够访问Minecraft服务器,详细见下。

大型Web服务器 如果你正在托管一个 Apache 或者 Lighttpd 服务器,你可能想要让Dynmap地图可以被网页相同的URL访问,像 http://www.yourwebsite.com/dynmap/ 而不是 http://www.yourwebsite.com:8123/。如果是这样,你可以在下方选择你的Web服务器。

  • Debian/Ubuntu 上的 apache2: 在Debian下使用Apache建立Dynmap;
  • Arch Linux 上的 apache/httpd: 在Arch Linux下使用apache/https建立Dynmap;
  • Arch Linux 上的 lighttpd: 在Arch Linux下使用Lighttpd建立Dynmap;
  • nginx 在Centos下使用Nginx建立Dynmap (由 LukeHandle 提供);

Debian+Apache

我们猜测:

  • 你安装了 Apache2。
  • 你的 www-root 目录在: /srv/http/。
  • 你应该可以通过 http://localhost:8123/ 成功访问Dynmap。

这个示例展示了如何将你的Dynmap部署在Apache的 http://mywebserver/dynmap/。

  • 先创建文件夹 /srv/http/dynmap/.
  • 将 web 目录下的文件复制到 /srv/http/dynmap/ 的zip包。

首先,我们需要开启需要的模组,输入以下命令:

    sudo a2enmod rewrite proxy_http

首先我们必须重定向 /dynmap/up/ 和 /dynmap/standalone/ 到Dynmap的内部Web服务器。

请保证你在 /etc/apache2/sites-available/default 后有这一段内容:

    ...
        Alias /dynmap/tiles /opt/minecraft_server/plugins/dynmap/web/tiles/

        RewriteEngine on
        RewriteRule /dynmap/up/(.*) http://localhost:8123/up/$1 [P,L]
        RewriteRule /dynmap/standalone/(.*) http://localhost:8123/standalone/$1 [P,L]
    </VirtualHost>

    <Directory /opt/minecraft_server/plugins/dynmap/web/tiles/>
        Order allow,deny
        Allow from all
    </Directory>

    <Proxy http://localhost:8123/*>
        Order deny,allow
        Allow from all
    </Proxy>

重启Apache2 (sudo /etc/init.d/apache2 restart).

现在应该在 http://mywebserver/dynmap/ 显示在线玩家了。

Arch Linux+apache/httpd

我们猜测:

  • 你安装了 apache-httpd。
  • 你的 www-root 目录在: /srv/http/。
  • 你应该可以通过 http://localhost:8123/ 成功访问Dynmap。

这个示例展示了如何将你的Dynmap部署在apache-httpd的 http://mywebserver/dynmap/。

  • 先创建文件夹 /srv/http/dynmap/.
  • 将 web 目录下的文件复制到 /srv/http/dynmap/ 的zip包。

在 /etc/httpd/conf/httpd.conf,保证你在有以下几段,注意,这些语句不必相邻。

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule rewrite_module modules/mod_rewrite.so

接下来,我们必须将 /dynmap/up/ 和 /dynmap/standalone 重定向到Dynmap的内部Web服务器。编辑以下内容到 /etc/httpd/conf/httpd.conf 的末尾:

    ...
    Alias /dynmap/tiles /opt/minecraft_server/plugins/dynmap/web/tiles/

    RewriteEngine on
    RewriteRule /dynmap/up/(.*) http://localhost:8123/up/$1 [P,L]
    RewriteRule /dynmap/standalone/(.*) http://localhost:8123/standalone/$1 [P,L]

    <Directory /opt/minecraft_server/plugins/dynmap/web/tiles/>
        Order allow,deny
        Allow from all
    </Directory>

    <Proxy http://localhost:8123/*>
        Order deny,allow
        Allow from all
    </Proxy>

注意这会对所有的VirtualHost生效,如果你有多个虚拟主机,那么推荐你将这些代码放入。

重启Apache/httpd (sudo /etc/rc.d/httpd restart)

现在应该在 http://mywebserver/dynmap/ 显示在线玩家了。

Arch Linux+Lighttpd

我们猜测:

  • 你安装了 lighttpd。
  • 你的 www-root 目录在: /srv/http/。
  • 你应该可以通过 http://localhost:8123/ 成功访问Dynmap。

开始

  • 先创建文件夹 /srv/http/dynmap/.
  • 将 web 目录下的文件复制到 /srv/http/dynmap/ 的zip包。

这个示例展示了如何将你的Dynmap部署在lighthttpd的 http://mywebserver/dynmap/。

在 /etc/lighttpd/lighttpd.conf,保证以下模块开启:

    server.modules = ( "mod_access",
    "mod_rewrite",
    "mod_proxy",
    "mod_fastcgi"
    )

现在我们需要让Web服务器的tiles可用,并且将代理 /dynmap/up/重定向至Dynmap的内部服务器。将以下内容添加至 /etc/lighttpd/lighttpd.conf 的末尾:

alias.url += ( "/dynmap/tiles/" => "/home/minecraft/minecraft_server/plugins/dynmap/web/tiles/" )

url.rewrite-once += ( 
        "^/dynmap/up/(.*)" => "/up/$1",
        "^/dynmap/standalone/(.*)" => "/standalone/$1"
)

$HTTP["url"] =~ "^/up/" {
        proxy.server = ( "" => (( "host" => "127.0.0.1", "port" => 8123 )) )
}
$HTTP["url"] =~ "^/standalone/" {
        proxy.server = ( "" => (( "host" => "127.0.0.1", "port" => 8123 )) )
}

重启 lighttpd (sudo /etc/rc.d/lighttpd restart)

现在应该在 http://mywebserver/dynmap/ 显示在线玩家了。

Centos+Nginx

在 CentOS 6.X 使用 Nginx 建立 Dynmap

介绍

之前我们介绍了使用Nginx(或者Apache)来建立你的Dynmap而不是内置的Jetty服务器,如果你正在托管你自己的网站(并且已经开放了80端口),那么这将允许你将你的地图建立在 http://map.example.com/ 而不是 http://map.example.com:8123/ (设置DNS记录超出了本文的讨论范围)。

注意:这篇文章猜测你的Web服务器与Minecraft服务器是分离的,这个例子里,我使用 192.168.1.2 建立Minecraft服务器而使用 192.168.1.3 建立Nginx服务器。

如果你选择在同一个服务器运行,那么请在配置里将192.168.1.2更改为127.0.0.1 - 只是记住这可能不是最好的解决方式(这时候代理可能有用?)。

CentOS

为什么是 CentOS?

来自 Wikipedia:

CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定发布的源代码所编译而成。

由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。

从安装的时候,我选择了'最小安装'的ISO,接着安装任何我可能需要的模块。

我推荐安装尽可能少的东西,接着添加缺少的东西而不是一次性安装所有的东西。

CentOS ISO镜像都在这里。

x86_64 最小安装 ISO 在 /6.X/isos/x86\_64/CentOS-6.X-x86_64-minimal.iso,这与你使用的镜像相关(X替换为最近的版本 - 本文写作的时候 - 6.4 - 翻译的时候已经7.4了)。

安装CentOS并在安装的时候设置好网络而不是启动时手动设置 /etc/sysconfig/network-scripts/ifcfg-eth0 来配置你的网络。

一个静态的IP地址是非常重要的,或者使用DHCP服务器(经常是路由器)。你可能需要配置SSHd,但这不是必须的。

安装 Nginx, PHP 和 PHP-FPM

按照这里或者网上的指示安装Nginx。这样如果你安装了 x86_64 CentOS 你就可以在root登陆下使用以下命令。

rpm -ivh http://mirror.yandex.ru/epel/6/x86_64/epel-release-6-7.noarch.rpm

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

在 "配置 Nginx" 部分,我个人使用了 /var/www/map.example.com/public_html 和 /var/www/map.example.com/logs,但这决定于你。

Note: Also create a folder for the cache eg. /var/www/cache and run chown nginx:nginx /var/www/cache.

设置"站点"

在 /etc/nginx/sites-available/map.example.com 的文件处,更改为以下信息。

    proxy_cache_path  /var/www/cache levels=1:2 keys_zone=map:8m max_size=1g inactive=24h;
server {
    server_name map.example.com;
    access_log /var/www/map.example.com/logs/access.log;
    error_log /var/www/map.example.com/logs/error.log;
    root /var/www/map.example.com/public_html;

    location / {
        proxy_pass                  http://[IP OF MINECRAFT SERVER]:9999/;
        proxy_set_header            Host $host;
        proxy_cache                 map;
        proxy_cache_key "$host$uri";
        proxy_cache_valid  200 302  60m;
        proxy_cache_valid  404      10m;
        proxy_cache_use_stale       error timeout invalid_header updating http_500 http_503 http_504;
        proxy_connect_timeout 10;
    }
}

将 proxy_pass 更改为你的Dynmap服务器的IP和端口。

完成

运行这个命令: service nginx reload 来重载命令

保证 80 端口被防火墙(iptables)开放,并且公共IP有一个DNS的A记录连接到 map.example.com 域名。

打开 http://map.example.com

Nginx

这里介绍了如何使用Nginx作为外部Web服务器搭建Dynmap 网页服务(非代理服务器)。 我们推测你已经完成了以下步骤:

  • 你所安装的 Dynmap 根目录在 /srv/dynmap
  • 你正确地安装了 Nginx 服务,并且懂得如何使用它来搭建一台PHP在线聊天系统
  • 你所安装的 Dynmap 和内置网页服务器已经正确运行在 8123 端口

以下展示出 Dynmap 运行在Nginx时的默认配置文件。为了更好的进行数据处理,我特意将Nginx中的php-fpm配置命名为 "php5-fpm.sock"。

server {
    listen       80;
    server_name  minecraft.example.com;
    root         /srv/dynmap/;

    index index.html;

    access_log /var/log/nginx/minecraft.example.com-access_log;
    error_log /var/log/nginx/minecraft.example.com-error_log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass php5-fpm-sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

这些配置会运用到 Dynmap 下所有的URL行中。

如果你想使用 MultiCraft 作为 Dynmap 的后台管理系统也是极好的。

以下是使用Nginx搭建 Dynmap 时使用 MultiCraft 管理的配置:

server {
    listen       80;
    server_name  minecraft.example.com;
    root         /srv/dynmap/;

    index index.html;

    access_log /var/log/nginx/minecraft.example.com-access_log;
    error_log /var/log/nginx/minecraft.example.com-error_log;

    location / {
        try_files $uri $uri/ =404;
    }

    location /admin {
        alias /srv/multicraft/;
        index index.php;
    }

    location ~ ^/admin/(.*\.php)$ {
        alias /srv/multicraft/$1;
        fastcgi_pass php5-fpm-sock;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include /etc/nginx/fastcgi_params;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass php5-fpm-sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

你需要在确保以上所有步骤正确完成以及配置项无误后,你还需要给 Dynmap 和网页服务器对 standalone/dynmap_webchat.json 文件赋予足够的读写权限用于网页在线聊天系统。

如果你们有关于Nginx+PHP5 FPM等的非 Dynmap类问题,可以前往 原作者的博客 进行详细的提问。

在Windows下建立动态地图插件

我们猜测:

  • 你的Minecraft服务器目录位于D:\minecraft_server\。
  • 你安装了最新的 CraftBukkit
  • 你的Minecraft服务器托管在 localhost。

安装并测试Dynmap:

  • 将 dynmap.jar 和文件夹 dynmap 复制到 D:\minecraft_server\plugins\.
  • (重新)启动你的Minecraft服务器
  • 加入你的Minecraft服务器。
  • 放置几个方块。
  • 开启浏览器。
  • 前往 http://localhost:8123/。

你应该看到了你的地图的名字显示在左上角。当你点击名字后,地图将会平移到你的位置,并且你应该看到了已经生成的一部分的世界。

发布

如果你想让地图能被其他的人访问,你需要做以下几步:

  • 将 TCP 端口 8123 转发。
  • 将地图托管到大型Web服务器上,大型Web服务器必须能够访问Minecraft服务器,详细见下。

大型Web服务器

如果你正在托管一个 Apache 或者 Lighttpd 服务器,你可能想要让Dynmap地图可以被网页相同的URL访问,像 http://www.yourwebsite.com/dynmap/ 而不是 http://www.yourwebsite.com:8123/。如果是这样,你可以在下方选择你的Web服务器。

  • IIS: 使用IIS的URL重写和ARR模块建立Dynmap(感谢Kekec852的帮助!);
  • IIS: 使用IIS建立Dynmap;

(这还不是一个列表啊!如果你使用了其他的服务器,并且你知道如何配置它们,请将其添加至Wiki)

IIS+URL重写+ARR模块

这个页面猜测:

  • 你基本了解如何配置和管理IIS服务器。
  • Web服务器的根目录位于 C:\Inetpub\wwwroot\。
  • 你的 IIS 和 CraftBukkit 在同一台机器运行。
  • 你安装了URL RewriteApplicationRequestRouting模块。

开始

  • 创建目录 C:\Inetpub\wwwroot\dynmap\。
  • 将仓库找到的'web'文件夹下的内容放入 C:\Inetpub\wwwroot\dynmap\。

有两种选择:

  • 创建文件夹 C:\Inetpub\wwwroot\dynmap\tiles\ 并且编辑 configuration.txt 并且保证你的 tilespath 设置设置为 C:\Inetpub\wwwroot\dynmap\tiles\。
# The path where the tile-files are placed.
tilespath: C:\Inetpub\wwwroot\dynmap\tiles

或者

  • 在IIS中创建虚拟文件夹,通过在IIS中右键Dynmap文件夹并点击 Add Virtual Directory 命名为 tiles (别名) 然后 Physical path 指向 dynmap插件文件夹/web/tiles

接着是重写的部分

  • 在IIS中选择Dynmap文件夹。点击URL Rewrite图标,接着 Add rule(s);选择 Reverse proxy。在入站规则(inbound rule)中输入 127.0.0.1:8123 并且点击ok。在询问是否启用反向代理(reverse proxy)时选择 Yes。
  • 打开你的Web文件夹 (C:\Inetpub\wwwroot\dynmap\) 开启 web.config 然后将内容更改为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="up/(.*)" />
                    <action type="Rewrite" url="http://127.0.0.1:8123/up/{R:1}" />
                </rule>
                <rule name="ReverseProxyInboundRule2" stopProcessing="true">
                    <match url="standalone/(.*)" />
                    <action type="Rewrite" url="http://127.0.0.1:8123/standalone/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

有些版本的(7.x)的IIS不会自动给Dynmap需要的 *.json 文件分配正确的MIME类型(导致加载这些文件时出现406或者404错误,比如 Markers API)。

解决这个问题,请按照这里的指示,来将MIME类型 'application/json' 定义为 'json' 文件拓展。

更多让IIS6和IIS7正确处理 JSON 的细节,请查看

http://www.sencha.com/forum/showthread.php?33266-Some-Problem-with-JSON&p=229858&viewfull=1#post229858

IIS

这个页面猜测:

开始:

  • 创建目录 C:\Inetpub\wwwroot\dynmap\。
  • 创建目录 C:\Inetpub\wwwroot\dynmap\tiles\。
  • 将仓库找到的'web'文件夹下的内容放入 C:\Inetpub\wwwroot\dynmap\。

你现在应该有这个文件 C:\Inetpub\wwwroot\dynmap\up.aspx。

  • 前往 minecraft_server/plugins/dynmap/configuration.txt 并确保你将 tilespath 设置为 C:\Inetpub\wwwroot\dynmap\tiles\:
  # The path where the tile-files are placed.
  tilespath: C:\Inetpub\wwwroot\dynmap\tiles
  • 重启你的Minecraft服务器
  • 加入你的Minecraft服务器,随机放置一些方块,激活Dynmap生成tiles。

如果一切正常,你应该能在 C:\Inetpub\wwwroot\dynmap\tiles\ 找到一些新的 'PNG' 文件。你也可以前往 http://yourwebserver/dynmap/

这时候应该显示地图,并且也会显示不能更新(玩家位置和地图更新)的错误。

创建或打开 C:\Inetpub\wwwroot\dynmap\standalone\config.js 文件,将内容替换为如下:

    var config = {
      url: {
        configuration: 'up.aspx?path=configuration',
        update: 'up.aspx?path=world/{world}/{timestamp}',
        sendmessage: 'up.aspx?path=sendmessage',
        login: 'up.aspx?path=login',
        register: 'up.aspx?path=register',
        tiles : 'tiles/',
        markers : 'tiles/'
      }
    };

现在刷新你的浏览器。现在应该在 http://mywebserver/dynmap/ 显示在线的玩家。

故障排除

前往你的Web服务器,开启一个浏览器。前往 http://localhost/dynmap/up.aspx?path=configuration。这里应该显示一些代表你的 configuration.txt 中配置的文本,如果显示的是一些错误,那么分析这些错误。如果你不确定要怎么做,请在 IRC 联系我们或者前往论坛求助。

有些版本的(7.x)的IIS不会自动给Dynmap需要的 *.json 文件分配正确的MIME类型(导致加载这些文件时出现406或者404错误,比如 Markers API)。解决这个问题,请按照这里的指示,来将MIME类型 'application/json' 定义为 'json' 文件拓展。

更多让IIS6和IIS7正确处理 JSON 的细节,请查看 http://www.sencha.com/forum/showthread.php?33266-Some-Problem-with-JSON&p=229858&viewfull=1#post229858

通过托管服务建立Dynmap

基本上这都不会工作,因为Dynmap服务器作为Web服务器创建tiles文件通常需要文件读写权限(相对于一些允许使用FTP或者SFTP的文件传输的服务)。下面的一些链接显示了一些非官方的,一些用户已经成功的解决方案:

Xenon 托管服务;

Xenon托管服务

很多人都注意到了,在Xenon或者其他全时间的托管服务上运行Dynmap是不会工作的,并且尝试进入页面会给你一个黑屏。这个教程希望能帮助你在几步内解决这个问题,它需要你有自己的托管服务,(以我来说,1and1.com)

开始,下载最新版的Dynmap: http://webbukkit.org/jenkins/public/dynmap/dynmap-recommended-bin.zip - 然后像其他插件一样上传你的插件。

解压文件,打开你的FTP应用(FileZilla就很好)并登入你的web托管服务。你需要放入Xenon不允许的 JS 文件,到你的web托管的某个文件夹。不要忘记将 "config.js" 复制。记住到这个文件夹的URL地址(对我来说就是 www.mavbear.com/map/web/js)。

打开任意的文本编辑器,开启 "web/index.html" 文件,你会看到像这几行一样的:

<script type="text/javascript" src="js/jquery.json.js"></script>

这里需要注意 "js/jquery.json.js" - 你将会需要将其重命名为你的实际的文件夹地址,这个例子里,我是 "http://www.mavbear.com/map/web/js/jquery.json.js"。

对每一行以"js"的都这样样做,底部的 "config.js" 也需要这样。

保存 index.html 文件,上传覆盖已经出现在你的Minecraft服务器的文件。

接着打开 map.js,前往 403 行(v0.70.1,可能在新版本改变):

loadjs('js/' + type + '.js', function() {

替换为

loadjs('(YOUR URL HERE)/js/' + type + '.js', function() {

重新上传 'map.js' 文件到你的web托管服务(不是Minecraft服务器)。

这个部分是必要的,者可以让你看见地图的玩家,还能使用聊天服务,否则你将只能看见地图。

这就是完整的教程了!希望能够帮助你。

配置

这里我们将会介绍配置的结构和如何编辑配置。

文件 plugins/dynmap/configuration.txt 的配置为 YAML 格式,这种格式使用锁紧结构,很重要的一点就是不能含有任何TAB,只能有空格,所以你必须将正确数量的空格放置在配置之前。

仅作为参考,你可以查看这里的默认配置: https://github.com/webbukkit/dynmap/blob/recommended/src/main/resources/configuration.txt.

配置文件包含 4 部分,以部件、全局设定、世界模板、世界的顺序排列。全局设定更改渲染和Dynmap的(内部)Web服务器的表现,这是很显然的。一个示例全局设定:

# How often a tile gets rendered (in seconds).
renderinterval: 1

注意: 在版本 v0.20,默认的 configuration.txt file 被分离了, templates: 章节被移动到了 templates/ 目录, worlds: 章节被移动到了 worlds.txt 文件。用户不是必须更改他们现有的 configuration.txt - configuration.txt 定义的模板或世界仍然生效,并且会覆盖 templates/ 下的相同名称的模板。推荐已经使用的用户,尽快将 worlds: 章节(如果已经设置),从 configuration.txt 移动到 worlds.txt,放置以后的更新可能出现的冲突和影响。当然,现有的用户最好也把 templates: 章节从 configuration.txt 移动到新的文件 templates/custom-templates.txt。

部件(Component)

部件部分看起来像这样:

components:
  - class: org.dynmap.ClientConfigurationComponent

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    allowwebchat: true
    webchat-interval: 5
...

每个不换都可以认为是Dynmap的一个单独的特性,可以被单独开启或者关闭。有些不见基于其他的部件,但是我们不会深入。配置文件中的部件都以 - class: ... 开头,接着是部件的设置。

作为示例,我们会关闭处理聊天气泡的部件。这个部件看起来像这样:

...
  - class: org.dynmap.ClientComponent
    type: chatballoon
    focuschatballoons: false
...

我们可以通过删除这几行来关闭这个部件,但是更安全的方法是将他们变为注释。这个示例中:

...
  - class: org.dynmap.ClientComponent
    type: chat
  #- class: org.dynmap.ClientComponent
  #  type: chatballoon
  #  focuschatballoons: false
  - class: org.dynmap.ClientComponent
    type: chatbox
    showplayerfaces: true
    messagettl: 5
...

确保 # 之前仍然有正确的空格数。 保存配置后,重载Dynmap,刷新浏览器,聊天气泡不会再出现了。 同样的方法可以用来启用已经禁用的部件。

查看更多的部件和他们的配置可以查看部件配置。

世界与模板

在这个配置你会看到一个 world 章节(从 0.20 开始),可以在 worlds.txt 找到(之前是在 configuration.txt 的底部)。这个章节可以留空 - Dynmap将会找到服务器加载的所有世界,并提供一个默认的地图设定,基于使用 模板,定义于 templates: 章节。从 0.20 开始,模板定义从 configuration.txt 移动到了单独的文件,在 templates/ 目录中。但是之前的方式仍然生效。

关于世界设置的全面的介绍,查看世界与模板设定。

模板

默认有 3 种模板:普通,地狱和空岛。模板基于世界的环境自动选择 - normal 为普通的世界,nether 为地狱世界,skylands 为空岛世界。在 0.20 版本中,这些定义可以在 templates/ 目录找到,使用相应的名称“ templates/normal.txt,templates/nether.txt 和 templates/skylands.txt。

在 0.20,模板的名称可以使用 configuration.txt 中的 deftemplatesuffix 设定来变更。如果设置了,那么世界使用的模板的名称将会添加 - 和 deftemplatesuffix 设定的结果:所以设定 deftemplatesuffix 为 hires 将会造成 normal-hires 模板启用于所有的普通世界,nether-hires 启用于所有的地狱世界,skylands-hires 启用于所有的空岛世界。这会允许Dynmap(和其他的用户)使用预置的前缀设定,可以在 deftemplatesuffix 轻松设定。在 0.20版本,提供了 3 中默认的模板。

  • 默认 (normal,nether,skylands)
  • lowres 模板集 (normal-lowres, nether-lowres, skylands-lowres - 提供更低解析度的地图(默认的2倍)。
  • hires 模板集 (normal-hires, nether-hires, skylands-hires - 提供更高解析度的地图 - 大概是默认地图的8倍 - 'lowres' 版本用于平原和洞穴地图。

在所有的情况下,模板的定义可以在 templates/ 目录找到,使用对应的名称,加上 .txt (比如 normal-hires 可以在 templates/normal-hires.txt 找到)。

世界

配置文件中,在模板章节附近还有一个世界设置。在 0.20 版本,推荐的配置文件的位置是 worlds.txt 文件。这里我们可以指定每个世界的单独的设置。我们会使用一些例子让你理解。

基本上每个世界都有一些默认的值。 title 设置为世界的名称, template 设置为世界的环境(如果 deftemplatesuffix 在 configuration.txt 中被定义,那么有一个短横线和 deftemplatesuffix 跟随)。这个世界的模板可以覆盖这些值,但是这些世界设定里的值可以覆盖模板的设定。

如果你有 3 个世界,名称为 world, nether 和 alternative,然后你像让他们以明确的顺序显示,你可以将其放入你的配置里:

worlds:
  - name: world
  - name: alternative
  - name: nether

这样他们就以 world, alternative, nether的顺序出现。

更改某个世界的标题,你可以在配置添加title的配置:

worlds:
  - name: world
    title: "My Super Awesome World"
  - name: alternative
  - name: nether

你可以对所有的世界都这样做。

如果你想要关闭某个世界,比如世界alternative,你可以在配置添加 enable: false:

worlds:
  - name: world
    title: "My Super Awesome World"
  - name: alternative
    enabled: false
  - name: nether

你可以使用这个设置在你的模板里停用所有某一环境的世界。

如果你想要更改某个世界的特定的设置,你可以使用这个设置。这个设置还包含了 maps: 属性,这样你就可以指定世界使用的地图了:

  - name: world
    title: "My Super Awesome World"
    center:
      x: 100
      y: 64
      z: 0
    maps:
      - class: org.dynmap.flat.FlatMap
        name: flat
        title: "Flat"
        prefix: flat
        colorscheme: default

这将让这个世界,设置中心为 (100,64,0),并且只在侧边栏显示平坦地图。

最终如果你有多个世界使用相同的设置,你可以添加一个模板到 templates: 部分(或者最好添加一个自定义分模板文件到 templates/ 目录),然后指定这些世界的模板。

templates:
  mycustomtemplate:
    enabled: true
    maps:
      - class: org.dynmap.flat.FlatMap
        name: flat
        title: "Flat"
        prefix: flat
        colorscheme: ovocean
...
worlds:
  - name: world
    template: mycustomtemplate
  - name: nether
    template: mycustomtemplate
  - name: alternative

这里 world 和 nether 都使用 mycustomtemplate 模板,但是 alternative 会使用 normal 模板(因为这个示例中 alternative 有普通的世界环境)。

就像上面你能看见的一样,每个 FlatMap 或者 KzedMap 地图都可以设置一个特定的颜色主题。颜色主题可以在 plugins/dynmap/colorschemes/, 也可以在这里看到。一个关于这些的简介可以在颜色主题找到。

在 0.20 版本,一个新的地图种类出现了 - HDMap。这种地图种类,支持更高解析度的地图渲染,并且支持使用材质包,并且支持所有 FlatMap 和 KzedMap 的特性,但是更加灵活(允许自定义的观察角度,自定义的观察方向和缩放大小,等等)。有关配置 HDMaps 的详细信息,请查看HD Map 配置。

基础插件设定

这些设定是 configuration.txt 文件中的第一级设定,一般来说,会覆盖插件的基础设置,但与特殊的部件、地图和世界无关。有关部件的设定,详见部件设定。

核心设置包含以下内容:

  • deftemplatesuffix : 这个设定是可选的,字符串值。用于控制世界使用的模板,如果没有指定,那么普通的世界将会使用 normal 模板,地狱世界将会使用 nether 模板,末地世界将会使用 the_end 模板。当指定并且不为空后,使用的模板的名称将会是世界名加上下划线加上定义的内容。(比如 deftemplatesuffix 设置为XXX,普通的世界将会使用 normal_XXX 模板而不是 normal 模板。地狱世界将会使用 nether_XXX 模板,末地世界将会使用 the_end_XXX 模板)。查看高分辨率地图设定获得更多的信息。默认的模板有 vlowres, lowres, hires, 和 "" (留空)。
  • display-whitelist : 如果为 false(默认),用户是可见的直到他们使用了 /dynmap hide 命令,如果设置为 true,用户默认是不可见的直到他们使用了 /dynmap show 命令。
  • renderinterval : 这个设置为小数,以秒计算,用于控制多久之后tiles(比如玩家)需要被更新和处理。将这个设置的过低可能给服务器带来由于重复更新tiles的计算而额外的负担。默认为 0.5 秒,大多数的服务器设置为高于 0.2 的值都不会有问题。
  • renderacceleratethreshold : 这个设置为一个整数,用于设定处理从 renderinterval 到 renderaccelerateinterval 的tile更新队列的大小。这用于防止大量tiles的积累(玩家大量跑图创建新的区块时),不用以很快的速度处理常规的更新。
  • renderaccelerateinterval : 这个设定为以秒为单位的小数值,用于当tiles更新队列长度超过了 renderacceleratethreshold 的值而使用的类似 renderinterval 的值。
  • tiles-rendered-at-once : 这个设定控制异步渲染的更新tiles的最大数量。如果没有设置,那么默认的值会是处理器数量的一半。将这个值设置的偏小可以减少在大量加载更新tiles(如新生成的大量区块)时CPU的峰值使用量。
  • usenormalthreadpriority : 这个设定当设置为 true,会将渲染线程的优先度设置为普通(与最低优先度相比)。这可以帮助Windows下的渲染性能,但是可能会造成与其他进程的CPU使用竞争。大多数的Linux JVM忽略优先度。
  • zoomoutperiod : 这个设定为以秒为单位的整数,指定了移出的tiles的更新频率。用于防止由于玩家的重复改变(比如挖矿)而造成不必要的tiles的重新生成。默认的值为 60 秒。
  • enabletilehash : 此选项为 true 或者 false,用于启用tile数据的hash代码,可以用于避免在重新渲染后(比如tile不可见的方块)值没有发生变化的tile的重新编码。这减少了处理的负载、移出的处理和网页客户端的连接处理。
  • render-triggers : 这个设定为字符串列表,用于启用检测或者更新地图tile的不同的机制。定义的触发器如下:
    • chunkloaded : 这个触发器当地图的区块加载时更新tiles。这个触发器不再被推荐 - 使用 chunkgenerated ,因为 chunkloaded 可能造成大量的不必要的tiles的计算。在 v0.31 被删除。
    • playermove : 这个触发器在玩家移动时更新tiles。这个触发器不被推荐,因为会造成大量不必要的重新计算。
    • playerjoin : 这个触发器会在玩家登陆后的周围的区域更新tiles。
    • blockplaced : 这个触发器在玩家放置方块后更新tiles。(推荐)
    • blockbreak : 这个触发器会在玩家破坏方块后更新tiles。(推荐)
    • leavesdecay : 这个触发器会在玩家砍树后树叶掉落更新tiles。(推荐)
    • blockburn : 这个触发器会在火破坏一个方块后更新tiles。(推荐)
    • blockfaded : 这个触发器会在一个方块消失后(比如冰或雪融化)更新tiles。(推荐)
    • blockspread : 这个触发器会在一个方块传播(岩浆或水的流动)时更新tiles。
    • chunkgenerated : 这个触发器会在新的地图生成新的区块时更新tiles。(推荐)
    • pistonmoved : 这个触发器会在活塞伸出或收回时更新tiles。(推荐)
    • explosion : 这个触发器会在方块被爆炸摧毁后更新tiles。(推荐)
    • blockfromto : 这个触发器会在方块流入新的方块(水、岩浆)更新tiles。(推荐)
    • blockphysics : 这个触发器会在方块进行物理移动(掉落的沙砾、水、岩浆、沙子)时更新tiles。(推荐)
    • structuregrow : 这个触发器会在树枝长成树或者蘑菇长成巨型蘑菇时更新tiles。
    • blockgrow : 这个触发器会在方块生长(作物和蘑菇)时更新tiles。
    • blockredstone : 这个触发器会在红石电流更新了一个方块时更新tiles。(在你有高频的红石机械运作时小心使用)
  • webpage-title : 这个设定为一个字符串,用于指定Dynmap网页的标题。如果没有设定,将会尝试使用 server.properties 中的 'server-name',如果没有设置或者为 'Unknown Server',那么将自动设置为 'Minecraft Dynamic Map'。
  • tilespath : 这个设定为一个字符串,用于指定地图tiles生成的路径(可以是Dynmap插件目录相对路径或者绝对路径),(并且是内部服务器使用的路径)。
  • webpath : 这个设定为一个字符串,用于指定内部服务器的根目录。所有内部服务器使用的文件(除了地图tiles)都会基于这个路径。可以是Dynmap插件目录相对路径或者绝对路径。
  • webserver-bindaddress : 这个设定为一个IP地址,控制内部服务器的网络接口绑定的地址。默认为 0.0.0.0,将会让服务器绑定在所有的接口(应该对绝大部分的配置都是正确的)。设置为 127.0.0.1 会让其只绑定在本地网络(如果一个外部的Web服务器在同一台机器使用时可以这样做)。其他的值必须与网络地址匹配(不是防火墙外的公共地址或者代理)。
  • webserver-port : 这个设定为一个整数,指定了内部的Web服务器绑定的端口。默认为 8123。注意大多数的操作系统需要使用root权限运行程序才能将端口绑定至 1024 以下的端口。
  • max-sessions : 这个设定为一个整数,设置Web服务器活跃的最大的异步会话数量(限制会话使用的资源和线程)。默认的值为 30。
  • http-response-headers : 这个设置为一串属性/值对,提供了在所有的HTTP相应中添加自定义的header值。这个属相下的值为header的值。见下示例:
  http-response-headers:
      Access-Control-Allow-Origin: "http://mydomain.com"
      X-Another-Header: "Another Header Value"
  • disable-webserver : 如果设置为 true ,内部的Web服务器将会关闭(这需要使用外部Web服务器,和JSONFileClientUpdateComponent部件),其他的配置选项需要将其设置为 false 。
  • allow-symlinks : 如果设置为 true , webpath 或 tilespath 目录下的目录允许含有符号链接(symbolic link)。如果设置为 false ,内部Web服务器将不会使用符号链接(推荐实验一下,因为几乎所有的外部Web服务器都会使用)。
  • timesliceinterval : 此设置为以秒为单位的小数,指定处理 /dynmap fullrender 时tile处理的最小时间段。默认的值为 0.0 (无延迟)。非 0 的值可以在全部渲染时减少服务器的负载,但是会显著增长处理的时间。
  • maxchunkspertick : 此设置为一个整数,限制一个服务器tick中地图区块加载的数量。因为加载地图区块是Bukkit服务器主线程的主要负载源,这可以用来限制可能由于地图处理导致的卡顿。
  • progressloginterval : 此设置为一个整数,是全部渲染请求是记录进度的间隔。默认(并且最小)的值为 100。
  • parallelrendercnt : 此设置是可选的,为一个整数,用于在全部渲染时使用多于一条线程进行处理。这个设定表明了异步线程的数量,应该限制为服务器处理器的数量(或者少于)。设置此将会增加CPU的使用,可能会使用更多的内存。在设置为等于或者超过系统的处理器数量时应该保持注意。
  • updaterate : 此设置为以毫秒为单位的整数,指定Web客户端应该多长时间查询服务器的更新(无论是tiles更新 聊天信息或者玩家的位置更新)。设置更高的值会减少Web服务器的流量负载。
  • fullrenderplayerlimit : 此设置是可选的,设定了当玩家登陆的数量超过多少后停止处理全部渲染/范围渲染的值。默认为 0(停用),设置为 1 会在任何玩家登陆时停止处理全部渲染/范围渲染。
  • showplayerfacesinmenu : 这个设定为 true或者false,用于控制在网页托盘中是否显示在线玩家。默认显示(true)。
  • sidebaropened : 此设置为一个字符串,用于控制侧边栏菜单开启(true),固定(pinned)或者默认关闭(false)。默认为 false。
  • joinmessage : 此设置为一个字符串,用来控制玩家加入服务器时网页显示的消息。%playername% 用来表示玩家的名称。
  • quitmessage : 此设置为一个字符串,用来控制玩家退出服务器时网页显示的消息。%playername% 用来表示玩家的名称。
  • spammessage : 此设置为一个字符串,当网页聊天用户试图发送过多的信息时显示。
  • webprefix : 此设置为一个字符串,用于给接收到的网页聊天添加前缀。'&color;' 可以用来代替Bukkit颜色代码。
  • websuffix : 此设置为一个字符串,用于给接收到的网页聊天添加后缀。'&color;' 可以用来代替Bukkit颜色代码。
  • showlayercontrol : 此设置可为 true 或 false,用于控制覆盖层是否显示(设置为 false 会造成覆盖层的不显示,即使定义了记号层)。默认为 true。
  • check-banned-ips : 此设置可为 true 或 false,用于控制内部Web服务器是否检查 banned-ips.txt 来阻塞已经被禁止的IP连接到网页。
  • persist-ids-by-ip : 如果为 true,玩家的IP地址和联系的玩家ID是持久的,将会在服务器关闭或重启后被保存()if true, player IP addresses and the associated player IDs are persistent, and will be saved on server shutdown and reloaded on server startup (允许累加玩家的已知IP)。默认为 true。(0.29及之后的版本)
  • defaultzoom : 此设置为一个整数,指定了网页被第一次加载时默认的缩放的大小。
  • defaultworld : 此设置为一个字符串,指定了网页被第一次加载时默认显示的世界。
  • defaultmap : 此设置为一个字符串,指定了网页被第一次加载时默认显示的地图。
  • followzoom : 此设置为可选的设置,为一个整数,指定了当网页选择了要跟随的玩家时,默认的缩放等级。
  • followmap : 此设置为可选的设置,为一个字符串,指定了当网页选择了要跟随的玩家时,默认显示的地图。
  • verbose : 此设置可为 true 或 false,控制Dynmap插件启动时的信息的详细程度。设置为 false 将会明显减少显示的信息和细节。
  • hideores : 此设置可为 true 或 false,控制是否隐藏所有的矿物方块,让他们变得和普通的石块(防止利用地图寻找裸露的矿物)。默认为 false。
  • better-grass : 此设置可为 true 或 false,控制是否渲染草地和雪地的侧面,就像 BetterGrass Mod 一样。默认为 false。
  • smooth-lighting : 此设置可为 true 或 false,提供所有地图都支持的平滑光照的设定。设置为 true 可以在使用的所有地图上开启平滑光照,此选项也是每个着色器的基础设定,可以在单独的地图上开启这个特性。开启此特性将会增加 10% 的渲染成本。
  • use-generated-textures: 此设置如果设置为 true,那么将导致基于材质包的高解析度地图使用Minecraft客户端相同的纹理来渲染水、岩浆和火焰。如果设置为 false,老的材质 texture.png 和 misc/water.png 将会使用。(0.29之前的结果)设置之后需要进行一次全地图的渲染才能得到正确的结果。
  • correct-water-lighting: 此设置如果设置为 true,将会导致基于材质包的高解析度地图渲染器像Minecraft客户端一样处理水的光照。如果设置为 false,那么将会使用老的水 - 也就会更暗。(0.29之前的结果)设置之后需要进行一次全地图的渲染才能得到正确的结果。
  • fetchskins : 此设置可为 true 或 false,控制服务器在玩家登陆时是否尝试获取玩家的皮肤。如果设置为 false,默认的皮肤将会显示在所有玩家身上。默认为 true。
  • refreshskins : 此设置可为 true 或 false,控制每次玩家登陆时刷新皮肤数据。如果设置为 false,已有的文件将永远不会刷新(如果是管理员手动上传皮肤数据那么很有用)。默认为 true。

网页接口的用户登陆安全设定

网页支持的基于用户登陆的安全系统可以在这里设置:

  • login-enabled : 此设置可为 true 或 false,启用登陆安全支持(如果设置为 true)。
  • login-required : 此设置可为 true 或 false,强迫所有的用户登陆才能进入网页。(如果设置为 true)

部件设定

Dynmap的接口通过一些部件构成。不是所有的部件都可以被开启,并且有些必须开启。冠以这些部件和他们的属性可以下接下来的章节找到。

核心客户端部件

接下来的部件指定了网页的核心接口。客户端配置部件,和至少一个的客户端更新部件都是必须添加的。

客户端配置部件

这个部件在 components 章节如下定义:

  - class: org.dynmap.ClientConfigurationComponent

此部件是必须的,并且没有任何设置。

内部客户端更新部件

这个部件定义了Dynmap内部服务器的Web网页的主接口(这是部件运行必须开启的)。这个部件设置了用户使用的在 http://地址:端口/up/ 路径下的URL,包括了获取配置数据和地图更新,玩家信息和聊天信息。这个部件在 components 章节这样配置:

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: false
    trustclientname: false
    use-player-login-ip: true
    require-player-login-ip: false
    block-banned-player-chat: true
    webchat-requires-login: false
    webchat-permissions: false
    includehiddenplayers: false
    hideifshadow: 15
    hideifundercover: 15
    hideifsneaking: false
    protected-player-info: false

设置如下:

  • sendhealth : 此选项控制了网页是否发送玩家的生命信息。如果关闭,其他反馈玩家生命信息的部件将不会使用此数据,玩家的生命信息也不会受到检查,如果启用,生命信息仍然可以通过在世界设定的 sendhealth: false 选项来关闭。
  • sendpostiion : 此选项控制了是否向网页发送玩家的位置信息。如果关闭,其他反馈玩家位置信息的部件将不会使用此数据,玩家的位置信息也不会受到检查,如果启用,位置信息仍然可以通过在世界设定的 sendhealth: false 选项来关闭。
  • allowwebchat : 此选项控制了网页是否被允许向服务器发送网页聊天消息。如果停用,用户将不会发送任何网页聊天消息。
  • webchat-interval : 此选项控制来自同一个网页的聊天信息的最小间隔,以秒为单位。
  • hidewebchatip : 如果设置为 true,网页聊天将会显示为和游戏内IP地址相同的玩家的名称显示。
  • trustclientname : 如果设置为 true,服务器将会使用网页使用者上传的IP地址(可能被伪造)而不是服务器获取的IP地址。
  • use-player-login-ip : 如果设置为 true,网页聊天将会匹配当前或以前登陆的玩家的相同的IP地址 - 如果找到了匹配,将会以该玩家的ID作为身份标识。默认为 true(0.29或之后)。
  • require-player-login-ip : 如果 use-player-login-ip 为 true 且此选项设置为 true,网页聊天没有匹配到当前或以前登陆的玩家的消息将会被忽略。默认为 false。(0.29或之后)
  • block-banned-player-chat : 如果 use-player-login-ip h设置为 true 且此选项设置为 true,网页聊天匹配到已经被ban的玩家将被忽略。默认为 true(0.29或之后)。注意将不会对实现了自身的禁止系统的插件支持。
  • webchat-requires-login : 如果 login-enabled 设置为 true 且此选项设置为 true,网页聊天信息只能由已经登录的用户发送。
  • webchat-permissions : 如果设置为 true,绑定玩家的(通过登录或者IP)网页聊天将会检查 dynmap.webchat 权限,如果没有权限将被禁止发送。这需要一个支持读取离线玩家的权限的权限系统 - 比如 PermissionsEx 和 LuckPerms - 来让不用使用Minecraft客户端登录的玩家也能被检查权限。
  • includehiddenplayers : 如果设置为 true,隐藏的玩家(使用 /dynmap hide 命令)也会显示在网页UI上,但是他们的位置、生命和信息仍然会隐藏,他们只出现在玩家列表里。
  • hideifshadow : 如果设置为小于 15 的值,每个玩家的位置信息和生命信息都将在一定的光照亮度下被隐藏。(0=完全黑暗,4=晚上露天,15=完全的白天)
  • hideifundercover : 如果设置为小于 15 的值,每个玩家的位置信息和生命信息都将在他被覆盖时隐藏。由于当前的Bukkit的限制(我们已经发出了 pull request),我们将将此设置改为基于阴影等级的判定(白天的该坐标的阴影等级)。
  • hideifsneaking : 如果设置为 true,潜行的玩家将被隐藏。
  • protected-player-info : 如果设置为 true,玩家的位置信息和生命信息将受到保护,没有 dynmap.playermarkers.seeall 权限的玩家(OP默认拥有)将只会看见此玩家的标记,而拥有此权限的用户将看见完整的玩家信息。如果此设定没有被设置或者设置为 false,那么所有的生命信息和位置信息都对所有人可见。

JSON 文件客户端更新部件

使用内部Web服务器的另一种方法是将Dynmap和Web客户端的通信全部由一个外部Web服务器完成。这个文件的格式为 JSON(JavaScript Object Notation),操作的模式为"JSON 文件模式"。此模式允许内部Web服务器被关闭,转而使用内部客户端更新部件(它们之中一次只能启用一个)。此部件在 components 部分这样设置:

  - class: org.dynmap.JsonFileClientUpdateComponent
    writeinterval: 1
    sendhealth: true
    sendposition: true
    allowwebchat: false
    webchat-interval: 5
    hidewebchatip: false
    trustclientname: false
    use-player-login-ip: true
    require-player-login-ip: false
    block-banned-player-chat: true
    webchat-requires-login: false
    webchat-permissions: false
    includehiddenplayers: false
    hideifshadow: 15
    hideifundercover: 15
    hideifsneaking: false
    protected-player-info: false

定义的属性与内部客户端更新部件相同,附加的属性如下:

  • writeinterval : 此选项单位为秒,控制写入到 webpath/standalone 目录的间隔时间,这些文件为网页用户通过外部Web服务器加载地图配置使用的文件,也用于更新地图、玩家信息和生命值和聊天信息。

标记部件

此部件添加于 v0.22,提供了地图记号标记的内置支持,可以通过 /dmarker 命令或者API来使用。部件在 components 部分如下设置:

  - class: org.dynmap.MarkersComponent
    type: markers
    showlabel: false
    enablesigns: false
    showspawn: false
    spawnicon: world
    spawnlabel: "Spawn"
    showofflineplayers: false
    offlinelabel: "Offline"
    offlineicon: offlineuser
    offlinehidebydefault: true
    offlineminzoom: 0
    maxofflinetime: 30
    showspawnbeds: false
    spawnbedlabel: "Spawn Beds"
    spawnbedicon: "bed"
    spawnbedhidebydefault: true
    spawnbedminzoom: 0
    spawnbedformat: "%name%'s bed"

部件包含的设置如下:

  • showlabel : 如果定义并设置为 true,这将导致地图标记的标签始终显示,而不是当用户将鼠标放在上面才显示。
  • enablesigns : 如果定义并设置为 true,这将开启对牌子的标记支持。如果启用并且玩家拥有 dynmap.marker.sign 权限,玩家可以通过创建一个第一行为 '[dynmap]' 的牌子,来启用一个以第二行开始的标记。图标将会是 'sign' 图标,除非牌子上有一行是 'icon:'。标记组将会是默认的 'markers' 集合,除非牌子上有一行是 'set:'。一旦通过检查,'[dynmap]' 行和任何的设置行将会是空白的,留下标签行和任何剩余的行,破坏牌子将会删除对应的标记。
  • showspawn : 如果定义并设置为 true,这将让每个世界的出生点显示为一个合适的标记(默认为 'world' 标记)和标签(默认为字符串 'Spawn')。
  • spawnicon : 如果定义,提供出生点使用的标记(如果 showspawn 设置为 true)。默认为 'world'。
  • spawnlabel : 如果定义,提供出生点使用的标签(如果 showspawn 设置为 true)。默认为 'Spawn'。
  • showofflineplayers : 如果定义并设置为 true,将会添加一个显示离线玩家的标记层。(当玩家离线时会添加标记)
  • offlinelabel : 如果定义,提供离线玩家使用的标签。默认为 'Offline'。
  • offlineicon : 如果定义,提供离线玩家使用的标记。默认为 'offlineuser'。
  • offlinehidebydefault : 如果定义并设置为 true,离线玩家标记层将默认隐藏。默认为 true。
  • offlineminzoom : 如果设置不会 0,浙江制定显示离线玩家标记前的最小缩放等级。
  • maxofflinetime : 如果设置为大于0,这将指定玩家离线后的几分钟内标记应该被移除(小于等于0位从不)。所有的离线玩家的标记都将在服务器重启后被重置,独立于此设定。
  • showspawnbeds : 如果定义并设置为 true,将会显示在线玩家的出生点床的位置的标记层。(标记将在玩家离线后被移除)
  • spawnbedlabel : 在线玩家出生点床使用的标签。默认为 'Spawn Beds'。
  • spawnbedicon : 在线玩家出生点床使用的标记。默认为 'bed'。
  • spawnbedhidebydefault : 如果为 true,出生点床标记层将会被隐藏,默认隐藏。
  • spawnbedminzoom : 如果设置不为0,这将指定出生点床标记显示前最小的缩放等级。

服务器聊天部件

这些部件控制了服务器端实现的聊天功能,包括了从服务器发送至客户端聊天消息,和客户端到服务器的玩家聊天的显示。这些部件一次只能设置一个。

基础聊天部件

此部件实现了标准Bukkit/Minecraft服务端聊天通道,当激活时,所有的聊天消息都会被共享给网页用户,所有从网页接收到的聊天消息也将发送给服务器上的玩家(当然也有其他的网页用户)。此部件在 components 中如下配置:

  - class: org.dynmap.SimpleWebChatComponent
    allowchat: true

部件包含以下设置:

  • allowchat : 如果启用,将会决定服务器上的聊天是否发送给网页,如果设置为 false,将不会给网页发送聊天消息。

HeroChat 聊天部件 (弃用 - 不兼容 HeroChat 5)

HeroChat 插件实现了特殊的聊天通道。此部件允许选择HeroChat的特定聊天通道发送给网页客户端,网页聊天显示于哪一条通道。此部件在 components 中如下配置:

  - class: org.dynmap.herochat.HeroWebChatComponent
    herochatwebchannel: Global
    herochatchannels:
      - Global

此部件包含如下选项:

  • herochatwebchannel : 从网页接收到的聊天信息显示于 HeroChat 的聊天通道的名称。默认为 'Global'。
  • herochatchannels : 此为HeroChat聊天通道需要监视的名称,将会共享给网页用户。0或者多个通道可能被列出,默认只有 Global。

客户端聊天部件

这些部件控制了网页是否启用并支持发送和接受聊天消息。这些部件基于对应的服务端部件才能接受请求的功能。部件可以被单独定义也可以结合。

聊天客户端部件

此部件启用了聊天信息的输入部分,允许用户进入并从网页向服务器发送聊天信息。此部件如下配置:

  - class: org.dynmap.ClientComponent
    type: chat
    allowurlname: false

此部件包含如下选项:

  • allowurlname : 如果设置为 true (并且 trustclientname 在对应的客户端更新部件),用户可以通过 chatname URL 参数应用自己的聊天名称。

聊天气泡客户端插件

此部件实现了可弹出的气泡信息,气泡可以在地图上玩家的位置出现。此部件在 components 中如下配置:

  - class: org.dynmap.ClientComponent
    type: chatballoon
    focuschatballoons: false

此部件包含如下选项:

  • focuschatballoons : 如果启用,这将导致气泡如果不在地图上显示,地图将会平移至气泡的位置。

注意放置气泡需要先知道说话的玩家的位置信息,如果 sendposition: false 设置于玩家的当前的世界,或者通过激活的客户端更新部件来全局设置会失效。

聊天栏客户端部件

此部件实现了从服务器和其他网页接受消息并显示在聊天栏的功能。此部件在 components 中如下配置:

  - class: org.dynmap.ClientComponent
    type: chatbox
    showplayerfaces: true
    messagettl: 5
    scrollback: 100
    sendbutton: false

此部件包含如下选项:

  • showplayerfaces : 如果启用,玩家的头像将会在消息前显示。
  • messagettl : 这控制了显示的消息几秒钟后消失。如果 scrollback 设置,此设置将被忽略。
  • scrollback : 如果定义,这指定了最多在可滚动的信息列表里保存多少条消息。如果指定,消息将不会淡出(messagettl被忽略)并只会将超过 scrollback 的数量的聊天信息移除。
  • sendbutton : 如果定义并设置为 true,这将在WebUI上显示一个发送按钮,允许按按钮而不是使用回车键发送消息。

地图控制部件

这些部件定义了附加的地图数据,例如玩家记号、时间、日志等。任何部件都可以被定义。

玩家图标部件

此部件用于在地图上以图标显示玩家的位置和名称。玩家的位置信息只能在可用时(查看 sendposition 上方的设置)才会显示。此部件在 components 中如下配置:

  - class: org.dynmap.ClientComponent
    type: playermarkers
    showplayerfaces: true
    showplayerhealth: true
    showplayerbody: false
    smallplayerfaces: false
    hidebydefault: false
    layerprio: 0
    label: "Players"

此部件包含如下选项:

  • showplayerfaces : 如果启用,这将让网页试图加载玩家的自定义的皮肤作为头像的图标。否则将会加载一个通用的小图标作为标记。
  • showplayerhealth : 如果启用,客户端将会尝试显示在图标下方以两行显示玩家的生命和护甲值。这要求玩家的生命信息必须可用(查看上方的 sendhealth)。
  • smallplayerfaces : 如果启用,玩家的头像将会以 1/2 显示(与 showplayerfaces 开启有关)(如果 showplayerfaces 关闭将会显示默认图标的 1/2 大小)。
  • showplayerbody : 如果启用,将会显示整个身体的图标而不仅是头像,只有在 showplayerfaces 设置为 true 并且 smallplayerfaces 设置为 false 才可用。
  • hidebydefault : 此选项是可选的,如果定义并设置为 true,将会更改地图上玩家的图标的默认可见性设定。该图标层仍然可被WebUI控制设置为可见。
  • layerprio : 此选项是可选的,提供了图层选择的权重排序,从最低排到最高的 layerprio,(相同权重以字母顺序排序)。默认为 0。
  • label : 此选项是可选的,提供了用于选择控制图层的标签。默认为 'Players'。

数字钟部件

此部件用于显示一个简单的数字钟,显示显示的世界对应的时间。此部件在 components 中如下配置:

  - class: org.dynmap.ClientComponent
    type: digitalclock

一次只能开启一个数字钟部件。

日月时钟部件

这是一个更加复杂的时钟部件,通过太阳和月亮图标的升起降下来对应当前世界的时间。此部件在 components 中如下配置:

  - class: org.dynmap.ClientComponent
    type: timeofdayclock
    showdigitalclock: true
    showweather: true

此部件包含如下选项:

  • showdigitalclock : 如果启用,数字时钟将会显示(附加于日月的显示)。
  • showweather :

坐标部件

此部件用于显示鼠标所指的地方对应的世界的坐标。此部件在 components 中如下配置:

   - class: org.dynmap.ClientComponent
     type: coord
     label: "Location"
     hidey: false
     show-mcr: false

此部件包含如下选项:

  • label : 允许控制用于显示坐标的标签,默认为 'x,y,z'。
  • hidey : 此选项如果定义并设置为 true,会只显示 X,Z 坐标。
  • show-mcr : 此选项如果定义并设置为 true,会显示当前位置的Minecraft区域文件ID。

Logo 部件

此部件允许在地图上显示一个可选的图标和链接。此部件在 components 中如下配置:

   - class: org.dynmap.ClientComponent
     type: logo
     text: "Dynmap"
     linkurl: "http://forums.bukkit.org/threads/dynmap.489/"

此部件包含如下选项:

  • text : logo的标签
  • linkurl : 显示的标签链接到的 URL。

链接部件

此部件可以在WebUI显示一个 '链接到' 按钮。这个按钮点击后会链接到另一个页面,但是会保留世界的地图、缩放和当前的视图的位置信息 - 允许将视图分享,作为标签或者其他的链接。此部件在 components 中如下配置:

   - class: org.dynmap.ClientComponent
     type: link

现在没有任何设置。

世界&模板设定

有很多用于控制地图和界面的可配置的设置,大多数都可以使用模板设置 - 这是很正常的,因为模板本质上是用来设置世界没有指定的某些设置的集合。

按道理来说,任何定义的世界都应该有一些默认的设置,按照他们的环境(普通、地狱、空岛)分为不同的模板 - 设置继承于默认的与环境名称相同的模板。如果 deftemplatesuffix 设置,模板的名称将变成环境加 '-' 加上设置的后缀。所以设置 deftemplatesuffix 为 hires 让普通的世界使用 normal-hires 模板,而地狱使用 nether-hires 模板。

除了这些由模板继承的设置,给定的设置可以通过在 worlds:(在 worlds.txt,或者 configuration.txt) 部分指定选项来给出自定义的设置。当给定世界的选项在配置文件出现,任何在配置中提供的设置将会覆盖对应的继承自模板的设定。

除了世界的名称和地图以外,所有的世界设定都是可选的,并且拥有默认的值,地图通常由模板提供。因此,在worlds:部分下的设定只能包含世界名称:

worlds:
  - name: world1
  - name: world2

这可以用来控制世界的顺序,因为定义的世界总是根据这里的顺序排列。

一份更加复杂的示例世界设置如下:

worlds:
  - name: world
    title: "My Great World"
    enabled: true
    template: mycustomtemplate
    sendposition: true
    sendhealth: true
    fullrenderlocations:
      - x: 100
        y: 64
        z: 2000
    visibilitylimits:
      - x0: -1000
        z0: -1000
        x1: 1000
        z1: 1000
    hiddenlimits:
      - x0: 100
        z0: 0
        x1: 200
        z1: 0
    hidestyle: stone
    center:
      x: 0
      y: 64
      z: 0
    bigworld: false
    extrazoomout: 0
    maps:
      - class: org.dynmap.flat.FlatMap
      ....

可用的设定如下

  • name : 设置世界的名称,必须独一无二,不能从模板继承。
  • title : 如果设置,此字符串为世界的标签,默认留空。
  • enabled : 如果启用(设置为 true),将会启用该世界的地图,或者禁用(设置为 false)。所有的世界都是默认启用的,所以将其设置为 false 只能防止生成地图和显示在网页上。
  • template : 如果设置,此选项覆写模板的默认世界设置。如果没有设置,那么将会使用基于世界环境的模板的设置(普通、地狱或空岛),如果设置了 deftemplatesuffix,还会在后面跟上 -deftemplatesuffix。这个设定不能由模板继承而来。
  • sendposition : 如果设置为 false,这将导致该世界的所有玩家的位置信息全部隐藏,设置此属性为 true 时,如果全局 sendposition 设置为 false,那么仍然不显示位置信息。如果没有设置此选项,默认为 true。
  • sendhealth : 如果设置为 false,这将导致该世界的所有玩家的生命信息全部隐藏,设置此属性为 true 时,如果全局 sendhealth 设置为 false,那么仍然不显示生命信息。如果没有设置此选项,默认为 true。
  • fullrenderlocations : 如果设置,这组世界坐标列表(每个坐标由x,y和z坐标组成)定义了一组附加位置(如果一个/dynmap fullrender命令由游戏玩家发出,那么为除了x=0,y=64,z=0,或玩家的当前位置的坐标)来开始一次完全渲染。讲道理,fullrender 就像画图软件中的油漆桶一样 - 如果地图在区块之间有间隙,比如地图使用传送门或者传送来探索,那么从一个点开始的完全渲染可能无法到达地图生成的全部区块: 添加到 fullrenderlocations 中的坐标点也会使这些区块被渲染。
  • visibilitylimits : 如果设置,那么这个列表代表的矩形能够用来限制渲染的区域:矩形外的区域将不会被精确呈现,而是使用某种形式填充(见下 hidestyle)。如果列表为空,那么将没有限制,地图将会渲染到生成的所有区块的边缘位置。每个矩形由两个坐标对 - x0, z0, 和 x1, z1 组成。从 1.5-alpha-3 开始,可以使用 x, z 作为圆心, r 作为半径的原型区域。
  • hiddenlimits : 如果设置,那么这个列表代表的矩形与 visibilitylimits 相反 - 定义了隐藏的世界特定区域(使用 hidestyle 的设置来填充)。如果定义了 'visibilitylimits' 和 'hiddenlimits',那么首先使用 'visibilitylimits'(确定可见区域),然后使用 'hiddenlimits' 来进一步限制渲染的区域。每个矩形由两个坐标对 - x0, z0, 和 x1, z1 组成。从 1.5-alpha-3 开始,可以使用 x, z 作为圆心, r 作为半径的原型区域。
  • hidestyle : 如果 visibilitylimits 和/或 hiddenlimits 设置限制了世界的可见区域,则 hidestyle 设置用于控制如何显示这些无法显示的区块。有以下 3 种设置:stone,用石块填满隐藏区域,ocean,用海填满隐藏的地区,或 air,使隐藏区域为空(如世界地图的生成部分的边缘)。默认值为stone。
  • center : 如果设置,此选项提供该世界的地图的视点中心。该坐标包括了 x, y 和 z 的坐标。如果没有设置,则使用世界的出生点坐标。
  • bigworld : 如果设置,则将使用 FlatMap 或 KzedMap 地图种类的替代的文件结构,这个结构更加适合拥有数万数十万的 tiles 的大型世界。HDMap 始终使用这种结构,不会被此设置影响。默认为 false,当使用 true 则启用这种文件结构。如果更改了此设置,则需要使用 /dynmap fullrender 开初始化全新的地图。
  • extrazoomout : 如果设置,那么这将指定地图默认的缩小等级。这能让地图查看器提供更多的缩放等级,也能生成其他的缩放等级的 tiles(基于原始的tiles):每一级将会缩小两倍的大小,每一级 4 个tiles将会缩小为 1 个tiles。启用此设置将会增加tiles文件数量和磁盘使用量的 25% - 33%,但是可以在大型世界更高的找到方位。默认为 0(无附加的缩小)。
  • maps : 如果设置,那么 maps 部分提供了按地图查看器显示的顺序用于渲染世界的所有的设置,如果在 worlds: 部分设置,则替换世界模板提供的地图设置。有关地图定义的详细信息,参见地图配置和高解析度地图配置。

颜色主题

从Dynmap0.14开始内置4中颜色主题文件:default.txt, flames.txt, ovocean.txt, 和 sk89q.txt。

使用不同的颜色主题可以将 configuration.txt 内的 colorscheme: default 选项更改为你想用的颜色主题(颜色主题文件去掉 .txt)。

这里是一些示例的每种颜色主题在相同地形的渲染图。由于角度差异,平面地图和默认的渲染采用不同的地形采样。点击查看完整大小。

Default 颜色主题

Flames 颜色主题

ovocean 颜色主题

sk89q 颜色主题

世界配置

configuration.txt 以掳爱那个部分呢需要在设置 Dynmap 的多世界时检查。第一个仅用于服务端的地图渲染,另一部分是关于浏览器怎样显示地图(当然还有什么地图)。

以下是 configuration.txt 的这两部分,你可以看见这个示例包含了两个世界:world 和 nether。 世界 world 有两张地图,但是这看起来可能不是很显而易见,因为看起来像是只有一张地图。实际上我们设置了两个渲染器,地图有两个前缀,这指定了 minecraft_server/plugins/dynmap/web/tiles/world/ 中的 tiles 的文件名。这些前缀对于这些世界必须是独一无二的。

另一个世界叫 nether,只有一张地图。注意此地图有一个特殊的设置 maximumheight,这指定了渲染器不渲染的部分,这是为地狱环境准备的选项,因为地狱的上方全是基岩,不用渲染。

服务端的部分

# The maptypes Dynmap will use to render.
worlds:
  - name: world
    maps:
      - class: org.dynmap.kzedmap.KzedMap
        renderers:
          - class: org.dynmap.kzedmap.DefaultTileRenderer
            prefix: t
            maximumheight: 127
          - class: org.dynmap.kzedmap.CaveTileRenderer
            prefix: ct
            maximumheight: 127
  - name: nether
    maps:
      - class: org.dynmap.kzedmap.KzedMap
        renderers:
          - class: org.dynmap.kzedmap.DefaultTileRenderer
            prefix: nt
            maximumheight: 64

网页的部分

web:
    defaultworld: world
    worlds:
      - title: World
        name: world
        maps:
          - type: KzedMapType
            title: Surface
            name: surface
            prefix: t
          - type: KzedMapType
            title: Cave
            name: cave
            prefix: ct
      - title: Nether
        name: nether
        maps:
          - type: KzedMapType
            title: Surface
            name: nether
            prefix: nt

如何进行 保证:

  • 你的世界文件夹在 minecraft_server 的根部目录,比如 minecraft_server/world 和 minecraft_server/nether。
  • 你的世界文件夹就在 minecraft_server 文件夹中,和 craftbukkit*.jar 同级,而不是什么子目录。
  • 你的世界文件夹没有去怪的符号,只有数字字母和下划线。
  • 服务器部分和网页部分的世界的 name 设置都匹配你的世界文件夹的名称,比如 world 或 nether。注意这些名称是大小写敏感的。
  • defaultmap 匹配网页部分的一张地图的名称,再次注意这些名称是大小写敏感的!
  • 如果你更改了 prefix 变量,那么应该在服务端部分和网页部分同时更改。
  • 重启服务器后,在世界中放置和破坏一些方块看看效果。你的角色应该在世界上可见,你可以点击你的角色来快速到达角色所在的世界。

高分辨率地图设定

按照他们对 v0.20 版本的介绍,HDMap提供了一种新的】更加灵活的,并且(按理说)更加复杂的用来在服务器上定义和自定义地图的方式。一些HDMap如何定义和架构的细节旨在抵消一些额外的复杂性 - 但是理解HDMap定义后的"操作理论"也是很重要的,这能让你知道你需要做些什么才能得到想要的地图(而不用做出任何不必要的努力就能得到想要的结果)。

迅速上手:启用HDMap的模板

Dynmap包括了3种模板,每种都提供了如何定义不同种类的世界(普通、地狱、末地)。编辑 configuration.txt 来在这些模板之间选择,并且更改 deftemplatesuffix 的设置(可以在 configuration.txt 的顶部找到)。现在定义的值包括了这些:

  • deftemplatesuffix: "" : 这让Dynmap使用"经典"的默认模板 - 那些低解析度并且渲染非常快速,但是远没有让人满意的地图种类。这种模式使用的模板的文件可以在 templates/normal.txt, templates/nether.txt, 和 templates/the_end.txt 找到。这在 0.23 以及之前的版本都是默认设置。
  • deftemplatesuffix: vlowres : 这是 "very-low-res"(非常低解析度) 的高清地图。这些地图跟'经典'的默认地图(表面地图,东南方地图,洞穴地图),但是是使用高解析度地图渲染器渲染的。并且,默认的Minecraft材质将会用于方块着色,用于更加准确的表现地图。使用的模板文件在templates/normal-vlowres.txt, templates/nether-vlowres.txt, 和 templates/the_end-vlowres.txt。在 0.24 版本,这些是默认的模板。
  • deftemplatesuffix: lowres : 这是 "low-res"(低解析度)高清地图,这些地图跟'经典'的默认地图(表面地图,东南方地图,洞穴地图),但是是使用高解析度地图渲染器渲染的与经典地图相比高 2-3 倍分辨率的地图。并且,默认的Minecraft材质将会用于方块着色,用于更加准确的表现地图。渲染这些地图的时间比经典地图长大约 4-6 倍,存储空间使用也会多 4 倍。使用的模板文件在templates/normal-lowres.txt, templates/nether-lowres.txt, 和 templates/the_end-lowres.txt。
  • deftemplatesuffix: hires : 这是 "high-res"(高解析度)的高清地图。这些地图跟 lowres 高清地图相似,除了 surface 地图(直观图)使用了更加高的分辨率(比 lowres 高 4 倍。比经典高8倍),并且在更低的观察角度渲染(水平的 30 度而不是 60 度)。渲染的结果是非常棒的,但是会消耗相当的时间进行渲染(约低清晰度的 16 倍时间,经典地图的 64 倍时间),并且会使用更多的磁盘(比低清晰度多 16 倍,比经典地图多 64 倍)。使用的模板文件在 templates/normal-hires.txt, templates/nether-hires.txt, 和 templates/the_end-hires.txt。

当选择了一个模板集之后,地图就可以通过编辑模板文件来达到更高的自定义效果。以下部分描述了完全的地图设置方法。

基础:如何将高清地图添加到模板或世界

设置 HDMap 与其他现有的地图是相同的,和其他地图一同,HDMap 的配置模板在 maps: 部分提供(configuration.txt 或者相应的文件夹)或者在世界配置的 worlds: 部分( configuration.txt 或者 worlds.txt 文件)。接下来是 HDMap 的一份示例配置:

maps:
  - class: org.dynmap.hdmap.HDMap
    name: myhdmap
    title: "My HD Map"
    prefix: hdm1
    perspective: iso_S_90_lowres
    shader: stdtexture
    lighting: default

与其他的地图相似,HDMap 需要 3 个基本的参数:

  • class: 设置 - 此选项设置了地图的类型,HDMap 为 org.dynmap.hdmap.HDMap
  • name: 设置 - 此选项设置了此地图的独一无二的名称(与其他给出的世界的地图名称不同)。此名称用于识别地图,包括在 defaultmap 设定选择默认地图时和使用网页的参数时。
  • prefix: 设置 - 如果没有提供, name 设置将被用作此项。这项用于存储地图的文件和目录名称 - 所以也需要区别于其他世界的地图的 prefix 值、

现在,接下来的设定控制 HDMap 将怎样绘制:

  • 我们怎么确定看到的内容?
  • 我们决定如何着色?
  • 照明对我们看到的颜色有什么影响?

使用 HDMaps,这些问题的答案由接下来的 3 个选项所决定:

  • perspective: 设置决定我们查看地图使用的透视种类。透视控制着物体的投射(目前只有等距投射),查看地图的方向(南北角度,水平角度),和查看视图的缩放(每一格边界有多少像素)。
  • shader: 设置提供了用于着色地图的渲染器 - 决定透视的着色。这可以包括使用特定的Minecraft材质的着色器,使用老式颜色主题的着色器(就像 FlatMap 和 KzedMap 一样),使用生物群系着色的着色器,或者洞穴着色器。
  • lighting: 设置提供了用于更改地图着色的光照系统,基于光照条件。这可以包含阴影渲染,夜视渲染或二者皆可。

Dynmap使用几个提前设定好的预设来简化配置的过程,这些预设,有必要时可以修改,或是在创建新的配置时作为参考。

预设

你可以在 perspectives.txt 很多的预设,预设的名称按照严格的命名规则,这样可以使其更加浅显易懂:

投影 方向 角度 缩放_

其中:

  • projection 是观察点的类型:目前只有 iso (等距)支持。
  • direction 是观察的方向:这八个方向都支持 (N, NE, E, SE, S, SW, W, NW)
  • angle 是观察的水平角度: 30 (30 度) 和 60 (60 度) 支持所有的观察角度,90 (90 度 - 自上而下) 用于 N (北), S (南), E (东) 和 W (西) 的观察角度。
  • scale 是视图的缩放倍数或细节程度:vlowres 对应每个方块两个像素的宽度(与 KzedMap 解析度相似),lowres 对应每个方块 4 个像素的宽度(KzedMap 的两倍解析度),medres 对应每个方块 8 个像素的宽度,hires 对应每个方块 16 个像素的宽度。

所有可用的预设(见下方)

预设着色器

预设的着色器设定(可在 shaders.txt 找到)包括了以下内容:

  • default : 默认的着色器,使用标准Minecraft材质包渲染地图。
  • defaultscheme : 使用 'default' 颜色主题(在 colorschemes/default.txt 中设定)渲染地图。
  • ovocean : 使用 'ovocean' 颜色主题(在 colorschemes/ovocean.txt 中设定)渲染地图。
  • flames : 使用 'flames' 颜色主题(在 colorschemes/flames.txt 中设定)渲染地图。
  • sk89q : 使用 'sk89q' 颜色主题(在 colorschemes/sk89q.txt 中设定)渲染地图。
  • biome : 使用生物群系种类渲染地图。
  • temperature : 使用环境温度数据来渲染地图。
  • rainfall : 使用生物群系雨水/湿度数据来渲染地图。
  • no_transparency : 使用默认的颜色主题(在 colorschemes/default.txt 中设置)渲染地图,关闭所有的透明处理(水、玻璃,树叶为实体)。
  • cave : 使用"洞穴视图"渲染 - 显示空气与非空气之间的界限,使用基于深度的从绿色到蓝色渲染。
  • stdtexture : 使用标准Minecraft材质包(在 texturepack/standard/)渲染地图。
  • stdtexture-nobiome : 使用标准Minecraft材质包(在 texturepack/standard/)渲染地图,但是关闭基于生物群系的彩色草地和树叶。
  • topo : 创建基于颜色的地形图,从 128 格生成世界。
  • topo256 : 创建基于颜色的地形图,从 256 格生成世界。
  • topo-noplants : 创建基于颜色的地形图,从 128 格生成世界,隐藏普通的树和植被。
  • topo256-noplants : 创建基于颜色的地形图,从 256 格生成世界,隐藏普通的树和植被。

预设光照

预设的光照配置可以在 lightings.txt 找到,包含以下设置:

  • default : 默认无特殊处理,无阴影,完全白天
  • shadows : 使用完全白天的设置,但是启用阴影处理。
  • night : 使用标准的月夜的设置,启用阴影处理。
  • brightnight : 使用更加明亮的月夜的设置(使不明显的地形更加明显),启用阴影处理。
  • nightandday : 渲染两组 tiles,一组用于白天渲染(基于 shadows 设置),另一组用于夜晚渲染(基于 night 设置),将会对应对应世界的白天和夜晚设置。
  • brightnightandday : 与 nightandday 相同,但是使用 brightnight 相同的设置来渲染夜晚。

预设的选择对最终渲染地图的大小和质量的影响是非常明显的,特殊的, -scale- 将会明显影响渲染地图的大小,因为渲染的tiles的数量随着 -scale- 上升而上升。lowres 地图将会比 KzedMap 的 tiles 多 4 倍(水平垂直都多2倍解析度 - 2x2=4)。medres 又多了两倍的解析度,所以就是 4 倍的tiles(或者说比 KzedMap 多 16 倍) 。hires 又多了两倍的解析度,所以就是 4 倍的tiles(或者说比 KzedMap 多 64 倍)!-hires- 的地图看起来非常赞,但是在第一次完全渲染的时候准备花上一些时间(几个小时,如果地图更大可能要一天)。低的观察视角(30 度角)会让地图多一些tiles渲染(低的视角意味着观察的视线会包含更多的区块 - 相比垂直视角)。其他的设置 - -shader- 和 -lighting- 基本对地图文件的大小没有影响,并且对地图渲染的时间有可以忽略的影响。

自定义预设,着色器,光照

查看一下页面获得关于自定义预设、着色器、光照的详细信息:

自定义预设;

自定义着色器;

自定义光照;

定义自定义预设、着色器、光照之后,地图就可以按照使用预设配置一样使用这些自定了。

附加高解析度地图设置

HDMap 支持很多可选的附加选项,用于设置用户的使用。这些设置包含:

  • title : 此选项控制网页的地图的标题。
  • icon : 此选项允许控制地图图标的文件图片的 URI 地址。如果没有设置,此选项使用 images/block_name.png。
  • background : 此选项提供了地图的背景颜色。颜色的值为经典的 CSS 格式的颜色代码:#rrggbb。如果没有设置则为黑色(#000000)。
  • backgroundday : 此选项提供了白天时地图的背景颜色 - 当设置后并且为白天,此选项覆盖 background 设置,只能在开启了白天夜晚的地图使用。
  • backgroundnight : 此选项提供了夜晚时地图的背景颜色 - 当设置后并且为夜晚,此选项覆盖 background 设置,颜色的值为经典的 CSS 格式的颜色代码:#rrggbb。只能在开启了白天夜晚的地图使用。
  • mapzoomin : 此选项控制原始地图的放大步数。放大的等级可以在不需要更多地图数据的情况下拉伸地图 - 相同的像素会变得更大(1步数=2x,2步数=4x,等等)。默认为 2 (允许两个额外的放大,对应 2x 和 4x)。
  • image-format : 此选项控制生成的tiles的格式,默认为PNG,是一种无损的图像形式,但是大小最大,会使用明显的带宽。JPG 是一种有损的压缩形式,牺牲质量来减少文件大小。最好的 JPG 文件仍然明显比 PNG 小(一般是 2 倍),质量少了一点。更低的质量等级仍然可以得到很好地地图质量,并且文件大小将减少很多(6 - 10 倍)。支持的值如下:
    • png : 无损(但可能有点大)PNG(默认)
    • jpg : 质量很好的 JPG (85% 质量) - 与 jpg-q85 相同
    • jpg-q75 : 质量还行的 JPG (75% 质量)
    • jpg-q80 : 质量还行的 JPG (80% 质量)
    • jpg-q85 : 质量很好的 JPG (85% 质量)
    • jpg-q90 : 质量很好的 JPG (90% 质量)
    • jpg-q95 : 质量非常好的 JPG (95% 质量)
    • jpg-q100 : 质量非常好的 JPG (100% 质量)

注意:JPEG 不支持透明(透过的背景颜色)。如果 backgroundday 或 backgroundnight 的颜色更改,所有的tiles都将被重新渲染。并且,如果白天和夜晚的颜色不同,开启了 night-and-day 选项(比如 nightandday 或 brightnightandday 光照)必须生成两组tiles(每一组对应白天和夜晚)。

所有可用的预设

所有的预设都可以在 perspectives.txt 文件找到,你可以在那里编辑或者自定义,但是推荐所有对预设的更改应该在 custom-perspectives.txt 文件中进行。

以下预设可用:

  • default : 默认的预设,从东南方(135 度方位),60 度水平角度观察,以 4 像素每方块的宽度作为缩放。
  • classic : 默认的预设,从东南方(135 度方位),60 度水平角度观察,以 1.4 像素每方块的宽度作为缩放。与 KzedMap 很相似。

以下以在高解析度地图内的命名规则设定:

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

自定义预设

如果 Dynmap 附带的默认预定义透视图不适合使用者的需要,使用者可以自定义透视图。 如果使用者使用自定义透视图,使用者可以充分地自由地发挥渲染引擎的全部灵活性和功能。

自定义透视图可以通过修改默认透视图定义文件中的配置项来实现,详见 perspectives.txt,或通过添加自定义的全新的定义配置到 custom-perspectives.txt 文件中去(原作者建议的首选方法)。

目前,Dynmap 仅支持一类透视图:IsoHDPerspective 类。这个类定义了一个等距视图,可以完全控制视图的方向、视角和视图的大小。 该透视图类的详细定义如下所示:

    perspectives:
      - class: org.dynmap.hdmap.IsoHDPerspective
        name: my_custom_perspective
        azimuth: 124
        inclination: 55
        scale: 16

同等规格的透视图所需定义的参数包括以下配置项:

  • name : 每个透视图的唯一名称。 如果使用者自定义的透视图名称与现有的已使用的透视图重名,则更新部署的透视图将会替换掉旧部署的透视图。
  • azimuth : 从地图的角度看(上北下南左西右东),从正北方开始顺时针的角度上:0 = 北方,90 = 东方, 180 = 南方, 270 = 西方。任何角度的值都是被允许使用的。
  • inclination : 从地图的倾斜角度来看: 90 = 俯视图, 0 = 水平面 (不被允许的倾斜角度)。一般来说允许的倾斜角度在20到90度之间。
  • scale : 用于渲染场景的尺度或分辨率,以每块边的像素为单位。 支持从1到64的值,尽管64对应一个巨大的地图 - 16倍于默认质量的一个非常高质量的地图(与标准透视图中的 hires 相对应),8倍于默认质量的一个非常高质量的地图 (与标准透视图中的 medres 相对应), 4倍于默认质量的一个非常高质量的地图 (与标准透视图中的 lowres 相对应)。 如果使用了材质包资源的渲染引擎以外的其他渲染引擎(洞穴、生物群落、色彩设计)。

除了这些必须填写完备的核心参数项之外,还支持额外的可选参数项来优化和改进透视图的处理效果:

  • maximumheight : 如果设置,则设置需要呈现的方块的最大高度值(Y 坐标,于我的世界游戏地图中)。 如果设置在127以下,那么在此高度之上的所有方块都将是不可见的 - Dynmap 的网页地图在线显示系统会逻辑地将世界的顶部分割为使用者在该项中所设定的高度。 这可以用来显示地下视图。
  • minimumheight : 如果设置,则设置需要呈现的方块的最小高度值(Y 坐标,于我的世界游戏地图中)。 如果设置在0以上,那么在这个高度以下的所有区块都是不可见的 - Dynmap 的网页地图在线显示系统会逻辑地将世界的低部分割为使用者在该项中所设定的高度。 这可以用来显示地下视图。
  • fence-to-block-join : 如果设置,则会重写配置项 fence-to-block-join 的设定于配置文件 configuration.txt 中。 如果设置为真,则将显示栅栏还会同其他方块连接在一起。(效果同1.9版本以上); 如果设置为假,则将显示栅栏只与其他栅栏连接在一起。

自定义着色器

自定义着色器可以用于更改标准的着色器设置,在 shaders.txt 中直接更改或者在 custom-shaders.txt 中添加都是可以的。

现在有这么几个基础的着色器,任何一个都可以用来设置自定义着色器:

  • org.dynmap.hdmap.DefaultHDShader - 用来支持 FlatMap 和 KzedMap 的颜色模型,包括了颜色主题、几种生物群系的着色
  • org.dynmap.hdmap.CaveHDShader - 支持基于洞穴的颜色主题
  • org.dynmap.hdmap.TexturePackHDShader - 支持使用 Minecraft 材质包,包括客户端的默认材质
  • org.dynmap.hdmap.TopoHDShader - 根据方块的高度调节颜色的着色器

设置一个自定义的 DefaultHDShader 着色器

DefaultHDShader 类支持以下设置:

    shaders:
      - class: org.dynmap.hdmap.DefaultHDShader
        name: myshadername
        colorscheme: ovocean

和其他的相同, name 属性是必需的,并且要独一无二。如果自定义着色器在 custom-shaders.txt 文件中拥有和标准着色器相同的名称,标准着色器将会被替换。

以下属性可选:

  • colorscheme : 设置渲染使用的颜色主题。对应的文件可以在 colorschemes/ 文件夹找到,包括了 default, ovocean, flames, 和 sk89q。这些文件定义如何渲染普通方块以及基于生物群系的渲染设置。默认为 default。
  • biomecolored : 设置渲染使用的生物群系数据,默认包括 none (默认,方块将会被渲染为默认的颜色), biome (会给予生物群系渲染), temperature (基于原始生物群系的温度数据渲染),或是 rainfall (基于原始生物群系的湿度数据渲染)。
  • transparency : 控制是否使用透明度设置。默认为 true(正常处理透明) 或 false (所有方块视作不透明)。

设置一个自定义的 CaveHDShader 着色器

CaveHDShader 目前没有任何属性,使用这个着色器也不会有任何目的。将来的 Dynmap 更新可能会添加定义洞穴渲染使用的颜色设定。

设置一个自定义的 TexturePackHDShader 着色器

TexturePackHDShader 类更像用于自定义的着色器,因为必须使用附加的材质包文件。此着色器支持标准材质包的特性,也可以使用 MCPatcher 客户端的材质包,包括了高解析度的材质,自定义水和岩浆,自定义的群系树叶草地过渡。

示例的典型设置如下:

    shaders:
      - class: org.dynmap.hdmap.TexturePackHDShader
        name: mytexturepackshader
        texturepack: my-favorite-texturepack-v2.1.zip
        biomeshaded: true
        better-grass: false
        grid-scale: 0

设定包括以下:

  • name : 着色器名称
  • texturepack : 材质包文件的名称或者包含解压的材质包的目录名称。这些文件必须放在 plugins/dynmap 下的 texturepacks 文件夹。
  • biomeshaded : 此设置控制基于生物群系数据(温度和湿度)的草地和树叶颜色。如果设置为 true (默认),群系过渡将被启用。如果设置为 false,所有的草和树叶的颜色都是基于 misc/grasscolor.png 和 misc/foliagecolor.png# 文件的颜色。
  • better-grass : 此设置控制是否渲染草地方块和雪方块的侧面,就像 BetterGrass Mod 一样。如果没有设置,将会使用 configuration.txt 中的 better-grass 设定值。
  • grid-scale : 是否在地图上渲染网格,如果设置为 16 ,每个方块的边缘都有白色网格。

设置一个自定义的 TopoHDShader 着色器

默认的 TopoHDShader 设置如下:

    shaders:
      - class: org.dynmap.hdmap.TopoHDShader
        name: topo
        color127: "#FFFFFF"
        color111: "#8B4513"
        color95: "#D2B48C"
        color79: "#FFFF00"
        color63: "#008000"
        color47: "#228B22"
        color31: "#104010"
        color15: "#6B8E23"
        color0: "#696969"
        linecolor: "#000000"
        watercolor: "#0000FF"
        hiddenids: [ 0 ]

选项包括:

  • name : 着色器的名称
  • linecolor : 高度的区域边框的 #RRGGBB 颜色,不设置则没有颜色
  • watercolor : 水方块使用的 #RRGGBB 颜色,如果设置,此颜色覆盖同纬度的水方块的颜色,如果没有设置,将会和其他方块相同渲染
  • colorN : N 从 0 - 255,对应 Y 轴。每个值都会提供用于渲染当前高度的方块的颜色,默认 color0 为 #000000 且 color255 为 #FFFFFF。没有提供的值将会取最近两个定义的值的插值。
  • hiddenids : 可选的参数,提供生成拓扑地图时隐藏的方块列表,默认只有空气 - [ 0 ]。此设置应为逗号分隔的一串数字,方括号包围(如[ 6, 17, 18, 31, 32, 37, 38, 39, 40, 50, 55, 78, 81, 83, 86, 99, 100, 103, 104, 105, 111, 115 ])。

自定义光照

自定义光照可以通过修改默认的光照定义文件来实现, 详情见 lightings.txt,或通过添加自定义的全新的定义配置到 custom-lightings.txt 文件中去(原作者建议的首选方法)。

目前,Dynmap 支持两种光照类: DefaultHDLighting 类以及 ShadowHDLighting 类。

DefaultHDLighting 类不会修改方块材质中的颜色数据 - 在没有阴影的情况下效果相当于白天的日光 - 并且没有可以供使用者修改的的配置项。

ShadowHDLighting 类支持更多的配置项,允许控制环境光源的倾斜角度,阴影强度, 以及为每个地图生成夜间和白天的光照版本的选项。

下面展示的是一个典型的默认光照配置文件的内容(ShadowHDLighting 类):

    lightings:
      - class: org.dynmap.hdmap.ShadowHDLighting
        name: my-custom-lighting
        shadowstrength: 1.0
        ambientlight: 4
        night-and-day: true
        smooth-lighting: false

使用 ShadowHDLighting 类作为 Dynmap 光照源时可选的配置项如下展示:

  • name : 光照配置的唯一名称。如果使用者在 custom-lightings.txt 文件自定义的光照名称与现有的已使用的光照重名,则更新部署的光照配置将会替换掉旧部署的光照配置。
  • shadowstrength : 有光照时阴影区域所采取的阴影强度。默认值为 0.0 (阴影强度可忽略不计),正常的阴影强度值为 1.0。 设置在1.0以上的值会产生较为明显的人为阴影效果,而少于1.0会导致阴影变弱。
  • ambientlight : 有光照时天空向地面投射的光照强度。晌午光照最强时的值为 15 (默认值),午夜的光照强度一般为 4 。
  • night-and-day : 若启用此设置(通过将值设置为true),Dynmap 的在线地图生成系统将会为每个地图生成夜间和白天两个不同的光照版本, 并且如果访问者在网页访问在线地图时,系统会根据每个地图游戏内的真实时间来设置显示到在线地图的光照参数。白天与夜晚最大的区别是白天将会使 ambientlight 设置到15, 而夜晚则会根据 ambientlight 的环境光源设定而改变。 此选项的默认值为 false 。
  • smooth-lighting : 这是一个布尔值类型的配置项,用于开启或关闭平滑光照效果。 启用此功能将增加消耗10%的(网页服务器)渲染处理性能),但带来的是更平滑的阴影和照明效果。如果此处未进行定义, smooth-lighting 的配置将会从 configuration.txt 文件中获取。

支持的基于Forge的Mod

支持以下的Mod,尽管这些Mod的老版本可能不支持,当前版本的某些方块也可能不支持:

  • Advanced Machines - IC2
  • Advanced Power Management - IC2
  • Advanced Solar Panels - IC2
  • BetterWorlds
  • BuildCraft
  • Charging Bench - IC2
  • Compact Solars - IC2
  • ComputerCraft
  • Equivalent Exchange 2
  • Ender Storage
  • ExtraBees
  • Extrabiomes XL (v2.x and v3.x)
  • Extrabiomes - Bunyan
  • Forestry (updated in 1.4)
  • Forgotten Nature
  • Greg's Lighting
  • IndustrialCraft 2
  • Iron Chest
  • LC Trees++
  • Millenaire
  • MystCraft
  • Metallurgy 2
  • NetherOres
  • RailCraft
  • Red Power 2
  • SuperSlopes
  • TerraFirmaCraft
  • ThaumCraft
  • Thermal Expansion
  • Tubestuff
  • Twilight Forest
  • XyCraft

支持的服务端

Dynmap 包括了除了 CraftBukkit 的其他版本。其他的最新的版本可以在这里找到。目前有 3 个Dynmap主要的平台:

Spigot

Spigot 通过 Bukkit Dynmap 被完全支持。

MinecraftForge

很多版本的 MinecraftForge 都是支持的,可以使用 DynmapForge 项目。所有的 Forge 版本的 Dynmap 都需要特定的 Forge 版本,升级 Forge 版本也需要升级到对应的 DynmapForge 版本。你应该按照如下的方法来安装或者升级:

  • 下载对应的 ZIP 文件,对应 MC 版本。
  • 解压整个 ZIP 文件,包括子目录,至服务器的根目录。
  • 如果是升级,那么删除 'mods' 下老的 'Dynmap-x.y.zip'。

MCPC+

目前 MCPC+ 的版本(v1.4.7 或之后) 只被 DynmapForge mods 支持对应的 Forge 版本。CraftBukkit 版本不被支持。安装请按照以下步骤。 你可以使用 DynmapCBBridge 来兼容使用的 Bukkit 的插件的数据(可以在这里找到)。这是一个 Bukkit 插件,所以应该放在 'plugins' 目录,并且只支持那些基于 Forge 的 Bukkit 服务器上。

BukkitForge

BukkitForge mod,一个基于 Forge 的 Mod,添加了Bukkit 的 API,是不被 Dynmap 的 Bukkit 版本支持的。可以使用 DynmapForge 版本,并且搭配 DynmapCBBridge 插件。安装过程与上方的 MCPC+ 相同。

Tekkit Classic

Tekkit Classic,和更老的 MCPC (没有+ - v1.2.5),被 DynmapBukkit 支持。

Tekkit-Lite

Tekkit-Lite 被 DynmapForge 支持,而不是 Bukkit Dynmap。按照上方 Forge 的安装方式安装 Dynmap。

Spout

Spout 服务器被 DynmapSpout 的实验项目支持(Spout 进行的重构使对其进行支持不切实际)。安装至 Spout 与 Bukkit 相同(解压到 plugins 目录)。注意:这个项目是给 Spout 服务器使用而不是 Bukkit 上的 Spout 插件。Spout插件可以使用 Bukkit Dynmap。

从 Bukkit Dynmap 迁移到 Forge Dynmap

将 Bukkit Dynmap 迁移到 Forge Dynmap 可以按照以下方式进行:

  • 将 <base>/plugins/dynmap 目录(包括所有数据和子目录)移动到 Forge 服务器上的 <base>/dynmap 目录。
  • 编辑 configuration.txt: 替换 'render-triggers' 为以下信息:
    render-triggers:
      - blockupdate
      #- blockupdate-with-id
      #- lightingupdate
      - chunkpopulate
      - chunkgenerate
      #- none
  • 删除 <base>/plugins/dynmap.jar
  • 按照安装对应 Forge 版本的方法安装。

Tekkit

Tekkit 是一个将大量的 Minecraft Mods 整合在 Bukkit 服务器的服务端。Dynmap 支持 Tekkit,目前的 Dynmap 版本会自动检测 Mod,和他们的方块ID,渲染支持的方块。目前支持 Tekkit v3.1.3

命令

隐藏 / 显示玩家

命令 描述
/dynmap hide 将当前玩家从地图隐藏。
/dynmap hide thedude 将玩家 thedude 从地图隐藏。
/dynmap show 将当前玩家重新从地图显示。
/dynmap show thedude 将玩家 thedude 重新从地图显示。

渲染

命令 描述
/dynmap render 渲染你的位置的一个 tile。
/dynmap fullrender 尝试从你的位置开始渲染整个世界的全部地图(如果从控制台使用则从世界中心开始)。
/dynmap fullrender world 尝试从你的位置开始渲染 world 世界的全部地图(如果从控制台使用则从世界中心开始)。
/dynmap fullrender world:surface 尝试从你的位置开始渲染 world 世界的 surface 地图(如果从控制台使用则从世界中心开始)。
/dynmap radiusrender radius 尝试从你的位置开始渲染半径为 radius 的所有方块的区域。
/dynmap radiusrender radius mapname 尝试从你的位置开始渲染半径为 radius 的所有方块的区域的 mapname 地图。
/dynmap radiusrender world x z radius 尝试从 (x, 64, z) 开始渲染 world 世界半径为 radius 的所有方块的区域。
/dynmap updaterender 尝试从你的位置开始渲染 所有需要更新的 tiles,到地图的边缘或是没有需要更新的 tiles 停止。
/dynmap updaterender mapname 尝试从你的位置开始渲染 mapname 地图所有需要更新的 tiles,到地图的边缘或是没有需要更新的 tiles 停止。
/dynmap updaterender world x z 尝试从 (x, 64, z) 开始渲染 world 世界所有需要更新的 tiles,到地图的边缘或是没有需要更新的 tiles 停止。
/dynmap updaterender world x z mapname 尝试从 (x, 64, z) 开始渲染 world 世界 mapname 地图所有需要更新的 tiles,到地图的边缘或是没有需要更新的 tiles 停止。
/dynmap cancelrender world 取消指定世界所有激活的渲染任务。
/dynmap purgequeue 清除tile更新队列
/dynmap purgeworld world 清除 'world' 世界的所有地图文件
/dynmap purgemap world map 清除 'world' 世界的 'map' 地图文件
/dynmap pause all 暂停所有的渲染(更新和全部 / 范围渲染)
/dynmap pause none 恢复所有渲染

统计

命令 描述
/dynmap stats 显示所有世界的所有地图的渲染统计
/dynmap stats world 显示 world 世界的所有地图的渲染统计
/dynmap triggerstats 显示所有世界的触发器的渲染统计
/dynmap resetstats 重置所有世界的所有地图的渲染统计
/dynmap resetstats world 重置 world 世界的所有地图的渲染统计

记号

这些命令只能在标记部件启用后使用(v0.22 或之后的版本)。

命令 描述
/dmarker add <label> icon:<icon> set:<set-id> 在玩家的当前位置添加一个指定标签的记号(可选:图标、记号集)
/dmarker add id:<id> <label> icon:<icon> set:<set-id> 在玩家的当前位置添加一个指定 ID 和标签的记号(可选:图标、记号集)
/dmarker add id:<id> <label> icon:<icon> set:<set-id> x:<x-coord> y:<y-coord> z:<z-coord> world:<Worldname> 在指定的坐标添加一个指定 ID 和标签的记号(可选:图标、记号集)
/dmarker movehere <label> 将第一个匹配指定标签的记号移动至玩家的当前位置
/dmarker movehere id:<id> 将第一个匹配指定 ID 的记号移动至玩家的当前位置
/dmarker update <label> icon:<newicon> newlabel:<newlabel> 更新第一个匹配指定标签的记号的图标或标签
/dmarker update id:<id> icon:<newicon> newlabel:<newlabel> 更新第一个匹配指定 ID 的记号的图标或标签
/dmarker delete <label> 删除第一个匹配指定标签的记号
/dmarker delete id:<id> set:<set-id> 删除第一个匹配指定 ID 的记号(可选:记号集)
/dmarker list 列出默认记号集中定义的所有记号的详细信息
/dmarker list set:<set-id> 列出指定记号集中定义的所有记号的详细信息
/dmarker addset <label> hide:<hide-by-def> prio:<priority> minzoom:<minzoom> 添加指定标签的新记号集 (自动将标签设为 ID)
/dmarker addset id:<id> <label> hide:<hide-by-def> prio:<priority> minzoom:<minzoom> 添加指定标签和 ID 的新记号集
/dmarker updateset <label> newlabel:<new-label> hide:<hide-by-def> prio:<priority> minzoom:<minzoom> 更新指定标签的记号集(自动将标签设为 ID)
/dmarker updateset id:<id> newlabel:<new-label> hide:<hide-by-def> prio:<priority> minzoom:<minzoom> 更新指定 ID 的记号集
/dmarker deleteset <label> 删除指定标签的记号集
/dmarker deleteset id:<id> 删除指定 ID 的记号集
/dmarker listsets 列出所有的记号
/dmarker icons 列出所有可使用的图标的详细信息
/dmarker addicon id:<id> <label> file:"filename" 将指定的文件设为指定 ID 和标签的新图标(文件路径相对于 Minecraft 服务端文件夹)。
/dmarker updateicon id:<id> newlabel:<label> file:"filename" 更新指定 ID 的图标的标签或文件(文件路径相对于 Minecraft 服务端文件夹)。
/dmarker deleteicon id:<id> 删除指定 ID 的图标
/dmarker addcorner 将玩家的当前位置作为一个角添加到列表
/dmarker addcorner <x> <y> <z> <world> 将指定的坐标作为一个角添加到列表
/dmarker clearcorners 清除角列表
/dmarker addarea <label> 使用指定的标签和当前的角列表创建并添加新的区域
/dmarker addarea id:<id> <label> set:<set-id> 使用指定的 ID、标签和当前的角列表创建新的区域并将其添加到指定的记号集(可选:记号集)
/dmarker deletearea <label> set:<set-id> 删除指定标签的区域(可选:记号集)
/dmarker deletearea id:<id> set:<set-id> 删除指定 ID 的区域(可选:记号集)
/dmarker listareas set:<set-id> 列出所有区域的详细信息(可选:记号集)
/dmarker updatearea <label> set:<set-id> <arg>:<value> ... 更新指定标签的区域的属性(可选:记号集)
/dmarker updatearea id:<id> set:<set-id> <arg>:<value> ... 更新指定 ID 的区域的属性(可选:记号集)
/dmarker addline <label> set:<set-id> 使用当前的角列表和指定的标签创建新的线并添加到指定的记号集(可选:记号集)
/dmarker addline id:<id> <label> set:<set-id> 使用当前的角列表和指定的 ID 创建新的线并添加到指定的记号集(可选:记号集)
/dmarker deleteline <label> set:<set-id> 删除指定标签的线(可选:记号集)
/dmarker deleteline id:<id> set:<set-id> 删除指定 ID 的线(可选:记号集)
/dmarker listlines set:<set-id> 列出所有线的详细信息(可选:记号集)
/dmarker updateline <label> set:<set-id> <arg>:<value> ... 更新指定标签的线的属性(可选:记号集)
/dmarker updateline id:<id> set:<set-id> <arg>:<value> ... 更新指定 ID 的线的属性(可选:记号集)

地图 / 世界配置命令

命令 描述
/dmap worldlist 显示所有配置了的世界(启用或禁用)
false> 设置 'worldname' 世界启用或禁用
here|default> 设置 'worldname' 世界的地图中心
/dmap worldset worldname extrazoomout:<N> 设置 'worldname' 世界的额外缩小等级
/dmap worldset worldname title:<label> 设置 'worldname' 世界的标题名称
false> sendhealth:<true|false> 设置 'world' 世界的 sendposition 和 sendhealth 标签
/dmap worldset worldname order:<N> 设置 'worldname' 世界的顺序
/dmap worldreset worldname 重置 'worldname' 世界为模板设定
/dmap worldreset worldname templatename 设置 'worldname' 世界为 'templatename' 模板设定
/dmap maplist worldname 列出 'worldname' 世界的详细信息
/dmap mapdelete worldname:mapname 删除 'worldname' 世界的 'mapname' 地图
/dmap mapadd worldname:mapname attrib:val attrib:val 在世界 'worldname' 创建新的地图 'mapname',使用所有给出的属性(所有的 'mapset' 属性都可用)
/dmap mapset worldname:mapname order:<N> 设置地图 'mapname' 在世界 'worldname' 中的顺序
/dmap mapset worldname:mapname prefix:<prefix> 设置世界 'worldname' 的地图 'mapname' 的文件前缀
/dmap mapset worldname:mapname title:<label> 设置世界 'worldname' 的地图 'mapname' 的标题
/dmap mapset worldname:mapname icon:<icon-file> 设置世界 'worldname' 的地图 'mapname' 的图标文件(相对于 'webpath' 目录)
/dmap mapset worldname:mapname mapzoomin:<N> 设置世界 'worldname' 的地图 'mapname' 的缩放等级
/dmap mapset worldname:mapname perspective:<perspective> shader:<shader> lighting:<lighting> 设置世界 'worldname' 的地图 'mapname' 的预设、光照和着色
/dmap mapset worldname:mapname img-format:<format> 设置世界 'worldname' 的地图 'mapname' 的图片格式
/dmap perspectivelist 列出所有的预设
/dmap shaderlist 列出所有的着色器
/dmap lightinglist 列出所有的光照


杂项

其他的命令

命令 描述
/dynmap sendtoweb message 向网页发送一条消息
/dynmap ids-for-ip ip-address 列出指定 IP 最近登录的所有玩家
/dynmap ips-for-id player-id 列出玩家的所有连接到服务器过的 IP 地址
/dynmap add-id-for-ip player-id ip-address 将指定玩家添加到指定 IP 的已知玩家列表中
/dynmap del-id-for-ip player-id ip-address 将指定玩家移除于指定 IP 的已知玩家列表中
/dynmap webregister 开始注册自己的网页登录账户
/dynmap webregister player-id 开始注册指定玩家的网页登录账户

使用 dmap 配置地图和世界

从 v0.31 开始,Dynmap 提供了通过管理员权限使用控制台命令或者玩家命令来配置世界和地图的功能的选项。当使用任何编辑命令时,现有的设置将被输出到 worlds.txt 文件中(无论是现有的还是基于模板)。新的世界仍然会使用模板进行初始化,但是将设置迁移至 worlds.txt 后任何模板的更改不会影响现有的世界。另外,所有的地图编辑指令仅限于 HDMap,原来的 KzedMap 和 FlatMap 不能通过 /dmap 命令编辑。

开始之前,你要知道在地图渲染进行时,任何 /dmap 命令都是无法使用的(除了 /dmap worldlist, /dmap maplist, /dmap perspectivelist, /dmap shaderlist, 或 /dmap lightinglist 命令)。所以开始之前需要使用 /dynmap pause all 命令,这将暂停所有的渲染处理。 - 不要忘记使用 /dynmap pause none 来恢复所有的处理,如果你忘记了,这将堆积越来越多的渲染任务,和相关的内存使用.

渲染暂停后,/dmap 命令可以用于添加、移除、渲染或编辑已有的地图定义。顺序和很多的世界设定都可以控制,以下是一些示例:

  • 关闭/隐藏一个世界:/dmap worldset _worldname_ enabled:false
  • 重置某世界或地图的设定为默认模板设定:/dmap worldreset _worldname_
  • 重置某世界或地图的设定为指定模板设定:/dmap worldreset _worldname_ _templatename_
  • 将世界设置为世界列表的第一个:/dmap worldset _worldname_ order:1
  • 设置世界的标题:/dmap worldset _worldname_ title:_"title string"_
  • 隐藏某世界的玩家的位置和生命显示:/dmap worldset _worldname_ sendposition:false sendhealth:false
  • 设置世界的中心位置为玩家的当前位置:/dmap worldset _worldname_ center:here
  • 设置世界的中心位置为指定位置:/dmap worldset _worldname_ center:X/Y/Z
  • 设置世界的额外缩放等级为 N:/dmap worldset _worldname_ extrazoomout:N
  • 显示指定世界的地图:/dmap maplist _worldname_
  • 删除指定世界的某地图:/map mapdelete _worldname_:_mapname_
  • 给指定世界添加新地图(指定标题、预设、阴影和光照):/dmap mapadd _worldname_:_mapname_ title:_"map-title"_ perspective:_perspective-id_ shader:_shader-id_ lighting:_lighting-id_
  • 编辑世界中的某地图的顺序为 N:/dmap mapset _worldname_:_mapname_ order:_N_
  • 编辑某地图的标题:/dmap mapset _worldname_:_mapname_ title:_"new-title"_
  • 更改某地图的预设:/dmap mapset _worldname_:_mapname_ perspective:_perspective-id_
  • 更改地图的文件前缀名:/dmap mapset _worldname_:_mapname_ prefix:_prefix_
  • 设置地图的图标文件(相对于 'wenpath'):/dmap mapset _worldname_:_mapname_ icon:images/block_skylands.png
  • 设置地图缩放等级为 N:/dmap mapset _worldname_:_mapname_ mapzoomin:_N_
  • 更改地图使用的默认图片格式:/dmap mapset _worldname_:_mapname_ img-format:jpg
  • 更改末日呢的洞穴视图为新的材质洞穴视图:/dmap mapset _worldname_:_mapname_ shader:stdtexture-cave
  • 显示所有可用的预设:/dmap perspectivelist
  • 显示所有可用的着色器:/dmap shaderlist
  • 显示所有可用的光照:/dmap lighinglist
  • 设置地图与其他的地图同行显示:/dmap mapset _worldname_:_mapname_ append-to-world:_another_worldname_

注意:任何 mapset 可用的属性都可以使用 mapadd 命令创建新地图。

这些地图的更新编辑大多都需要进行一次完全渲染。

完成编辑以后请务必记住运行 /dynmap pause none 命令来恢复正常的渲染处理。

权限

基于 SuperPerms 权限控制,包括了对 PermissionsEx, BukkitPermissions, bPermissions, 和经典的 Permissions 的支持、有以下的权限节点:

  • dynmap.render - 允许使用 /dynmap render 命令
  • dynmap.show.self - 允许使用 /dynmap show (自己)
  • dynmap.show.others - 允许使用 /dynmap show <player>
  • dynmap.hide.self - 允许使用 /dynmap hide 自己
  • dynmap.hide.others - 允许使用 /dynmap hide <player>
  • dynmap.fullrender - 允许使用 /dynmap fullrender 或 /dynmap fullrender <world>
  • dynmap.radiusrender - 允许使用 /dynmap radiusrender
  • dynmap.updaterender - 允许使用 /dynmap updaterender
  • dynmap.cancelrender - 允许使用 /dynmap cancelrender <world>
  • dynmap.pause - 允许使用 /dynmap pause
  • dynmap.reload - 允许使用 /dynmap reload
  • dynmap.stats - 允许使用 /dynmap stats 或 /dynmap stats <world> 或 /dynmap triggerstats
  • dynmap.resetstats - 允许使用 /dynmap resetstats 或 /dynmap resetstats <world>
  • dynmap.sendtoweb - 允许使用 /dynmap sendtoweb
  • dynmap.purgequeue - 允许使用 /dynmap purgequeue
  • dynmap.ids-for-ip - 允许使用 /dynmap ids-for-ip
  • dynmap.ips-for-id - 允许使用 /dynmap ips-for-id
  • dynmap.add-id-for-ip - 允许使用 /dynmap add-id-for-ip
  • dynmap.del-id-for-ip - 允许使用 /dynmap del-id-for-ip
  • dynmap.marker.add - 允许使用 /dmarker add
  • dynmap.marker.movehere - 允许使用 /dmarker movehere
  • dynmap.marker.update - 允许使用 /dmarker update
  • dynmap.marker.delete - 允许使用 /dmarker delete
  • dynmap.marker.list - 允许使用 /dmarker list
  • dynmap.marker.icons - 允许使用 /dmarker icons
  • dynmap.marker.addset - 允许使用 /dmarker addset
  • dynmap.marker.updateset - 允许使用 /dmarker updateset
  • dynmap.marker.deleteset - 允许使用 /dmarker deleteset
  • dynmap.marker.listsets - 允许使用 /dmarker listsets
  • dynmap.marker.addicon - 允许使用 /dmarker addicon
  • dynmap.marker.updateicon - 允许使用 /dmarker updateicon
  • dynmap.marker.deleteicon - 允许使用 /dmarker deleteicon
  • dynmap.marker.addarea - 允许使用 /dmarker addarea
  • dynmap.marker.updatearea - 允许使用 /dmarker updatearea
  • dynmap.marker.deletearea - 允许使用 /dmarker deletearea
  • dynmap.marker.listareas - 允许使用 /dmarker listareas
  • dynmap.marker.addline - 允许使用 /dmarker addline
  • dynmap.marker.updateline - 允许使用 /dmarker updateline
  • dynmap.marker.deleteline - 允许使用 /dmarker deleteline
  • dynmap.marker.listlines - 允许使用 /dmarker listlines
  • dynmap.dmap.worldlist - 允许使用 /dmap worldlist
  • dynmap.dmap.worldset - 允许使用 /dmap worldset
  • dynmap.dmap.worldreset - 允许使用 /dmap worldreset
  • dynmap.dmap.mapdelete - 允许使用 /dmap mapdelete
  • dynmap.dmap.mapset - 允许使用 /dmap mapset
  • dynmap.dmap.mapadd - 允许使用 /dmap mapadd
  • dynmap.dmap.perspectivelist - 允许使用 /dmap perspectivelist
  • dynmap.dmap.shaderlist - 允许使用 /dmap shaderlist
  • dynmap.dmap.lightinglist - 允许使用 /dmap lightinglist
  • dynmap.webregister - 允许使用 /dynmap webregister
  • dynmap.webregister.other - 允许使用 /dynmap webregister player-id
  • dynmap.webchat - 允许通过网页发送聊天消息(需要登录或 ID-IP 映射)
  • dynmap.playermarkers.showall - 允许用户查看隐藏的玩家的记号
  • dynmap.world.<世界名> - 如果世界被设置为保护,允许用户查看指定世界的地图
  • dynmap.map.<世界名>.<地图名> - 如果地图被设置为保护,允许用户查看指定世界的指定地图

网页登录支持和权限

Dynmap 提供了对从网页获得的信息的限制的选项。开启登陆支持需要在 configuration.txt 中如下配置:

login-enabled: true

开启后,用户的账户就可以注册了。如果玩家有 dynmap.webregister 权限,注册可以被玩家自己完成(使用 /dynmap webregister 命令)。当然,注册可以被管理员使用 /dynmap webregister <userid> 命令(需要 dynmap.webregister.other 权限)完成。注册完成后,用户会获得一个密码,用于在网页登录来创建一个网页用户。

设置后,网页用户将会使用 Minecraft 用户账户的权限。

如果可以,你可以使网页只对注册并登录的用户可用。你可以这样设置:

login-required: true

除此之外,来宾用户对网页的访问也是允许的 - 当然只能查看没有被保护的那些内容。

配置中的网页限制

世界保护

如果管理员想要限制某个世界的访问所有地图的权限,这可以在 worlds.txt 中设置 protected 属性来开启(或者使用命令 /dmap worldset <world-id> protected:true)。设置之后,只有登陆的用户并且还拥有权限 dynmap.world.<world-id> 才可以看见世界 <world-id> 的任何地图。

地图保护

如果管理员想要限制某个世界的某个地图的访问,那么这可以在 worlds.txt 中设置 protected 属性来开启(或者使用命令 /dmap mapset <world-id>:<map-id> protected:true)。设置之后,只有登陆的用户并且还拥有权限 dynmap.map.<world-id>.<map-id> 才可以看见。注意:如果世界和地图都被保护,那么玩家需要同时拥有两个权限。

聊天保护

如果管理员想要限制从网页发送聊天信息,那么这可以在 ClientUpdateComponent(客户端更新部件)中设置 'webchat-permissions' 来完成。如果设置为 true,那么只有登陆的用户并且还拥有权限 dynmap.webchat 才可以在网页发送聊天信息。

玩家位置和信息

如果管理员想要限制玩家位置和信息的可见,那么这可以在 ClientUpdateComponent(客户端更新部件)中设置 'protected-player-info' 来完成。如果设置为 true,那么只有登陆的用户并且还拥有权限 dynmap.playermarkers.seeall才可以看见所有可见玩家的位置和/或生命信息。登陆但没有权限的玩家只能看见自己的位置和信息,来宾用户看不见任何玩家。

网页参数

用于启动Web界面的URL可以有多个参数,可以用于改变发送给玩家的默认界面效果。这可以用来在加载WebUI时加载指定的世界或者地图,或者一个指定的缩放大小,或者将地图的中心设置为某个指定的世界坐标。

参数由一串属性-值组成,每个的参数格式就像这样:

attribute-id=value

基础的URL必须含有一个问号 (?) 在第一个参数之前,每个参数之间必须以这个符号间隔,所以,如果这是默认的dynmap链接:

http://mygreatserver:8123/

那么,直接打开 'fred' 世界并且显示 'surface' 地图的网页,就可以像这样:

http://mygreatserver:8123/?worldname=fred&mapname=surface

如果你想要使用一个外置的服务器,格式也是一样的 - 添加问号,使用 & 分割:

http://mycoolapacheserver.com/dynmap?worldname=fred&mapname=surface

可用的参数有以下:

  • worldname - 这个指定了世界的名称(不是标题)。如果没有定义,那么会显示第一个默认的世界(除非在 _configuration.txt里设置了显示哪个世界)。
  • mapname - 这个指定了显示的地图的名称(不是标题),如果没有指定,那么将会显示选中的世界的第一个地图!(除非在_configuration.txt中设置了显示哪张地图)。
  • zoom - 指定的缩放大小(0为最高的缩放),如果没有提供,。那么将会使用默认的缩放大小(除非在_configuration.txt中指定了默认的缩放大小)。
  • x - 这个指定了X坐标(展示的世界的坐标),如果没有指定,那么将会显示center定义的x坐标(一般为0)。
  • y - 这个指定了Y坐标(展示的世界的坐标),如果没有指定,那么将会显示center定义的y坐标(一般为0)。
  • z - 这个指定了Z坐标(展示的世界的坐标),如果没有指定,那么将会显示center定义的z坐标(一般为0)。
  • nopanel - 如果设置为true,那么地图显示的侧边栏将会移除。
  • chatname - 如果设置为一个字符串,WebUI将会将其转变为发送者发送的聊天消息使用的名称。这将只有在 'trustclientname' 设置为 true时才会生效,作为 'allowurlname' 的附加。在0.28及以后的版本中支持。
  • playername - 如果定义了并将其设置为玩家的账户的名称,并且玩家在线或者开启WebUI后一会儿玩家加入了服务器,WebUI将会将地图初始化在给定玩家的位置。
  • hidechat - 如果设置为 'true',那么WebUI将会关闭所有的聊天输入和输出模块(气泡,输入框,聊天栏)。
  • nogui - 如果设置为 'true',那么WebUI将会关闭所有的控制面板,就像只显示地图层一样。
  • nocompass - 如果设置为 'true',那么UI上的指南针将会隐藏。(v2.2-alpha-1)

使用标记

Dynmap 支持添加数据到地图的机制,这些数据统称为Markers标记,由记号(标记图标),区域标记和折线标记构成。

标记组

标记的收集和组织被称为Marker Sets标记集,每个标记集是一个图层,可以使用网页的层选择器选择,每个标记都包含在特定的标记集中。默认情况下,总有一个标签为 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 没有被提供,那么记号将会创建于默认的标记集。如果 icon 没有被提供,那么将会使用默认的记号图标(default,一个房子)。
  • /dmarker add id:<marker-id> <marker-label> icon:<icon-id< set:<markerset-id> - 与上方相同,但需要提供 独立 ID。
  • 使用牌子 - 如果 markers 部件的 enablesigns 设定被弃用,那么拥有对应权限的用户可以使用特殊标签的牌子来创建记号。牌子的第一行必须是 [dynmap],之后,除了格式为 set: <标记集ID> 或 icon:<图标ID>(允许设置为特殊的图标,如果没有设置,那么将使用默认的 sign 图标)的行数都将被包含在此记号的标签中。如果记号被成功创建,牌子的 [dynmap],set:,icon: 行都会被删除。如果这个牌子之后被破坏,那么地图上对应的记号将被删除。

创建后,记号可以使用以下的命令编辑:

  • /dmarker movehere <marker-label> set:<markerset-id> 或 /dmarker movehere id:<marker-id> set:<markerset-id> - 此命令将会移动指定的记号到玩家的位置,注意:如果要选择不在默认集中的记号,那么 markerset-id 是必要的。
  • /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 是必要的。

记号可以使用 /dmarker delete <marker-label> set:<markerset-id> 或 /dmarker delete id:<marker-id> set:<markerset-id> 命令来删除。

可以使用 /dmarker list set:<markerset-id> 命令来列出所有已有的记号和属性。

记号图标

记号图标是用于给记号提供图标的图像,Dynmap 提供了一些默认的标准图标,全部都在下方的图片中,它们是预设的,并且不可以被删除。可以使用 /dmarker icons 命令来列出所有可用的图标。

新的图标可以通过以下几步来安装:

  • 将 PNG 格式的图像文件复制进 Bukkit 的服务器文件夹,图片应该为 8x8,16x16 或 32x32 的大小。
  • 运行命令 /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> 命令。

删除已有的图片可以使用 /dmarker deleteicon id:<icon-id> 命令。

区域记号

区域标记用于在地图上方式 3D 或者 2D 的轮廓,区域标记由 2 个或者更多个的 X Z 坐标点序列组成的长方形(如果是两个点则是矩形的对角)或者多边形(如果是三个或者更多的点,则是多边形的有序的角序列,从第一个连接到最后一个再连回第一个点)。可选的,你可以设置设置最小和最大的 Y 值,将二维模型拓展为三维模型(顶部和底部是平坦的)。

可以设置颜色属性(#RRGGBB)和线段重量(0-N)和透明度(0.0-1.0)控制填充区域的颜色和外观。

创建一个区域之前必须提供一组角,可以通过以下步骤完成:

  • 运行 /dmarker addcorner 命令来将玩家的当前位置添加为一个角
  • 运行 /dmarker addcorner <x> <y> <z> 或 /dmarker addcorner <x> <y> <z> <world> 命令来添加指定的坐标点为一个角

添加的角可以使用 /dmarker clearcorners 命令来清除。

添加角之后,可以使用 /dmarker addarea <area-label> set:<markerset-id> 或 /dmarker addarea id:<area-id> <area-label> set:<markerset-id> 命令来创建一个区域标记。可以使用这些命令来设置附加的属性,或者使用 /dmarker updatearea id:<area-id> set:<markerset-id> 或 /dmarker updatearea <area-label> set:<markerset-id> 命令来更新已有的区域的属性。可用的选项包括:

  • color - 轮廓颜色 (#RRGGBB 格式)
  • fillcolor - 填充颜色 (#RRGGBB 格式)
  • opacity - 轮廓的不透明度 (0.0 = 透明, 1.0 = 实体)
  • fillopacity - 填充的不透明度 (0.0 = 透明, 1.0 = 实体)
  • weight - 轮廓的重量(0=最小,越大越粗)
  • ytop - 区域最大的 Y 轴高度 (默认=64)
  • ybottom - 区域最小的 Y 轴高度 (默认=64)

注意:现有的区域无法更新,必须删除后重新创建新的区域。另外,当使用 /dmarker addarea 命令创建区域后,当前的角列表将会重置。

你可以使用 /dmarker deletearea id:<area-id> set:<markerset-id> 命令删除一个区域标记。

已经存在的区域和他们的属性可以使用 /dmarker listareas set:<markerset-id> 命令显示。

圆形标记

圆形标记用于在地图上放置二维圆形(或椭圆)轮廓,此区域使用圆形的轮廓,通过一个中心点(XYZ)和一个半径(圆形)或 X 和 Z 半径(椭圆)来创建。

轮廓边缘的外观可以通过设置颜色属性(#RRGGBB),线条重量(0-N)和透明度(0.0-1.0)来设置。

圆形标记可以通过使用 /dmarker addcircle <circle-label> set:<markerset-id> 或 /dmarker addcircle id:<circle-id> <circle-label> set:<markerset-id> 命令来创建。可以使用这些命令来设置附加的属性,或者使用 /dmarker updatecircle id:<circle-id> set:<markerset-id> 或 /dmarker updatecircle <circle-label> set:<markerset-id>命令来更新已有的圆形标记的属性。可用的选项包括:

  • x - 中心的 X 坐标(默认为使用命令的玩家的坐标点 X 坐标)
  • y - 中心的 Y 坐标(默认为使用命令的玩家的坐标点 Y 坐标)
  • z - 中心的 Z 坐标(默认为使用命令的玩家的坐标点 Z 坐标)
  • radius - 圆的半径(默认为 1)
  • radiusx - 椭圆的 X 轴半径(默认为 1)
  • radiusz - 椭圆的 Z 轴半径(默认为 1)
  • world - 中心的世界(默认为使用命令的玩家的世界)
  • color - 轮廓颜色 (#RRGGBB 格式)
  • fillcolor - 填充颜色 (#RRGGBB 格式)
  • opacity - 轮廓的不透明度 (0.0 = 透明, 1.0 = 实体)
  • fillopacity - 填充的不透明度 (0.0 = 透明, 1.0 = 实体)
  • weight - 轮廓的重量(0=最小,越大越粗)

使用 /dmarker deletecircle id:<circle-id> set:<markerset-id> 删除一个圆形标记。

已经存在的圆形标记和他们的属性可以使用 /dmarker listcircles set:<markerset-id> 命令显示。

折线标记

折线标记将连接的线段放置在地图上,每个折线标记由一个或多个 XYZ 坐标构成。以及可选的描述弹出窗口,重量和透明度设置。

轮廓边缘的外观可以通过设置颜色属性(#RRGGBB),线条重量(0-N)和透明度(0.0-1.0)来设置。

创建一个折线之前必须提供一组角,可以通过以下步骤完成:

  • 运行 /dmarker addcorner 命令来将玩家的当前位置添加为一个角
  • 运行 /dmarker addcorner <x> <y> <z> 或 /dmarker addcorner <x> <y> <z> <world> 命令来添加指定的坐标点为一个角

添加的角可以使用 /dmarker clearcorners 命令来清除。

添加角之后,可以使用 /dmarker addline <line-label> set:<markerset-id> 或 /dmarker addline id:<line-id> <line-label> set:<markerset-id> 命令来创建一个折线标记。可以使用这些命令来设置附加的属性,或者使用 /dmarker updateline id:<line-id> set:<markerset-id> 或 /dmarker updateline <line-label> set:<markerset-id> 命令来更新已有的折线的属性。可用的选项包括:

  • color - 轮廓颜色 (#RRGGBB 格式)
  • opacity - 轮廓的不透明度 (0.0 = 透明, 1.0 = 实体)
  • weight - 轮廓的重量(0=最小,越大越粗)

注意:现有的折线无法更新,必须删除后重新创建新的折线。另外,当使用 /dmarker addline 命令创建折线后,当前的角列表将会重置。

你可以使用 /dmarker deleteline id:<line-id> set:<markerset-id> 命令删除一个折线标记。

已经存在的折线和他们的属性可以使用 /dmarker listlines set:<markerset-id> 命令显示。

自定义方块

Dynmap 支持数据驱动的方法来支持对新的 Minecraft 方块的支持,比如通过某些插件和客户端 Mod 提供的新方块。这些定义对 Dynmap 的内部光线追踪非常敏感,并且可能在以后的版本没有任何通知就过时了 - 实际上会避免这一点,但是如果你要在这之上花费太多的经历之前请务必了解。

方块是如何被渲染的

Dynmap 的方块的渲染通过很多独特的机制完成,这些机制用于对不同的方块和 Mod 的需求。在所有情况下,方块的渲染由两个核心元素组成:一个模型用于定义方块的形状,一组材质来应用颜色到不同的表面。因为 Minecraft 的"方块"的特质,大多数的方块就是一个简单的立方体:所以大多数方块不需要自定义模型,可以被认为是一个简单的实体方块。

附加 Mod 的对自定义方块的支持文件是通过对每个 Mod 定义两个文件来实现的:一个定义纹理贴图(按照命名约定 *-texture.txt,放在 'renderdata' 文件夹(或者该文件夹下的子目录)),一个用于定义不是简单立方体的方块的模型(按照命名约定 *-models.txt,放在 'renderdata' 文件夹(或者该文件夹下的子目录))。对那些只有简单方块的 Mod,不需要 *-models.txt 文件(没有定义模型的方块全部处理为简单立方体)。

创建材质和模型定义文件

  • 材质和模型文件的基础特性
  • 查看材质定义文件的细节
  • 查看模型定义文件的细节

定义方块

  • 定义一个简单的立方体,查看定义一个简单的方块
  • 定义一个长方体方块,查看定义长方体方块
  • 定义基于自定义的方块渲染器的方块,查看自定义方块着色器 定义一个基于立体模型的方块,查看使用立体方块模型

材质和模型文件的基础特性

材质和模型定义文件遵循一些常见的格式惯例:

  • 每个定义都是面向单行的,尽管部分定义会影响到下一行的定义
  • 所有行按照文件中的顺序处理
  • 以数字符号(#)或分号(;)将被视为一条注释并被忽略
  • 任何一行都可以以版本限制开始,只允许在 Minecraft 的特定版本或与文件相关的 Mod 的特定版本进行处理。对于 Minecraft 的版本限制,格式为 [<低版本>-<高版本>],<低版本>为可选的,<高版本>为最大可用的 Minecraft 版本(如,[1.5.0-1.6.4] 将会导致该行仅在 Minecraft 1.5.0 到 1.6.4 版本之间才被处理,[-1.6.4] 将不会在任何版本高于 1.6.4 的 Minecraft 中被处理,而 [1.5.2-] 将会在 Minecraft 高于 1.5.2 时进行处理)。对于 Mod 版本限制,格式是类似的:[mod:<低版本>-<高版本>]。

纹理和模型定义文件都支持以下的定义行,这些通常用于文件的开头:

  • 'version:' - 如果设置,此选项指定了对 Minecraft 版本的限制。该行的格式为 version:<低版本>-<高版本>,<低版本> 和 <高版本> 指定了 Minecraft 的最小和最大的可用版本。如果指定的范围与实际不符,那么此文件将终止处理,并且不会被使用。
  • 'modname:' - 如果设置,此选项指定了相关的 Mod 的名称,这是区分大小写的,必须和 Mod 名称相同,如果使用不同的名称(比如不同的版本),可以提供多个版本(使用逗号分隔)。每个名称后面都可以添加可选的版本限制 [<低版本>-<高版本>],这样只有安装了指定的 Mod 并且版本相符才会使用该定义文件。例如,modname:BiomesOPlenty[-0.5.8] 将只有在安装了 BiomeOPlenty 0.5.8 之前的版本才会加载此定义文件。
  • 'cfgfile:' - 如果设置,则设置寻找配置文件的相对路径(假设格式为 Minecraft Forge 的标准配置文件的格式)。这会让相关的配置文件加载,并且定义不同种类的设置的符号(特别是不同的方块 ID)。查看配置设定查看详细信息。
  • 'var:' - 如果设置,这将为配置文件的没有设置的选项设置默认值(比如老版本没有的方块的 ID)。设置的格式为使用逗号分隔的 <属性>=<数字> 列表。(比如 'var:template.id=0,architect.id=0,pathMarker.id=0)。如果需要添加 var 行,请在 cfgfile: 之前添加它们(否则将会覆盖配置文件的值)。

配置设定映射

通过 cfgfile: 行加载的配置文件将产生可用的符号,配置文件的选项的名称映射到这些符号的方法如下:

  • 每个设置将会和和它包含的子设置结合,以 / 作为分隔,比如 "blocks" 下的 "my Block ID" 设定将转换为 blocks/my Block ID。
  • 这些符号的任何空格将会转换为下划线,如 blocks/my Block ID 将转换为 blocks/my_Block_ID。
  • 如果设置以 "block/" 或者 "blocks/" 开头,那么将会将这一部分去除,如 blocks/my_Block_ID 将会转换为 my_Block_ID,但是 biomes/my_Biome 不会发生改变。
  • 如果符号以 "item/" 开头,那么将会替换为 item_,如 item/myItem 将会转换为 item_myItem。
  • 最终,属性值与符号连接。

配置文件中的符号可用于定义文件中的各种特定情况(最常用于方块 ID 属性值)。尝试使用未使用过的符号 - 通过配置文件或通过 var: 定义行 - 将在加载定义文件时发生错误。

材质定义文件

材质定义文件(*-texture.txt 文件)提供了数据的三个关键设置:

  • 需要什么材质文件,以及他们怎么被读取
  • 每个自定义方块的每个面应用什么材质,伴随着的还有这些材质如何被使用(例如:根据生物群系的不同来进行染色,旋转,添加覆盖层,等等)
  • 在Mod提供自定义生物群系时,附加属性需要决定怎样提供生物群系敏感的材质

定义材质文件

在历史之中,Minecraft使用了很多定义材质的方法,并且这些方法变化了好几次(特别是在1.5版本,1.6版本又变了一次)。要想处理这些不同之处的话,你需要指定一些定义标志。

为1.6.x和之后的服务器定义材质

至于 Minecraft v1.6.0,大多数嵌入的材质都包括在 assets/minecraft/textures/blocks 路径(在Minecraft客户端的Jar文件中,或者在资源包的ZIP文件中)下找到的单个文件。对于 v1.6.x 和晚些的Minecraft Forge Mod,材质资源需要在给予的Mod文件(ZIP或JAR)中找到,路径为 assets/\/textures/blocks (其中 \ 是用小写表示的Mod名字)。

要想指定加载材质所使用的相对路径,'texturepath:' 这一行应该被包括在材质文件之中。在设置之后,给予的路径可以用来读取任何指定的材质(或者,至少直到加载下一个 texturepath: 行——在这一点上,它的路径可以用来加载额外的材质)。举个例子,Minecraft V1.6.x ,或更晚版本的 BiomesOPlenty Mod 的材质应该为:

 texturepath:assets/biomesoplenty/textures/blocks/

只要路径制定好了,材质文件需要渲染单独需要渲染的方块,使用 'texture:' 行。这些行的格式像下面那样:

 texture:id=<texture-id>

其中 不仅用来表明它会用于定义文件中定义材质,它也是文件名的基础部分,用于读取材质文件(通过向texturepath中加入,然后加入一个“.png”扩展名 —— 举个例子,ID为“test123”会读取材质资源 assets/biomesoplenty/textures/blocks/tes123.png ,这里使用之前的 texturepath 示例)。如果ID需要与文件名不同的话,你可以指定全名:

 texture:id=<texture-id>,filename=<full-filename>

举个例子:

 texture:id=test123.id,filename=assets/biomesoplenty/textures/blocks/tes123.png

对于一个材质文件包含多于一个材质的情况而言,材质的数目横向(X的数目)和纵向(Y的数目)可以被指定:

 texture:id=<texture-id>,xcount=<xcount>,ycount=<ycount>

在这种情况之下,文件被读取然后分成指定的网格。分开的材质通过行序指数来排列:\ + \*\ : 所以,第一个材质,即网格的左上角的材质,指数为0,它右面的那个材质指数为1,以此类推,直到下一行的第一个材质为止(这些都是指数,即X数目)。对于单个材质文件而言(默认情况),只会使用指数为0的那一个。

一些材质文件可以特别格式化: 材质定义的位置在文件之中,而不是网格(举个例子,箱子,玩家或怪物的材质文件)。遇到这些情况时,查看特殊材质文件种类来获得支持的类型的有关信息。遇到这些情况时,“format”属性可以用于定义文件的布局。

 texture:id=<texture-id>,format=<file-format>

为 1.5.x 定义材质

为 Minecraft v1.5.x定义的材质的处理方式与1.6.x的处理方式有一点类似,但是有一些关键性的不同之处:

  • 原版的材质的路径为客户端JAR或材质包的 textures/blocks 路径之中
  • 对于Minecraft Forge Mod的材质通常可以在Mod的ZIP或JAR文件中的mods/\/textures/blocks 路径找到

对于v1.5.x的Mod而言, 'texturemod:' 行可以用来指定材质路径的特殊名字('mods//textures/blocks' 中 \ 的名字)。如果没有指定的话, \ 默认会使用提供在文件中 'modname:' 这一行的Mod名字。所以,对于v1.5.x格式的Mod,请使用这行字:

 texturemod:<modname>

它就相当于使用这行字

 texturepath:mods/<modname>/textures/blocks/

另外,材质的指数和格式和v1.6.x及以后的版本相同。注意:使用 'texturepath:' 行结果会使定义文件中的所有 'texturemod:' 行全部被忽略。

为v1.4.x或更早的版本定义材质

Minecraft v1.4.7 和更早版本中的材质几乎都在包括网格的16x16的材质文件之中(这相当于X数量为16,Y数量为16)。对于这些文件而言,你经常要使用 'texturefile:' 行。 'texturefile:' 行几乎可以说完全等于 'texture:' 行,只是默认的X数量为16,Y数量为16而已(针对 'texture:' 中的单个材质来说,等于X数值为1,Y数值为1)。

在 v1.5.x之前,Minecraft Forge Mod定义材质资源没有统一的方法,所以 'texturepath:' 命令,或者文件名的 'texturefile:' 或 'texture:' 属性行通常是必需的。

材质的参考系

只要所需的材质读取之后,不同的指令就可以用来指定Mod中不同方块不同面的材质。在所有的情况下,某个特殊材质的参考是通过结合材质文件中的指数(单个材质的材质文件通常是0)和'texture:' 或 'texturefile:'行中 'id' 属性的值实现的。总的来说,格式如下:

 <index>:<texture-id>

在所有方块定义行中,又能够指定默认材质ID,可用于所有缺失 ":\" 后缀的参考系: 'txtid=' 属性。通过指定 'txtid=\' 属性,对于 '\' 的参考变得等价于 '\:\'。材质指数值限制在0至999之间,包含这两个数。

除了选择使用的材质之外,材质参考系也能够做出一系列修改功能,这会影响材质在渲染时的处理过程。这些修改功能通过为材质增加一系列特殊值来实现(都是1000的倍数),加入的位置为 \ 。这些修改的定义值为:

  • 1000 : 材质使用生物群系使用的草方块的颜色进行染色(assets/minecraft/textures/colormap/grass.png ,版本为v1.6.x 或更晚)
  • 2000 : 材质使用生物群系使用的树叶方块的颜色进行染色(assets/minecraft/textures/colormap/foliage.png,版本为v1.6.x 或更晚)
  • 3000 : 材质使用生物群系使用的水方块的颜色进行染色(通过 MCPatcher/Optifine - assets/minecraft/mcpatcher/colormap/water.png ,版本为v1.6.x 或更晚).
  • 4000 : 材质顺时针旋转90度
  • 5000 : 材质顺时针旋转180度
  • 6000 : 材质顺时针旋转270度
  • 7000 : 材质横向镜面翻转(左面变为右面)
  • 8000 : 材质向下偏移50%高度
  • 9000 : 材质向下偏移50%高度,且横向镜面翻转
  • 10000 : 材质被转换用于倾斜火把(特殊情况)
  • 11000 : 材质是草方块一边(对于生物群系染色和雪颜色两者兼容的特殊情况)
  • 12000 : 材质在代表内表面,且接近其他相同类型的方块时透明(例如玻璃和水方块的内部)
  • 13000 : 材质使用云杉树叶的颜色着色
  • 14000 : 材质使用白桦树叶的颜色着色
  • 15000 : 材质使用睡莲的颜色着色
  • 17000 : 材质使用 colorMult 属性的值或 custColorMult 属性类定义的值着色(特别分出来一条)
  • 18000 : 相当于270度旋转 (6000) 和草的色调 (1000)
  • 19000 : 相当于270度旋转 (6000) 和树叶的色调 (2000)
  • 20000 : 相当于270度旋转 (6000) 和水的色调 (3000)
  • 21000 : 相当于多色调和 (17000) 和内部透明 (12000)
  • 22000 : 相当于树叶色调 (2000) 和多色调 (17000)

方块 ID 数值

某个特殊方块的材质的定义需要定义给定的方块类型要使用哪个方块ID。内置的Minecraft基础方块当前拥有修复后的方块ID数值,但是Minecraft Forge Mod的所有方块ID是通过他们的配置文件来控制的。这些ID通过"cfgfile:"行来读取(请查看 材质和模型文件的基础特性 获得关于这一行的更多信息,以及配置文件中一些有用的内容的设置)在所有方块定义行之中,方块ID通过 'id=' 属性来指定。 'id=' 属性的值可以是数值(必须连续不间断),根据Mod的配置文件中定义的符号名称,或是展示名称的组合,加号 (+),和数值。在所有情况中,如果ID的值是0或附属的话,这个ID值就会被忽略(允许禁用方块,忽略更简单)。

定义方块材质地图

  • 要想定义简单的正方体方块,查看 定义一个简单的方块
  • 要想定义长方体方块,查看 定义长方体方块
  • 要想定义以自定义方块着色器为基础的方块,查看 自定义方块着色器
  • 要想定义根据不定体积的方块模型的话,请查看 使用立体方块模型

特殊材质文件种类

除了默认的材质(以XY值定义的网格线),Dynmap也支持一些其他特殊的材质。

当前定义的类型包括以下内容:

GRID - 这是一种默认材质,对应在正方形网格线<xcount>宽和<ycount> 高,每个材质都有2像素。 材质序号从左(index=0)排列到最右边(ending with index=<xcount>-1),下一排又从左边开始排序 (index=<xcount>),以此类推。

CHEST - 这是一种类似于箱子的材质。索引编号为:

  • 0 : 箱子顶部
  • 1 : 箱子左侧
  • 2 : 箱子右侧
  • 3 : 箱子前部
  • 4 : 箱子背部
  • 5 : 箱子底部

BIGCHEST - 这是一种类似于大箱子的材质。索引编号为:

  • 0 : 箱子顶部 - 左方
  • 1 : 箱子顶部 - 右方
  • 2 : 箱子前部 - 左方
  • 3 : 箱子前部 - 右方
  • 4 : 箱子左侧
  • 5 : 箱子右侧
  • 6 : 箱子背部 - 左方
  • 7 : 箱子背部 - 右方
  • 8 : 箱子底部 - 左方
  • 9 : 箱子底部 - 右方

SIGN - 这是一种类似于路牌的材质。索引编号为:

  • 0 : 牌子前部
  • 1 : 牌子背部
  • 2 : 牌子顶部
  • 3 : 牌子底部
  • 4 : 牌子左方
  • 5 : 牌子右方
  • 6 : 柱子前部
  • 7 : 柱子背部
  • 8 : 柱子左侧
  • 9 : 柱子右侧

SKIN - 这是一种类似于人体的材质。索引编号为:

  • 0 : 前部
  • 1 : 左侧
  • 2 : 右侧
  • 3 : 背部
  • 4 : 顶部
  • 5 : 底部

CUSTOM - 这是种更人性化的材质,允许将任意矩形材质作为索引材质。 参数 <xcount> 和 <ycount> 是用来识别材质图片大小的值(正常大小的材质的分辨率应该是(16 <xcount>) (16 * <ycount>))。 材质文件的属性必须明确包含一个'title<N>='属性。N是材质的索引编号(比如N=0,1,2)字段的值对应于:

   tile<N>=<source-offset-X>:<source-offset-Y>/<dimension-X>:<dimension-Y>

亦或是:

   tile<N>=<source-offset-X>:<source-offset-Y>/<dimension-X>:<dimension-Y>/<dest-offset-X>:<dest-offset-Y>

其中:

  • <source-offset-X> 是材质文件左上角的横坐标,以缩放的像素为单位。
  • <source-offset-Y> 是材质文件左上角的纵坐标,以缩放的像素为单位。
  • <dimension-X> 是材质文件中横坐标的材质,以缩放的像素为单位。
  • <dimension-Y> 是材质文件中纵坐标的材质,以缩放的像素为单位。
  • <dest-offset-X> 是指定材质的左上角横坐标(默认为0),以缩放像素为单位。
  • <dest-offset-Y> 是指定材质的左上角纵坐标(默认为0),以缩放像素为单位。

模型定义文件

当一些Mod中的方块不是常见的实体立方体时,Mod的模型定义文件(贴图)提供了自定义块物理形状的方式。 因此,如果Mod的自定义块仅由简单的实体立方体组成时,则该方块可能不需要额外的模型定义文件。

无论何种情况,模型定义文件中定义的模型都提供了一组表面或补丁,这些材质贴图定义在材质定义文件中。 由于方块的模型是唯一的,使用常见形状方块的模型很容易产生复用(例如:对任何类型的楼梯来讲,这些楼梯的模型都是一模一样的,他们只是被渲染了不同材质)。

从非常容易到非常复杂,定义模型的方法有很多种(包括Java类附加提供的自定义渲染代码在内). 一如往常的是,较为简单的方法也更快捷有效。

材质定义文件中常见的方法

一般而言, 配置项 'modname:', 'version:', 'cfgfile:', 'var:' 和其他模块配置相关的项目应该在模型定义文件及其相应的材质定义文件之间保持一致。 在材质和模型文件的基础特性详细查看这些常见的定义。 如果这些配置项不一致可能会导致渲染出错(因为材质资源没有对应的模型可以应用)亦或是加载错误(由于使用的模型没有提供对应的材质资源)。

模型的定义

  • 定义一个简单的长方体模型 - 一个或多个尺寸小于一个整方块的矩形棱柱 - 详见定义长方体模型.
  • 使用现有的自定义模型渲染 - 楼梯、栅栏/围墙、玻璃窗/铁栅栏 - 详见使用自定方块着色器.
  • 定义容器模型 - 形状类似于一个3D小立方体网格 - 详见定义立体模型.
  • 定义基于补丁的模型- 有材质的任意表面集合 - 详见定义补丁模型.
  • 创建新的自定义模型渲染类 - 详见编写自定方块着色器.

定义长方体模型

长方体模型是最易于定义的自定义模型。 它们表示一种很简单的方块,其中一个方块由一个已在其一个或多个维度上或截断的完整多维数据集组成。标准块之间的样本包括板(其Y(垂直)轴已被剪切在0.5以上或以下),雪(其中Y被限制在不同深度的不同值)和压力位置(所有3个轴都被剪切)。

由于长方体仍然是六边形状,所以纹理的定义和应用与简单的固体方块相同: 纹理被简单地裁剪为每个维度。 每个材质被视为应用于立方体的相应未剪切面的全宽和高度,因此仅绘制与面部的剪切范围匹配的材质部分。

若想定义长方体模型,则需要在 'boxblock:' 行中设定所需要的参数。需要设定的参数如下所示:

  • id - 需要使用的模型的方块ID. 至少需要一个 id 属性,但是可以使用正无穷大多的id属性 - 允许将相同的模型用于多个块。请在材质定义文件中查阅有关指定方块ID的详细信息。
  • data - 这提供了要应用的模型的特定元数据值。 一般的, data=**,表示由 id 属性指示的每个块ID的所有元数据值。 否则,一个或多个 data=number* 属性可用于为模型选择特定的元数据值。
  • xmin - 此项定义了方块X轴的最小剪切值: 当该属性定义时,方块的X值将从X轴上提供的值的偏移开始 (默认值为0.0)。
  • xmax - 此项定义了方块X轴的最大剪切值: 当该属性定义时,方块的X值将以X轴上提供的值的偏移量结束 (默认值为1.0)。
  • ymin - 此项定义了方块Y轴的最小剪切值: 当该属性定义时,方块的Y值将从Y轴上提供的值的偏移开始 (默认值为0.0)。
  • ymax - 此项定义了方块Y轴的最大剪切值: 当该属性定义时,方块的Y值将以Y轴上提供的值的偏移量结束 (默认值为1.0)。
  • zmin - 此项定义了方块Z轴的最小剪切值: 当该属性定义时,方块的Z值将从Z轴上提供的值的偏移开始 (默认值为0.0)。
  • zmax - 此项定义了方块Z轴的最大剪切值: 当该属性定义时,方块的Z值将以Z轴上提供的值的偏移量结束 (默认值为1.0)。
  • 对于所有的剪切值,属性都是自定义配置的 - 默认值与相应轴上完整立方体的限制范围一致:0.0 为最小, 1.0 为最大。 参数值限制在0.0和1.0之间的值,包括给定的轴的最小剪切值必须小于或等于该轴的最大剪切值。

演示方案

普通日光传感器: 宽度限制为0.375(16个像素中的6个)的全宽度方块。

     boxblock:id=151,data=*,ymax=0.375

地毯: 宽度限制为0.0625(16个像素中的1个)的全宽度方块。

     boxblock:id=171,data=*,ymax=0.0625

雪方块:每个元数据值具有不同高度限制的全宽方块

     boxblock:id=78,data=0,data=8,ymax=0.125
     boxblock:id=78,data=1,data=9,ymax=0.25
     boxblock:id=78,data=2,data=10,ymax=0.375
     boxblock:id=78,data=3,data=11,ymax=0.5
     boxblock:id=78,data=4,data=12,ymax=0.625
     boxblock:id=78,data=5,data=13,ymax=0.75
     boxblock:id=78,data=6,data=14,ymax=0.875

压板(使用相同形状的4个不同ID的块):剪裁堆叠三个维度的轴上(水平0.0625和0.9275之间,垂直为0.0和0.0625)

     boxblock:id=72,id=70,id=147,id=148,data=*,xmin=0.0625,xmax=0.9275,ymax=0.0625,zmin=0.0625,zmax=0.9275

按钮方块(不同的方块ID,具有用于放置方向的不同元值):剪裁堆叠三个维度的轴上

     boxblock:id=77,id=143,data=1,data=9,xmax=0.125,ymin=0.375,ymax=0.625,zmin=0.3125,zmax=0.6875
     boxblock:id=77,id=143,data=2,data=10,xmin=0.875,ymin=0.375,ymax=0.625,zmin=0.3125,zmax=0.6875
     boxblock:id=77,id=143,data=3,data=11,zmax=0.125,ymin=0.375,ymax=0.625,xmin=0.3125,xmax=0.6875
     boxblock:id=77,id=143,data=4,data=12,zmin=0.875,ymin=0.375,ymax=0.625,xmin=0.3125,xmax=0.6875

使用自定义方块着色器

一些类型的方块相比较于将静态模型直接赋予指定ID和数据值的方块这种简单的方法而言,其渲染的逻辑更加复杂。这包括依照相邻方块而做出改变的方块(红石线,栅栏,围墙,玻璃板和楼梯等等),同时它们的模型也依赖于TileEntity数据和其他信息(例如头颅,RailCraft的铁轨,和Immibis' Microblocks等等)。

要想使用自定义方块渲染器定义模型的话,你需要提供"customblock:" 文本行。这一行应该包括这些基础属性:

  • id - 本模型所用于的方块ID。你最少提供一个 id 属性,但是只要你需要的话可以有无限多——这允许相同的模型可以作用于多个方块。查看方块ID数字来获得定义方块ID的有关细节。
  • data - 这项提供模型应用于的方块的数据值。默认地,data=** 代表所有id属性中的方块的所有数据值。另外,你也可以提供多个 data=number* 属性,这用于为模型选择多个数据值。
  • class - 这项提供自定义方块渲染器所使用的类的类名,同时这一项也是必需的。

"customblock:" 行可能也有其他的属性,这些属性可以标识出指定的自定义方块渲染器。

自定义方块渲染器总是会创建渲染面(即材质被应用的那个表面)的序列。相应的渲染面的序列通过自定义方块渲染器而定义。材质的参考内容通过材质定义文件提供,你需要在相应的"block:"文本行中指定 patch<N> 属性。

创建自定义方块渲染器

下面的自定义方块渲染器都是由Dynmap所提供的,它们可以用来渲染适当的自定义方块。

  • org.dynmap.hdmap.renderer.BoxRenderer 类 - 用于实现立方体模型 的渲染器
  • Class org.dynmap.hdmap.renderer.CTMVertTextureRenderer
  • org.dynmap.hdmap.renderer.FenceWallBlockRenderer类 - 用于栅栏和围墙的渲染器
  • Class org.dynmap.hdmap.renderer.FrameRenderer
  • Class org.dynmap.hdmap.renderer.ImmibisMicroRenderer
  • org.dynmap.hdmap.renderer.PaneRenderer 类 - 用于玻璃板和铁栅栏的渲染器
  • Class org.dynmap.hdmap.renderer.RailCraftSlabBlockRenderer
  • Class org.dynmap.hdmap.renderer.RailCraftTrackRenderer
  • org.dynmap.hdmap.renderer.RedstoneWireRenderer 类 - 用于红石线的渲染器
  • Class org.dynmap.hdmap.renderer.RotatedBoxRenderer
  • Class org.dynmap.hdmap.renderer.RotatedPatchRenderer
  • Class org.dynmap.hdmap.renderer.RPMicroRenderer
  • Class org.dynmap.hdmap.renderer.RPRotatedBoxRenderer
  • Class org.dynmap.hdmap.renderer.RPSupportFrameRenderer
  • org.dynmap.hdmap.renderer.SkullRenderer 类 - 用于渲染原版头颅的渲染器
  • org.dynmap.hdmap.renderer.StairBlockRenderer 类 - 用于渲染普通楼梯方块的渲染器
  • Class org.dynmap.hdmap.renderer.TFCLooseRockRenderer
  • Class org.dynmap.hdmap.renderer.TFCSupportRenderer
  • Class org.dynmap.hdmap.renderer.TFCWoodRenderer
  • Class org.dynmap.hdmap.renderer.ThaumFurnaceRenderer
BoxRender类

BoxRenderer 类是简单的用于渲染一个立方体(纹理方面)的渲染器,但是减少了 XYZ 范围。与大多数自定义渲染器不同,应用于此模型的纹理对应于与简单方块相同的属性。 注意:这是用于实现定义立方体模型的自定义渲染器。

属性

  • xmin - 此选项设置了方块 X 轴的最小剪切值:当设置后,方块的 X 维将会从提供的偏移值开始(相对于默认的 0.0)。
  • xmax - 此选项设置了方块 X 轴的最大剪切值:当设置后,方块的 X 维将会从提供的偏移值终止(相对于默认的 1.0)。
  • ymin - 此选项设置了方块 Y 轴的最小剪切值:当设置后,方块的 Y 维将会从提供的偏移值开始(相对于默认的 0.0)。
  • ymax - 此选项设置了方块 Y 轴的最大剪切值:当设置后,方块的 Y 维将会从提供的偏移值终止(相对于默认的 1.0)。
  • zmin - 此选项设置了方块 Z 轴的最小剪切值:当设置后,方块的 Z 维将会从提供的偏移值开始(相对于默认的 0.0)。
  • zmax - 此选项设置了方块 Z 轴的最大剪切值:当设置后,方块的 Z 维将会从提供的偏移值终止(相对于默认的 1.0)。

纹理补丁

  • patch0 - 负的 X 方向(西)
  • patch1 - 负的 Y 方向(底)
  • patch2 - 负的 Z 方向(北)
  • patch3 - 正的 X 方向(东)
  • patch4 - 正的 Y 方向(顶)
  • patch5 - 正的 Z 方向(南)
FenceWallBlockRenderer类

FenceWallBlockRenderer 类用于渲染对应原版的篱笆或墙的模型的方块。这些这些放开连接到相同的 ID,但是也可以指定为其他的方块,使用 'link<N>' 属性。

属性

  • type - 模型的种类,可以是 'fence' 篱笆,'wall' 墙。如果没有提供,则为 'fence'。
  • link<N> - 允许方块连接到附加的方块 ID(其他固体方块),可以指定为任何数字,只要<N>的值是连续的(比如 link0=数字,link1=数字)。

材质补丁

  • patch0 - 所有面的材质(除了顶部和底部)
  • patch1 - 模型的顶部的材质
  • patch2 - 模型的底部的材质
PaneRenderer类

PaneRenderer 类用于创建玻璃板、铁栅栏和其他的类似的连接方式的方块的模型。

属性

材质补丁

  • patch0 - 板模型的所有面("玻璃")
  • patch1 - 板模型的边缘("边框")
RedstoneWireRenderer类

RedstoneWireRenderer 类用于正确渲染红石线的模型。

属性

材质补丁

  • patch0 - 对应竖直红石线的材质(顶部,底部)
  • patch1 - 对应交叉红石线的材质(顶部,底部,左右)
SkullRenderer类

SkullRenderer 类用于渲染头颅。渲染器使用 TileEntity 字段用于确定头部方向("Rot"),并确定头颅类型("SkullType")。每个头颅需要 6 个材质 - 来自 'SKIN' 种类的采指纹键(包含人体模型的纹理文件)。你必须使用正确的 'texturefile:' 来加载此文件 - 比如僵尸头颅就是这样的:

 texturefile:id=zombie,filename=mob/zombie.png,format=SKIN

使用 SkullRender 连接到 "block:" 需要提供 6 中材质引用给 SkullType 的每个定义的值:patch0 到 patch5 为第一个索引 (0),patch6 到 patch11 为第二个 (1),等等。

属性

材质补丁

SkullType 的每个值对应 N=0 到 N=最大值:

  • patch<6 x N> - 头颅底部 (SKIN 材质索引 5)
  • patch<6 x N + 1> - 头颅顶部 (SKIN 材质索引 4)
  • patch<6 x N + 2> - 头颅后面 (SKIN 材质索引 1)
  • patch<6 x N + 3> - 头颅前面 (SKIN 材质索引 0)
  • patch<6 x N + 4> - 头颅侧面 (SKIN 材质索引 2)
  • patch<6 x N + 5> - 头颅侧面 (SKIN 材质索引 3)
StairBlockRenderer类

StairBlockRender 类定义了一个用于渲染标准台阶方块的渲染器。当使用时,他应该处理台阶方块的所有元数据。渲染器处理所有的台阶连接、转角和方位(倒置或其他)的信息。

渲染器可以选择台阶每个表面使用的材质,通过以下方法:

  • 普通情况(非 TileEntity 方块),通过打包提供的材质(一个侧面,一个顶部,一个底部)。
  • 对基于 TileEntity 的方块,通过读取 TileEntity 的特殊字段,通过一个映射寻找来查看每个表面使用什么材质。

属性

  • textureindex - 此可选的参数用于指定包含一个数字或字符串的 TileEntity 属性能用于选择渲染方块使用的材质。
  • texturecnt - 此可选的参数仅与 textureindex 参数相关,此参数指定了映射的材质的数量用于确定 textureindex:通过 'textmap(texturecnt-1)' 确定 'textmap0'。
  • textmap<N> - 每个从 N=0 到 N=(texturecnt-1),包含了 TileEntity 字段通过 textureindex 标记的应该使用 'patch<N>' 的台阶材质。

材质补丁

如果 textureindex 没有被设置:

  • patch0 - 使用于侧面的(垂直面)方块的材质
  • patch1 - 使用于顶部的方块的材质
  • patch2 - 使用于底部的方块的材质

如果 textureindex 被设置:

  • patch0 - 当方块的 TileEntity 的 textureindex 字段与 textmap0 属性相同时用于渲染侧面的材质。此选项也用于如果 textureindex TileEntity 字段没有匹配任何 textmap<N> 属性的情况。
  • patch1 - 当方块的 TileEntity 的 textureindex 字段与 textmap1 属性相同时用于渲染侧面的材质。
  • patch<N> - 当方块的 TileEntity 的 textureindex 字段与 textmap<N> 属性相同时用于渲染侧面的材质。

定义立体模型

体积模型用于提供复杂的形状。体积模型的材质与长方体模型中的格式相同 - 每 6 个面的材质对应方块的面,材质限制了方块面的最大大小。材质定义文件中的定义与长方体模型的方法完全相同。

体积模型基于将块的每个维度除以所提供的常数( scale ),可以是 -2 至高达 16(1,2,4,8或16) 的任何幂。这将使立方体被分成一组更小的立方体,每个立方体都是 1/scale x 1/scale x 1/scale 。然后通过指定这些较小的方块中的哪一个被填充而不是空的来定义模型。

模型通过很多行配置来设置,第一行是 "block:" 行,有以下属性:

  • id - 设置模型使用的方块 ID,至少需要指定一个方块id,但是也可以使用更多的 - 允许一个模型使用多个方块组成。查看方块ID部分来查看更多指定方块ID的细节。
  • data - 指定方块使用的元数据。默认 data=**,指定所有方块id的元数据,或者使用一个或者更多个 data=number* 属性指定详细的元数据。
  • scale - 模型的细分的大小设定。

比如向下的活塞可以这样设定:

     block:id=34,data=0,data=8,scale=8

在 "block:" 之后,你需要设置一个或者更多的方块层 - 从第 0 层(底层)开始到第 (scale-1) 层(顶层)。每一个层都是通过 "layer:" 来定义,用逗号分隔。下一个在 "layer:" 之后的 scale 定义自方块:每个行代表 Z 轴上方块的一个层(第一个最低,最后的最高),每一个都有 scale 字符(代表 X 轴上的最低到最高的子方块) - 每个 '*' 代表一个填充的方块,每个 '-' 代表留空的方块、任何指定的但没有设置的层都是默认为空。

比如一个向下的活塞的完整定义是这样的:

     block:id=34,data=0,data=8,scale=8
     layer:2,3,4,5,6,7
     --------
     --------
     --------
     ---**---
     ---**---
     --------
     --------
     --------
     layer:0,1
     ********
     ********
     ********
     ********
     ********
     ********
     ********
     ********

这种情况下,这个立方体被切割为 8 x 8 x 8 片: 8 层 8 x 8 的子方块。活塞头占用了底部的两层 (0 和 1 层),推拉杆正中的 1/4 的部分(2 到 7 层)。

体积模型的翻转

作为手动定义体积模型的替代方式,附加的体积模型可以通过翻转已有的体积模型来完成,可以翻转 Y 轴的 0,90,180 或者 270 度。

定义一个翻转的体积模型,你需要像以往一样添加一行 "block:" (保证 scale 属性匹配源模型),然后添加 "rotate:" 行紧跟其后。"rotate:" 的属性包括:

  • id - 源模型的方块 ID(复制并翻转的模型),至少需要一个 id
  • data - 源模型的元数据,至少需要一个 data,并且为数字
  • rot - 旋转的值,有效的值为 0 90 180 270。此属性是必需的

注意:体积模型的旋转对材质的应用没有影响:原来应用在北面的材质旋转后仍会在北面

定义一个简单的方块

一个简单的方块是一个固体立方体,填充整个立方体。这是最简单的一种方块形式,最好尽可能的使用(无论是简化实现还是性能)。由于固体立方体是默认的模型,这些方块不需要在模型定义文件中有对应的模型。方块的材质通过 'block:' 行设置。

一个简单的方块有 6 个面,有很多的等效的属性:

  • top 或 face1 或 patch4 (方块顶部)
  • bottom 或 face0 或 patch1 (方块底部)
  • north 或 face4 或 patch0 (方块西面,负 X 轴方向)
  • south 或 face5 或 patch3 (方块东面,正 X 轴方向)
  • west 或 face3 或 patch5 (方块南面,负 Z 轴方向)
  • east 或 face2 或 patch2 (方块北面,正 Z 轴方向)

通过以下方式设置对应的属性来提供材质引用,需要添加 'id=':

   block:id=<block-id>,<side>=<index-plus-function>:<texture-id>,<side>=<index-plus-function>:<texture-id>,...

每一个常见的面的组合也有方便设置的属性,这允许你将相同的材质应用到多个面:

  • allfaces (六个面使用相同的材质)
  • allsides (所有的侧面使用相同的材质)
  • topbottom (顶面和底面使用相同的材质)

由于遗留的问题,标准的方块也需要设置属性 stdrot=true,否则顶部和底部的材质将会使用错误的旋转(90度)。

如果相同的材质映射应用于所有的元数据,那么应该设置属性 data=(尽管当没有其他的 data= 存在时这是默认值)。如果有只有特定的元数据使用给定的材质映射,那么应该提供多个 data=<数字> 属性。

如果多个方块的 ID 使用相同的材质,则可以同一个 block: 行指定多个 id= 属性。

如果需要,可以指定以下其他的特殊属性:

  • txtid - 此选项允许在没有 : texture-id 后缀的 block: 定义中指定默认的材质。
  • transparency - 这将会影响方块照明的计算。如果设置为 OPAQUE(默认),那么方块的表面亮度将会基于相邻方块的亮度计算,如果设置为 TRANSPARENCY,方块的亮度基于自身的光线亮度,如果设置为 SEMITRANSPARENT,方块的亮度为两种情况混合的特殊情况(一般由阻挡光线但没有完全填充的立方体使用,如台阶和半砖)。如果设置为 LEAVES,那么使用特殊的照明情况(通常与 TRANSPARENCY 相同,除了某些版本的 Spout)。
  • colorMult - 这会影响使用 multiplier-tinting 选项的任何材质(17000, 21000),由 6 位的十六进制组成:RRGGBB,RR 是红色分量(00-FF),GG 是绿色分量(00-FF),BB 是蓝色分量(00-FF)。
  • !customColorMult" - 这会影响使用 multiplier-tinting 选项的任何材质(17000, 21000),由一个着色器类名组成,目前有这些值:
    • org.dynmap.hdmap.colormult.TFBandedWoodColorMultiplier - 针对暮色森林 Mod 的 banded wood 的特殊的着色器类
    • org.dynmap.hdmap.colormult.TFMagicLeafColorMultiplier - 针对暮色森林 Mod 的银树叶(Magic Tree Leaves)的特殊的着色器类
    • org.dynmap.hdmap.colormult.TFSpecialLeafColorMultiplier - 针对暮色森林 Mod 的特殊的树叶(Special Leaves)的特殊的着色器类
  • layer<M> 或 layer<M>-<N> - 此选项允许材质被"堆叠" - 如果某个面的材质是透明的,那么下一层的材质将被应用于那些部分。layer<M> 或 layer<M>-<N> 属性的值是对应的 patch<序数> 定义的索引,用于下一层的对应 patch<M> 的材质或者在 patch<M> 和 patch<N> 之间的材质。对于标准的长方体,标准的面使用 patch0 到 patch6,所以任何附加的覆盖层材质应该使用 patch6 或者更高的值。
  • patch<M> 或 patch<M>-<N> - 此选项允许这是附加的材质引用,基于超过 6 的(patch0 到 patch5,或之前指定的其他别名)。对于简单的立方体,这里只需要定义覆盖的材质。这里的值是一个材质引用,应用到第 M 个 patch 或者 M 到 N 之前的所有 patch。

定义长方体方块

长方体块只是一个简单的立方体块,在其一个或多个轴上被截。 其结果是一个矩形棱柱形,否则有材质,以同样的方式作为一个简单的方块也会得到同样的结果。

定义一个长方体快,首先应该添加"boxblock:" 行在材质定义文件中。 在定义长方体模型获取更详细的介绍。

这是一个木制压力板(需要三维的裁剪)的模型定义的示例:

     boxblock:id=72,data=*,xmin=0.0625,xmax=0.9275,ymax=0.0625,zmin=0.0625,zmax=0.9275

接下来,方块的材质被定义为一个简单的实心方块:只需用 "block:" 行设定6个方向所引用的材质即可。在定义一个简单的方块获取更详细的介绍。 相应的木质压力板(如上)的材质定义是:

     block:id=72,allfaces=0:planks_oak,stdrot=true,transparency=TRANSPARENT

注意:大多数适合作为长方体块渲染的块将要求 透明属性 设置为透明,不阻止对其他方块的光照,或半透明的块阻止光照(如半砖或楼梯)。

自定义方块着色器

使用提供的模型定义自定义块可以前往此处使用自定方块着色器,第一步是选择和配置渲染模型定义文件。 在配置 'customblock:' 行中, 必须包含一个或多个方块的 ID (通过 id 识别), 任何需要的元数据值 (通过 data 识别)和自定义渲染器类 (通过 class 识别)。 例如,砂岩台阶方块的定义如下:

     customblock:id=128,,data=*,class=org.dynmap.hdmap.renderer.StairBlockRenderer

此外,这些核心属性将由自定义渲染器提供一部分(可能需要)附加属性来帮助使用者正确配置渲染。 详情请在 'Attributes' 来查阅关于渲染器类提供的附加属性的细节。

接下来,材质参考资源需要被定义为自定义渲染器所支持的材质。 在 'Patches Requiring Textures' 的自定义渲染器的描述部分定义了 patch\<N\> 需要为方块提供的属性。 仔细阅读这些帮助,配置项 'block:' 行必须在材质定义文件中包含,以及在 'patchN' 设定每个补丁的显示属性。 例如,楼梯方块上所需要的的自定义渲染器需要三块:一个是方块边缘,一个是方块顶部,一个是方块底部:对于砂岩楼梯方块,提供以下示例:

     block:id=128,data=*,patch0=0:sandstone_normal,patch1=0:sandstone_top,patch2=0:sandstone_bottom,transparency=SEMITRANSPARENT

注意:大多数自定义渲染器定义的是不完整的方块, 不透明块, 所以 方块透明度 属性通常需要在 "block:" 行中配置。 对需要不遮挡其他方块的方块设置合适的透明度, 或设置为半透明的方块,防止光照被该方块所阻挡(例如石板和楼梯)。

使用立体方块模型

基于原版模型的方块可以具有相对复杂的形状, 同时也使用相同的纹理定义方案,用于一个简单的方块亦或是长方体方块。材质资源在模型中的应用遵循与常见方块模型和矩形方块模型相同的模式 - 即模型的六个面分别对应于材质, 材质也会自动适配方块每个面的大小。 因此,材质的定义与在 Texture Definition Files 中定义的方式都是把方块作为一个简单方块和矩形方块处理。

首先将完整的立方体切割成若干个子块来定义体积模型,在 scale 的条件下处理 - 使方块被渲染为通过 scale × scale × scale 计算得出的子块。 然后,通过被占用或填充的模型的每个子块都被标记,允许创建子块的任何处理。详情请在定义立体模型中查阅。

下面展示的一个例子是由体积模型渲染的漏斗:

     block:id=154,data=*,scale=16
     layer:0,1,2,3
     ----------------
     ----------------
     ----------------
     ----------------
     ----------------
     ----------------
     ------****------
     ------****------
     ------****------
     ------****------
     ----------------
     ----------------
     ----------------
     ----------------
     ----------------
     ----------------
     layer:4,5,6,7,8,9
     ----------------
     ----------------
     ----------------
     ----------------
     ----********----
     ----********----
     ----********----
     ----********----
     ----********----
     ----********----
     ----********----
     ----********----
     ----------------
     ----------------
     ----------------
     ----------------
     layer:10
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     ****************
     layer:11,12,13,14,15
     ****************
     ****************
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     **------------**
     ****************
     ****************

定义一个模型,以简单方块的方案提供材质引用 - 详情请在定义一个简单的方块中查阅。而对于漏斗的定义在下方贴出:

     block:id=154,data=*,allsides=0:hopper_outside,top=0:hopper_inside,bottom=0:hopper_outside,stdrot=true

导出世界为WavefrontOBJ格式

在 Dynmap v1.9.3 中,我们支持了将地图生成并导出为 Wavefront OBJ 格式的文件,这个特性由 jmc-2-obj 工具启发而来,允许管理员(或控制台)选择并导出他们的部分世界为模型文件,用于其他支持 Wavefront OBJ 格式的建模软件的导入 - 包括了 Blender(一个免费开源的渲染和动画套件),Cinema 4D,Maya,3D Studio Max 和其他的软件。这些导出的模型可以用于 Dynmap 不支持的高级渲染(保举哦了更高级的光照和反射)。由于 Dynmap 导出的 OBJ 格式文件与 jmc-2-obj 软件产生的非常相似,所以针对 jmc-2-obj 的模型的导入和处理与 Dynmap 的 OBJ 导出非常相似。

导出和处理使用新的 /dynmapexp 命令完成,此命令可以设置一些属性来控制导出:

  • x0, y0, z0 : 这些是最小的 X, Y, 和 Z 轴的长方体/矩形棱柱的值
  • x1, y1, z1 : 这些是最大的 X, Y, 和 Z 轴的长方体/矩形棱柱的值
  • world : 用于导出的世界的名称
  • byChunk : 如果设置为 true,这将会生成整个区块的所有方块的对象
  • byBlockID : 如果设置为 true,这将会生成所有给定方块ID的对象
  • byBlockIDData : 如果设置为 true,这将会生成所有给定方块ID和方块元数据的对象
  • byTexture : 如果设置为 true,这将会生成所有给定材质的方块的对象
  • shader : 指定用于导出的使用的材质的着色器,默认情况下使用 stdtexture,只有基于材质包的着色器才支持

/dynmapexp 的子命令包括了:

  • /dynmapexp set : 允许设置导出的属性(如上),附加的属性可以在同一个命令使用,如 /dynmapexp set x0 0 y0 0 z0 100。
  • /dynmapexp radius : 只能由一个游戏中的玩家使用:此命令会指定导出的世界为玩家所在的世界,并设置半径为玩家所在位置的半径,Y 轴为 0-255 的所有方块。
  • /dynmapexp info : 显示当前导出的属性
  • /dynmapexp pos0 : 此命令只能由玩家在游戏中使用:设置导出范围的第一个点
  • /dynmapexp pos1 : 此命令只能由玩家在游戏中使用:设置导出范围的第二个点
  • /dynmapexp reset : 重置导出属性为默认值
  • /dynmapexp export : 初始化一个导出,创建一个叫 .zip 的文件(默认在 dynmap 文件夹下的 export 文件夹,可以在 exportpath 中设置)。导出是异步处理的,并且会耗费几分钟完成,用时取决于选区的大小
  • /dynmapexp purge : 删除上一个导出

完成后,ZIP文件中将会包含以下内容:

  • 一个 minecraft.obj 文件,包含导出的模型(可能非常大)
  • 一个 .mtl 文件,包含材质列表(对应每个minecraft材质)
  • 一个 目录,包含使用的材质文件

解压文件并将 minecraft.obj 导入到渲染/建模软件

开发者

Dynmap 项目包含了多个部分,可以支持多个服务器平台,也可以帮助我们清楚地发布API。用来构建 'dynmap'(Bukkit 的 Dynmap 插件)的有以下几部分(按照构建顺序):

  • DynmapCoreAPI - 这是无关平台的 Dynmap API:插件编写者可以使用这个接口来在任何平台使用 Dynmap(通过将插件转换为 org.dynmap.DynmapCoreAPI 示例)
  • DynmapCore - 这个服务器平台的 Dynmap 核心:几乎所有的网页和渲染都在这里(我们尽可能多的往里放)。在这里构建的结果是不可运行的 - 他们被放入 dynmap 的其他部分(比如,DynmapSpout 支持 Spout 平台)。
  • dynmap-api - Dynmap 的 Bukkit 部分的 API - 定义了 org.dynmap.DynmapAPI 接口,包括了 Bukkit 的调用,通过配合 DynmapCoreAPI(DynmapAPI 继承),将插件实例转为 org.dynmap.DynmapAPI 来使用公布的接口。
  • dynmap - 真正的 Dynmap Bukkit 的部分,包括了那些与服务器无关的代码。

如何编译Dynmap

编译 Dynmap 使用 Maven。使用 Maven 的 mvn install 命令你就可以将项目安装在你的 Maven 仓库,这样就可以用于编译其他需要用此项目作为依赖的项目。基本的方法为,使用 git clone 下载代码,使用 mvn install 编译代码。

Dynmap 的核心系统基本不需要依赖项,核心用于实现特殊的框架,比如 Bukkit 和 Spout。在你编译某平台的框架之前,你应该复制并按顺序编译这些项目:

Dynmap for Bukkit

复制并按顺序编译这些项目来编译 Bukkit 的 Dynmap:

或者将以下复制进你的终端:

git clone git://github.com/webbukkit/DynmapCoreAPI.git && (cd DynmapCoreAPI && mvn install)
git clone git://github.com/webbukkit/DynmapCore.git && (cd DynmapCore && mvn install)
git clone git://github.com/webbukkit/dynmap-api.git && (cd dynmap-api && mvn install)
git clone git://github.com/webbukkit/dynmap.git && (cd dynmap && mvn install)

包含 Dynmap 的 ZIP 文件位于 dynmap/target/dynmap-*-bin.zip.

Dynmap for 原版Spout

复制并按顺序编译这些项目来编译 Spout 原版服务器的 Dynmap:

或者将以下复制进你的终端:

git clone git://github.com/webbukkit/DynmapCoreAPI.git && (cd DynmapCoreAPI && mvn install)
git clone git://github.com/webbukkit/DynmapCore.git && (cd DynmapCore && mvn install)
git clone git://github.com/SpoutDev/SpoutAPI.git && (cd SpoutAPI && mvn install)
git clone git://github.com/SpoutDev/Vanilla.git && (cd Vanilla && mvn install)
git clone git://github.com/webbukkit/DynmapSpout.git && (cd DynmapSpout && mvn install)

包含 Dynmap 的 ZIP 文件位于 DynmapSpout/target/DynmapSpout-*-bin.zip.

参考文献