diff --git a/build.gradle b/build.gradle index 01b660e..fc7ad35 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'mysql:mysql-connector-java:5.1.33' implementation 'org.apache.commons:commons-lang3:3.6' compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.2-SNAPSHOT' - compileOnly name: 'languagy-1.2.5' + compileOnly name: 'languagy-1.2.6' } shadowJar { diff --git a/libraries/languagy-1.2.5.jar b/libraries/languagy-1.2.6.jar similarity index 92% rename from libraries/languagy-1.2.5.jar rename to libraries/languagy-1.2.6.jar index be7b498..1506a69 100644 Binary files a/libraries/languagy-1.2.5.jar and b/libraries/languagy-1.2.6.jar differ diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java b/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java index 68d85e6..be1067a 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java +++ b/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java @@ -43,7 +43,7 @@ public class SqlStorage implements StorageManager { if (cachedAccounts.containsKey(uuid)) { future.complete(cachedAccounts.get(uuid)); } else { - DB.getResultsAsync("SELECT region FROM Discoveries WHERE uuid = ?", getDatabaseUuid(uuid)).whenComplete((results, error) -> { + DB.getResultsAsync("SELECT region FROM Discoveries WHERE uuid = ?", getDatabaseUuid(uuid).toString()).whenComplete((results, error) -> { List regions = new ArrayList<>(); for (DbRow row : results) { regions.add(new WorldDiscovery(Date.valueOf(row.getString("time")), row.getString("region"))); @@ -75,7 +75,7 @@ public class SqlStorage implements StorageManager { for (Discovery region : account.getDiscoveredRegions()) { if (!current.contains(region)) { try { - DB.executeInsert("INSERT INTO Discoveries (uuid, region, time) VALUES (?, ?, ?)", uuid, region.getRegion(), region.getDate().toString()); + DB.executeInsert("INSERT INTO Discoveries (uuid, region, time) VALUES (?, ?, ?)", getDatabaseUuid(uuid).toString(), region.getRegion(), region.getDate().toString()); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/yml/YamlStorage.java b/src/main/java/net/islandearth/rpgregions/managers/data/yml/YamlStorage.java index f1ed8b2..c939741 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/data/yml/YamlStorage.java +++ b/src/main/java/net/islandearth/rpgregions/managers/data/yml/YamlStorage.java @@ -1,26 +1,83 @@ package net.islandearth.rpgregions.managers.data.yml; +import com.google.common.collect.ImmutableMap; +import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.managers.data.StorageManager; import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; +import net.islandearth.rpgregions.managers.data.region.Discovery; +import net.islandearth.rpgregions.managers.data.region.WorldDiscovery; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; +import java.io.File; +import java.io.IOException; +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class YamlStorage implements StorageManager { + private ConcurrentMap cachedAccounts = new ConcurrentHashMap<>(); + @Override public CompletableFuture getAccount(UUID uuid) { - return null; + CompletableFuture future = new CompletableFuture<>(); + if (cachedAccounts.containsKey(uuid)) { + future.complete(cachedAccounts.get(uuid)); + } else { + File file = new File(JavaPlugin.getPlugin(RPGRegions.class).getDataFolder() + "/accounts/" + uuid.toString() + ".yml"); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + List regions = new ArrayList<>(); + for (String results : config.getStringList("Discoveries")) { + String[] data = results.split(";"); + Date time = Date.valueOf(data[0]); + String region = data[1]; + regions.add(new WorldDiscovery(time, region)); + } + + RPGRegionsAccount account = new RPGRegionsAccount(uuid, regions); + cachedAccounts.put(uuid, account); + future.complete(account); + } + return future; } @Override public ConcurrentMap getCachedAccounts() { - return null; + return (ConcurrentMap) ImmutableMap.copyOf(cachedAccounts); } @Override public void removeCachedAccount(UUID uuid) { + RPGRegionsAccount account = cachedAccounts.get(uuid); + File file = new File(JavaPlugin.getPlugin(RPGRegions.class).getDataFolder() + "/accounts/" + uuid.toString() + ".yml"); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + List current = new ArrayList<>(); + for (String results : config.getStringList("Discoveries")) { + String[] data = results.split(";"); + Date time = Date.valueOf(data[0]); + String region = data[1]; + current.add(new WorldDiscovery(time, region)); + } + List newData = config.getStringList("Discoveries"); + for (Discovery region : account.getDiscoveredRegions()) { + if (!current.contains(region)) { + newData.add(region.getDate().toString() + ";" + region.getRegion()); + } + } + + config.set("Discoveries", newData); + try { + config.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + cachedAccounts.remove(uuid); } }