ApliNi / blog

GNU General Public License v3.0
2 stars 0 forks source link

优化Dynmap网页地图的页面和渲染性能 `翻新` #2

Open ApliNi opened 1 year ago

ApliNi commented 1 year ago

在3.3版本中添加对1.18版本的支持!
添加新的区块管理器,包括对 3D 生物群系的支持以及在 1.16.5、1.17.1 和 1.18.x 上将渲染性能提高 20-25%
恢复 snakeyaml 库更新以解决解析 Windows 格式的 yaml 文件的问题

开始

因为发现很多服务器的网页地图都没有太多优化, 所以想写一篇教程, 分享一下自己的网页地图配置, 全篇除了配置由Dynmap插件生成, 其他均为手写, 少量带引号的注释使用了搜索引擎的说明. 这里使用的Dynmap是最新的稳定版[3.3.2-spigot], 其他版本应该差别不大, 用搜索功能找找配置就好了

Dynmap的配置使用YAML格式, 但文件后缀是txt, 这导致我在编辑配置时经常遇到TAB缩进符报错[替换为4个空格即可] 所以建议将编辑器的语言设置为YAML后编辑配置[如果是记事本的话忽略就好...[不过还是建议找个编辑器用]]

如果没有实时的要求, 推荐将Dynmap的更新周期提高到1~2天. 这将极大的降低服务器的负载.

1.渲染和性能优化 configuration.txt

配置开头, Dynmap提供了6种渲染质量, 这个很好测试, 如果没有特殊要求, 同时服务器带宽还足够, 推荐使用默认的 "hires" 否则需要降低, 但降低质量会让地图渲染的非常模糊, 请根据自己的需求测试配置

# vlowres 使用 HDMap 极低分辨率 (2 ppb) 地图模板作为世界默认值
# lowres 使用 HDMap 低分辨率 (4 ppb) 地图模板作为世界默认值
# hires 使用 HDMap 高分辨率 (16 ppb) 地图模板[高分辨率渲染一次消耗的时间会比较长]
# low_boost_hi 使用 HDMap 低分辨率 (4 ppb) 地图模板,支持选择性地将分辨率提高到高分辨率 (16 ppb)
# hi_boost_vhi 使用 HDMap 高分辨率 (16 ppb) 地图模板,支持选择性地将分辨率提升到 vhi-res (32 ppb)
# hi_boost_xhi 使用 HDMap 高分辨率 (16 ppb) 地图模板,支持选择性地将分辨率提升到 xhi-res (64 ppb)
# 选择一个渲染质量
deftemplatesuffix: hires

设置网页地图的数据库, 非常建议使用数据库, 即使你不会用. 这能避免在Dynmap目录下产生非常非常非常多小文件! [这些小文件比地图目录里的更恐怖, 非常多, 如果地图大的话删除都会很麻烦] 如果服务器没配置MySQL就使用SQLite, 如果使用SQLite最好为文件设置一个绝对路径, 将地图文件放在空间充足的硬盘里!

storage:
    # mysql 或 sqlite 或 filetree[不推荐]
    type: sqlite
    # 选择一个位置用来存放地图数据
    dbfile: E:/map/dynmap.db

这一部分配置决定地图的渲染速度和资源占用由于之后的注释需要和配置放在一起, 所以就写进代码框里了更新: webp格式可以进一步降低空间占用, 但配置略有复杂

# 渲染贴图的频率 秒, 不能大于1 #这里的翻译好像有点问题
renderinterval: 1
# 一次尝试更新的贴图数量
# 这与上方的 renderinterval 结合使用, 可以更改每秒渲染的贴图数量
# 默认cpu核心数的一半
tiles-rendered-at-once: 4

# 是否使用正常的优先级处理渲染任务
# 如果服务器TPS受地图渲染的影响很大可以尝试改为 false
usenormalthreadpriority: true

# 保存和恢复挂起的渲染, 防止在服务器重启后丢失进度
saverestorepending: true
# 挂起任务的保存周期 [秒]
save-pending-period: 45

# 缩小互动程序更新周期, 用于将渲染的贴图缩小到不同缩放范围
zoomoutperiod: 64

# 图片格式 [png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100] [webp, webp-q75, webp-q80, webp-q85, webp-q90, webp-q95, webp-q100, webp-l]
# 注意 PNG和WEBP以外的格式均不支持透明层
# PNG和WEBP-L为最高质量
# 推荐使用WEBP-L或PNG, 其中webp-l可以在不影响画质的情况下减少文件体积
image-format: webp-l

# 如果 cwebp 或 dwebp 不在 PATH 上,请使用这些设置来提供它们的完整路径。 如果工具在 PATH 上,请勿使用这些设置
# 对于 Windows,包括 .exe
# 如果要使用web, 请下载 https://developers.google.com/speed/webp/download , 像这样放在指定一个位置并使用绝对路径
# 已在下方更新附件
cwebpPath: E:/map/libwebp-1.2.2-windows-x64/bin/cwebp.exe
dwebpPath: E:/map/libwebp-1.2.2-windows-x64/bin/dwebp.exe

#####

# 每个tick的最大负载 [1/20秒] 将其降低到90以下会影响渲染性能, 但也会减少服务器线程负载 100
maxchunkspertick: 120

# 渲染进度报告, 必须在100以上
# 如果控制台太吵可以将其提高到更高的值
progressloginterval: 1000

# 渲染并发数量, 建议CPU核心的四分之一, 如果速度太慢还可以提高
# 会造成密集的CPU占用, 不是多核CPU不建议设置的太高
parallelrendercnt: 2

# 浏览器更新数据的间隔. 建议增大这个值, 特别是在人多的服务器里
# 每一次更新会发送当时渲染的贴图的ID和玩家位置等, 如果玩家非常多或者正在渲染贴图, 会造成较高的带宽占用!
updaterate: 3200

