2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs.controllers;
|
|
|
|
|
|
2023-02-28 03:35:56 -05:00
|
|
|
import net.minecraft.command.ICommandSender;
|
|
|
|
|
import net.minecraft.command.PlayerSelector;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2023-02-28 03:35:56 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
2018-09-13 12:03:28 -04:00
|
|
|
import net.minecraft.nbt.CompressedStreamTools;
|
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
|
|
import noppes.npcs.CustomNpcs;
|
|
|
|
|
import noppes.npcs.LogWriter;
|
2022-05-24 01:07:50 -05:00
|
|
|
import noppes.npcs.controllers.data.Bank;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerBankData;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
|
|
|
|
import noppes.npcs.controllers.data.PlayerMail;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.util.NBTJsonUtil;
|
|
|
|
|
|
2023-01-12 21:33:06 -05:00
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
2023-02-28 03:35:56 -05:00
|
|
|
import java.util.ArrayList;
|
2023-01-12 21:33:06 -05:00
|
|
|
import java.util.HashMap;
|
2023-02-28 03:35:56 -05:00
|
|
|
import java.util.List;
|
2023-01-12 21:33:06 -05:00
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.concurrent.Executor;
|
|
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
|
|
2022-04-20 17:49:20 -04:00
|
|
|
public class PlayerDataController {
|
2018-09-13 12:03:28 -04:00
|
|
|
public static PlayerDataController instance;
|
2023-03-20 14:04:08 -04:00
|
|
|
public Map<String, String> nameUUIDs;
|
2022-04-20 17:49:20 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
public PlayerDataController(){
|
|
|
|
|
instance = this;
|
2023-03-20 14:04:08 -04:00
|
|
|
File dir = getSaveDir();
|
|
|
|
|
if(dir != null){
|
|
|
|
|
Map<String, String> map = new HashMap<String, String>();
|
|
|
|
|
if(dir.listFiles() != null){
|
|
|
|
|
for(File file : dir.listFiles()){
|
|
|
|
|
if(file.isDirectory() || !file.getName().endsWith(".json"))
|
|
|
|
|
continue;
|
|
|
|
|
try {
|
|
|
|
|
NBTTagCompound compound = NBTJsonUtil.LoadFile(file);
|
|
|
|
|
if(compound.hasKey("PlayerName")){
|
|
|
|
|
map.put(compound.getString("PlayerName"), file.getName().substring(0, file.getName().length() - 5));
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.error("Error loading: " + file.getAbsolutePath(), e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
nameUUIDs = map;
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2022-11-11 15:15:42 -03:00
|
|
|
private static Executor executor = Executors.newSingleThreadExecutor();
|
2018-09-13 12:03:28 -04:00
|
|
|
public void savePlayerData(PlayerData data){
|
|
|
|
|
NBTTagCompound compound = data.getNBT();
|
2022-11-11 15:15:42 -03:00
|
|
|
executor.execute(() -> {
|
|
|
|
|
String filename = data.uuid + ".json";
|
|
|
|
|
try {
|
|
|
|
|
File saveDir = getSaveDir();
|
|
|
|
|
File file = new File(saveDir, filename+"_new");
|
|
|
|
|
File file1 = new File(saveDir, filename);
|
|
|
|
|
NBTJsonUtil.SaveFile(file, compound);
|
|
|
|
|
if(file1.exists()){
|
|
|
|
|
file1.delete();
|
|
|
|
|
}
|
|
|
|
|
file.renameTo(file1);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogWriter.except(e);
|
2022-02-27 08:12:24 -03:00
|
|
|
}
|
2022-11-11 15:15:42 -03:00
|
|
|
});
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
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;
|
2022-11-11 15:15:42 -03:00
|
|
|
data.loadPlayerDataFromFile();
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
data.player = player;
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
public String hasPlayer(String username) {
|
2023-03-20 14:04:08 -04:00
|
|
|
for(String name : nameUUIDs.keySet()){
|
2022-04-20 17:49:20 -04:00
|
|
|
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){
|
2023-03-20 14:04:08 -04:00
|
|
|
for(String name : nameUUIDs.keySet()){
|
2018-09-13 12:03:28 -04:00
|
|
|
if(name.equalsIgnoreCase(username)){
|
|
|
|
|
data = new PlayerData();
|
2023-03-20 14:04:08 -04:00
|
|
|
data.setNBT(PlayerData.loadPlayerData(nameUUIDs.get(name)));
|
2018-09-13 12:03:28 -04:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2023-05-10 01:17:17 -05:00
|
|
|
data = PlayerDataController.instance.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
|
|
|
|
2023-02-28 03:35:56 -05:00
|
|
|
public List<PlayerData> getPlayersData(ICommandSender sender, String username){
|
|
|
|
|
ArrayList<PlayerData> list = new ArrayList<PlayerData>();
|
|
|
|
|
EntityPlayerMP[] players = PlayerSelector.matchPlayers(sender, username);
|
|
|
|
|
if(players == null || players.length == 0){
|
|
|
|
|
PlayerData data = PlayerDataController.instance.getDataFromUsername(username);
|
|
|
|
|
if(data != null)
|
|
|
|
|
list.add(data);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
for(EntityPlayer player : players){
|
|
|
|
|
list.add(PlayerDataController.instance.getPlayerData(player));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
}
|