From e68aacfd5de36d0a1c39cc081a7a0b73b43d7f81 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Tue, 6 Feb 2024 00:31:41 +0100 Subject: [PATCH] Improve autogenerated config names --- .../common/config/BlueMapConfigManager.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigManager.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigManager.java index c08bc70b..72a01450 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigManager.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigManager.java @@ -239,20 +239,33 @@ public class BlueMapConfigManager implements BlueMapConfiguration { StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING ); } else { - for (var world : autoConfigWorlds) { - Path worldFolder = world.getWorldFolder(); + // make sure overworld-dimensions come first, so they are the ones where the + // dimension-key is omitted in the generated map-id + List overworldFirstAutoConfigWorlds = new ArrayList<>(autoConfigWorlds.size()); + overworldFirstAutoConfigWorlds.addAll(autoConfigWorlds); + overworldFirstAutoConfigWorlds.sort(Comparator.comparingInt(w -> + DataPack.DIMENSION_OVERWORLD.equals(w.getDimension()) ? 0 : 1 + )); + + Set mapIds = new HashSet<>(); + for (var world : overworldFirstAutoConfigWorlds) { + Path worldFolder = world.getWorldFolder().normalize(); Key dimension = world.getDimension(); String dimensionName = dimension.getNamespace().equals("minecraft") ? dimension.getValue() : dimension.getFormatted(); - String id = sanitiseMapId(worldFolder.getFileName() + "_" + dimensionName).toLowerCase(Locale.ROOT); - Path configFile = mapConfigFolder.resolve(id + ".conf"); + // find unique map id + String id = sanitiseMapId(worldFolder.getFileName().toString()).toLowerCase(Locale.ROOT); + if (mapIds.contains(id)) + id = sanitiseMapId(worldFolder.getFileName() + "_" + dimensionName).toLowerCase(Locale.ROOT); int i = 1; - while (Files.exists(configFile)) { - configFile = mapConfigFolder.resolve(id + '_' + (++i) + ".conf"); - } + String uniqueId = id; + while (mapIds.contains(uniqueId)) + uniqueId = id + "_" + (++i); + mapIds.add(uniqueId); + Path configFile = mapConfigFolder.resolve(uniqueId + ".conf"); String name = worldFolder.getFileName() + " (" + dimensionName + ")"; if (i > 1) name = name + " (" + i + ")";