Files
CustomNPC-Plus/src/main/java/noppes/npcs/controllers/PlayerDataController.java
T

209 lines
5.7 KiB
Java
Raw Normal View History

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;
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;
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
private static Executor executor = Executors.newSingleThreadExecutor();
2018-09-13 12:03:28 -04:00
public void savePlayerData(PlayerData data){
NBTTagCompound compound = data.getNBT();
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);
}
});
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;
data.loadPlayerDataFromFile();
2018-09-13 12:03:28 -04:00
}
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
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
}