Raxen/src/main/java/gq/unurled/raxen/config/PlayerConfig.java

209 lines
9.1 KiB
Java
Raw Normal View History

2021-11-27 10:49:11 +00:00
package gq.unurled.raxen.config;
2021-11-20 10:33:03 +00:00
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
2021-11-27 10:49:11 +00:00
import gq.unurled.raxen.Raxen;
import gq.unurled.raxen.components.player.Inventories;
import gq.unurled.raxen.components.player.Profile;
import gq.unurled.raxen.components.player.Skills;
import gq.unurled.raxen.components.player.Storage;
import gq.unurled.raxen.components.player.Storages.EnderChest;
import gq.unurled.raxen.manager.ProfileManager;
2021-12-14 10:42:21 +00:00
import gq.unurled.raxen.manager.StorageManager;
2021-11-27 10:49:11 +00:00
import gq.unurled.raxen.utils.MongoDB;
import gq.unurled.raxen.utils.Utils;
2021-11-20 10:33:03 +00:00
import net.kyori.adventure.text.Component;
import org.bson.Document;
import org.bukkit.Bukkit;
import org.bukkit.Material;
2021-12-14 10:42:21 +00:00
import org.bukkit.configuration.file.FileConfiguration;
2021-11-20 10:33:03 +00:00
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
2021-12-14 10:42:21 +00:00
import java.io.IOException;
2021-11-20 10:33:03 +00:00
import java.util.ArrayList;
import java.util.List;
2021-11-27 10:49:11 +00:00
import static gq.unurled.raxen.utils.Utils.log;
import static gq.unurled.raxen.utils.Utils.warn;
2021-11-20 10:33:03 +00:00
public class PlayerConfig {
2021-12-14 10:42:21 +00:00
private static Raxen main;
2021-11-20 10:33:03 +00:00
private MongoDB mongoDB;
private MongoCollection<Document> mongoCollection;
2021-12-14 10:42:21 +00:00
private static ProfileManager profileManager;
private static StorageManager sto;
2021-11-20 10:33:03 +00:00
2021-11-27 10:49:11 +00:00
public PlayerConfig(Raxen main) {
2021-11-20 10:33:03 +00:00
this.main = main;
2021-12-14 10:42:21 +00:00
this.sto = main.getStorageManager();
this.mongoDB = sto.getMongo();
this.mongoDB.connect();
2021-11-20 10:33:03 +00:00
this.mongoCollection = mongoDB.getMongoCollection();
this.profileManager = main.getProfileManager();
}
2021-12-14 10:42:21 +00:00
public void saveUsingMongoDB(Player player, Skills skills, String invstr, Integer reverse) {
2021-11-20 10:33:03 +00:00
Document doc = new Document("uuid", player.getUniqueId().toString())
.append("name", player.getName())
.append("health", skills.getHealth())
.append("defense", skills.getDefense())
.append("speed", skills.getSpeed())
.append("strength", skills.getStrength())
.append("inv", invstr);
if (profileManager.getPlayerStorage(player.getUniqueId()) != null) {
if(profileManager.getPlayerStorage(player.getUniqueId()).getEc() != null) {
EnderChest ec = profileManager.getPlayerStorage(player.getUniqueId()).getEc();
List<String> list = new ArrayList<String>();
reverse = 0;
for(ItemStack it : ec.getEc()) {
reverse += 1;
if(it != null) {
String s = Utils.itemStackSerilize(it, reverse);
list.add(s);
}
}
String ecstr = Utils.listItemStackSerelize(list);
doc.append("ec", ecstr);
}
}
Document playerDoc = mongoCollection.find(Filters.eq("uuid", player.getUniqueId().toString())).first();
if(playerDoc == null) {
mongoCollection.insertOne(doc);
}
else {
mongoCollection.replaceOne(Filters.eq("uuid", player.getUniqueId().toString()), doc);
}
}
public void saveUsingYml(Player player, Skills skills, String invstr, Integer reverse) {
2021-12-14 10:42:21 +00:00
FileConfiguration config = sto.createYml(player);
config.set("name", player.getName());
config.set("health", skills.getHealth());
config.set("strength", skills.getStrength());
config.set("speed", skills.getSpeed());
config.set("defense", skills.getDefense());
config.set("inv", invstr);
if (profileManager.getPlayerStorage(player.getUniqueId()) != null) {
if(profileManager.getPlayerStorage(player.getUniqueId()).getEc() != null) {
EnderChest ec = profileManager.getPlayerStorage(player.getUniqueId()).getEc();
List<String> list = new ArrayList<String>();
reverse = 0;
for(ItemStack it : ec.getEc()) {
reverse += 1;
if(it != null) {
String s = Utils.itemStackSerilize(it, reverse);
list.add(s);
}
}
String ecstr = Utils.listItemStackSerelize(list);
config.set("ec", ecstr);
}
}
try {
config.save(main.getDataFolder() + "/playerInfo/" + player.getUniqueId() + "/" + "playerInfo.yml");
} catch (IOException e) {
e.printStackTrace();
}
2021-12-14 10:42:21 +00:00
}
public void loadUsingMongoDB(Player player) {
2021-11-20 10:33:03 +00:00
Document playerDoc = mongoCollection.find(Filters.eq("uuid", player.getUniqueId().toString())).first();
if(playerDoc == null) {
profileManager.createNewProfile(player);
profileManager.createNewStorage(player);
profileManager.createNewInventory(player);
return;
}
Skills skills = new Skills(playerDoc.getInteger("health"), playerDoc.getInteger("defense"), playerDoc.getInteger("speed"), playerDoc.getInteger("strength"));
Profile profile = new Profile(skills);
2021-12-14 10:42:21 +00:00
2021-11-20 10:33:03 +00:00
profileManager.setPlayerProfile(player.getUniqueId(), profile);
Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest"));
if(playerDoc.getString("ec") != null) {
ItemStack[] itList = Utils.listItemStackDeserilize(playerDoc.getString("ec"));
ec.addItem(itList);
}
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
profileManager.setPlayerStorage(player.getUniqueId(), storage);
Inventory inv = Bukkit.createInventory(player, InventoryType.PLAYER);
ItemStack[] itListInv = Utils.listItemStackDeserilize(playerDoc.getString("inv"));
inv.addItem(itListInv);
player.updateInventory();
2021-11-27 10:49:11 +00:00
gq.unurled.raxen.components.player.Storages.Inventory invv = new gq.unurled.raxen.components.player.Storages.Inventory(inv);
2021-11-20 10:33:03 +00:00
Inventories invvv = new Inventories(invv);
profileManager.setPlayerInventory(player.getUniqueId(), invvv);
2021-12-14 10:42:21 +00:00
}
public void loadUsingYml(Player player) throws IOException {
2021-12-14 10:42:21 +00:00
FileConfiguration config = sto.createYml(player);
Skills skills = new Skills((Integer) config.get("health"), (Integer) config.get("defense"), (Integer) config.get("speed"), (Integer) config.get("strength"));
Profile profile = new Profile(skills);
profileManager.setPlayerProfile(player.getUniqueId(), profile);
2021-11-20 10:33:03 +00:00
2021-12-14 10:42:21 +00:00
Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest"));
if((String) config.get("ec") != null) {
ItemStack[] itList = Utils.listItemStackDeserilize((String) config.get("ec"));
ec.addItem(itList);
}
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
profileManager.setPlayerStorage(player.getUniqueId(), storage);
Inventory inv = Bukkit.createInventory(player, InventoryType.PLAYER);
ItemStack[] itListInv = Utils.listItemStackDeserilize((String) config.getString("inv"));
inv.addItem(itListInv);
player.updateInventory();
gq.unurled.raxen.components.player.Storages.Inventory invv = new gq.unurled.raxen.components.player.Storages.Inventory(inv);
Inventories invvv = new Inventories(invv);
profileManager.setPlayerInventory(player.getUniqueId(), invvv);
}
public void savePlayerConfig(Player player) {
Skills skills = profileManager.getPlayerProfile(player.getUniqueId()).getSkils();
Inventory inv = player.getInventory();
List<String> listInv = new ArrayList<String>();
Integer reverse = 0;
for(ItemStack it : inv) {
reverse = reverse + 1;
if(it != null && it.getType() != Material.AIR) {
String s = Utils.itemStackSerilize(it, reverse);
listInv.add(s);
}
}
String invstr = Utils.listItemStackSerelize(listInv);
Object storage = sto.getConfig().get("storage");
if ("MONGODB".equals(storage)) {
saveUsingMongoDB(player, skills, invstr, reverse);
saveUsingMongoDB(player, skills, invstr, reverse);
} else if ("MYSQL".equals(storage) || "YML".equals(storage)) {
saveUsingYml(player, skills, invstr, reverse);
2021-12-14 10:42:21 +00:00
}
log("Player: " + player.getName() + " data successfully saved!");
}
public void loadPlayerConfig(Player player) {
String st = (String) StorageManager.getConfig().get("storage");
if (st.equals("MONGODB")) {
loadUsingMongoDB(player);
warn("'" + st + "'");
}
else {
warn("'" + st + "'");
try {
loadUsingYml(player);
} catch (IOException e) {
e.printStackTrace();
}
2021-12-14 10:42:21 +00:00
}
log("Player: " + player.getName() + " data successfully loaded!");
2021-11-20 10:33:03 +00:00
}
}