From 2bc0b2c583261f23615b4d93eaaf01cbc88d1014 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Tue, 16 Aug 2022 00:19:04 +0200 Subject: [PATCH] Fix lowres saving and loading issues --- .../bluemap/core/map/lowres/LowresLayer.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java index 6139cdbb..059d10f2 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java @@ -8,6 +8,7 @@ import de.bluecolored.bluemap.core.util.Vector2iCache; import de.bluecolored.bluemap.core.util.math.Color; import de.bluecolored.bluemap.core.world.Grid; +import org.checkerframework.checker.nullness.qual.NonNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; @@ -52,7 +53,15 @@ public LowresLayer( .scheduler(Scheduler.systemScheduler()) .expireAfterAccess(10, TimeUnit.SECONDS) .expireAfterWrite(5, TimeUnit.MINUTES) - .removalListener(this::saveTile) + .writer(new CacheWriter() { + @Override + public void write(@NonNull Vector2i key, @NonNull LowresTile value) {} + + @Override + public void delete(@NonNull Vector2i key, @Nullable LowresTile value, @NonNull RemovalCause cause) { + saveTile(key, value, cause); + } + }) .build(tileWeakInstanceCache::get); } @@ -63,13 +72,13 @@ public void save() { private LowresTile createTile(Vector2i tilePos) { try (InputStream in = mapStorage.read(lod, tilePos).orElse(null)) { - if (in == null) - return new LowresTile(tileGrid.getGridSize()); - return new LowresTile(tileGrid.getGridSize(), in); + if (in != null) return new LowresTile(tileGrid.getGridSize(), in); } catch (IOException e) { Logger.global.logError("Failed to load tile " + tilePos + " (lod: " + lod + ")", e); - return null; } + + // if the tile can not be loaded, we create a new one + return new LowresTile(tileGrid.getGridSize()); } private void saveTile(Vector2i tilePos, @Nullable LowresTile tile, RemovalCause removalCause) {