88import de .bluecolored .bluemap .core .util .Vector2iCache ;
99import de .bluecolored .bluemap .core .util .math .Color ;
1010import de .bluecolored .bluemap .core .world .Grid ;
11+ import org .checkerframework .checker .nullness .qual .NonNull ;
1112import org .jetbrains .annotations .Nullable ;
1213
1314import java .io .IOException ;
@@ -52,7 +53,15 @@ public LowresLayer(
5253 .scheduler (Scheduler .systemScheduler ())
5354 .expireAfterAccess (10 , TimeUnit .SECONDS )
5455 .expireAfterWrite (5 , TimeUnit .MINUTES )
55- .removalListener (this ::saveTile )
56+ .writer (new CacheWriter <Vector2i , LowresTile >() {
57+ @ Override
58+ public void write (@ NonNull Vector2i key , @ NonNull LowresTile value ) {}
59+
60+ @ Override
61+ public void delete (@ NonNull Vector2i key , @ Nullable LowresTile value , @ NonNull RemovalCause cause ) {
62+ saveTile (key , value , cause );
63+ }
64+ })
5665 .build (tileWeakInstanceCache ::get );
5766 }
5867
@@ -63,13 +72,13 @@ public void save() {
6372
6473 private LowresTile createTile (Vector2i tilePos ) {
6574 try (InputStream in = mapStorage .read (lod , tilePos ).orElse (null )) {
66- if (in == null )
67- return new LowresTile (tileGrid .getGridSize ());
68- return new LowresTile (tileGrid .getGridSize (), in );
75+ if (in != null ) return new LowresTile (tileGrid .getGridSize (), in );
6976 } catch (IOException e ) {
7077 Logger .global .logError ("Failed to load tile " + tilePos + " (lod: " + lod + ")" , e );
71- return null ;
7278 }
79+
80+ // if the tile can not be loaded, we create a new one
81+ return new LowresTile (tileGrid .getGridSize ());
7382 }
7483
7584 private void saveTile (Vector2i tilePos , @ Nullable LowresTile tile , RemovalCause removalCause ) {
0 commit comments