diff --git a/src/main/java/codechicken/nei/bookmark/BookmarkStorage.java b/src/main/java/codechicken/nei/bookmark/BookmarkStorage.java index 89823697..b674cdb1 100644 --- a/src/main/java/codechicken/nei/bookmark/BookmarkStorage.java +++ b/src/main/java/codechicken/nei/bookmark/BookmarkStorage.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,6 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import org.apache.commons.io.IOUtils; +import com.google.common.io.Files; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -137,6 +137,7 @@ public class BookmarkStorage { NBTTagCompound navigation = new NBTTagCompound(); namespaces.add(new BookmarkGrid()); BookmarkGrid grid = namespaces.get(0); + boolean wasError = false; if (NEIClientConfig.world.nbt.hasKey("bookmark")) { navigation = NEIClientConfig.world.nbt.getCompoundTag("bookmark"); @@ -151,17 +152,19 @@ public class BookmarkStorage { } if (itemStr.startsWith("; ")) { - JsonObject settings = parser.parse(itemStr.substring(2)).getAsJsonObject(); if (grid.size() > 0) { // do not create empty namespaces grid = new BookmarkGrid(); + + if (navigation.hasKey("namespacePage." + namespaces.size())) { + grid.setPage(navigation.getInteger("namespacePage." + namespaces.size())); + } + namespaces.add(grid); } - if (navigation.hasKey("namespacePage." + (namespaces.size() - 1))) { - grid.setPage(navigation.getInteger("namespacePage." + (namespaces.size() - 1)));; - } + final JsonObject settings = parser.parse(itemStr.substring(2)).getAsJsonObject(); if (settings.get("viewmode") != null) { grid.groups.get(BookmarkGrid.DEFAULT_GROUP_ID).viewMode = BookmarkViewMode @@ -196,17 +199,28 @@ public class BookmarkStorage { } if (!addItemToGrid(grid, parser.parse(itemStr).getAsJsonObject())) { + wasError = true; NEIClientConfig.logger.warn( "Failed to load bookmarked ItemStack from json string, the item no longer exists:\n{}", itemStr); } - } catch (IllegalArgumentException | JsonSyntaxException | IllegalStateException e) { + } catch (Exception e) { + wasError = true; NEIClientConfig.logger.error("Failed to load bookmarked ItemStack from json string:\n{}", itemStr); } } - prepareOldRecipeFormat(namespaces); + if (wasError) { + try { + Files.copy( + bookmarkFile, + new File(bookmarkFile.getAbsolutePath() + ".backup-" + System.currentTimeMillis())); + NEIClientConfig.logger.info("Backed up invalid bookmark file to {}", bookmarkFile); + } catch (IOException e) { + NEIClientConfig.logger.error("Failed to backup invalid bookmark file to {}", bookmarkFile, e); + } + } for (BookmarkGrid gr : namespaces) { gr.onItemsChanged(); @@ -264,48 +278,6 @@ public class BookmarkStorage { return itemStack != null; } - private void prepareOldRecipeFormat(List namespaces) { - - for (BookmarkGrid grid : namespaces) { - if (grid.bookmarkItems.stream() - .noneMatch(item -> item.recipeId != null && item.recipeId.getResult() == null)) { - continue; - } - - final Map recipes = new HashMap<>(); - - for (BookmarkItem item : grid.bookmarkItems) { - if (item.recipeId != null && item.type != BookmarkItemType.INGREDIENT - && item.recipeId.getResult() == null) { - final JsonObject recipeJson = item.recipeId.toJsonObject(); - final String recipeGUID = item.groupId + ":" + NBTJson.toJson(recipeJson); - - if (!recipes.containsKey(recipeGUID)) { - recipeJson.add("result", NBTJson.toJsonObject(StackInfo.itemStackToNBT(item.itemStack))); - recipes.put(recipeGUID, item.recipeId = RecipeId.of(recipeJson)); - } - } - } - - for (BookmarkItem item : grid.bookmarkItems) { - if (item.recipeId != null && item.recipeId.getResult() == null) { - final JsonObject recipeJson = item.recipeId.toJsonObject(); - final String recipeGUID = item.groupId + ":" + NBTJson.toJson(recipeJson); - - if (recipes.containsKey(recipeGUID)) { - item.recipeId = recipes.get(recipeGUID).copy(); - item.permutations = BookmarkItem.generatePermutations( - item.itemStack, - item.recipeId, - item.type == BookmarkItemType.INGREDIENT); - } else { - item.recipeId = null; - } - } - } - } - } - public void save() { if (this.bookmarkFile == null) {