# 玩家达到这个值时暂停渲染, 0为禁用
fullrenderplayerlimit: 0
# 当更多用户登录时暂停渲染, 0为禁用
updateplayerlimit: 0

# 服务器线程使用的目标限制-毫秒/刻度 每刻度的时间限制 50
# 如果Dynmap对MSPT影响大可以降低这个值, 如果需要全速渲染可以提高[同时降低下面三个配置的值]
per-tick-time-limit: 40
# 如果服务器的TPS低于这个值, 则暂停更新
update-min-tps: 19.2
# 如果服务器的TPS低于这个值, 则暂停缩小
zoomout-min-tps: 19.2
# 如果服务器的TPS低于这个值, 则暂停渲染
fullrender-min-tps: 19.2

地图更新, 配置哪些操作会让Dynmap更新贴图

# 地图上的内容发生变化后多长时间再重新渲染
# 如果服务器的玩家多请提高这个值, 防止服务器浪费性能在渲染地图上
tileupdatedelay: 64

#哪些操作会更新地图
render-triggers:

  #玩家移动
  #- playermove

  #玩家加入
  #- playerjoin

  #方块放置
  - blockplaced

  #方块破坏
  - blockbreak

  #树叶掉落
  - leavesdecay

  #火破坏方块
  #- blockburn

  #区块加载
  - chunkgenerated

  #方块形成??
  - blockformed

  #方块消失[冰雪融化等]
  - blockfaded

  #方块传播[水流动等]
  - blockspread

  #活塞伸出收回
  #- pistonmoved

  #爆炸
  #- explosion

  #方块流入新的方块[水岩浆等]
  - blockfromto

  #方块物理移动[沙子掉落等]
  #- blockphysics

  #树和蘑菇生长
  - structuregrow

  #作物生长
  - blockgrow

  #红石
  #- blockredstone

2.控制渲染效果 worlds.txt custom-shaders.txt custom-lightings.txt configuration.txt

world.txt 地图设置, Dynmap默认会渲染所有地图的所有图层, 如果不限制则会造成很多不必要的资源浪费

# 这个不能删掉
%YAML 1.1
---

worlds:
-   name: world # 地图目录的名称, 不能随便修改
    title: Main_World # 地图显示在网页上的名称[可以是中文]
    enabled: true # 是否启用世界, 改为false后不会显示在网页上
    bigworld: true # "使用 FlatMap 或 KzedMap 地图种类的替代的文件结构,这个结构更加适合拥有数万数十万的 tiles 的大型世界"
    extrazoomout: 2 # 额外的缩小等级, 可以获得更高的视角, 但也会多占用一部分存储空间[影响不是很大]
    # 配置为这个世界渲染哪些视角的地图 [还有一个地下模式没写进来]
    maps:
    -   class: org.dynmap.hdmap.HDMap

        # 设置贴图存放目录, 不要用中文
        name: _2

        #地图显示在网页上的名称, 这里鼠标悬浮上去才会显示
        title: 平面图

        # iso_S_90_hires 是一个预设的视角, 表示渲染方块的顶面
        perspective: iso_S_90_hires

        # 配置着色器, 这里使用的是之后定义的OCD材质包
        shader: ocd

        # 配置光照, 这里使用的是之后定义的光照名称
        lighting: ipacnight

        #允许用户将图片放大的层数, 可以让
        mapzoomin: 3

    -   class: org.dynmap.hdmap.HDMap
        name: _3
        title: 立体图
        # 是一个预设的视角, 看上去像2.5D图像
        perspective: iso_SE_30_hires
        shader: ocd
        lighting: ipacnight
        #由于渲染的方块是斜的, 放大出现很多锯齿, 所以不建议添加很多放大层数
        mapzoomin: 1

#不渲染地狱和末地, 可以将其他不需要渲染的地图添加进来
-   name: world_nether
    enabled: false
-   name: world_the_end
    enabled: false

custom-shaders.txt 着色器设置, 为地图添加适合网页端查看的材质包 Dynmap内置了几种简单的着色器配置和原版的材质包, 这几种方案可能不适合在浏览器上查看, 所以需要自己配置一个

这一部分的配置可能是最简单的

shaders:
  - class: org.dynmap.hdmap.TexturePackHDShader

    #为这个着色器起一个名字, 在world.txt中使用
    name: ocd

    #添加材质包, 请将 ocd.zip 文件放进 texturepacks 目录后配置
    texturepack: ocd.zip

    #是否基于生物群系渲染植物颜色
    biomeshaded: true

    #草地/雪地侧面贴图
    better-grass: true

custom-lightings.txt

光照设置, 添加阴影和设置渲染亮度 不知道为什么发光方块的照亮范围渲染出来很小, 导致玩家随便铺的火把不好看, 所以没有修改亮度 如果想尝试渲染一个夜景, 通过玩家的建筑照亮网页地图可以试试将其设置为4~7之间的值 [7~10可能更适合查看其他暗处的方块, 但可能影响发光方块看上去的亮度]

lightings:
    - class: org.dynmap.hdmap.ShadowHDLighting

      # 设置名称, 在world.txt中使用
      name: ipacnight

      # 阴影等级, 值越大阴影的效果越好, 默认1.0
      shadowstrength: 1.0

      # 亮度, 就像代码框外描述的一样, 默认15
      ambientlight: 15

configuration.txt 主配置中的一些细节...

# 是否使用生成的纹理, 生成的纹理 [与客户端相同]
use-generated-textures: true
# 是否使用水下照明 [与客户相同]
correct-water-lighting: true
# 是否使用透明的树叶 [光照方面]
transparent-leaves: true

# 启用材质包中的已连接纹理模型, 或许会使相同的材质更连贯[没测试过]
ctm-support: true
# 启用材质包中的自定义颜色
custom-colors-support: true

