Skip to content

Commit

Permalink
Fixed issues with cache overwritten each time loading data, causing t…
Browse files Browse the repository at this point in the history
…o data to not actually be loaded
  • Loading branch information
OmerBenGera committed Jan 6, 2022
1 parent 9de38de commit 00079f8
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 38 deletions.
Expand Up @@ -4,6 +4,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.function.Supplier;

public final class DatabaseCache<V> {

Expand All @@ -13,9 +14,8 @@ public DatabaseCache() {

}

public V addCachedInfo(UUID uuid, V value) {
cache.put(uuid, value);
return value;
public V computeIfAbsentInfo(UUID uuid, Supplier<V> value) {
return cache.computeIfAbsent(uuid, u -> value.get());
}

@Nullable
Expand Down
Expand Up @@ -74,7 +74,7 @@ public static void deserializeMembers(DatabaseBridge databaseBridge, DatabaseCac
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);

PlayerRole playerRole = members.getInt("role").map(SPlayerRole::fromId)
.orElse(SPlayerRole.defaultRole());
Expand Down Expand Up @@ -102,7 +102,7 @@ public static void deserializeBanned(DatabaseBridge databaseBridge, DatabaseCach
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
SuperiorPlayer superiorPlayer = plugin.getPlayers().getSuperiorPlayer(playerUUID.get());
cachedIslandInfo.bannedPlayers.add(superiorPlayer);
});
Expand All @@ -124,7 +124,7 @@ public static void deserializeVisitors(DatabaseBridge databaseBridge, DatabaseCa
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(islandUUID.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(islandUUID.get(), CachedIslandInfo::new);
SuperiorPlayer visitorPlayer = plugin.getPlayers().getSuperiorPlayer(uuid.get());
long visitTime = visitors.getLong("visit_time").orElse(System.currentTimeMillis());
cachedIslandInfo.uniqueVisitors.add(new Pair<>(visitorPlayer, visitTime));
Expand Down Expand Up @@ -165,7 +165,7 @@ public static void deserializePlayerPermissions(DatabaseBridge databaseBridge, D
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
SuperiorPlayer superiorPlayer = plugin.getPlayers().getSuperiorPlayer(playerUUID.get());
PlayerPermissionNode permissionNode = cachedIslandInfo.playerPermissions.computeIfAbsent(superiorPlayer,
s -> new PlayerPermissionNode(superiorPlayer, null));
Expand Down Expand Up @@ -201,7 +201,7 @@ public static void deserializeRolePermissions(DatabaseBridge databaseBridge, Dat
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.rolePermissions.put(islandPrivilege.get(), playerRole.get());
});
}
Expand All @@ -228,7 +228,7 @@ public static void deserializeUpgrades(DatabaseBridge databaseBridge, DatabaseCa
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.upgrades.put(upgrade.get(), level.get());
});
}
Expand Down Expand Up @@ -264,7 +264,7 @@ public static void deserializeWarps(DatabaseBridge databaseBridge, DatabaseCache
cachedWarpInfo.isPrivate = islandWarp.getBoolean("private").orElse(true);
cachedWarpInfo.icon = islandWarp.getString("icon").map(ItemUtils::deserializeItem).orElse(null);

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.cachedWarpInfoList.add(cachedWarpInfo);
});
}
Expand Down Expand Up @@ -311,7 +311,7 @@ public static void deserializeBlockLimits(DatabaseBridge databaseBridge, Databas
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.blockLimits.put(block.get(), new UpgradeValue<>(limit.get(), i -> i < 0));
});
}
Expand All @@ -338,7 +338,7 @@ public static void deserializeEntityLimits(DatabaseBridge databaseBridge, Databa
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.entityLimits.put(entity.get(), new UpgradeValue<>(limit.get(), i -> i < 0));
});
}
Expand Down Expand Up @@ -371,7 +371,7 @@ public static void deserializeRatings(DatabaseBridge databaseBridge, DatabaseCac
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(islandUUID.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(islandUUID.get(), CachedIslandInfo::new);
cachedIslandInfo.ratings.put(uuid.get(), rating.get());
});
}
Expand All @@ -398,7 +398,7 @@ public static void deserializeMissions(DatabaseBridge databaseBridge, DatabaseCa
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.completedMissions.put(mission.get(), finishCount.get());
});
}
Expand Down Expand Up @@ -431,7 +431,7 @@ public static void deserializeIslandFlags(DatabaseBridge databaseBridge, Databas
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.islandFlags.put(islandFlag.get(), status.get());
});
}
Expand Down Expand Up @@ -465,7 +465,7 @@ public static void deserializeGenerators(DatabaseBridge databaseBridge, Database
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
(cachedIslandInfo.cobbleGeneratorValues[environment.get()] = new KeyMap<>())
.put(block.get(), new UpgradeValue<>(rate.get(), n -> n < 0));
});
Expand Down Expand Up @@ -494,7 +494,7 @@ public static void deserializeIslandHomes(DatabaseBridge databaseBridge, Databas
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.islandHomes[environment.get()] = location.get();
});
}
Expand Down Expand Up @@ -522,7 +522,7 @@ public static void deserializeVisitorHomes(DatabaseBridge databaseBridge, Databa
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.visitorHomes[environment.get()] = location.get();
});
}
Expand Down Expand Up @@ -550,7 +550,7 @@ public static void deserializeEffects(DatabaseBridge databaseBridge, DatabaseCac
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.islandEffects.put(effectType.get(), new UpgradeValue<>(level.get(), i -> i < 0));
});
}
Expand All @@ -577,7 +577,7 @@ public static void deserializeIslandChest(DatabaseBridge databaseBridge, Databas
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);

