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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user