# 控制玩家头像的加载, 关闭后不会获取玩家的皮肤
fetchskins: true

# 自动更新玩家皮肤
refreshskins: true

# 设置用于获取皮肤的URL, 可以是一些皮肤站的API, %player% 是玩家名称的占位符
skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png"

# 通过离线皮肤插件 skinsrestorer 获取皮肤
# 如果是离线服务器建议启用这个, 在线服务器看情况, 使用皮肤插件或许是更好的
skinsrestorer-integration: true

#####

# 第一次打开时用户会看到怎样的页面
# 地图缩放等级, 在网页地图上缩放到位后按下左下角生成链接按钮, 然后在URL里找zoom即可
defaultzoom: 7
# 设置默认世界
defaultworld: world
# 默认查看哪个图层, 这里选择的是上方设置的3D图层
defaultmap: _3

# [可选] 点击玩家头像启动跟随模式, 是否因自动调整缩放和地图图层, 不需要就注释掉
#followzoom: 5
#followmap: _2

3.控制组件, 添加自定义样式!

configuration.txt Dynmap的配置为大部分组件提供了相应的配置, 因为没多少可以说的, 所以直接写代码框里了/ 这一部分的注释还没有优化, 就这样看看吧... 前半部分少量机翻[并且注释不完整], 因为很少用到 [以后再改吧...]

components:
  - class: org.dynmap.ClientConfigurationComponent

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    sendposition: true
    allowwebchat: false
    webchat-interval: 5
    hidewebchatip: false
    trustclientname: false
    includehiddenplayers: false
    #  [可选] 如果为true, 则使用播放器显示名称中的颜色代码
    use-name-colors: false
    #  [可选] 如果为true, 则当玩家的IP匹配时, 将使用玩家登录ID进行网络聊天
    use-player-login-ip: false
    #  [可选] 如果“使用玩家登录ip”为true, 则将此设置为true将导致忽略与已知播放器ip不匹配的聊天消息
    require-player-login-ip: false
    #  [可选] 阻止禁止聊天的玩家登录ID
    block-banned-player-chat: false
    # 需要登录才能进行web到服务器聊天 [需要启用登录: true]
    webchat-requires-login: false
    # 如果设置为true, 则用户必须具有dynmap.webchat权限才能聊天
    webchat-permissions: false
    # 限制单个聊天消息的长度
    chatlengthlimit: 256
  #  # 可选-将玩家隐藏在阴影中 [#=亮度: 0=全阴影, 15=天空]
  #  hideifshadow: 4
  #  # 可选-将玩家隐藏在掩体下 [#=天光级别, 0=地下, 15=向天空开放]
  #  hideifundercover: 14
  #  #  [可选] 如果为true, 则将隐藏蹲下/潜行的玩家
    hideifsneaking: false
    # 如果为true, 则保护玩家位置/状态 [使用dynmap.playermarkers.see ID登录, 获得除self以外的信息所需的所有权限]
    protected-player-info: false
    # 如果为真, 隐藏隐形药水效果激活的玩家
    hide-if-invisiblity-potion: true
    # 如果为true, 则地图/ 聊天室和列表中不会显示玩家姓名
    hidenames: false
  #- class: org.dynmap.JsonFileClientUpdateComponent
  #  writeinterval: 1
  #  sendhealth: true
  #  sendposition: true
  #  allowwebchat: true
  #  webchat-interval: 5
  #  hidewebchatip: false
  #  includehiddenplayers: false
  #  use-name-colors: false
  #  use-player-login-ip: false
  #  require-player-login-ip: false
  #  block-banned-player-chat: true
  #  hideifshadow: 0
  #  hideifundercover: 0
  #  hideifsneaking: false
  #  # 需要登录才能进行web到服务器聊天 [需要启用登录: true]
  #  webchat-requires-login: false
  #  # 如果设置为true, 则用户必须具有dynmap.webchat权限才能聊天
  #  webchat-permissions: false
  #  # 限制单个聊天消息的长度
  #  chatlengthlimit: 256
  #  hide-if-invisiblity-potion: true
  #  hidenames: false

#不向网页地图发送聊天消息
  - class: org.dynmap.SimpleWebChatComponent
    allowchat: false

    # 如果为true, web UI用户可以使用“playername”URL参数提供聊天室的名称trustclientname'也必须设置为true.
    allowurlname: false

##### 终于等到这里了#####

  # 注意: dmarker命令和markerapi对其他插件可用都需要这个组件
  - class: org.dynmap.MarkersComponent
    type: markers
    showlabel: false
    enablesigns: false
    default-sign-set: markers

    #  [可选] 将重生点标记添加到标准标记图层
    # 这会在主城的重生点上显示一个地球图标, 可以替换成服务器的微标
    showspawn: false
    spawnicon: world
    spawnlabel: "服务器名称"

    #  [可选] 显示离线玩家位置的图层 [注销后的 maxofflinetime 分钟]
    showofflineplayers: false
    offlinelabel: "Offline"
    offlineicon: offlineuser
    offlinehidebydefault: true
    offlineminzoom: 0
    maxofflinetime: 30

    # 显示玩家床的图层
    showspawnbeds: false
    spawnbedlabel: "重生点 床"
    spawnbedicon: bed
    spawnbedhidebydefault: true
    spawnbedminzoom: 0
    spawnbedformat: "%name%'的床"
    # [可选] 显示世界边界 [香草1.8+]
    showworldborder: true

  - class: org.dynmap.ClientComponent
    type: chat
    allowurlname: false
  #- class: org.dynmap.ClientComponent
    #type: chatballoon
    #focuschatballoons: false
#消息
  #- class: org.dynmap.ClientComponent
    #type: chatbox
    #showplayerfaces: true
    #messagettl: 5
    # Optional: set number of lines in scrollable message history: if set, messagettl is not used to age out messages
    #scrollback: 100
    # Optional: set maximum number of lines visible for chatbox
    #visiblelines: 10
    # Optional: send push button
