Raxen/src/main/java/gq/unurled/raxen/config/PlayerConfig.java
unurled f60f12921e 0.0.2: YML working !
with no apparent bug !
2021-12-15 21:17:02 +01:00

208 lines
9.1 KiB
Java

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<Document> 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<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) {
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();
}
}
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<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);
}
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!");
}
}