Skip to content

Warning "Unexpected dimension folder path layout" when using Paper dimension in sub folder #820

Description

@marcbal

What i did / Steps to reproduce

Imported a dimensions using mutiverse-core plugin on Paper server
/mv import pandacube:projects/vhanthares/vhanthares normal
This dimension is stored in serverPath/world/dimensions/pandacube/projects/vhanthares/vhanthares

Expected result

No warning, and Bluemap should properly support dimensions in sub directories (Minecraft keys support having / in their values (the part after :)

Actual result

This warning appearing in the logs when loading the dimension using its key.

[BlueMap] Unexpected dimension folder path layout '/data/workdir/worlds/archi/dimensions/pandacube/projects/vhanthares/vhanthares'.

Context

BlueMap Version:

BlueMap Version >
Version: 5.22
├ fe5115d5548a30d34175b8e0449aaca280af199f
├ Implementation: paper
└ Minecraft: 26.1.2
Available Processors: 15
Available Memory: 10.0 GiB

Multiverse-Core version (supports handling of new Paper world directory structure):

Multiverse Core Version v5.7.1

Paper version:

This server is running Paper version 26.1.2-70-ver/26.1.2@70eaed6 (2026-06-14T10:18:21Z) (Implementing API version 26.1.2.build.70-stable)

Workaround

Manually setup the map configuration in /plugins/BlueMap/maps with the correct world folder and dimension key.

Code analysis

public BukkitWorld(World delegate) {
this.delegate = new WeakReference<>(delegate);
Path dimensionFolder = delegate.getWorldPath().toAbsolutePath().normalize();
int nameCount = dimensionFolder.getNameCount();
if (nameCount < 3 || !"dimensions".equals(dimensionFolder.getName(nameCount - 3).toString())) {
Logger.global.logWarning("Unexpected dimension folder path layout '" + dimensionFolder + "'.");
this.worldFolder = dimensionFolder;
this.dimension = DataPack.DIMENSION_OVERWORLD;
} else {
this.worldFolder = dimensionFolder.getParent().getParent().getParent();
this.dimension = new Key(
dimensionFolder.getName(nameCount - 2).toString(),
dimensionFolder.getName(nameCount - 1).toString()
);
}

It looks like BlueMap expects a fixed number of directory traversal between the "dimensions" directory and the actual dimension directory, preventing the worlds in sub-directory to be properly detected.
The Paper API provides Bukkit.getServer().getLevelDirectory() that gives the level directory itself, that can be used for this.worldFolder. Also, delegate.getKey() already provides the key that can be used for this.dimension.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status
    Planned (unordered)

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions