From ffd4297b17173fa0cc68b4f133588063f7f36c67 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Oct 2019 21:23:29 -0400 Subject: [PATCH] Mod corruption load warnings --- core/assets/bundles/bundle.properties | 3 +- core/src/io/anuke/mindustry/game/Saves.java | 12 +++++++ .../io/anuke/mindustry/io/SaveVersion.java | 2 +- core/src/io/anuke/mindustry/mod/Mods.java | 2 +- .../mindustry/ui/dialogs/DeployDialog.java | 28 ++++++++-------- .../mindustry/ui/dialogs/LoadDialog.java | 33 ++++++++++--------- gradle.properties | 2 +- 7 files changed, 49 insertions(+), 33 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 3d7b54afb6..f384c8a86d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -76,6 +76,7 @@ mod.requiresrestart = The game will now close to apply the mod changes. mod.import = Import Mod mod.remove.confirm = This mod will be deleted. mod.author = [LIGHT_GRAY]Author:[] {0} +mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} about.button = About name = Name: @@ -177,7 +178,7 @@ save.rename.text = New name: selectslot = Select a save. slot = [accent]Slot {0} editmessage = Edit Message -save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug. +save.corrupted = Save file corrupted or invalid! empty = on = On off = Off diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java index cef478b064..ff22a74210 100644 --- a/core/src/io/anuke/mindustry/game/Saves.java +++ b/core/src/io/anuke/mindustry/game/Saves.java @@ -7,6 +7,7 @@ import io.anuke.arc.files.*; import io.anuke.arc.graphics.*; import io.anuke.arc.util.*; import io.anuke.arc.util.async.*; +import io.anuke.mindustry.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.io.*; @@ -253,6 +254,17 @@ public class Saves{ return meta.map; } + public void cautiousLoad(Runnable run){ + Array mods = Array.with(getMods()); + mods.removeAll(Vars.mods.getModStrings()); + + if(!mods.isEmpty()){ + ui.showConfirm("$warning", Core.bundle.format("mod.missing", mods.toString("\n")), run); + }else{ + run.run(); + } + } + public String getName(){ return Core.settings.getString("save-" + index + "-name", "untitled"); } diff --git a/core/src/io/anuke/mindustry/io/SaveVersion.java b/core/src/io/anuke/mindustry/io/SaveVersion.java index 6b5f49db26..76e7ce5e09 100644 --- a/core/src/io/anuke/mindustry/io/SaveVersion.java +++ b/core/src/io/anuke/mindustry/io/SaveVersion.java @@ -66,7 +66,7 @@ public abstract class SaveVersion extends SaveFileReader{ "wavetime", state.wavetime, "stats", JsonIO.write(state.stats), "rules", JsonIO.write(state.rules), - "mods", JsonIO.write(mods.getModNames().toArray(String.class)), + "mods", JsonIO.write(mods.getModStrings().toArray(String.class)), "width", world.width(), "height", world.height() ).merge(tags)); diff --git a/core/src/io/anuke/mindustry/mod/Mods.java b/core/src/io/anuke/mindustry/mod/Mods.java index daf9687be4..fb55a8142f 100644 --- a/core/src/io/anuke/mindustry/mod/Mods.java +++ b/core/src/io/anuke/mindustry/mod/Mods.java @@ -258,7 +258,7 @@ public class Mods implements Loadable{ } /** @return the mods that the client is missing. - * The inputted array is changed to contain the extra mods that the client has but the server does.*/ + * The inputted array is changed to contain the extra mods that the client has but the server doesn't.*/ public Array getIncompatibility(Array out){ Array mods = getModStrings(); Array result = mods.copy(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index 1ba3c9ca82..86841152e8 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -103,19 +103,21 @@ public class DeployDialog extends FloatingDialog{ } TextButton button = Elements.newButton(Core.bundle.format("resume", slot.getZone().localizedName()), Styles.squaret, () -> { - hide(); - ui.loadAnd(() -> { - logic.reset(); - net.reset(); - try{ - control.saves.getZoneSlot().load(); - state.set(State.playing); - }catch(SaveException e){ //make sure to handle any save load errors! - e.printStackTrace(); - if(control.saves.getZoneSlot() != null) control.saves.getZoneSlot().delete(); - Core.app.post(() -> ui.showInfo("$save.corrupted")); - show(); - } + control.saves.getZoneSlot().cautiousLoad(() -> { + hide(); + ui.loadAnd(() -> { + logic.reset(); + net.reset(); + try{ + slot.load(); + state.set(State.playing); + }catch(SaveException e){ //make sure to handle any save load errors! + e.printStackTrace(); + if(control.saves.getZoneSlot() != null) control.saves.getZoneSlot().delete(); + Core.app.post(() -> ui.showInfo("$save.corrupted")); + show(); + } + }); }); }); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 3ccd5ae624..815a5b6516 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -186,22 +186,23 @@ public class LoadDialog extends FloatingDialog{ } public void runLoadSave(SaveSlot slot){ - hide(); - ui.paused.hide(); - - ui.loadAnd(() -> { - try{ - net.reset(); - slot.load(); - state.rules.editor = false; - state.rules.zone = null; - state.set(State.playing); - }catch(SaveException e){ - Log.err(e); - state.set(State.menu); - logic.reset(); - ui.showErrorMessage("$save.corrupted"); - } + slot.cautiousLoad(() -> { + ui.loadAnd(() -> { + hide(); + ui.paused.hide(); + try{ + net.reset(); + slot.load(); + state.rules.editor = false; + state.rules.zone = null; + state.set(State.playing); + }catch(SaveException e){ + Log.err(e); + state.set(State.menu); + logic.reset(); + ui.showErrorMessage("$save.corrupted"); + } + }); }); } diff --git a/gradle.properties b/gradle.properties index e0b0e4aa19..8a43b1cc6a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=2a94f9187de5a7fa0b795ba4725fbc3e929b890c +archash=e17b152d4f597837640fe4d659ca5a820e8a2b15