package gq.unurled.raxen.config; import com.mongodb.client.MongoCollection; import com.mongodb.client.model.Filters; 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; import gq.unurled.raxen.manager.StorageManager; import gq.unurled.raxen.utils.MongoDB; import gq.unurled.raxen.utils.Utils; import net.kyori.adventure.text.Component; import org.bson.Document; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static gq.unurled.raxen.utils.Utils.log; import static gq.unurled.raxen.utils.Utils.warn; public class PlayerConfig { private static Raxen main; private MongoDB mongoDB; private MongoCollection mongoCollection; private static ProfileManager profileManager; private static StorageManager sto; public PlayerConfig(Raxen main) { this.main = main; this.sto = main.getStorageManager(); this.mongoDB = sto.getMongo(); this.mongoDB.connect(); this.mongoCollection = mongoDB.getMongoCollection(); this.profileManager = main.getProfileManager(); } public void saveUsingMongoDB(Player player, Skills skills, String invstr, Integer reverse) { 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 list = new ArrayList(); 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) { 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 list = new ArrayList(); 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(); } } public void loadUsingMongoDB(Player player) { 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); 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(); 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 loadUsingYml(Player player) throws IOException { 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); 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 listInv = new ArrayList(); 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); } 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(); } } log("Player: " + player.getName() + " data successfully loaded!"); } }