9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2026-01-03 22:26:15 +00:00

fix lock not released if shutdown the server when editing offline player data

This commit is contained in:
XiaoMoMi
2023-09-07 04:14:32 +08:00
parent 32d309c192
commit 5edd6fbb4b
7 changed files with 14 additions and 10 deletions

View File

@@ -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

View File

@@ -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();

View File

@@ -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<OnlineUser> users, boolean unlock) {
for (OnlineUser user : users) {
public void savePlayersData(Collection<? extends OfflineUser> users, boolean unlock) {
for (OfflineUser user : users) {
this.savePlayerData(user.getUUID(), user.getPlayerData(), unlock);
}
}

View File

@@ -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<OnlineUser> users, boolean unlock) {
public void savePlayersData(Collection<? extends OfflineUser> users, boolean unlock) {
MongoCollection<Document> collection = database.getCollection(getCollectionName("data"));
try {
collection.insertMany(users.stream().map(it -> new Document()

View File

@@ -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<OnlineUser> users, boolean unlock) {
public void savePlayersData(Collection<? extends OfflineUser> 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());

View File

@@ -134,7 +134,7 @@ public class SQLiteImpl extends AbstractSQLDatabase {
}
@Override
public void saveOnlinePlayersData(Collection<OnlineUser> users, boolean unlock) {
public void savePlayersData(Collection<? extends OfflineUser> users, boolean unlock) {
String sql = String.format(SqlConstants.SQL_UPDATE_BY_UUID, getTableName("data"));
try (Connection connection = getConnection()) {
connection.setAutoCommit(false);