diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/commands/Commands.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/commands/Commands.java index bd09b776..89e9661f 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/commands/Commands.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/commands/Commands.java @@ -790,12 +790,20 @@ public int purgeCommand(CommandContext context) { plugin.getRenderManager().scheduleRenderTaskNext(purgeTask); source.sendMessage(Text.of(TextColor.GREEN, "Created new Task to purge map '" + map.getId() + "'")); - // reset the map and start updating it after the purge - RenderTask updateTask = new MapUpdateTask(map); - plugin.getRenderManager().scheduleRenderTask(updateTask); - source.sendMessage(Text.of(TextColor.GREEN, "Created new Update-Task for map '" + map.getId() + "'")); - source.sendMessage(Text.of(TextColor.GRAY, "If you don't want this map to render again after the purge, use ", - TextColor.DARK_GRAY, "/bluemap freeze " + map.getId(), TextColor.GRAY, " first!")); + // cancel task if currently rendering the same map + RenderTask currentRenderTask = plugin.getRenderManager().getCurrentRenderTask(); + if (currentRenderTask instanceof MapUpdateTask && ((MapUpdateTask) currentRenderTask).getMap().getId().equals(map.getId())) { + currentRenderTask.cancel(); + } + + // start updating the map after the purge + if (plugin.getPluginState().getMapState(map).isUpdateEnabled()) { + RenderTask updateTask = new MapUpdateTask(map); + plugin.getRenderManager().scheduleRenderTask(updateTask); + source.sendMessage(Text.of(TextColor.GREEN, "Created new Update-Task for map '" + map.getId() + "'")); + source.sendMessage(Text.of(TextColor.GRAY, "If you don't want this map to render again after the purge, use ", + TextColor.DARK_GRAY, "/bluemap freeze " + map.getId(), TextColor.GRAY, " first!")); + } source.sendMessage(Text.of(TextColor.GREEN, "Use ", TextColor.GRAY, "/bluemap", TextColor.GREEN, " to see the progress.")); } catch (IOException | IllegalArgumentException e) { diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/rendermanager/MapPurgeTask.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/rendermanager/MapPurgeTask.java index aab4c90e..03a2a911 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/rendermanager/MapPurgeTask.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/rendermanager/MapPurgeTask.java @@ -91,6 +91,9 @@ public void doWork() throws Exception { } try { + // save lowres-tile-manager to clear/flush any buffered data + this.map.getLowresTileManager().save(); + // delete subFiles first to be able to track the progress and cancel while (!subFiles.isEmpty()) { Path subFile = subFiles.getLast();