#    sendbutton: false
#显示玩家
  - class: org.dynmap.ClientComponent
    type: playermarkers

    # 显示玩家头像
    showplayerfaces: true

    # 显示玩家状态
    showplayerhealth: false
    # 如果为true, 则也显示玩家身体 [仅当showplayerfaces=true时有效
    showplayerbody: false
    # 使玩家面部变小的选项-不要与showplayerhealth一起使用

    smallplayerfaces: true
    # 可选-默认情况下隐藏玩家面层

    hidebydefault: false
    # 可选-层菜单中的排序优先级 [低优先于高-默认为0]

    layerprio: 0

    # 可选-播放器标记层的标签
    label: "在线玩家"

#数字钟
  #- class: org.dynmap.ClientComponent
  #  type: digitalclock
#左下角生成链接的按钮
  - class: org.dynmap.ClientComponent
    type: link

#  - class: org.dynmap.ClientComponent
#    type: timeofdayclock
#    showdigitalclock: false
#    showweather: false

# 鼠标指针位置坐标显示
  - class: org.dynmap.ClientComponent
    type: coord
    label: '当前坐标'
    hidey: true
    show-mcr: true #显示世界块名称

CSS是一种描述HTML样式的语言, 如果没有CSS, 网页就可能会很难看. 网页地图也一样, 可以通过CSS自定义样式, 使其和服务器官网更相似 由于这不属于MC服务器的配置, 所以没有详细讲解. 我将使用方法写在这里, 对各个功能的注释写在代码框里, 有能力的玩家可以尝试修改它们!

xxxx.css


/*  style ------ Ipacamod  */

.dynmap > .map{
        background:#18191c!important;
}

/*使其不显示*/
.leaflet-control-zoom, /*放大缩小*/
.coord-control-label, /*"当前坐标"这段文字*/
.compass, /*指南针, 没找到配置*/
br{
        display:none!important;
}

/*字体*/
body, .dynmap .playerNameSm{
        font-family:
                /*英文[等宽]*/
                Bitstream Vera Sans Mono,
                Consolas,
                DejaVu Sans Mono,
                Lucida Console,
                Liberation Mono,
                /*中文*/
                PingFang SC,
                Microsoft YaHei,
                SimHei
        !important;
}

