From 5edd6fbb4bac358ef701b2531c2b1e55d1c7f24c Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Thu, 7 Sep 2023 04:14:32 +0800 Subject: [PATCH] fix lock not released if shutdown the server when editing offline player data --- .../customfishing/api/data/DataStorageInterface.java | 3 ++- .../customfishing/mechanic/bag/BagManagerImpl.java | 2 +- .../momirealms/customfishing/storage/StorageManagerImpl.java | 4 ++-- .../customfishing/storage/method/AbstractStorage.java | 5 +++-- .../storage/method/database/nosql/MongoDBImpl.java | 3 ++- .../storage/method/database/sql/AbstractSQLDatabase.java | 5 +++-- .../storage/method/database/sql/SQLiteImpl.java | 2 +- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/net/momirealms/customfishing/api/data/DataStorageInterface.java b/api/src/main/java/net/momirealms/customfishing/api/data/DataStorageInterface.java index 34839ea0..85384083 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/data/DataStorageInterface.java +++ b/api/src/main/java/net/momirealms/customfishing/api/data/DataStorageInterface.java @@ -17,6 +17,7 @@ package net.momirealms.customfishing.api.data; +import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.data.user.OnlineUser; import java.util.Collection; @@ -35,5 +36,5 @@ public interface DataStorageInterface { CompletableFuture savePlayerData(UUID uuid, PlayerData playerData, boolean unlock); - void saveOnlinePlayersData(Collection users, boolean unlock); + void savePlayersData(Collection users, boolean unlock); } diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java index 017a9303..b6d2daaa 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/bag/BagManagerImpl.java @@ -22,7 +22,6 @@ import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.manager.BagManager; import net.momirealms.customfishing.api.mechanic.bag.FishingBagHolder; -import net.momirealms.customfishing.api.util.LogUtils; import net.momirealms.customfishing.setting.Config; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -61,6 +60,7 @@ public class BagManagerImpl implements BagManager, Listener { public void disable() { unload(); + plugin.getStorageManager().getDataSource().savePlayersData(tempEditMap.values(), true); } @Override diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/StorageManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/storage/StorageManagerImpl.java index 7d1997cd..3fcea589 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/StorageManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/StorageManagerImpl.java @@ -113,7 +113,7 @@ public class StorageManagerImpl implements StorageManager, Listener { this.timerSaveTask = this.plugin.getScheduler().runTaskAsyncTimer( () -> { long time1 = System.currentTimeMillis(); - this.dataSource.saveOnlinePlayersData(this.onlineUserMap.values(), false); + this.dataSource.savePlayersData(this.onlineUserMap.values(), false); LogUtils.info("Data Saved for online players. Took " + (System.currentTimeMillis() - time1) + "ms."); }, Config.dataSaveInterval, @@ -124,7 +124,7 @@ public class StorageManagerImpl implements StorageManager, Listener { public void disable() { HandlerList.unregisterAll(this); - this.dataSource.saveOnlinePlayersData(onlineUserMap.values(), true); + this.dataSource.savePlayersData(onlineUserMap.values(), true); this.onlineUserMap.clear(); if (this.dataSource != null) this.dataSource.disable(); diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/method/AbstractStorage.java b/plugin/src/main/java/net/momirealms/customfishing/storage/method/AbstractStorage.java index 6f3e05a3..b4ae2a9d 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/method/AbstractStorage.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/method/AbstractStorage.java @@ -19,6 +19,7 @@ package net.momirealms.customfishing.storage.method; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.DataStorageInterface; +import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.data.user.OnlineUser; import java.time.Instant; @@ -47,8 +48,8 @@ public abstract class AbstractStorage implements DataStorageInterface { } @Override - public void saveOnlinePlayersData(Collection users, boolean unlock) { - for (OnlineUser user : users) { + public void savePlayersData(Collection users, boolean unlock) { + for (OfflineUser user : users) { this.savePlayerData(user.getUUID(), user.getPlayerData(), unlock); } } diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/MongoDBImpl.java b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/MongoDBImpl.java index 05c017f2..7628e14c 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/MongoDBImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/MongoDBImpl.java @@ -27,6 +27,7 @@ import com.mongodb.client.result.InsertOneResult; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.PlayerData; import net.momirealms.customfishing.api.data.StorageType; +import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.data.user.OnlineUser; import net.momirealms.customfishing.api.util.LogUtils; import net.momirealms.customfishing.storage.method.AbstractStorage; @@ -152,7 +153,7 @@ public class MongoDBImpl extends AbstractStorage { } @Override - public void saveOnlinePlayersData(Collection users, boolean unlock) { + public void savePlayersData(Collection users, boolean unlock) { MongoCollection collection = database.getCollection(getCollectionName("data")); try { collection.insertMany(users.stream().map(it -> new Document() diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/AbstractSQLDatabase.java b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/AbstractSQLDatabase.java index 842fa69c..edfb555d 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/AbstractSQLDatabase.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/AbstractSQLDatabase.java @@ -19,6 +19,7 @@ package net.momirealms.customfishing.storage.method.database.sql; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.PlayerData; +import net.momirealms.customfishing.api.data.user.OfflineUser; import net.momirealms.customfishing.api.data.user.OnlineUser; import net.momirealms.customfishing.api.util.LogUtils; import net.momirealms.customfishing.setting.Config; @@ -137,12 +138,12 @@ public abstract class AbstractSQLDatabase extends AbstractStorage { } @Override - public void saveOnlinePlayersData(Collection users, boolean unlock) { + public void savePlayersData(Collection users, boolean unlock) { String sql = String.format(SqlConstants.SQL_UPDATE_BY_UUID, getTableName("data")); try (Connection connection = getConnection()) { connection.setAutoCommit(false); try (PreparedStatement statement = connection.prepareStatement(sql)) { - for (OnlineUser user : users) { + for (OfflineUser user : users) { statement.setInt(1, unlock ? 0 : getCurrentSeconds()); statement.setBlob(2, new ByteArrayInputStream(plugin.getStorageManager().toBytes(user.getPlayerData()))); statement.setString(3, user.getUUID().toString()); diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/SQLiteImpl.java b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/SQLiteImpl.java index da015cb5..56c82f5e 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/SQLiteImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/sql/SQLiteImpl.java @@ -134,7 +134,7 @@ public class SQLiteImpl extends AbstractSQLDatabase { } @Override - public void saveOnlinePlayersData(Collection users, boolean unlock) { + public void savePlayersData(Collection users, boolean unlock) { String sql = String.format(SqlConstants.SQL_UPDATE_BY_UUID, getTableName("data")); try (Connection connection = getConnection()) { connection.setAutoCommit(false);