diff --git a/src/main/java/noppes/npcs/controllers/VaultHelper.java b/src/main/java/noppes/npcs/controllers/VaultHelper.java index ae2c6f97a..f660002fc 100644 --- a/src/main/java/noppes/npcs/controllers/VaultHelper.java +++ b/src/main/java/noppes/npcs/controllers/VaultHelper.java @@ -157,7 +157,7 @@ public class VaultHelper { PlayerData data = PlayerDataController.Instance.getPlayerData(player); boolean success = data.currencyData.deposit(amount); if (success) { - data.saveCurrency(); + data.save(); } return success; } @@ -201,7 +201,7 @@ public class VaultHelper { PlayerData data = PlayerDataController.Instance.getPlayerData(player); boolean success = data.currencyData.withdraw(amount); if (success) { - data.saveCurrency(); + data.save(); } return success; } @@ -253,7 +253,7 @@ public class VaultHelper { PlayerData data = PlayerDataController.Instance.getPlayerData(player); data.currencyData.setBalance(amount); - data.saveCurrency(); + data.save(); } /** diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index 25d4c81c8..08fdebdd0 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -409,6 +409,9 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { } final NBTTagCompound compound = getNBT(); + // Add currency data to main save (NOT slot-bound, preserved across profile changes) + currencyData.writeToNBT(compound); + final String filename; if (ConfigMain.DatFormat) { filename = uuid + ".dat"; @@ -445,70 +448,14 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { if (data.hasNoTags()) { data = getNBT(); } - setNBT(data); - // Load currency data separately (not slot-bound) - loadCurrency(); - } - - /** - * Load currency data from separate file (shared across profile slots) - */ - public void loadCurrency() { - if (player == null) return; - - File saveDir = PlayerDataController.Instance.getSaveDir(); - String filename = player.getPersistentID().toString() + "_currency"; - - try { - File file = new File(saveDir, filename + ".json"); - if (file.exists()) { - NBTTagCompound compound = NBTJsonUtil.LoadFile(file); - currencyData.readFromNBT(compound); - return; - } - - // Try dat format - file = new File(saveDir, filename + ".dat"); - if (file.exists()) { - NBTTagCompound compound = NBTJsonUtil.loadNBTData(file); - currencyData.readFromNBT(compound); - return; - } - - // No currency file exists, use defaults (new player) - currencyData = new PlayerCurrencyData(); - } catch (Exception e) { - LogWriter.error("Error loading currency data for " + player.getCommandSenderName(), e); - currencyData = new PlayerCurrencyData(); + // Load currency BEFORE setNBT so we can preserve it + // Currency is stored in main file but NOT in slot data + if (data.hasKey("CurrencyBalance")) { + currencyData.readFromNBT(data); } - } - /** - * Save currency data to separate file (shared across profile slots) - */ - public synchronized void saveCurrency() { - if (uuid == null || uuid.isEmpty()) return; - - final NBTTagCompound compound = new NBTTagCompound(); - currencyData.writeToNBT(compound); - - final String filename = uuid + "_currency.json"; - - CustomNPCsThreader.customNPCThread.execute(() -> { - try { - File saveDir = PlayerDataController.Instance.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); - } - }); + setNBT(data); } public static PlayerData get(EntityPlayer player) {