Skip to content

Commit 659fb99

Browse files
committed
Avoid NPE if accessing the API while bluemap is unloaded
1 parent 5933d43 commit 659fb99

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/api/BlueMapAPIImpl.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,11 @@
3232
import de.bluecolored.bluemap.common.plugin.Plugin;
3333
import de.bluecolored.bluemap.core.BlueMap;
3434
import de.bluecolored.bluemap.core.logger.Logger;
35+
import de.bluecolored.bluemap.core.map.BmMap;
3536
import de.bluecolored.bluemap.core.world.World;
3637

3738
import java.io.IOException;
38-
import java.util.Collection;
39-
import java.util.Objects;
40-
import java.util.Optional;
41-
import java.util.UUID;
39+
import java.util.*;
4240
import java.util.concurrent.ExecutionException;
4341
import java.util.stream.Collectors;
4442

@@ -77,7 +75,10 @@ public de.bluecolored.bluemap.api.plugin.Plugin getPlugin() {
7775

7876
@Override
7977
public Collection<BlueMapMap> getMaps() {
80-
return plugin.getMaps().values().stream()
78+
Map<String, BmMap> maps = plugin.getMaps();
79+
if (maps == null) return Collections.emptyList();
80+
81+
return maps.values().stream()
8182
.map(map -> {
8283
try {
8384
return new BlueMapMapImpl(plugin, map);
@@ -92,7 +93,10 @@ public Collection<BlueMapMap> getMaps() {
9293

9394
@Override
9495
public Collection<BlueMapWorld> getWorlds() {
95-
return plugin.getWorlds().values().stream()
96+
Map<String, World> worlds = plugin.getWorlds();
97+
if (worlds == null) return Collections.emptyList();
98+
99+
return worlds.values().stream()
96100
.map(world -> getWorld(world).orElse(null))
97101
.filter(Objects::nonNull)
98102
.collect(Collectors.toUnmodifiableSet());
@@ -104,14 +108,16 @@ public Optional<BlueMapWorld> getWorld(Object world) {
104108
}
105109

106110
public Optional<BlueMapWorld> getWorldUncached(Object world) {
111+
var worlds = plugin.getWorlds();
112+
if (worlds == null) return Optional.empty();
107113

108114
if (world instanceof UUID) {
109-
var coreWorld = plugin.getWorlds().get(world.toString());
115+
var coreWorld = worlds.get(world.toString());
110116
if (coreWorld != null) world = coreWorld;
111117
}
112118

113119
if (world instanceof String) {
114-
var coreWorld = plugin.getWorlds().get(world);
120+
var coreWorld = worlds.get(world);
115121
if (coreWorld != null) world = coreWorld;
116122
}
117123

@@ -130,7 +136,7 @@ public Optional<BlueMapWorld> getWorldUncached(Object world) {
130136

131137
try {
132138
String id = plugin.getBlueMap().getWorldId(serverWorld.getSaveFolder());
133-
var coreWorld = plugin.getWorlds().get(id);
139+
var coreWorld = worlds.get(id);
134140
if (coreWorld == null) return Optional.empty();
135141

136142
return Optional.of(new BlueMapWorldImpl(plugin, coreWorld));
@@ -147,7 +153,10 @@ public Optional<BlueMapMap> getMap(String id) {
147153
}
148154

149155
public Optional<BlueMapMap> getMapUncached(String id) {
150-
var map = plugin.getMaps().get(id);
156+
var maps = plugin.getMaps();
157+
if (maps == null) return Optional.empty();
158+
159+
var map = maps.get(id);
151160
if (map == null) return Optional.empty();
152161

153162
var world = getWorld(map.getWorld()).orElse(null);

0 commit comments

Comments
 (0)