diff --git a/src/main/java/org/wyldmods/simpleachievements/common/data/DataManager.java b/src/main/java/org/wyldmods/simpleachievements/common/data/DataManager.java index d5cf771..bd6a747 100644 --- a/src/main/java/org/wyldmods/simpleachievements/common/data/DataManager.java +++ b/src/main/java/org/wyldmods/simpleachievements/common/data/DataManager.java @@ -6,7 +6,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Type; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -19,7 +19,6 @@ import org.wyldmods.simpleachievements.common.networking.PacketHandlerSA; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -37,7 +36,6 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; @@ -67,7 +65,7 @@ public JsonElement serialize(Map src, Type typeOfSrc, JsonS public Map deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject root = json.getAsJsonObject(); - Map ret = Maps.newHashMap(); + Map ret = new LinkedHashMap(); for (Entry e : root.entrySet()) { JsonArray arr = e.getValue().getAsJsonArray(); @@ -89,7 +87,6 @@ public Map deserialize(JsonElement json, Type typeOfT, Json } } - private static boolean noSave = false; @SubscribeEvent public void onWorldLoad(WorldEvent.Load load) @@ -117,7 +114,9 @@ public void onPlayerLogin(PlayerLoggedInEvent event) (EntityPlayerMP) player); } } - + private static boolean noSave = false; + private boolean isDirty = false; + public static final DataManager INSTANCE = new DataManager(); private Map map; @@ -128,9 +127,9 @@ public void onPlayerLogin(PlayerLoggedInEvent event) private DataManager() { - map = new HashMap(); - formats = new HashMap(); - specialUsers = new HashMap(); + map = new LinkedHashMap(); + formats = new LinkedHashMap(); + specialUsers = new LinkedHashMap(); MinecraftForge.EVENT_BUS.register(this); } @@ -155,7 +154,7 @@ public void initFormatting() formats = new Gson().fromJson(s, new TypeToken>(){}.getType()); if (formats == null) { - formats = new HashMap(); + formats = new LinkedHashMap(); formats.put(0, new Formatting()); } } @@ -168,13 +167,14 @@ public void initSpecialUsers() throws IOException new TypeToken>(){}.getType()); if (specialUsers == null) { - specialUsers = new HashMap(); + specialUsers = new LinkedHashMap(); } } public void load() { noSave = false; + isDirty = false; saveDir = new File(DimensionManager.getCurrentSaveRootDirectory().getAbsolutePath() + "/" + SimpleAchievements.MODID); saveDir.mkdirs(); @@ -183,7 +183,6 @@ public void load() try { initSpecialUsers(); - if (saveFile.createNewFile()) { return; @@ -201,23 +200,27 @@ public void load() public void save() { - if (!noSave) + if (!noSave && isDirty) { saveMap(saveFile, this, this.map); + isDirty = false; } } + + public void markDirty() + { + isDirty = true; + } public void toggleAchievement(String username, int id) { checkMap(username); - map.get(username).toggleAchievement(id); } public DataHandler getHandlerFor(String username) { checkMap(username); - return map.get(username); } @@ -242,7 +245,7 @@ private static Map loadMap(File file) throws FileNotFoundEx scan.close(); Map ret = dataReader.fromJson(json, new TypeToken>(){}.getType()); - return ret == null ? new HashMap() : ret; + return ret == null ? new LinkedHashMap() : ret; } @SuppressWarnings("serial") @@ -287,6 +290,7 @@ public Offset getOffsetFor(String username) public void flush() { noSave = true; + isDirty = false; this.map.clear(); this.formats.clear(); diff --git a/src/main/java/org/wyldmods/simpleachievements/common/data/Element.java b/src/main/java/org/wyldmods/simpleachievements/common/data/Element.java index fba94c0..92644a4 100644 --- a/src/main/java/org/wyldmods/simpleachievements/common/data/Element.java +++ b/src/main/java/org/wyldmods/simpleachievements/common/data/Element.java @@ -1,13 +1,11 @@ package org.wyldmods.simpleachievements.common.data; +import static org.wyldmods.simpleachievements.common.data.Element.Alignment.LEFT; + import java.io.Serializable; import javax.annotation.Nonnull; -import lombok.ToString; - -import static org.wyldmods.simpleachievements.common.data.Element.Alignment.LEFT; -@ToString public class Element implements Serializable { private static final long serialVersionUID = -6961457157774225518L; @@ -64,12 +62,17 @@ public boolean getState() public void setState(boolean newState) { + if(state != newState) + { + DataManager.INSTANCE.markDirty(); + } state = newState; } public void toggle() { state = !state; + DataManager.INSTANCE.markDirty(); } public boolean isAchievement() @@ -97,11 +100,16 @@ public Alignment getAlign() return align; } - @SuppressWarnings("null") - public @Nonnull String getText() + public @Nonnull String getText() { return text.replace(lineSplit, "\n"); } + + @Override + public String toString() + { + return getText(); + } public void setText(String s) {