121 lines
5.2 KiB
Java
121 lines
5.2 KiB
Java
|
package gq.unurled.elixium.config;
|
||
|
|
||
|
import com.mongodb.client.MongoCollection;
|
||
|
import com.mongodb.client.model.Filters;
|
||
|
import gq.unurled.elixium.Elixium;
|
||
|
import gq.unurled.elixium.components.player.Inventories;
|
||
|
import gq.unurled.elixium.components.player.Profile;
|
||
|
import gq.unurled.elixium.components.player.Skills;
|
||
|
import gq.unurled.elixium.components.player.Storage;
|
||
|
import gq.unurled.elixium.components.player.Storages.EnderChest;
|
||
|
import gq.unurled.elixium.manager.ProfileManager;
|
||
|
import gq.unurled.elixium.utils.MongoDB;
|
||
|
import gq.unurled.elixium.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.Arrays;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.List;
|
||
|
|
||
|
import static gq.unurled.elixium.utils.Utils.log;
|
||
|
|
||
|
public class PlayerConfig {
|
||
|
|
||
|
private Elixium main;
|
||
|
private MongoDB mongoDB;
|
||
|
private MongoCollection<Document> mongoCollection;
|
||
|
private ProfileManager profileManager;
|
||
|
|
||
|
public PlayerConfig(Elixium 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<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);
|
||
|
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);
|
||
|
}
|
||
|
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.elixium.components.player.Storages.Inventory invv = new gq.unurled.elixium.components.player.Storages.Inventory(inv);
|
||
|
Inventories invvv = new Inventories(invv);
|
||
|
profileManager.setPlayerInventory(player.getUniqueId(), invvv);
|
||
|
log("Player: " + player.getName() + " data successfully loaded!");
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|