BlueMap-Minecraft / BlueMap

A Minecraft mapping tool that creates 3D models of your Minecraft worlds and displays them in a web viewer.
https://bluecolo.red/bluemap
MIT License
1.92k stars 131 forks source link

Multiverse Nether / The End maps don't work? #112

Closed VL4DST3R closed 4 years ago

VL4DST3R commented 4 years ago

BlueMap Version: BlueMap-1.2.0-snap-spigot-1.16.1

I am (not) using:

Description: This may be a duplicate of #103 but figured i should ask anyway. When pointing to a nether/end dimension following the example formatting (worlds/hub_nether/DIM-1) it complains there is no world to be found in that folder and barfs an error.

example console output:

10:40:20 [INFO] [BlueMap] Loading resources...
10:40:20 [INFO] [BlueMap] WebServer started.
10:40:20 [INFO] [BlueMap] Loading bluemap assets (1/3)...
10:40:20 [INFO] [BlueMap] Loading realms assets (2/3)...
10:40:20 [INFO] [BlueMap] Loading minecraft assets (3/3)...
10:40:20 [SEVERE] [BlueMap] Failed to load map 'hub_nether': Failed to get UUID for the world!
10:40:20 java.io.IOException: There is no world with this folder loaded: E:\My Games\For Games\Minecraft\Minecraft Bukkit Server\worlds\hub_nether\DIM-1
10:40:20    at de.bluecolored.bluemap.bukkit.BukkitPlugin.getUUIDForWorldSync(BukkitPlugin.java:220) ~[?:?]
10:40:20    at de.bluecolored.bluemap.bukkit.BukkitPlugin.lambda$getUUIDForWorld$1(BukkitPlugin.java:188) ~[?:?]
10:40:20    at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftFuture.run(CraftFuture.java:88) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:468) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at net.minecraft.server.v1_16_R1.MinecraftServer.b(MinecraftServer.java:1298) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at net.minecraft.server.v1_16_R1.DedicatedServer.b(DedicatedServer.java:377) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at net.minecraft.server.v1_16_R1.MinecraftServer.a(MinecraftServer.java:1213) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:1001) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[Paper-1.16.1-b138.jar:git-Paper-138]
10:40:20    at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
10:40:20 [INFO] [BlueMap] Loaded!

If i instead point to the general hub_nether map folder (no DIM specified) it doesn't print any errors but doesn't load the map either. Am i missing something? Also yes, i have the worlds under a worlds folder to keep them from spilling everywhere in the project root folder, but i doubt that's an issue since normal overworld maps load fine.

TBlueF commented 4 years ago

This is due to Multiverse not loading it's worlds on startup.. so BlueMap can't find them. But BlueMap needs the worlds UUID from the start to be able to work properly..

There is #109 which might fix this issue, but for now you need to make sure your multiverse worlds are loaded on startup.

I think you can do that with this multiverse config: https://github.com/Multiverse/Multiverse-Core/wiki/World-properties#auto-load, but i have not tested that ^^

VL4DST3R commented 4 years ago

Even so, BlueMap works fine with all the multiverse overworld maps i've thrown its way, it's just the nether/end that's having trouble with.

All the worlds i have available are set to auto-load, otherwise you won't be able to access them at all via the multiverse, so that config won't really help.

VL4DST3R commented 4 years ago

I would also like to know more info about how BlueMap world folder path works, since for overworld you don't need to point a dimension, while for nether/end you do? Is there something in the root of the world folder that's not available in the DIM-X folder (or maybe the other way around?) which is causing this?

TBlueF commented 4 years ago

Even so, BlueMap works fine with all the multiverse overworld maps

That is weird but unlikely caused by BlueMap... BlueMap is using Spigots getServer().getWorlds() to get the worlds, and matching them against their folder: https://github.com/BlueMap-Minecraft/BlueMap/blob/master/implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java#L215 If the world does not exist there, then your error occurs.


I would also like to know more info about how BlueMap world folder path works, since for overworld you don't need to point a dimension, while for nether/end you do?

Spigot is doing some unusual stuff with its world-folders. Usually a minecraft world has multiple dimensions ... the overworld in world/, the nether in world/DIM-1 and the end in world/DIM1. Spigot decided to split the dimensions in multiple worlds. To make the API easier i guess.. But it still needs to have the DIM-1 and the DIM1 folders if the world is a nether or an end dimension ...

BlueMap mainly needs the region files of a world. The region files are found in world/region for an overworld dimension and in world/DIM-1/region for the nether .. etc.. So it takes <the worldfolder from your config>/region to find them :)

Thats why you have to add those folders based on dimension :)

VL4DST3R commented 4 years ago

Gotcha, thanks for the explanation! Another thing to mention is the fact that Dynmap (another map rendering plugin) works just fine with multiverse servers, so i'm guessing a method exists to avoid whatever bs spigot is doing with that function. Do you have to get the worlds UUID that way? Or at all? Considering we're already pointing BlueMap to the right world folder from where to generate the render, wouldn't that be enough?

