mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 10:47:30 +00:00
Merge pull request #72 from EverNife/fix-saving
Properly save PlayerData on json only on 'PlayerEvent.SaveToFile'
This commit is contained in:
10 files changed
+56
-35
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in new issue
Block a user