diff --git a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java index a2d5a540..2caf547c 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/CustomFishingPluginImpl.java @@ -184,6 +184,8 @@ public class CustomFishingPluginImpl extends CustomFishingPlugin { "com.google.code.gson:gson:2.10.1", libRepo, "com.h2database:h2:2.2.220", libRepo, "org.mongodb:mongodb-driver-sync:4.10.2", libRepo, + "org.mongodb:mongodb-driver-core:4.10.2", libRepo, + "org.mongodb:bson:4.10.2", libRepo, "org.xerial:sqlite-jdbc:3.42.0.0", libRepo, "dev.jorel:commandapi-bukkit-shade:9.1.0", "https://repo.maven.apache.org/maven2/" ); 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 5f582579..4d2ba237 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 @@ -18,12 +18,14 @@ package net.momirealms.customfishing.storage.method.database.nosql; import com.mongodb.*; +import com.mongodb.bulk.BulkWriteResult; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; -import com.mongodb.client.model.Filters; +import com.mongodb.client.model.*; import com.mongodb.client.result.InsertOneResult; +import com.mongodb.client.result.UpdateResult; import net.momirealms.customfishing.api.CustomFishingPlugin; import net.momirealms.customfishing.api.data.PlayerData; import net.momirealms.customfishing.api.data.StorageType; @@ -32,16 +34,14 @@ import net.momirealms.customfishing.api.util.LogUtils; import net.momirealms.customfishing.storage.method.AbstractStorage; import org.bson.Document; import org.bson.UuidRepresentation; +import org.bson.conversions.Bson; import org.bson.types.Binary; import org.bson.types.ObjectId; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; -import java.util.Collection; -import java.util.Collections; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; public class MongoDBImpl extends AbstractStorage { @@ -138,11 +138,12 @@ public class MongoDBImpl extends AbstractStorage { plugin.getScheduler().runTaskAsync(() -> { MongoCollection collection = database.getCollection(getCollectionName("data")); try { - InsertOneResult result = collection.insertOne(new Document() - .append("_id", new ObjectId()) - .append("uuid", uuid) - .append("lock", unlock ? 0 : getCurrentSeconds()) - .append("data", new Binary(plugin.getStorageManager().toBytes(playerData)))); + Document query = new Document("uuid", uuid); + Bson updates = Updates.combine( + Updates.set("lock", unlock ? 0 : getCurrentSeconds()), + Updates.set("data", new Binary(plugin.getStorageManager().toBytes(playerData)))); + UpdateOptions options = new UpdateOptions().upsert(true); + UpdateResult result = collection.updateOne(query, updates, options); future.complete(result.wasAcknowledged()); } catch (MongoException e) { future.completeExceptionally(e); @@ -155,11 +156,18 @@ public class MongoDBImpl extends AbstractStorage { public void savePlayersData(Collection users, boolean unlock) { MongoCollection collection = database.getCollection(getCollectionName("data")); try { - collection.insertMany(users.stream().map(it -> new Document() - .append("_id", new ObjectId()) - .append("uuid", it.getUUID()) - .append("lock", unlock ? 0 : getCurrentSeconds()) - .append("data", new Binary(plugin.getStorageManager().toBytes(it.getPlayerData())))).toList()); + int lock = unlock ? 0 : getCurrentSeconds(); + var list = users.stream().map(it -> new UpdateOneModel( + new Document("uuid", it.getUUID()), + Updates.combine( + Updates.set("lock", lock), + Updates.set("data", new Binary(plugin.getStorageManager().toBytes(it.getPlayerData()))) + ), + new UpdateOptions().upsert(true) + ) + ).toList(); + if (list.size() == 0) return; + collection.bulkWrite(list); } catch (MongoException e) { LogUtils.warn("Failed to update data for online players", e); } diff --git a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/RedisManager.java b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/RedisManager.java index 0f097bf4..a2688ff5 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/RedisManager.java +++ b/plugin/src/main/java/net/momirealms/customfishing/storage/method/database/nosql/RedisManager.java @@ -89,7 +89,7 @@ public class RedisManager extends AbstractStorage { } try (Jedis jedis = jedisPool.getResource()) { jedis.ping(); - LogUtils.warn("Redis server connected."); + LogUtils.info("Redis server connected."); } catch (JedisException e) { LogUtils.warn("Failed to connect redis.", e); }