diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 6fdafd53..4a41d80c 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -1,3 +1,18 @@ +Version 1.5.6 + +**MagicCampaign** +- Fixed a bug from 2022 where `MagicCampaign.loadVariant` did not load `permaMods`/`sMods` correctly (reported by arbiter787). + +**MagicAchievements** +- Fixed "find/collect/see/install/etc X number of something" achievements not completing. + +Version 1.5.5 + +**MagicAchievements** +- sorry +- Fixed achievements file not getting created if missing. + - This prevented achievements from loading, crashing mods e.g. AotD: VoK. + Version 1.5.4 **MagicAchievements** diff --git a/jars/MagicLib-Kotlin.jar b/jars/MagicLib-Kotlin.jar index 853b61b1..4fd228bc 100644 Binary files a/jars/MagicLib-Kotlin.jar and b/jars/MagicLib-Kotlin.jar differ diff --git a/jars/MagicLib.jar b/jars/MagicLib.jar index 8b5cec99..7ffccf1c 100644 Binary files a/jars/MagicLib.jar and b/jars/MagicLib.jar differ diff --git a/magiclib.version b/magiclib.version index c2ba6c43..28c80c6e 100644 --- a/magiclib.version +++ b/magiclib.version @@ -8,6 +8,6 @@ { "major": "1", "minor": "5", - "patch": "4-RC01" + "patch": "6" } } diff --git a/mod_info.json b/mod_info.json index dd39f582..e4ad1d77 100644 --- a/mod_info.json +++ b/mod_info.json @@ -4,7 +4,7 @@ "author": "Modding Community: Dark.Revenant, LazyWizard, Nicke, Originem, Rubi, Schaf-Unschaf, Snrasha, Tartiflette, Wisp, Wyvern...", "utility": "false", # Using the long version format lets the game correctly compare major/minor/patch versions. - "version": { "major": '1', "minor": '5', "patch": '4' }, + "version": { "major": '1', "minor": '5', "patch": '6' }, "description": "A collection of classes to aid modding. Not a mod in itself, but required by other mods.", "gameVersion": "0.98a-RC7", "dependencies": [ diff --git a/src/org/magiclib/achievements/MagicAchievement.java b/src/org/magiclib/achievements/MagicAchievement.java index 73a42b1c..3e8adfb8 100644 --- a/src/org/magiclib/achievements/MagicAchievement.java +++ b/src/org/magiclib/achievements/MagicAchievement.java @@ -215,11 +215,11 @@ public void advanceInCombat(float amount, List events, boolean is */ public void saveChanges() { getLogger().info("Saving achievements triggered by '" + spec.getId() + "' from mod '" + spec.getModName() + "'."); - MagicAchievementManager.getInstance().saveAchievements(true); + MagicAchievementManager.getInstance().saveAchievements(true, false); } private void saveChangesWithoutLogging() { - MagicAchievementManager.getInstance().saveAchievements(false); + MagicAchievementManager.getInstance().saveAchievements(false, false); } /** diff --git a/src/org/magiclib/achievements/MagicAchievementManager.java b/src/org/magiclib/achievements/MagicAchievementManager.java index fd2b65f3..3749f0dd 100644 --- a/src/org/magiclib/achievements/MagicAchievementManager.java +++ b/src/org/magiclib/achievements/MagicAchievementManager.java @@ -150,7 +150,7 @@ public void setAchievementsEnabled(boolean areAchievementsEnabled, boolean isSav } else { logger.info("MagicLib achievements are disabled."); removeIntel(); - saveAchievements(true); + saveAchievements(true, false); if (isSaveLoaded) { Global.getSector().removeTransientScriptsOfClass(MagicAchievementRunner.class); @@ -221,13 +221,13 @@ public Map getAchievements() { /** * This writes to disk. */ - protected void saveAchievements(boolean printUnchangedResultToLog) { + protected void saveAchievements(boolean printUnchangedResultToLog, boolean forceSave) { JSONObject commonJson; JSONArray savedAchievements = new JSONArray(); // Prevents accidentally wiping achievements if the feature is disabled on game load. // Also, no reason to save nothing anyway. - if (achievements.isEmpty()) { + if (!forceSave && achievements.isEmpty()) { return; } @@ -246,7 +246,7 @@ protected void saveAchievements(boolean printUnchangedResultToLog) { try { newAchievementsJsonString = savedAchievements.toString(indent); - if (newAchievementsJsonString.equals(lastSavedJson)) { + if (!forceSave && newAchievementsJsonString.equals(lastSavedJson)) { if (printUnchangedResultToLog) { logger.info("Not saving achievements because they haven't changed."); } @@ -303,7 +303,7 @@ public void reloadAchievements(boolean isSaveGameLoaded) { try { // Create file if it doesn't exist. if (!Global.getSettings().fileExistsInCommon(commonFilename)) { - saveAchievements(true); + saveAchievements(true, true); } try { @@ -314,7 +314,7 @@ public void reloadAchievements(boolean isSaveGameLoaded) { logger.warn("Unable to load achievements from " + commonFilename + ", making a backup and remaking it.", ex); Global.getSettings().writeTextFileToCommon(commonFilename + ".backup", Global.getSettings().readTextFileFromCommon(commonFilename)); Global.getSettings().deleteTextFileFromCommon(commonFilename); - saveAchievements(true); + saveAchievements(true, true); commonJson = JSONUtils.loadCommonJSON(commonFilename); savedAchievementsJson = commonJson.getJSONArray(achievementsJsonObjectKey); } diff --git a/src/org/magiclib/achievements/MagicTargetListAchievement.java b/src/org/magiclib/achievements/MagicTargetListAchievement.java index 39966828..acda7da7 100644 --- a/src/org/magiclib/achievements/MagicTargetListAchievement.java +++ b/src/org/magiclib/achievements/MagicTargetListAchievement.java @@ -19,7 +19,7 @@ public class MagicTargetListAchievement extends MagicAchievement { protected String KEY = "magictargetlist_targets"; public Map getTargets() { - Object obj = getMemory().get(KEY); + Object obj = getAchievementMemory().get(KEY); if (obj == null) { return new HashMap<>(); @@ -30,7 +30,7 @@ public Map getTargets() { JSONObject jsonTargets = (JSONObject) obj; Map result = new HashMap<>(jsonTargets.length()); - for (Iterator it = jsonTargets.keys(); it.hasNext(); ) { + for (var it = jsonTargets.keys(); it.hasNext(); ) { String key = (String) it.next(); JSONObject jsonData = jsonTargets.getJSONObject(key); result.put(key, new Data(jsonData.getString(Data.DISPLAY_NAME), jsonData.getBoolean(Data.IS_COMPLETE))); @@ -85,7 +85,7 @@ public void setTargets(Map targets) { savedTargets.remove(key); } - getMemory().put(KEY, savedTargets); + getAchievementMemory().put(KEY, savedTargets); } /** @@ -100,7 +100,7 @@ public void addTarget(String targetKey, String displayName) { if (savedTargets.containsKey(targetKey)) return; savedTargets.put(targetKey, new Data(displayName)); - getMemory().put(KEY, savedTargets); + getAchievementMemory().put(KEY, savedTargets); } /** @@ -126,7 +126,7 @@ public void setTargetComplete(String targetKey, boolean isComplete) { savedTargets.put(targetKey, new Data(targetKey, isComplete)); } - getMemory().put(KEY, savedTargets); + getAchievementMemory().put(KEY, savedTargets); } @Override @@ -138,7 +138,7 @@ public void advanceAfterInterval(float amount) { return; // If all targets are complete, complete the achievement. - if (shouldComplete(targets)) return; + if (!shouldComplete(targets)) return; completeAchievement(); saveChanges(); @@ -150,13 +150,14 @@ public void advanceInCombat(float amount, List events, boolean is super.advanceInCombat(amount, events, isSimulation); if (isSimulation) return; + if (isComplete()) return; Map targets = getTargets(); if (targets.isEmpty()) return; - if (shouldComplete(targets)) return; + if (!shouldComplete(targets)) return; completeAchievement(); saveChanges(); @@ -181,10 +182,10 @@ public boolean shouldComplete(Map targets) { for (Data data : targets.values()) { if (!data.isComplete) { - return true; + return false; } } - return false; + return true; } @Override @@ -214,12 +215,7 @@ public void createTooltip(@NotNull TooltipMakerAPI tooltipMakerAPI, boolean isEx tooltipMakerAPI.setBulletedListMode(" - "); List values = new ArrayList<>(getTargets().values()); - Collections.sort(values, new Comparator() { - @Override - public int compare(Data o1, Data o2) { - return o1.displayName.compareTo(o2.displayName); - } - }); + values.sort(Comparator.comparing(o -> o.displayName)); for (Data data : values) { tooltipMakerAPI.addPara(data.displayName, data.isComplete ? Misc.getTextColor() : Misc.getNegativeHighlightColor(), 0f); diff --git a/src/org/magiclib/paintjobs/MagicPaintjobShinyAdder.kt b/src/org/magiclib/paintjobs/MagicPaintjobShinyAdder.kt index 41d46303..cf2e56b8 100644 --- a/src/org/magiclib/paintjobs/MagicPaintjobShinyAdder.kt +++ b/src/org/magiclib/paintjobs/MagicPaintjobShinyAdder.kt @@ -22,7 +22,7 @@ class MagicPaintjobShinyAdder : BaseCampaignEventListener(false) { val shipsInFleetWithAvailableShiny = fleet.fleetData.membersListCopy.filter { it.hullId in allShinyPaintjobs.flatMap { pj -> pj.hullIds } } - val probability = 50 // 1 in X chance of getting a shiny + val probability = 50 // 1 in 50 chance of spawning a shiny var addedShiny = false for (ship in shipsInFleetWithAvailableShiny) { diff --git a/src/org/magiclib/util/MagicCampaign.java b/src/org/magiclib/util/MagicCampaign.java index ef34e3a7..391639b0 100644 --- a/src/org/magiclib/util/MagicCampaign.java +++ b/src/org/magiclib/util/MagicCampaign.java @@ -157,7 +157,7 @@ public static ShipVariantAPI loadVariant(String path) { // todo: check if order matters if (sMods != null) { for (int k = 0; k < sMods.length(); k++) { - String sModId = hullMods.getString(k); + String sModId = sMods.getString(k); variant.addPermaMod(sModId, true); // variant.addPermaMod(sModId); variant.addMod(sModId); @@ -165,7 +165,7 @@ public static ShipVariantAPI loadVariant(String path) { } if (permaMods != null) { for (int j = 0; j < permaMods.length(); j++) { - String permaModId = hullMods.getString(j); + String permaModId = permaMods.getString(j); variant.addPermaMod(permaModId); if (!variant.getHullMods().contains(permaModId)) { variant.addMod(permaModId);