2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs.controllers;
|
|
|
|
|
|
2022-04-20 17:49:20 -04:00
|
|
|
import java.io.EOFException;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
|
import net.minecraft.nbt.CompressedStreamTools;
|
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
|
|
import noppes.npcs.CustomNpcs;
|
|
|
|
|
import noppes.npcs.LogWriter;
|
|
|
|
|
import noppes.npcs.util.NBTJsonUtil;
|
|
|
|
|
|
2022-04-20 17:49:20 -04:00
|
|
|
public class PlayerDataController {
|
2018-09-13 12:03:28 -04:00
|
|
|
public static PlayerDataController instance;
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public PlayerDataController(){
|
|
|
|
|
instance = this;
|
|
|
|
|
}
|
|
|
|
|
public File getSaveDir(){
|
|
|
|
|
try{
|
|
|
|
|
File file = new File(CustomNpcs.getWorldSaveDirectory(),"playerdata");
|
|
|
|
|
if(!file.exists())
|
|
|
|
|
file.mkdir();
|
|
|
|
|
return file;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public NBTTagCompound loadPlayerDataOld(String player){
|
|
|
|
|
File saveDir = getSaveDir();
|
|
|
|
|
String filename = player;
|
|
|
|
|
if(filename.isEmpty())
|
|
|
|
|
filename = "noplayername";
|
|
|
|
|
filename += ".dat";
|
|
|
|
|
try {
|
2022-04-20 17:49:20 -04:00
|
|
|
File file = new File(saveDir, filename);
|
|
|
|
|
if(file.exists()){
|
|
|
|
|
NBTTagCompound comp = CompressedStreamTools.readCompressed(new FileInputStream(file));
|
|
|
|
|
file.delete();
|
|
|
|
|
file = new File(saveDir, filename+"_old");
|
|
|
|
|
if(file.exists())
|
|
|
|
|
file.delete();
|
|
|
|
|
return comp;
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.except(e);
|
|
|
|
|
}
|
|
|
|
|
try {
|
2022-04-20 17:49:20 -04:00
|
|
|
File file = new File(saveDir, filename+"_old");
|
|
|
|
|
if(file.exists()){
|
|
|
|
|
return CompressedStreamTools.readCompressed(new FileInputStream(file));
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.except(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new NBTTagCompound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public NBTTagCompound loadPlayerData(String player){
|
|
|
|
|
File saveDir = getSaveDir();
|
|
|
|
|
String filename = player;
|
2022-04-20 17:49:20 -04:00
|
|
|
if(filename.isEmpty())
|
|
|
|
|
filename = "noplayername";
|
|
|
|
|
filename += ".json";
|
2018-09-13 12:03:28 -04:00
|
|
|
try {
|
2022-04-20 17:49:20 -04:00
|
|
|
File file = new File(saveDir, filename);
|
|
|
|
|
if(file.exists()){
|
|
|
|
|
return NBTJsonUtil.LoadFile(file);
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.error("Error loading: " + filename, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new NBTTagCompound();
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public void savePlayerData(PlayerData data){
|
|
|
|
|
NBTTagCompound compound = data.getNBT();
|
2022-04-20 17:49:20 -04:00
|
|
|
String filename = data.uuid + ".json";
|
2018-09-13 12:03:28 -04:00
|
|
|
try {
|
|
|
|
|
File saveDir = getSaveDir();
|
2022-04-20 17:49:20 -04:00
|
|
|
File file = new File(saveDir, filename+"_new");
|
|
|
|
|
File file1 = new File(saveDir, filename);
|
|
|
|
|
NBTJsonUtil.SaveFile(file, compound);
|
|
|
|
|
if(file1.exists()){
|
|
|
|
|
file1.delete();
|
2022-02-27 08:12:24 -03:00
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
file.renameTo(file1);
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.except(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public PlayerBankData getBankData(EntityPlayer player, int bankId) {
|
|
|
|
|
Bank bank = BankController.getInstance().getBank(bankId);
|
|
|
|
|
PlayerBankData data = getPlayerData(player).bankData;
|
|
|
|
|
if(!data.hasBank(bank.id)){
|
|
|
|
|
data.loadNew(bank.id);
|
|
|
|
|
}
|
|
|
|
|
return data;
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public PlayerData getPlayerData(EntityPlayer player){
|
|
|
|
|
PlayerData data = (PlayerData) player.getExtendedProperties("CustomNpcsData");
|
|
|
|
|
if(data == null){
|
|
|
|
|
player.registerExtendedProperties("CustomNpcsData", data = new PlayerData());
|
|
|
|
|
data.player = player;
|
|
|
|
|
data.loadNBTData(null);
|
|
|
|
|
}
|
|
|
|
|
data.player = player;
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
public String hasPlayer(String username) {
|
2022-04-20 17:49:20 -04:00
|
|
|
for(String name : getUsernameData().keySet()){
|
|
|
|
|
if(name.equalsIgnoreCase(username))
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
return "";
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public PlayerData getDataFromUsername(String username){
|
|
|
|
|
EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username);
|
|
|
|
|
PlayerData data = null;
|
|
|
|
|
if(player == null){
|
|
|
|
|
Map<String, NBTTagCompound> map = getUsernameData();
|
|
|
|
|
for(String name : map.keySet()){
|
|
|
|
|
if(name.equalsIgnoreCase(username)){
|
|
|
|
|
data = new PlayerData();
|
|
|
|
|
data.setNBT(map.get(name));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
data = getPlayerData(player);
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
return data;
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public void addPlayerMessage(String username, PlayerMail mail) {
|
|
|
|
|
mail.time = System.currentTimeMillis();
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username);
|
|
|
|
|
PlayerData data = getDataFromUsername(username);
|
|
|
|
|
data.mailData.playermail.add(mail.copy());
|
|
|
|
|
savePlayerData(data);
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public Map<String, NBTTagCompound> getUsernameData(){
|
|
|
|
|
Map<String, NBTTagCompound> map = new HashMap<String, NBTTagCompound>();
|
2022-04-20 17:49:20 -04:00
|
|
|
for(File file : getSaveDir().listFiles()){
|
|
|
|
|
if(file.isDirectory() || !file.getName().endsWith(".json"))
|
|
|
|
|
continue;
|
2018-09-13 12:03:28 -04:00
|
|
|
try {
|
2022-04-20 17:49:20 -04:00
|
|
|
NBTTagCompound compound = NBTJsonUtil.LoadFile(file);
|
|
|
|
|
if(compound.hasKey("PlayerName")){
|
|
|
|
|
map.put(compound.getString("PlayerName"), compound);
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.error("Error loading: " + file.getAbsolutePath(), e);
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
return map;
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public boolean hasMail(EntityPlayer player) {
|
|
|
|
|
return getPlayerData(player).mailData.hasMail();
|
|
|
|
|
}
|
2022-04-20 17:49:20 -04:00
|
|
|
}
|