webbukkit / dynmap

A set of Minecraft mods that provide a real time web-based map system for various Minecraft server implementations.
https://www.reddit.com/r/Dynmap/
Apache License 2.0
2.07k stars 422 forks source link

Zoom out processing stalled #2358

Closed gnilps closed 3 years ago

gnilps commented 6 years ago

Greetings, it appears my zoom out processing has stalled. I am hoping there is a way to resolve without doing another full render.

You can see at https://map.rly.cc/?worldname=world&mapname=flat&zoom=0 that there are 3 missing tiles.

Zooming in will show that these chunks are all generated and rendered on other levels. This server is running Paper version git-Paper-"df1c8382" (MC: 1.13.1) (Implementing API version 1.13.1-R0.1-SNAPSHOT)

Dynmap version: core=3.0-beta-1-129, plugin=3.0-beta-1-129

deftemplatesuffix: hires

# Map storage scheme: only uncomment one 'type' value
#  filetree: classic and default scheme: tree of files, with all map data under the directory indicated by 'tilespath' setting
#  sqlite: single SQLite database file (this can get VERY BIG), located at 'dbfile' setting (default is file dynmap.db in data directory)
#  mysql: MySQL database, at hostname:port in database, accessed via userid with password
storage:
  # Filetree storage (standard tree of image files for maps)
  type: filetree
  # SQLite db for map storage (uses dbfile as storage location)
  #type: sqlite
  #dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' in database 'database' using user 'userid' password 'password' and table prefix 'prefix'
  #type: mysql
  #hostname: localhost
  #port: 3306
  #database: dynmap
  #userid: dynmap
  #password: ''
  #prefix: ""

components:
  - class: org.dynmap.ClientConfigurationComponent

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: false
    trustclientname: false
    includehiddenplayers: false
    # (optional) if true, color codes in player display names are used
    use-name-colors: false
    # (optional) if true, player login IDs will be used for web chat when their IPs match
    use-player-login-ip: true
    # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
    require-player-login-ip: true
    # (optional) block player login IDs that are banned from chatting
    block-banned-player-chat: true
    # Require login for web-to-server chat (requires login-enabled: true)
    webchat-requires-login: false
    # If set to true, users must have dynmap.webchat permission in order to chat
    webchat-permissions: false
    # Limit length of single chat messages
    chatlengthlimit: 256
    # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
    #hideifshadow: 4
    # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
    #hideifundercover: 14
    # (Optional) if true, players that are crouching/sneaking will be hidden
    hideifsneaking: false
    # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
    protected-player-info: false
    # If true, hide players with invisibility potion effects active
    hide-if-invisiblity-potion: true
    # If true, player names are not shown on map, chat, list
    hidenames: false
  #- class: org.dynmap.JsonFileClientUpdateComponent
  #  writeinterval: 1
  #  sendhealth: true
  #  sendposition: true
  #  allowwebchat: true
  #  webchat-interval: 5
  #  hidewebchatip: false
  #  includehiddenplayers: false
  #  use-name-colors: false
  #  use-player-login-ip: false
  #  require-player-login-ip: false
  #  block-banned-player-chat: true
  #  hideifshadow: 0
  #  hideifundercover: 0
  #  hideifsneaking: false
  #  # Require login for web-to-server chat (requires login-enabled: true)
  #  webchat-requires-login: false
  #  # If set to true, users must have dynmap.webchat permission in order to chat
  #  webchat-permissions: false
  #  # Limit length of single chat messages
  #  chatlengthlimit: 256
  #  hide-if-invisiblity-potion: true
  #  hidenames: false

  - class: org.dynmap.SimpleWebChatComponent
    allowchat: true
    # If true, web UI users can supply name for chat using 'playername' URL parameter.  'trustclientname' must also be set true.
    allowurlname: false

  # Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins
  - class: org.dynmap.MarkersComponent
    type: markers
    showlabel: false
    enablesigns: false
    # Default marker set for sign markers
    default-sign-set: markers
    # (optional) add spawn point markers to standard marker layer
    showspawn: false
    spawnicon: world
    spawnlabel: "Spawn"
    # (optional) layer for showing offline player's positions (for 'maxofflinetime' minutes after logoff)
    showofflineplayers: false
    offlinelabel: "Offline"
    offlineicon: offlineuser
    offlinehidebydefault: true
    offlineminzoom: 0
    maxofflinetime: 30
    # (optional) layer for showing player's spawn beds
    showspawnbeds: false
    spawnbedlabel: "Spawn Beds"
    spawnbedicon: bed
    spawnbedhidebydefault: true
    spawnbedminzoom: 0
    spawnbedformat: "%name%'s bed"
    # (optional) show world border (vanilla 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: 255
    # Optiona; 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: true
    # If true, show player body too (only valid if showplayerfaces=true
    showplayerbody: false
    # Option to make player faces small - don't use with showplayerhealth
    smallplayerfaces: false
    # Optional - make player faces layer hidden by default
    hidebydefault: false
    # Optional - ordering priority in layer menu (low goes before high - default is 0)
    layerprio: 0
    # Optional - label for player marker layer (default is 'Players')
    label: "Players"

  #- class: org.dynmap.ClientComponent
  #  type: digitalclock
  - class: org.dynmap.ClientComponent
    type: link

  - class: org.dynmap.ClientComponent
    type: timeofdayclock
    showdigitalclock: true
    showweather: true
  # Mouse pointer world coordinate display
  - class: org.dynmap.ClientComponent
    type: coord
    label: "Location"
    hidey: false
    show-mcr: false

  # Note: more than one logo component can be defined
  #- class: org.dynmap.ClientComponent
  #  type: logo
  #  text: "Dynmap"
  #  #logourl: "images/block_surface.png"
  #  linkurl: "http://forums.bukkit.org/threads/dynmap.489/"
  #  # Valid positions: top-left, top-right, bottom-left, bottom-right
  #  position: bottom-right

  #- class: org.dynmap.ClientComponent
  #  type: inactive
  #  timeout: 1800 # in seconds (1800 seconds = 30 minutes)
  #  redirecturl: inactive.html
  #  #showmessage: 'You were inactive for too long.'

  #- class: org.dynmap.TestComponent
  #  stuff: "This is some configuration-value"

# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false)
display-whitelist: false

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

# How many tiles on update queue before accelerate render interval
renderacceleratethreshold: 50

# How often to render tiles when backlog is above renderacceleratethreshold
renderaccelerateinterval: 0.1

# How many update tiles to work on at once (if not defined, default is 1/2 the number of cores)
tiles-rendered-at-once: 4

# If true, use normal priority threads for rendering (versus low priority) - this can keep rendering
# from starving on busy Windows boxes (Linux JVMs pretty much ignore thread priority), but may result
# in more competition for CPU resources with other processes
usenormalthreadpriority: true

# Save and restore pending tile renders - prevents their loss on server shutdown or /reload
saverestorepending: true

# Save period for pending jobs (in seconds): periodic saving for crash recovery of jobs
save-pending-period: 900

# Zoom-out tile update period - how often to scan for and process tile updates into zoom-out tiles (in seconds)
zoomoutperiod: 30

# Control whether zoom out tiles are validated on startup (can be needed if zoomout processing is interrupted, but can be expensive on large maps)
initial-zoomout-validate: true

# Default delay on processing of updated tiles, in seconds.  This can reduce potentially expensive re-rendering
# of frequently updated tiles (such as due to machines, pistons, quarries or other automation).  Values can
# also be set on individual worlds and individual maps.
tileupdatedelay: 15

# Tile hashing is used to minimize tile file updates when no changes have occurred - set to false to disable
enabletilehash: true

# Optional - hide ores: render as normal stone (so that they aren't revealed by maps)
hideores: true

# Optional - enabled BetterGrass style rendering of grass and snow block sides
better-grass: true

# Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option)
smooth-lighting: true

# Optional - use world provider lighting table (good for custom worlds with custom lighting curves, like nether)
#   false=classic Dynmap lighting curve
use-brightness-table: true

# Optional - render specific block IDs using the texures and models of another block ID: can be used to hide/disguise specific
#  blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks
block-id-alias:
#    "14": 1
#    "15": 1
#    "16": 1

# Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100)
# Has no effect on maps with explicit format settings
image-format: jpg-q95

#  use-generated-textures: if true, use generated textures (same as client); false is static water/lava textures
#  correct-water-lighting: if true, use corrected water lighting (same as client); false is legacy water (darker)
#  transparent-leaves: if true, leaves are transparent (lighting-wise): false is needed for some Spout versions that break lighting on leaf blocks
use-generated-textures: true
correct-water-lighting: true
transparent-leaves: true

# ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default)
ctm-support: true
# custom-colors-support: if true, Custom Colors in texture packs is enabled (default)
custom-colors-support: true

# Control loading of player faces (if set to false, skins are never fetched)
fetchskins: true

# Control updating of player faces, once loaded (if faces are being managed by other apps or manually)
refreshskins: true

# Customize URL used for fetching player skins (%player% is macro for name)
skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png"

# Control behavior for new (1.0+) compass orientation (sunrise moved 90 degrees: east is now what used to be south)
#   default is 'newrose' (preserve pre-1.0 maps, rotate rose)
#   'newnorth' is used to rotate maps and rose (requires fullrender of any HDMap map - same as 'newrose' for FlatMap or KzedMap)
compass-mode: newnorth

render-triggers:
  #- playermove
  #- playerjoin
  - blockplaced
  - blockbreak
  - leavesdecay
  - blockburn
  - chunkgenerated
  - blockformed
  - blockfaded
  - blockspread
  - pistonmoved
  - explosion
  #- blockfromto
  #- blockphysics
  - structuregrow
  - blockgrow
  #- blockredstone

# Title for the web page - if not specified, defaults to the server's name (unless it is the default of 'Unknown Server')
webpage-title: "MC.RLY.CC Cheaty Map"

# The path where the tile-files are placed.
tilespath: web/tiles

# The path where the web-files are located.
webpath: web

# The path were the /dynmapexp command exports OBJ ZIP files
exportpath: export

# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
# If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified)
webserver-bindaddress: 127.0.0.1

# The TCP-port the webserver will listen on.
webserver-port: 8123

# Maximum concurrent session on internal web server - limits resources used in Bukkit server
max-sessions: 30

# Disables Webserver portion of Dynmap (Advanced users only)
disable-webserver: false

# Enable/disable having the web server allow symbolic links (true=compatible with existing code, false=more secure (default))
allow-symlinks: true

# Enable login support
login-enabled: false
# Require login to access website (requires login-enabled: true)
login-required: false

# Period between tile renders for fullrender, in seconds (non-zero to pace fullrenders, lessen CPU load)
timesliceinterval: 0.0

# Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load
maxchunkspertick: 400

# Progress report interval for fullrender/radiusrender, in tiles.  Must be 100 or greater
progressloginterval: 250

# Parallel fullrender: if defined, number of concurrent threads used for fullrender or radiusrender
#   Note: setting this will result in much more intensive CPU use, some additional memory use.  Caution should be used when
#  setting this to equal or exceed the number of physical cores on the system.
parallelrendercnt: 4

# Interval the browser should poll for updates.
updaterate: 1000

# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in
fullrenderplayerlimit: 5
# If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in
updateplayerlimit: 10
# Target limit on server thread use - msec per tick
per-tick-time-limit: 50
# If TPS of server is below this setting, update renders processing is paused
update-min-tps: 18.0
# If TPS of server is below this setting, full/radius renders processing is paused
fullrender-min-tps: 18.0
# If TPS of server is below this setting, zoom out processing is paused
zoomout-min-tps: 18.0

showplayerfacesinmenu: true

# Control whether players that are hidden or not on current map are grayed out (true=yes)
grayplayerswhenhidden: true

# Use player permissions to order player list: first to last, players are ordered by first permission listed that they have
# That is, anyone with first listed permission goes before anyone with second, etc, with users with none of the nodes going last
player-sort-permission-nodes:
  - bukkit.command.op

# Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin
sidebaropened: pinned

# Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only)
#http-response-headers:
#    Access-Control-Allow-Origin: "my-domain.com"
#    X-Custom-Header-Of-Mine: "MyHeaderValue"

# Trusted proxies for web server - which proxy addresses are trusted to supply valid X-Forwarded-For fields
trusted-proxies:
  - "127.0.0.1"
  - "0:0:0:0:0:0:0:1"

# Join/quit message format for web chat: set to "" to disable notice on web UI
joinmessage: "%playername% joined"
quitmessage: "%playername% quit"

spammessage: "You may only chat once every %interval% seconds."
# format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text
webmsgformat: "&color;2[WEB] %playername%: &color;f%message%"

# Control whether layer control is presented on the UI (default is true)
showlayercontrol: true

# Enable checking for banned IPs via banned-ips.txt (internal web server only)
check-banned-ips: true

# Default selection when map page is loaded
defaultzoom: 3
defaultworld: world
defaultmap: surface
# (optional) Zoom level and map to switch to when following a player, if possible
#followzoom: 3
#followmap: surface

# If true, make persistent record of IP addresses used by player logins, to support web IP to player matching
persist-ids-by-ip: true

# If true, map text to cyrillic
cyrillic-support: false

# If true, coordinates will be rounded
round-coordinates: true

# Messages to customize
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 for client configuration (only need to be tailored for proxies or other non-standard configurations)
url:
    # configuration URL
    #configuration: "up/configuration"
    # update URL
    #update: "up/world/{world}/{timestamp}"
    # sendmessage URL
    #sendmessage: "up/sendmessage"
    # login URL
    #login: "up/login"
    # register URL
    #register: "up/register"
    # tiles base URL
    #tiles: "tiles/"
    # markers base URL
    #markers: "tiles/"

# Spout support controls
spout:
    # If false, ignore spout even if detected
    enabled: true
    # If true, previously loaded textures will be assumed to still be valid (faster startup, but
    # can result in stale textures if originals are updated - delete files in texturepacks/standard/spoout
    # to clean cached textures and force reload on next startup)
    use-existing-textures: true

