diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index 6105cc2..e9a33fd 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -164,6 +164,10 @@ public class Level extends Addon { * @param level - level */ public void setIslandLevel(World world, UUID targetPlayer, long level) { + if (world == null || targetPlayer == null) { + this.logError("Level: request to store a null " + world + " " + targetPlayer); + return; + } LevelsData ld = getLevelsData(targetPlayer); if (ld == null) { ld = new LevelsData(targetPlayer, level, world); @@ -181,6 +185,10 @@ public class Level extends Addon { * @param level - initial calculated island level */ public void setInitialIslandLevel(Island island, long level) { + if (island.getWorld() == null || island.getOwner() == null) { + this.logError("Level: request to store a null (initial) " + island.getWorld() + " " + island.getOwner()); + return; + } setIslandLevel(island.getWorld(), island.getOwner(), level); levelsCache.get(island.getOwner()).setInitialIslandLevel(level); } @@ -190,7 +198,7 @@ public class Level extends Addon { } public void uncachePlayer(UUID uniqueId) { - if (levelsCache.containsKey(uniqueId)) { + if (levelsCache.containsKey(uniqueId) && levelsCache.get(uniqueId) != null) { handler.saveObject(levelsCache.get(uniqueId)); } levelsCache.remove(uniqueId); diff --git a/src/main/java/world/bentobox/level/listeners/NewIslandListener.java b/src/main/java/world/bentobox/level/listeners/NewIslandListener.java index 3e1d3a8..afd584a 100644 --- a/src/main/java/world/bentobox/level/listeners/NewIslandListener.java +++ b/src/main/java/world/bentobox/level/listeners/NewIslandListener.java @@ -33,12 +33,16 @@ public class NewIslandListener implements Listener { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onNewIsland(IslandCreatedEvent e) { - cil.putIfAbsent(e.getIsland(), new CalcIslandLevel(addon, e.getIsland(), () -> zeroLevel(e.getIsland()))); + if (e.getIsland().getOwner() != null && e.getIsland().getWorld() != null) { + cil.putIfAbsent(e.getIsland(), new CalcIslandLevel(addon, e.getIsland(), () -> zeroLevel(e.getIsland()))); + } } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onNewIsland(IslandResettedEvent e) { - cil.putIfAbsent(e.getIsland(), new CalcIslandLevel(addon, e.getIsland(), () -> zeroLevel(e.getIsland()))); + if (e.getIsland().getOwner() != null && e.getIsland().getWorld() != null) { + cil.putIfAbsent(e.getIsland(), new CalcIslandLevel(addon, e.getIsland(), () -> zeroLevel(e.getIsland()))); + } } private void zeroLevel(Island island) {