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.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.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; import static gq.unurled.raxen.utils.Utils.log; public class PlayerConfig { private Raxen main; private MongoDB mongoDB; private MongoCollection mongoCollection; private ProfileManager profileManager; public PlayerConfig(Raxen main) { this.main = main; this.mongoDB = main.getMongoDB(); this.mongoCollection = mongoDB.getMongoCollection(); this.profileManager = main.getProfileManager(); } 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); 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); } log("Player: " + player.getName() + " data successfully saved!"); } public void loadPlayerConfig(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); log("Player: " + player.getName() + " data successfully loaded!"); } }