Merge pull request #72 from EverNife/fix-saving

Properly save PlayerData on json only on 'PlayerEvent.SaveToFile'
This commit is contained in:
Kamron Vaswani authored and GitHub committed 2022-11-15 00:10:02 -05:00
commit 7359117bd2
10 files changed
+56 -35

No files matched your search

+2 -2
View File
@@ -50,7 +50,7 @@ public class CmdDialog extends ChMcLogger {
}
for(PlayerData playerdata : data){
playerdata.dialogData.dialogsRead.add(diagid);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
@@ -76,7 +76,7 @@ public class CmdDialog extends ChMcLogger {
}
for(PlayerData playerdata : data){
playerdata.dialogData.dialogsRead.remove(diagid);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
+1 -1
View File
@@ -101,7 +101,7 @@ public class CmdNoppes extends ChMcLogger {
cmdfaction.processCommand(this.pcParam, args);
for(PlayerData playerdata : cmdfaction.data){
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
+4 -4
View File
@@ -56,7 +56,7 @@ public class CmdQuest extends ChMcLogger{
continue;
QuestData questdata = new QuestData(quest);
playerdata.questData.activeQuests.put(questid, questdata);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
if(playerdata.player != null){
Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title);
Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title);
@@ -93,7 +93,7 @@ public class CmdQuest extends ChMcLogger{
}
for(PlayerData playerdata : data){
playerdata.questData.finishedQuests.put(questid, System.currentTimeMillis());
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
@@ -124,7 +124,7 @@ public class CmdQuest extends ChMcLogger{
}
for(PlayerData playerdata : data){
playerdata.questData.activeQuests.remove(questid);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
@@ -156,7 +156,7 @@ public class CmdQuest extends ChMcLogger{
for(PlayerData playerdata : data){
playerdata.questData.activeQuests.remove(questid);
playerdata.questData.finishedQuests.remove(questid);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
return true;
}
@@ -479,7 +479,7 @@ public class NoppesUtilServer {
if(pl != null){
playerdata.setNBT(new NBTTagCompound());
sendPlayerData(type, player, name);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
return;
}
}
@@ -488,27 +488,27 @@ public class NoppesUtilServer {
int questId = buffer.readInt();
data.activeQuests.remove(questId);
data.finishedQuests.remove(questId);
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
if(type == EnumPlayerData.Dialog){
PlayerDialogData data = playerdata.dialogData;
data.dialogsRead.remove(buffer.readInt());
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
if(type == EnumPlayerData.Transport){
PlayerTransportData data = playerdata.transportData;
data.transports.remove(buffer.readInt());
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
if(type == EnumPlayerData.Bank){
PlayerBankData data = playerdata.bankData;
data.banks.remove(buffer.readInt());
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
if(type == EnumPlayerData.Factions){
PlayerFactionData data = playerdata.factionData;
data.factionData.remove(buffer.readInt());
playerdata.saveNBTData(null);
playerdata.savePlayerDataOnFile();
}
sendPlayerData(type, player, name);
}
@@ -27,6 +27,7 @@ import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.player.EntityInteractEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
@@ -276,7 +277,7 @@ public class ServerEventsHandler {
}
if(event.entityLiving instanceof EntityPlayer){
PlayerData data = PlayerDataController.instance.getPlayerData((EntityPlayer)event.entityLiving);
data.saveNBTData(null);
data.savePlayerDataOnFile();
}
}
@@ -360,6 +361,12 @@ public class ServerEventsHandler {
data.updateCompanion(event.world);
}
@SubscribeEvent
public void world(PlayerEvent.SaveToFile event){
PlayerData data = PlayerDataController.instance.getPlayerData((EntityPlayer) event.entity);
data.savePlayerDataOnFile();
}
@SubscribeEvent
public void populateChunk(PopulateChunkEvent.Post event){
NPCSpawning.performWorldGenSpawning(event.world, event.chunkX, event.chunkZ, event.rand);
@@ -4,7 +4,10 @@ import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import cpw.mods.fml.common.FMLLog;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
@@ -86,21 +89,24 @@ public class PlayerDataController {
return new NBTTagCompound();
}
private static Executor executor = Executors.newSingleThreadExecutor();
public void savePlayerData(PlayerData data){
NBTTagCompound compound = data.getNBT();
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();
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);
}
file.renameTo(file1);
} catch (Exception e) {
LogWriter.except(e);
}
});
}
public PlayerBankData getBankData(EntityPlayer player, int bankId) {
@@ -117,7 +123,7 @@ public class PlayerDataController {
if(data == null){
player.registerExtendedProperties("CustomNpcsData", data = new PlayerData());
data.player = player;
data.loadNBTData(null);
data.loadPlayerDataFromFile();
}
data.player = player;
return data;
@@ -49,12 +49,20 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData {
public boolean isGUIOpen = false;
@Override
public void saveNBTData(NBTTagCompound compound) {
public void saveNBTData(NBTTagCompound nbtTagCompound) {
//Do Nothing
}
public void savePlayerDataOnFile() {
PlayerDataController.instance.savePlayerData(this);
}
@Override
public void loadNBTData(NBTTagCompound compound) {
//Do Nothing
}
public void loadPlayerDataFromFile() {
NBTTagCompound data = PlayerDataController.instance.loadPlayerData(player.getPersistentID().toString());
if(data.hasNoTags()){
data = PlayerDataController.instance.loadPlayerDataOld(player.getCommandSenderName());
@@ -130,11 +138,11 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData {
public void setGUIOpen(boolean bool) {
isGUIOpen = bool;
saveNBTData(null);
savePlayerDataOnFile();
}
public boolean getGUIOpen() {
loadNBTData(null);
loadPlayerDataFromFile();
return isGUIOpen;
}
@@ -149,7 +157,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData {
activeCompanion = npc;
if(npc != null)
((RoleCompanion)npc.roleInterface).companionID = companionID;
saveNBTData(null);
savePlayerDataOnFile();
}
public void updateCompanion(World world) {
@@ -99,13 +99,13 @@ public class QuestDialog extends QuestInterface implements IQuestDialog {
if (progress == 0 && completed) {
data.dialogData.dialogsRead.remove(this.dialog.id);
data.questData.checkQuestCompletion(data, EnumQuestType.values()[1]);
data.saveNBTData(data.getNBT());
data.savePlayerDataOnFile();
}
if (progress == 1 && !completed) {
data.dialogData.dialogsRead.add(this.dialog.id);
data.questData.checkQuestCompletion(data, EnumQuestType.values()[1]);
data.saveNBTData(data.getNBT());
data.savePlayerDataOnFile();
}
} else {
@@ -161,7 +161,7 @@ public class QuestKill extends QuestInterface implements IQuestKill {
this.parent.setKilled(questdata, killed);
data.questData.checkQuestCompletion(data, EnumQuestType.values()[2]);
data.questData.checkQuestCompletion(data, EnumQuestType.values()[4]);
data.saveNBTData(data.getNBT());
data.savePlayerDataOnFile();
}
} else {
throw new CustomNPCsException("Progress has to be between 0 and " + this.amount, new Object[0]);
@@ -166,7 +166,7 @@ public class QuestLocation extends QuestInterface implements IQuestLocation {
if ((!completed || progress != 1) && (completed || progress != 0)) {
questData.extraData.setBoolean(this.nbtName, progress == 1);
data.questData.checkQuestCompletion(data, EnumQuestType.values()[3]);
data.saveNBTData(data.getNBT());
data.savePlayerDataOnFile();
}
} else {
throw new CustomNPCsException("Progress has to be 0 or 1", new Object[0]);