/*选中文本高亮*/
::selection{background:#06B0FF33}

/*工具栏 地图按钮*/
.dynmap .sublist .item{border-radius:1px}
.dynmap .sublist .item.selected{border:1px solid #008fff}

/*顶部错误信息*/
.alertbox{background-color:#008fff;border:0}

/*坐标显示*/
.dynmap .coord-control{
        border-radius:1px;
        margin:15px;
        padding:5px;
        width:fit-content;
        background-color:rgba(0,0,0,0.6);
        border:1px solid rgba(0,0,0,0.2);
        border-top:1px solid #008fff;
        /*文字*/
        color:#fff;
        font-size:0.875em;
}

/*玩家名称*/
.dynmap .playerNameSm{
        border-radius:0;
    margin-top:3px;
    padding:0 4px;
}

/*跟随玩家 白色方框*/
.dynmap .playerlist .player.following{border-radius:1px}

/*坐标显示, 行内转为块级*/
.dynmap .coord-control-value{
        display:block;
}

/*链接生成按钮*/
.dynmap .dynmap-link{
        border-radius:0;
        background-color:transparent;
}
.dynmap .dynmap-link a{
        border-radius:0;
        background-color:transparent;
}
.dynmap .dynmap-link a:hover{
        background-color:transparent;
}
.dynmap .dynmap-link-button {
        /*background-image:url(images/external-link.svg);*/
        filter:brightness(150%);
}

/*鼠标移出变透明*/
.map .coord-control, /*显示坐标*/
.dynmap .dynmap-link, /*链接*/
.dynmap .hitbar{
        transition: 0.7s 0.2s all;
        opacity: 0;
}
.map:hover .coord-control,
.map:hover .dynmap-link,
.dynmap:hover .hitbar{
        transition: 0.4s all;
        opacity: 1;
}

/*解决hitbar打不开, 使hitbar移动时透明*/
.dynmap .hitbar:hover{
        transition: all 2.5s, opacity 0.3s;
}
.dynmap .sidebar:hover .hitbar{
        opacity: 0;
}

/*世界边界*/
.dynmap .leaflet-interactive{
    stroke:#06b0ff!important;
        stroke-width:2!important;
        stroke-opacity:0.7!important;
}

4.使用NGINX代理Dynmap, 启用GZIP压缩, 添加HTTP/2和HTTPS支持! [这一部分可以省略 Nginx是一个反向代理软件, 可以用它代理Dynmap服务器实现更多功能. 这一部分并不详细, 可以省略 [浏览器 -> NGINX -> Dynmap]

#我使用的反向代理方案
location ^~ /map/ {
        proxy_pass http://127.0.0.1:8123/;

        #防止跳回主目录
        proxy_set_header X-Real-IP $remote_addr;

        #关闭日志
        log_not_found off;
        access_log off;

        #自定义错误页面
        proxy_intercept_errors on;
}

#GZIP
gzip on; #压缩数据包
gzip_proxied any; #作为反向代理时压缩所有的请求
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/x-woff image/svg+xml; #压缩这些文件
gzip_min_length 1k; #小于1k的不要压缩
gzip_comp_level 5; #压缩等级,1~9

#SSL, [ssl_ciphers是抄来的]
listen 443        ssl http2 default_server;

ssl_certificate                        xxx.pem;
ssl_certificate_key                xxx.key;
ssl_protocols                        TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 SSLv2 SSLv3;
ssl_ciphers                                ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:!RC4-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
ssl_session_cache                shared:SSL:20m; #shared缓存
add_header        Strict-Transport-Security        'max-age=86400'; #添加HSTS
ssl_prefer_server_ciphers        On; #服务器密码算法在优先于客户端密码算法时, 使用SSLv3和TLS协议

#从定向到https
if ($ssl_protocol = '') {return 301 https://$host$request_uri;}

Dynmap-v3.4 完整配置翻译 [机翻]

点击展开 ```yaml # 此配置文件中的所有路径都是相对于 Dynmap 的data-folder: minecraft_server/插件/动态地图/ # 所有地图模板都在模板目录中定义 # 要将 HDMap 极低分辨率 (2 ppb) 地图模板用作世界默认值,请将值设置为 vlowres # 这些模板的定义在 normal-vlowres.txt、nether-vlowres.txt 和 the_end-vlowres.txt # 要将 HDMap 低分辨率 (4 ppb) 地图模板用作世界默认值,请将值设置为低分辨率 # 这些模板的定义在 normal-lowres.txt、nether-lowres.txt 和 the_end-lowres.txt # 要使用 HDMap 高分辨率 (16 ppb) 地图模板(这些可能需要很长时间才能进行初始完整渲染),请将值设置为雇用 # 这些模板的定义在 normal-hires.txt、nether-hires.txt 和 the_end-hires.txt # 要使用 HDMap 低分辨率 (4 ppb) 地图模板,支持选择性地将分辨率提高到高分辨率 (16 ppb),请将值设置为 low_boost_hi # 这些模板的定义在 normal-low_boost_hi.txt、nether-low_boost_hi.txt 和 the_end-low_boost_hi.txt # 要使用 HDMap 高分辨率 (16 ppb) 地图模板,支持选择性地将分辨率提高到 vhi-res (32 ppb),请将值设置为 hi_boost_vhi # 这些模板的定义在 normal-hi_boost_vhi.txt、nether-hi_boost_vhi.txt 和 the_end-hi_boost_vhi.txt # 要使用 HDMap 高分辨率 (16 ppb) 地图模板,支持选择性地将分辨率提高到 xhi-res (64 ppb),请将值设置为 hi_boost_xhi # 这些模板的定义在 normal-hi_boost_xhi.txt、nether-hi_boost_xhi.txt 和 the_end-hi_boost_xhi.txt deftemplatesuffix: hires # 设置默认平铺比例(0 = 128px x 128x,1 = 256px x 256px,2 = 512px x 512px,3 = 1024px x 1024px,4 = 2048px x 2048px) - 默认值为 0 # Note: changing此值将导致所有使用默认值的地图都需要完全渲染 #defaulttilescale: 0 # 地图存储scheme: only取消注释一个“类型”值 # filetree: classic和默认scheme: tree文件,所有地图数据都在 'tilespath' 设置指示的目录下 # sqlite: singleSQLite 数据库文件(这可能会变得非常大),位于“dbfile”设置中(默认是数据目录中的文件 dynmap.db) # mysql: MySQL数据库,位于数据库中的主机名:端口,通过用户 ID 和密码访问 # mariadb: MariaDB数据库,位于数据库中的主机名:端口,通过用户 ID 和密码访问 # postgres: PostgreSQL数据库,位于数据库中的主机名:端口,通过用户 ID 和密码访问 storage: # 文件树存储(地图图像文件的标准树) type: filetree # 用于地图存储的 SQLite db(使用 dbfile 作为存储位置) #type: sqlite #dbfile: dynmap。D b # 用于地图存储的 MySQL DB(在 'hostname':'port' 使用用户 'userid' 密码 'password' 和表前缀 'prefix' 在数据库 'database' 中带有标志“flags”) #type: mysql #hostname: localhost #port: 3306 #database: dynmap #userid: dynmap #password: dynmap #字首: ”” #flags: "?allowReconnect=true&autoReconnect=true" # # AWS S3 备份网站 #type: aws_s3 #bucketname: "dynmap-bucket-name" #region: us-east-1 #aws_access_key_id: "" #aws_secret_access_key: "" components: - class: org.dynmap.ClientConfigurationComponent - class: org.dynmap.InternalClientUpdateComponent sendhealth: true sendposition: true allowwebchat: true webchat-interval: 5 hidewebchatip: false trustclientname: false includehiddenplayers: false # (可选)如果为真,则使用播放器显示名称中的颜色代码 use-name-colors: false # (可选)如果为 true,当他们的 IP 匹配时,玩家登录 ID 将用于网络聊天 use-player-login-ip: true # (可选)如果 use-player-login-ip 为 true,将其设置为 true 将导致与已知玩家 IP 不匹配的聊天消息被忽略 require-player-login-ip: false # (可选)阻止被禁止聊天的玩家登录 ID block-banned-player-chat: true # 需要登录才能进行网络到服务器聊天(需要login-enabled: true) webchat-requires-login: false # 如果设置为 true,用户必须拥有 dynmap.webchat 权限才能聊天 webchat-permissions: false # 限制单条聊天消息的长度 chatlengthlimit: 256 # # 可选 - 当玩家在里面/地下/阴影中时让他们隐藏(#=lightlevel: 0=全阴影,15=天空) # hideifshadow: 4 # # 可选 - 让玩家在处于掩护下时隐藏(#=天光水平,0=地下,15=向天空开放) # hideifundercover: 14 # # (可选)如果为真,蹲伏/潜行的玩家将被隐藏 hideifsneaking: false # 如果为 true,则保护玩家位置/状态(使用具有 dynmap.playermarkers.seeall 权限的 ID 登录,以获取除 self 以外的信息) protected-player-info: false # 如果为真,隐藏具有隐形药水效果的玩家 hide-if-invisiblity-potion: true # 如果为真,玩家姓名不会显示在地图、聊天、列表中 hidenames: false #-class: org.dynmap.JsonFileClientUpdateComponent # writeinterval: 1 # sendhealth: true # sendposition: true # allowwebchat: true # webchat-interval: 5 # hidewebchatip: false # includehiddenplayers: false # use-name-colors: false # use-player-login-ip: false # require-player-login-ip: false # block-banned-player-chat: true # hideifshadow: 0 # hideifundercover: 0 # hideifsneaking: false # # 需要登录才能进行网络到服务器聊天(需要login-enabled: true) # webchat-requires-login: false # # 如果设置为 true,用户必须拥有 dynmap.webchat 权限才能聊天 # webchat-permissions: false # # 限制单条聊天消息的长度 # chatlengthlimit: 256 # hide-if-invisiblity-potion: true # hidenames: false - class: org.dynmap.SimpleWebChatComponent allowchat: true # 如果为 true,Web UI 用户可以使用“playername”URL 参数为聊天提供名称。'trustclientname' 也必须设置为 true。 allowurlname: false # Note: thisdmarker 命令需要组件,并且 Marker API 可用于其他插件 - class: org.dynmap.MarkersComponent type: markers showlabel: false enablesigns: false # 标志标记的默认标记集 default-sign-set: markers # (可选)将生成点标记添加到标准标记层 showspawn: true spawnicon: world spawnlabel: "Spawn" # (可选)显示离线玩家位置的层(用于注销后的“maxofflinetime”分钟) 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" # (可选)显示世界边界(原版 1.8+) showworldborder: true worldborderlabel: "Border" - class: org.dynmap.ClientComponent type: chat allowurlname: false - class: org.dynmap.ClientComponent type: chatballoon focuschatballoons: false - class: org.dynmap.ClientComponent type: chatbox showplayerfaces: true messagettl: 5 # Optional: set可滚动消息中的行数history: if设置,messagettl 不用于老化消息 #scrollback: 100 # Optional: set聊天框可见的最大行数 #visiblelines: 10 # Optional: send按钮 sendbutton: false - class: org.dynmap.ClientComponent type: playermarkers showplayerfaces: true showplayerhealth: true # 如果为真,也显示玩家身体(仅当 showplayerfaces=true 时有效) showplayerbody: false # 使玩家面孔变小的选项 - 不要与 showplayerhealth 或 largeplayerfaces 一起使用 smallplayerfaces: false # 使玩家面孔变大的选项 - 不要与 showplayerhealth 或 smallplayerfaces 一起使用 largeplayerfaces: false # 可选 - 默认隐藏玩家面层 hidebydefault: false # 可选 - 图层菜单中的排序优先级(低优先于高 - 默认为 0) layerprio: 0 # 可选 - 玩家标记层的标签(默认为“玩家”) label: "Players" #-class: org.dynmap.ClientComponent # type: digitalclock - class: org.dynmap.ClientComponent type: link - class: org.dynmap.ClientComponent type: timeofdayclock showdigitalclock: true showweather: true # 鼠标指针世界坐标显示 - class: org.dynmap.ClientComponent type: coord label: "Location" hidey: false show-mcr: false show-chunk: false # Note: more可以定义一个以上的标志组件 #-class: org.dynmap.ClientComponent # type: logo # text: "Dynmap" # #logourl: "images/block_surface.png" # linkurl: "http://forums.bukkit.org/threads/dynmap.489/" # # 有效的positions: top-left, 右上角, 左下角, 右下角 # position: bottom-right #-class: org.dynmap.ClientComponent # type: inactive # timeout: 1800# 以秒为单位(1800 秒 = 30 分钟) # redirecturl: inactive.html # #showmessage:“你太久没有活动了。” #-class: org.dynmap.TestComponent # stuff: "This is some configuration-value" # 将 hiddenplayers.txt 视为要在地图上显示的玩家的白名单?(默认为假) display-whitelist: false # 渲染图块的频率(以秒为单位)。 renderinterval: 1 # 在加速渲染间隔之前更新队列上有多少瓦片 renderacceleratethreshold: 60 # 当 backlog 高于 renderacceleratethreshold 时渲染图块的频率 renderaccelerateinterval: 0.2 # 一次要处理多少个更新图块(如果未定义,默认为内核数的 1/2) tiles-rendered-at-once: 2 # 如果为 true,则使用普通优先级线程进行渲染(相对于低优先级) - 这可以继续渲染 # 在繁忙的 Windows 机器上挨饿(Linux JVM 几乎忽略线程优先级),但可能会导致 # 与其他进程争夺 CPU 资源 usenormalthreadpriority: true # 保存和恢复挂起的平铺渲染 - 防止它们在服务器关闭或 /reload 时丢失 saverestorepending: true # 挂起作业的保存时间(以秒为单位):定期保存作业的崩溃恢复 save-pending-period: 900 # 缩小平铺更新周期 - 扫描平铺更新并将平铺更新处理为缩小平铺的频率(以秒为单位) zoomoutperiod: 30 # 控制是否在启动时验证缩小图块(如果缩小处理中断,可能需要,但在大地图上可能很昂贵) initial-zoomout-validate: true # 处理更新切片的默认延迟,以秒为单位。这可以减少潜在的昂贵的重新渲染 # 频繁更新的图块(例如由于机器、活塞、采石场或其他自动化)。值可以 # 也可以设置在个人世界和个人地图上。 tileupdatedelay: 30 # 平铺散列用于在未发生更改时最小化平铺文件更新 - 设置为 false 以禁用 enabletilehash: true # 可选 - 隐藏ores: render像普通石头一样(这样它们就不会被地图显示出来) #hideores: true # 可选 - 启用了草地和雪块侧面的 BetterGrass 样式渲染 #better-grass: true # 可选 - 默认情况下在所有支持它的地图上启用平滑照明(可以将每个地图设置为照明选项) smooth-lighting: true # 可选 - 使用世界提供者光照表(适用于具有自定义光照曲线的自定义世界,例如下界) # false=经典 Dynmap 光照曲线 use-brightness-table: true # 可选 - 使用另一个块的纹理和模型渲染特定块名称name: can用于隐藏/伪装特定的 # 块(例如使矿石看起来像石头,隐藏箱子)或为渲染不受支持的自定义块提供简单的支持 block-alias: # “我的世界:石英矿石”:“石头” # “钻石矿石”:“煤炭矿石” # HDMaps 的默认图像格式(png、jpg、jpg-q75、jpg-q80、jpg-q85、jpg-q90、jpg-q95、jpg-q100、webp、webp-q75、webp-q80、webp-q85、webp- q90, webp-q95, webp-q100, webp-l), # Note: anywebp 格式需要存在“webp 命令行工具”(cwebp、dwebp)(https://developers.google.com/speed/webp/download) # # 对具有显式格式设置的地图没有影响 image-format: jpg-q90 # 如果 cwebp 或 dwebp 不在 PATH 上,请使用这些设置来提供它们的完整路径。如果工具在 PATH 上,请勿使用这些设置 # 对于 Windows,包括 .exe # #cwebpPath: /usr/bin/cwebp #dwebp 路径:/usr/bin/dwebp # use-generated-textures: iftrue,使用生成的纹理(与客户端相同);false 是静态水/熔岩纹理 # correct-water-lighting: if是的,使用校正过的水照明(与客户相同);false 是遗留水(较暗) # transparent-leaves: iftrue,叶子是透明的(光照方面):某些 Spout 版本需要 false,它们会破坏叶子块上的光照 use-generated-textures: true correct-water-lighting: true transparent-leaves: true # ctm-support: iftrue,纹理包中的 Connected Texture Mod (CTM) 已启用(默认) ctm-support: true # custom-colors-support: iftrue,纹理包中的自定义颜色已启用(默认) custom-colors-support: true # 控制玩家面孔的加载(如果设置为 false,则永远不会获取皮肤) #fetchskins: false # 加载后控制玩家面孔的更新(如果面孔由其他应用程序管理或手动管理) #refreshskins: false # 自定义用于获取玩家皮肤的 URL (%player%是名称的宏,%uuid%用于 UUID) skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png" # 通过 SkinsRestorer 插件而不是内部遗留实现启用皮肤(默认禁用) #skinsrestorer-integration: true render-triggers: #- 玩家移动 #- 玩家加入 - blockplaced - blockbreak - leavesdecay - blockburn - chunkgenerated - blockformed - blockfaded - blockspread - pistonmoved - explosion #- 从到阻止 #- 块物理 - structuregrow - blockgrow #- 块红石 # 网页标题 - 如果未指定,则默认为服务器名称(除非它是默认的“未知服务器”) #webpage-title: "My Awesome Server Map" # 放置切片文件的路径。 tilespath: web/tiles # Web 文件所在的路径。 webpath: web # 如果设置为 false,则禁用 webpath 内容的提取(如果使用自定义 Web UI 或第 3 方 Web UI,则很好) # Note: web此配置不支持接口 - 你自己 update-webpath-files: true # 路径是 /dynmapexp 命令导出 OBJ ZIP 文件 exportpath: export # 网络服务器将绑定到的网络接口(所有接口为 0.0.0.0,仅本地访问为 127.0.0.1)。 # 如果未设置,则使用与 server.properties 中的服务器相同的设置(如果未指定,则使用 0.0.0.0) #webserver-bindaddress: 0.0.0.0 # Web 服务器将侦听的 TCP 端口。 webserver-port: 8123 # 内部 Web 服务器上的最大并发会话 - 限制 Bukkit 服务器中使用的资源 max-sessions: 30 # 禁用 Dynmap 的 Web 服务器部分(仅限高级用户) disable-webserver: false # 启用/禁用让 Web 服务器允许符号链接(true=与现有代码兼容,false=更安全(默认)) allow-symlinks: true # 启用登录支持 login-enabled: false # 需要登录才能访问网站(需要login-enabled: true) login-required: false # 全渲染的平铺渲染之间的时间间隔,以秒为单位(非零以加快全渲染,减少 CPU 负载) timesliceinterval: 0.0 # 每个服务器周期的最大块负载(1/20 秒) - 将此值降低到 90 以下会影响渲染性能,但也会降低服务器线程负载 maxchunkspertick: 200 # fullrender/radiusrender 的进度报告间隔,以图块为单位。必须为 100 或更大 progressloginterval: 100 # 平行fullrender: if已定义,用于 fullrender 或 radiusrender 的并发线程数 # Note: setting这将导致更密集的 CPU 使用,一些额外的内存使用。应谨慎使用时 # 将此设置为等于或超过系统上的物理内核数。 #parallelrendercnt: 4 # 浏览器应轮询更新的时间间隔。 updaterate: 2000 # 如果非零,当 'fullrenderplayerlimit' 或更多用户登录时,服务器将暂停 fullrender/radiusrender 处理 fullrenderplayerlimit: 0 # 如果非零,当“updateplayerlimit”或更多用户登录时,服务器将暂停更新渲染处理 updateplayerlimit: 0 # 服务器线程使用的目标限制 - 每滴答声毫秒 per-tick-time-limit: 50 # 如果服务器的 TPS 低于此设置,更新渲染处理将暂停 update-min-tps: 18.0 # 如果服务器的 TPS 低于此设置,则暂停完整/半径渲染处理 fullrender-min-tps: 18.0 # 如果服务器的 TPS 低于此设置,则暂停缩小处理 zoomout-min-tps: 18.0 showplayerfacesinmenu: true # 控制当前地图上隐藏或不隐藏的玩家是否变灰(true=yes) grayplayerswhenhidden: true # 使用播放器权限订购播放器list: first最后,玩家根据他们拥有的第一个权限进行排序 # 也就是说,具有第一个列出权限的任何人都会先于具有第二个权限的任何人,依此类推,而没有任何节点的用户会排在最后 player-sort-permission-nodes: - bukkit.command.op # 设置 sidebaropened: 'true' 将菜单侧边栏固定为永久打开,'pinned' 将侧边栏默认为固定,但允许它取消固定 #sidebaropened: true # 自定义 HTTP 响应标头 - 添加 'id: value' 对所有 HTTP 响应标头(仅限内部 Web 服务器) #http响应头: # Access-Control-Allow-Origin: "my-domain.com" # X-Custom-Header-Of-Mine: "MyHeaderValue" # Web 服务器的受信任代理 - 哪些代理地址受信任以提供有效的 X-Forwarded-For 字段 # 这现在支持 IP 地址和子网范围(例如 192.168.1.0/24 或 202.24.0.0/14 ) trusted-proxies: - "127.0.0.1" - "0:0:0:0:0:0:0:1" # 网络加入/退出消息格式chat: set到 "" 禁用 Web UI 上的通知 joinmessage: "%playername% joined" quitmessage: "%playername% quit" spammessage: "You may only chat once every %interval% seconds." # 来自网络的消息格式:%playername%替代发件人 ID(通常是 IP),%message%包括文字 webmsgformat: "&color;2[WEB] %playername%: &color;f%message%" # 控制是否在 UI 上呈现图层控件(默认为 true) showlayercontrol: true # 通过banned-ips.txt(仅限内部网络服务器)启用检查被禁IP check-banned-ips: true # 加载地图页面时的默认选择 defaultzoom: 0 defaultworld: world defaultmap: flat # (可选)如果可能,在跟随玩家时切换到的缩放级别和地图 #followzoom: 3 #followmap: surface # 如果为 true,则永久记录玩家登录使用的 IP 地址,以支持网络 IP 与玩家匹配 persist-ids-by-ip: true # 如果为真,则将文本映射为西里尔字母 cyrillic-support: false # 如果为真,坐标将被四舍五入 round-coordinates: true # 自定义消息 msg: maptypes: "Map Types" players: "Players" chatrequireslogin: "Chat Requires Login" chatnotallowed: "You are not permitted to send chat messages" hiddennamejoin: "Player joined" hiddennamequit: "Player quit" # 客户端配置的 URL(只需要针对代理或其他非标准配置进行定制) url: # 配置网址 #configuration: "up/configuration" # 更新网址 #update: "up/world/{world}/{timestamp}" # 发送消息地址 #sendmessage: "up/sendmessage" # 登录网址 #login: "up/login" # 注册网址 #register: "up/register" # 瓦片基本 URL #tiles: "tiles/" # 标记基础 URL #markers: "tiles/" # 自定义命令 - 允许在某些事件之前/之后运行脚本 custom-commands: image-updates: # 在写入任何图像文件之前运行命令或updated: run具有完全限定文件名的单个参数 preupdatecommand: "" # 在写入任何图像文件后立即运行命令或updated: run具有完全限定文件名的单个参数 postupdatecommand: "" # 快照缓存大小,以块为单位 snapshotcachesize: 500 # 快照缓存使用软引用 (true),否则使用弱引用 (false) soft-ref-cache: true # 玩家进入/退出地图标记的标题消息 # # 处理周期 - 检查玩家位置与标记的频率 - 默认为 1000 毫秒(1 秒) #enterexitperiod: 1000 # 标题消息淡入淡出时间,以滴答为单位(0.05 秒间隔)- 默认为 10(1/2 秒) #titleFadeIn: 10 # 标题消息停留时间,以滴答为单位(0.05 秒间隔)- 默认为 70(3.5 秒) #titleStay: 70 # 标题消息淡出时间,以滴答为单位(0.05 秒间隔)- 默认为 20(1 秒) #titleFadeOut: 20 # 进入/退出消息在屏幕标题上使用(true - 默认),如果发送的是虚假聊天消息 #enterexitUseTitle: true # 如果新的进入消息应该取代挂起的退出消息(而不是按顺序排队),则设置为 true,默认为 false #enterReplacesExits: true # 发布 Dynmap 服务器的公共 URL(允许用户使用 'dynmap url' 命令获取可用于访问服务器的公共 URL # 如果未设置,“dynmap url”将不会返回任何内容。URL 应该是完全限定的(例如https://mc.westeroscraft.com/) #公共网址:http://my.greatserver.com/dynmap # 如果玩家没有使用命令的权限,请发送此消息 noPermissionMsg: "You don't have permission to use this command!" # 设置为 true 以启用详细的启动消息 - 有助于调试地图配置问题 # 设置为 false 以获得更安静的启动日志 verbose: false # 启用调试。 #调试器: # -class: org.dynmap.debug.LogDebugger # Debug: dump块丢失渲染数据 dump-missing-blocks: false # 让 dynmap 将旧块迁移到当前 MC 版本的新格式(特别是将 1.13 之前的块迁移到 1.13 或 1.14)。这是需要的 # 为了在升级的服务器上渲染块(由于 CB/spigot 1.13+ 中的各种错误/限制)。不建议全时启用此设置, # 但只有足够长的时间来对迁移的世界进行完整渲染——一旦迁移了世界,就应该关闭它)。这是实验性的,所以一定要备份 # 在启用此设置(设置为 true)的情况下运行之前的您的世界 # #migrate-chunks: true # 日志4Jdefense: string代替在网络聊天中使用宏的尝试 hackAttemptBlurb: "(IaM5uchA1337Haxr-Ban Me!)" ```
HurricaneDD commented 8 months ago

感谢作者的奉献