VL4DST3R commented 4 years ago

Finally, assuming this issue is indeed external (see what i mentioned above about Dynmap working just fine) should we forward this to Multiverse/Spigot devs? Another thing that may be worth to note is that i'm running the Paper fork of Spigot.

TBlueF commented 4 years ago

should we forward this to Multiverse/Spigot devs

Wait with that.. I think at least #109 should be able to fix this..


Do you have to get the worlds UUID that way?

Yes, the UUID's are for example needed to match the block-change events to the correct world to update the maps Also live-player markers need the world UUIDs ^^


i'm running the Paper fork of Spigot

I just tested multiverse on Spigot 1.16.1 and i did not manage to reproduce your issue, i created a mv-nether and bluemap could load it without any problems.. i have not used a world-container though, need to test that as well .. i'll also try it on paper

VL4DST3R commented 4 years ago

Okay, thanks for the help! Do tell me if you manage to reproduce it on your end. Also if i can help with anything else.

TBlueF commented 4 years ago

@VL4DST3R can you send me your Multiverse config.yml ? I am not able to reproduce, even when using paper and a world-container everything is working fine for me..

VL4DST3R commented 4 years ago

the multiverse core config?

#  -------------------------------------------------------------------------  #
# This is the MV2 Config. If you mess it up, copy the values out              #
# delete it, and it will be regenerated. Then use the ingame interface        #
# to add your values back via the "/mv conf" command.                         #
# When in-game, simply type: "/mv conf ?" for help.                           #
# A config with explanations can be found here:                               #
# https://github.com/Multiverse/Multiverse-Core/wiki/config.yml               #
#                                                                             #
#                                                                             #
#  IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !!IMPORTANT  #
#                                                                             #
# Do NOT delete this line from your config!!!!                                #
# ==: com.onarandombox.MultiverseCore.MultiverseCoreConfiguration             #
#                                                                             #
#  IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !!IMPORTANT  #
#  -------------------------------------------------------------------------  #

multiverse-configuration:
  ==: com.onarandombox.MultiverseCore.MultiverseCoreConfiguration
  enforceaccess: 'false'
  prefixchat: 'true'
  prefixchatformat: '[%world%]%chat%'
  useasyncchat: 'true'
  teleportintercept: 'true'
  firstspawnoverride: 'true'
  displaypermerrors: 'true'
  globaldebug: '0'
  silentstart: 'false'
  messagecooldown: '5000'
  version: '2.9'
  firstspawnworld: hub
  teleportcooldown: '1000'
  defaultportalsearch: 'false'
  portalsearchradius: '128'
  autopurge: 'true'
  idonotwanttodonate: 'false'

Doesn't really have anything related to world loading. You want the worlds.yml instead?

VL4DST3R commented 4 years ago

Also, have you tested with the Multiverse-NetherPortals extension as well? Since it fiddles with dimension portals, maybe it could be related?

TBlueF commented 4 years ago

ah yeah .. i meant the worlds.yml sorry..

Also, have you tested with the Multiverse-NetherPortals extension as well?

I doubt that that is affecting world-loading tho?

VL4DST3R commented 4 years ago

I doubt too, but at this point i'm grasping at straws, anything that could affect worlds/dimensions as a whole is something to consider...

