9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2026-01-06 15:51:50 +00:00

fix mongodb

This commit is contained in:
XiaoMoMi
2023-09-13 00:47:45 +08:00
parent 96c2856bc3
commit 0286893529
3 changed files with 26 additions and 16 deletions

View File

@@ -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/"
);

View File

@@ -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<Document> 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<? extends OfflineUser> users, boolean unlock) {
MongoCollection<Document> 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<Document>(
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);
}

View File

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