Skip to content

Commit dafabac

Browse files
committed
Add a way to register externally rendered or static maps without a world
1 parent fa36104 commit dafabac

File tree

6 files changed

+63
-37
lines changed

6 files changed

+63
-37
lines changed

BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/BlueMapService.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,16 @@ private synchronized void loadWorldsAndMaps() throws ConfigurationException, Int
174174

175175
String id = entry.getKey();
176176
String name = mapConfig.getName();
177+
if (name == null) name = id;
177178

178179
Path worldFolder = mapConfig.getWorld();
180+
181+
// if there is no world configured, we assume the map is static, or supplied from a different server
182+
if (worldFolder == null) {
183+
Logger.global.logInfo("The map '" + name + "' has no world configured. The map will be displayed, but not updated!");
184+
continue;
185+
}
186+
179187
if (!Files.isDirectory(worldFolder)) {
180188
throw new ConfigurationException("Failed to load map '" + id + "': \n" +
181189
"'" + worldFolder.toAbsolutePath().normalize() + "' does not exist or is no directory!\n" +
@@ -380,7 +388,9 @@ public synchronized ResourcePack getResourcePack() throws ConfigurationException
380388
private Collection<Path> getWorldFolders() {
381389
Set<Path> folders = new HashSet<>();
382390
for (MapConfig mapConfig : configs.getMapConfigs().values()) {
383-
Path folder = mapConfig.getWorld().toAbsolutePath().normalize();
391+
Path folder = mapConfig.getWorld();
392+
if (folder == null) continue;
393+
folder = folder.toAbsolutePath().normalize();
384394
if (Files.isDirectory(folder)) {
385395
folders.add(folder);
386396
}

BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/MapConfig.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import com.flowpowered.math.vector.Vector3i;
55
import de.bluecolored.bluemap.api.debug.DebugDump;
66
import de.bluecolored.bluemap.core.map.MapSettings;
7+
import org.jetbrains.annotations.Nullable;
78
import org.spongepowered.configurate.ConfigurationNode;
89
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
9-
import org.spongepowered.configurate.objectmapping.meta.Required;
1010

1111
import java.nio.file.Path;
1212
import java.util.Optional;
@@ -18,8 +18,7 @@ public class MapConfig implements MapSettings {
1818

1919
private String name = null;
2020

21-
@Required
22-
private Path world = Path.of("world");
21+
private Path world = null;
2322

2423
private int sorting = 0;
2524

@@ -58,10 +57,12 @@ public class MapConfig implements MapSettings {
5857
private int lowresPointsPerHiresTile = 4;
5958
private int lowresPointsPerLowresTile = 50;
6059

60+
@Nullable
6161
public String getName() {
6262
return name;
6363
}
6464

65+
@Nullable
6566
public Path getWorld() {
6667
return world;
6768
}
@@ -116,6 +117,7 @@ public boolean isIgnoreMissingLightData() {
116117
return ignoreMissingLightData;
117118
}
118119

120+
@Nullable
119121
public ConfigurationNode getMarkerSets() {
120122
return markerSets;
121123
}

BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/live/LivePlayersDataSupplier.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import de.bluecolored.bluemap.common.serverinterface.Player;
66
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
77
import de.bluecolored.bluemap.core.logger.Logger;
8+
import org.jetbrains.annotations.Nullable;
89

910
import java.io.IOException;
1011
import java.io.StringWriter;
@@ -16,7 +17,7 @@ public class LivePlayersDataSupplier implements Supplier<String> {
1617

1718
private final ServerInterface server;
1819
private final PluginConfig config;
19-
private final String worldId;
20+
@Nullable private final String worldId;
2021
private final Predicate<UUID> playerFilter;
2122

2223
public LivePlayersDataSupplier(ServerInterface server, PluginConfig config, String worldId, Predicate<UUID> playerFilter) {

BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import de.bluecolored.bluemap.core.map.BmMap;
4747
import de.bluecolored.bluemap.core.metrics.Metrics;
4848
import de.bluecolored.bluemap.core.storage.MetaType;
49+
import de.bluecolored.bluemap.core.storage.Storage;
4950
import de.bluecolored.bluemap.core.world.World;
5051
import org.spongepowered.configurate.gson.GsonConfigurationLoader;
5152
import org.spongepowered.configurate.serialize.SerializationException;
@@ -167,11 +168,23 @@ public void load() throws IOException {
167168
routingRequestHandler.register(".*", new FileRequestHandler(webroot));
168169

169170
// map route
170-
for (BmMap map : maps.values()) {
171+
for (var mapConfigEntry : getConfigs().getMapConfigs().entrySet()) {
172+
String id = mapConfigEntry.getKey();
173+
MapConfig mapConfig = mapConfigEntry.getValue();
174+
175+
MapRequestHandler mapRequestHandler;
176+
BmMap map = maps.get(id);
177+
if (map != null) {
178+
mapRequestHandler = new MapRequestHandler(map, serverInterface, pluginConfig, Predicate.not(pluginState::isPlayerHidden));
179+
} else {
180+
Storage storage = blueMap.getStorage(mapConfig.getStorage());
181+
mapRequestHandler = new MapRequestHandler(id, storage);
182+
}
183+
171184
routingRequestHandler.register(
172-
"maps/" + Pattern.quote(map.getId()) + "/(.*)",
185+
"maps/" + Pattern.quote(id) + "/(.*)",
173186
"$1",
174-
new MapRequestHandler(map, serverInterface, pluginConfig, Predicate.not(pluginState::isPlayerHidden))
187+
mapRequestHandler
175188
);
176189
}
177190

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,46 @@
11
package de.bluecolored.bluemap.common.web;
22

3-
import de.bluecolored.bluemap.api.markers.MarkerSet;
43
import de.bluecolored.bluemap.common.config.PluginConfig;
54
import de.bluecolored.bluemap.common.live.LiveMarkersDataSupplier;
65
import de.bluecolored.bluemap.common.live.LivePlayersDataSupplier;
76
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
87
import de.bluecolored.bluemap.core.map.BmMap;
98
import de.bluecolored.bluemap.core.storage.Storage;
9+
import org.jetbrains.annotations.Nullable;
1010

11-
import java.util.Map;
1211
import java.util.UUID;
1312
import java.util.function.Predicate;
13+
import java.util.function.Supplier;
1414

1515
public class MapRequestHandler extends RoutingRequestHandler {
1616

17-
public MapRequestHandler(BmMap map, ServerInterface serverInterface, PluginConfig pluginConfig,
18-
Predicate<UUID> playerFilter) {
19-
this(map.getId(), map.getWorldId(), map.getStorage(), map.getMarkerSets(),
20-
serverInterface, pluginConfig, playerFilter);
17+
public MapRequestHandler(BmMap map, ServerInterface serverInterface, PluginConfig pluginConfig, Predicate<UUID> playerFilter) {
18+
this(map.getId(), map.getStorage(),
19+
new LivePlayersDataSupplier(serverInterface, pluginConfig, map.getWorldId(), playerFilter),
20+
new LiveMarkersDataSupplier(map.getMarkerSets()));
2121
}
2222

23-
public MapRequestHandler(String mapId, String worldId, Storage mapStorage, Map<String, MarkerSet> markerSets,
24-
ServerInterface serverInterface, PluginConfig pluginConfig, Predicate<UUID> playerFilter) {
23+
public MapRequestHandler(String mapId, Storage mapStorage) {
24+
this(mapId, mapStorage, null, null);
25+
}
26+
27+
public MapRequestHandler(String mapId, Storage mapStorage,
28+
@Nullable Supplier<String> livePlayersDataSupplier,
29+
@Nullable Supplier<String> liveMarkerDataSupplier) {
30+
2531
register(".*", new MapStorageRequestHandler(mapId, mapStorage));
2632

27-
register("live/players", "", new JsonDataRequestHandler(
28-
new CachedRateLimitDataSupplier(
29-
new LivePlayersDataSupplier(serverInterface, pluginConfig, worldId, playerFilter),
30-
1000)
31-
));
32-
register("live/markers", "", new JsonDataRequestHandler(
33-
new CachedRateLimitDataSupplier(
34-
new LiveMarkersDataSupplier(markerSets),
35-
10000)
36-
));
33+
if (livePlayersDataSupplier != null) {
34+
register("live/players", "", new JsonDataRequestHandler(
35+
new CachedRateLimitDataSupplier(livePlayersDataSupplier,1000)
36+
));
37+
}
38+
39+
if (liveMarkerDataSupplier != null) {
40+
register("live/markers", "", new JsonDataRequestHandler(
41+
new CachedRateLimitDataSupplier(liveMarkerDataSupplier,10000)
42+
));
43+
}
3744
}
3845

3946
}

implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import de.bluecolored.bluemap.common.MissingResourcesException;
3030
import de.bluecolored.bluemap.common.config.BlueMapConfigs;
3131
import de.bluecolored.bluemap.common.config.ConfigurationException;
32-
import de.bluecolored.bluemap.common.config.MapConfig;
3332
import de.bluecolored.bluemap.common.config.WebserverConfig;
3433
import de.bluecolored.bluemap.common.plugin.RegionFileWatchService;
3534
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
@@ -48,6 +47,7 @@
4847
import de.bluecolored.bluemap.core.logger.LoggerLogger;
4948
import de.bluecolored.bluemap.core.map.BmMap;
5049
import de.bluecolored.bluemap.core.metrics.Metrics;
50+
import de.bluecolored.bluemap.core.storage.Storage;
5151
import org.apache.commons.cli.*;
5252
import org.apache.commons.lang3.time.DurationFormatUtils;
5353

@@ -80,11 +80,6 @@ public void renderMaps(BlueMapService blueMap, boolean watch, boolean forceRende
8080
//load maps
8181
Map<String, BmMap> maps = blueMap.getMaps();
8282

83-
//write static markers
84-
for (BmMap map : maps.values()) {
85-
86-
}
87-
8883
//watcher
8984
List<RegionFileWatchService> regionFileWatchServices = new ArrayList<>();
9085
if (watch) {
@@ -194,15 +189,13 @@ public void startWebserver(BlueMapService blueMap, boolean verbose) throws IOExc
194189
routingRequestHandler.register(".*", new FileRequestHandler(config.getWebroot()));
195190

196191
// map route
197-
for (var entry : blueMap.getConfigs().getMapConfigs().entrySet()) {
198-
String mapId = entry.getKey();
199-
MapConfig mapConfig = entry.getValue();
200-
String worldId = blueMap.getWorldId(mapConfig.getWorld());
192+
for (var mapId : blueMap.getConfigs().getMapConfigs().keySet()) {
193+
Storage storage = blueMap.getStorage(mapId);
201194

202195
routingRequestHandler.register(
203196
"maps/" + Pattern.quote(mapId) + "/(.*)",
204197
"$1",
205-
new MapRequestHandler(mapId, worldId, blueMap.getStorage(mapConfig.getStorage()), Map.of(), this, blueMap.getConfigs().getPluginConfig(), uuid -> true)
198+
new MapRequestHandler(mapId, storage)
206199
);
207200
}
208201

0 commit comments

Comments
 (0)