# Customization commands - allows scripts to be run before/after certain events
custom-commands:
    image-updates:
        # Command run just before any image file is written or updated: run with single parameter with fully qualified file name
        preupdatecommand: ""
        # Command run just after any image file is written or updated: run with single parameter with fully qualified file name
        postupdatecommand: ""

# Snapshot cache size, in chunks
snapshotcachesize: 500
# Snapshot cache uses soft references (true), else weak references (false)
soft-ref-cache: true

# Set to true to enable verbose startup messages - can help with debugging map configuration problems
# Set to false for a much quieter startup log
verbose: false

# Enables debugging.
#debuggers:
#  - class: org.dynmap.debug.LogDebugger
# Debug: dump blocks missing render data
dump-missing-blocks: false
gnilps commented 6 years ago

I did a small (radius 50) dynmap radiusrender within one of the unrendered tiles and it forced the zoomout tile to render successfully. I am holding off doing this on the remaining 3 unrendered tiles so that you can see them first for this bug report.

stormboomer commented 5 years ago

I can confirm that this is still an issue with Dynmap version: core=3.0-beta-3-160, plugin=3.0-beta-3-160 and CraftBukkit version git-Spigot-e8ded36-acbc348 (MC: 1.12.2) We have a pretty large map around 50k blocks squared and even after a fullrender has completed the dynmap still is not showing completely at all zoom levels

stormboomer commented 5 years ago

after some testing and rerendering i solved the problem. I had to delete the tiles and file hashes for the specific map while the server was powered off. after that I deleted the world.pending file and started a new fullrender that fixed it for me

alpe12 commented 5 years ago

Still present. :/

applebee1558 commented 4 years ago

This issue still happens to my map, 1 year later.

girugamoz commented 4 years ago

I have the same problem: When zoomed-in I can see the tiles were rendered, but zoom out tiles often are not. The issue doesn't occur within the chunks around spawn/world center -- maybe because they are always loaded?

I recently upgraded from Minecraft 1.12 (spigot) to 1.16.1 (paper), deleted plugins/dynmap/web/tiles/world*, and did a fullrender. But this only rendered the chunks around world center, zoom out tiles are present there. I then walked further out and did a radiusrender 1000 which rendered more tiles, but there zoomout is mostly missing. Zoomout is also missing where I traveled the map, again the zoomed in tiles are present and fine.

Note that I had this issue since at least DynMap 2.5. The only way to get (almost) all zoom out tiles rendered was to repeatedly do a radiusrender. But for a few locations in my end world even that didn't work completely.

Is there any information I can provide to help identify the problem? Also a command to forcibly render only zoom out tiles would be a time saving work around.

But regardless of this issue -- the only one I noticed :) -- I'd like to say thank you for the great work! DynMap provides a really beautiful map for my world.

I'm running paper 131 with these plugins: craftbook-3.10.2.jar Dynmap-3.1-beta-2-spigot.jar dynmap-structures-2.3.0-all.jar EssentialsX-2.18.0.0.jar EssentialsXChat-2.18.0.0.jar LuckPerms-Bukkit-5.1.26.jar SavageDeathChest-1.13.3.jar SavageDeathCompass-1.13.5.jar TimeFold.jar ViaVersion-3.0.1.jar Vivecraft_Spigot_Extensions-1.16.1r4.jar worldedit-bukkit-7.2.0-beta-02.jar

configuration.txt worlds.txt

Edit: I have paper running on Linux inside KVM, the Java process has 8GB of RAM, the map tiles sit on an HDD (about 109 GB before I deleted it to re-render).

FedUpWith-Tech commented 4 years ago

@girugamoz your issue is likely relate to another issue (on mobile so cant tag it) titled "Pre anvil world conversion" or something like that. The zoom rendering is a separate issue with the zoomout tile processing whereas your issue is dynmap doesnt recognize old chunks as generated till they are manually loaded at which point some other bug causes other issues.

girugamoz commented 4 years ago

@FedUpWith-Tech thanks for the quick reply. I'll look into that other issue (I assume you're referring to https://github.com/webbukkit/dynmap/issues/2282). But note that this issue was even present with Minecraft 1.12 (DynMap 2.5). Also when upgrading I did a --forceUpgrade world upgrade using 1.13, 1.15 (both spigot), and finally 1.16.1 (paper) -- though I'm not sure if that helps with the pre-anvil issue you mentioned.

jacklollz2 commented 3 years ago

This is still a problem that is occurring. We do not have any information or statistics on what tiles are still being processed for zoom-out data, and we have no control to re-render them. This needs to be fixed, I have been trying to make many maps that have a large zoom out radius since Dynmap first had the ability to do so, years and years ago. The fact that this is still a problem makes me desire for an alternative like Bluemap.

FedUpWith-Tech commented 3 years ago

Duplicate of #3182

FedUpWith-Tech commented 3 years ago

Closing this issue even though it is older as there is a fix listed in the other and more issues are linked there