while (index.get() > cachedIslandInfo.islandChests.size()) {
cachedIslandInfo.islandChests.add(new ItemStack[plugin.getSettings().getIslandChests().getDefaultSize()]);
Expand Down Expand Up @@ -609,7 +609,7 @@ public static void deserializeRoleLimits(DatabaseBridge databaseBridge, Database
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.roleLimits.put(playerRole.get(), new UpgradeValue<>(limit.get(), i -> i < 0));
});
}
Expand All @@ -635,7 +635,7 @@ public static void deserializeWarpCategories(DatabaseBridge databaseBridge, Data
cachedWarpCategoryInfo.slot = warpCategory.getInt("slot").orElse(-1);
cachedWarpCategoryInfo.icon = warpCategory.getString("icon").map(ItemUtils::deserializeItem).orElse(null);

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.cachedWarpCategoryInfoList.add(cachedWarpCategoryInfo);
});
}
Expand All @@ -658,7 +658,7 @@ public static void deserializeIslandBank(DatabaseBridge databaseBridge, Database

long currentTime = System.currentTimeMillis() / 1000;

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
cachedIslandInfo.balance = balance.get();
cachedIslandInfo.lastInterestTime = islandBank.getLong("last_interest_time").orElse(currentTime);

Expand All @@ -678,7 +678,7 @@ public static void deserializeIslandSettings(DatabaseBridge databaseBridge, Data
}

UUID uuid = UUID.fromString(island.get());
CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid, new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid, CachedIslandInfo::new);

cachedIslandInfo.islandSize = new UpgradeValue<>(islandSettings.getInt("size")
.orElse(-1), i -> i < 0);
Expand Down Expand Up @@ -710,7 +710,7 @@ public static void deserializeBankTransactions(DatabaseBridge databaseBridge, Da
return;
}

CachedIslandInfo cachedIslandInfo = databaseCache.addCachedInfo(uuid.get(), new CachedIslandInfo());
CachedIslandInfo cachedIslandInfo = databaseCache.computeIfAbsentInfo(uuid.get(), CachedIslandInfo::new);
SBankTransaction.fromDatabase(bankTransaction).ifPresent(cachedIslandInfo.bankTransactions::add);
});
}
Expand Down
Expand Up @@ -32,7 +32,7 @@ public static void deserializeMissions(DatabaseBridge databaseBridge, DatabaseCa
}

UUID uuid = UUID.fromString(player.get());
CachedPlayerInfo cachedPlayerInfo = databaseCache.addCachedInfo(uuid, new CachedPlayerInfo());
CachedPlayerInfo cachedPlayerInfo = databaseCache.computeIfAbsentInfo(uuid, CachedPlayerInfo::new);

Optional<String> name = missions.getString("name");

Expand Down Expand Up @@ -67,18 +67,18 @@ public static void deserializePlayerSettings(DatabaseBridge databaseBridge, Data
}

UUID uuid = UUID.fromString(player.get());
CachedPlayerInfo cachedPlayerInfo = databaseCache.addCachedInfo(uuid, new CachedPlayerInfo());

playerSettings.getBoolean("toggled_panel").ifPresent(toggledPanel ->
cachedPlayerInfo.toggledPanel = toggledPanel);
playerSettings.getBoolean("island_fly").ifPresent(islandFly ->
cachedPlayerInfo.islandFly = islandFly);
playerSettings.getString("border_color").ifPresent(borderColor ->
BorderColor.safeValue(borderColor, BorderColor.BLUE));
playerSettings.getString("language").ifPresent(userLocale ->
cachedPlayerInfo.userLocale = PlayerLocales.getLocale(userLocale));
playerSettings.getBoolean("toggled_border").ifPresent(worldBorderEnabled ->
cachedPlayerInfo.worldBorderEnabled = worldBorderEnabled);
CachedPlayerInfo cachedPlayerInfo = databaseCache.computeIfAbsentInfo(uuid, CachedPlayerInfo::new);

cachedPlayerInfo.toggledPanel = playerSettings.getBoolean("toggled_panel")
.orElse(plugin.getSettings().isDefaultToggledPanel());
cachedPlayerInfo.islandFly = playerSettings.getBoolean("island_fly")
.orElse(plugin.getSettings().isDefaultIslandFly());
cachedPlayerInfo.borderColor = playerSettings.getEnum("border_color", BorderColor.class)
.orElse(BorderColor.BLUE);
cachedPlayerInfo.userLocale = playerSettings.getString("language").map(PlayerLocales::getLocale)
.orElse(PlayerLocales.getDefaultLocale());
cachedPlayerInfo.worldBorderEnabled = playerSettings.getBoolean("toggled_border")
.orElse(plugin.getSettings().isDefaultWorldBorder());
});
}

Expand Down

0 comments on commit 00079f8

Please sign in to comment.