Here: worlds.yml.txt (renamed to .txt since apparently git doesn't like .yml) Disclaimer: it's quite huge, server has been up for many years with multiple generations of players.

VL4DST3R commented 4 years ago

I'm guessing there's no way for me to manually get that UUID for a particular world like your plugin does when initializing? I was curious what does my server report for nether/end worlds when asked, and if indeed, for some reason it comes up blank, hence the error.

TBlueF commented 4 years ago

The configs look the same, i still can't reproduce it. :/

I'm guessing there's no way for me to manually get that UUID for a particular world

No i don't think there is an easy way to check that..

VL4DST3R commented 4 years ago

Here, my BlueMap render.conf. Maybe i'm just a dumbass and broke something without even realizing. I've compared it with the default .conf and it looks fine to me, but better check:

##                          ##
##         BlueMap          ##
##      Render-Config       ##
##                          ##

# The folder (webroot) where the map-data and web-application files will be saved.
# Default is "bluemap/web"
webroot: "Plugins/BlueMap/web"

# If the web-application should use cookies to save the configurations of a user.
# Default is true
useCookies: true

# This is an array with multiple configured maps.
# You can define multiple maps, for different worlds with different render-settings here
maps: [

    {
        # The id of this map
        # Should only contain word-charactes: [a-zA-Z0-9_]
        # Changing this value breaks your existing renders.
        id: "hub"

        # The name of this map
        # This defines the display name of this map, you can change this at any time.
        # Default is the id of this map
        name: "Hub"

        # The path to the save-folder of the world to render.
        world: "worlds/hub"

        # The position on the world where the map will be centered if you open it.
        # You can change this at any time.
        # This defaults to the world-spawn if you don't set it.
        #startPos: [500, -820]

        # The color of thy sky as a hex-color
        # You can change this at any time.
        # Default is "#7dabff"
        skyColor: "#7dabff"

        # Defines the ambient light-strength that every block is recieving, regardless of the sunlight/blocklight.
        # 0 is no ambient light, 1 is fully lighted.
        # You can change this at any time.
        # Default is 0
        ambientLight: 0

        # If this is false, BlueMap tries to omit all blocks that are not visible from above-ground.
        # More specific: Block-Faces that have a sunlight/skylight value of 0 are removed.
        # This improves the performance of the map on slower devices by a lot, but might cause some blocks to disappear that should normally be visible.
        # Changing this value requires a re-render of the map.
        # Default is false
        renderCaves: false

        # With the below values you can limit the map-render.
        # This can be used to ignore the nethers ceiling or render only a certain part of a world.
        # Changing this values might require a re-render of the map, already rendered tiles outside the limits will not be deleted.
        # Default is no min or max value (= infinite bounds)
        #minX: -4000
        #maxX: 4000
        #minZ: -4000
        #maxZ: 4000
        #minY: 50
        #maxY: 126

        # Using this, BlueMap pretends that every Block out of the defined render-bounds is AIR,
        # this means you can see the blocks where the world is cut (instead of having a see-through/xray view).
        # This has only an effect if you set some render-bounds above.
        # Changing this value requires a re-render of the map.
        # Default is true
        renderEdges: true

        # With this set to true, the generated files for this world are compressed using gzip to save A LOT of space.
        # Files will be only 5% as big with compression!
        # Note: If you are using NGINX or Apache to host your map, you can configure them to serve the compressed files directly.
        # This is much better than disabling the compression.
        # Changing this value requires a re-render of the map.
        # Default is true
        useCompression: true

        # Normally BlueMap detects if a chunk has not yet generated it's light-data and omits rendering those chunks.
        # If this is set to true BlueMap will render Chunks even if there is no light-data!
        # This can be usefull for example if some mod prevents light-data from being saved correctly.
        # However, this also has a few drawbacks:
        # - For those chunks, every block will always be fully lit
        # - Night-mode might not work correctly
        # - Caves will always be rendered (ignoring the 'renderCaves' setting)
        # Default is false
        ignoreMissingLightData: false
    }

    # Here another example for the End-Map
    # Things we don't want to change from default we can just omit
    {
        id: "hub_the_end"
        name: "Hub - The End"
        world: "worlds/hub_the_end/DIM1"

        # We dont want a blue sky in the end
        skyColor: "#080010"

        # In the end is no sky-light, so we need to enable this or we won't see anything.
        renderCaves: true

        # Same here, we don't want a dark map. But not completely lighted, so we see the effect of e.g torches.
        ambientLight: 0.6
    }

    # Here another example for the Nether-Map
    {
        id: "hub_nether"
        name: "Hub - Nether"
        world: "worlds/hub_nether/DIM-1"

        skyColor: "#290000"

        renderCaves: true
        ambientLight: 0.6

        # We slice the whole world at y:90 so every block above 90 will be air.
        # This way we don't render the nethers ceiling.
        maxY: 90
        renderEdges: true
    }

    {
        id: "splendour"
        name: "Splendour"
        world: "worlds/splendour"
        skyColor: "#7dabff" 
        ambientLight: 0
        renderCaves: false
        renderEdges: true
        useCompression: true
        ignoreMissingLightData: false
    }

    {
        id: "dunno"
        name: "Dunno"
        world: "worlds/dunno"
        skyColor: "#7dabff" 
        ambientLight: 0
        renderCaves: false
        renderEdges: true
        useCompression: true
        ignoreMissingLightData: false
    }

]

I haven't added all the maps to the list yet, as i was still testing how it runs. Is there any other setting somewhere else inside BlueMap that may cause anything like this to happen?

EDIT: oh and yes, i DID change almost all the default paths to redirect to the plugins/BlueMap folder indead, since yours defaulted to saving a lot of its files in the root of the server (yuck)

TBlueF commented 4 years ago

No, the config looks fine to me, i can also not think of anything else that could cause this kind of issue other than something on your server either changing the worldfolder-path that paper reports for your worlds, or unloading / not loading the worlds when bluemap is loading..

since yours defaulted to saving a lot of its files in the root of the server (yuck)

yep, that's why you can change it in the config, so everyone can have it how they desire ;)


Since i can't reproduce, I am closing this issue for now.. However feel free to reopen it if you find a way (on a fresh server or sth.) for me to reproduce the issue! :)