diff options
-rw-r--r-- | src/main/java/de/torui/coflsky/handlers/DescriptionHandler.java | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/src/main/java/de/torui/coflsky/handlers/DescriptionHandler.java b/src/main/java/de/torui/coflsky/handlers/DescriptionHandler.java index 1c64bfd..3db2027 100644 --- a/src/main/java/de/torui/coflsky/handlers/DescriptionHandler.java +++ b/src/main/java/de/torui/coflsky/handlers/DescriptionHandler.java @@ -35,7 +35,8 @@ public class DescriptionHandler { public int line; } - public static HashMap<ItemStack, DescModification[]> tooltipItemMap = new HashMap<>(); + public static String allItemIds; + public static HashMap<String, DescModification[]> tooltipItemIdMap = new HashMap<>(); public static final DescModification[] EMPTY_ARRAY = new DescModification[0]; @@ -80,9 +81,6 @@ public class DescriptionHandler { } private DescModification[] getTooltipData(ItemStack itemStack) { - if (tooltipItemMap.containsKey(itemStack)) { - return tooltipItemMap.getOrDefault(itemStack, EMPTY_ARRAY); - } String id = ExtractIdFromItemStack(itemStack); if (tooltipItemIdMap.containsKey(id)) { return tooltipItemIdMap.getOrDefault(id, EMPTY_ARRAY); @@ -96,24 +94,24 @@ public class DescriptionHandler { * Called when the inventory is opened * checks for changes every once in a while and updates the description if * there was a change found - * + * * @param event */ public void loadDescriptionAndListenForChanges(GuiOpenEvent event) { GuiContainer gc = (GuiContainer) event.gui; - loadDescriptionForInventory(event, gc, false); + shouldUpdate = loadDescriptionForInventory(event, gc, false); int iteration = 1; while (IsOpen) { try { - Thread.sleep(300 + iteration++); + Thread.sleep(300 * iteration++); + iteration++; } catch (InterruptedException e) { throw new RuntimeException(e); } if (shouldUpdate || hasAnyStackChanged(gc)) { - shouldUpdate = false; - loadDescriptionForInventory(event, gc, true); + shouldUpdate = loadDescriptionForInventory(event, gc, true); // reduce update time since its more likely that more changes occure after one iteration = 5; } @@ -123,16 +121,22 @@ public class DescriptionHandler { } private static boolean hasAnyStackChanged(GuiContainer gc) { + return !allItemIds.equals(getCurrentInventoryIds(gc)); + } + + private static String getCurrentInventoryIds(GuiContainer gc){ + StringBuilder builder = new StringBuilder(); + for (Slot obj : gc.inventorySlots.inventorySlots) { ItemStack stack = obj.getStack(); - if (stack != null && !tooltipItemMap.containsKey(stack)) { - return true; - } + String id = ExtractIdFromItemStack(stack); + builder.append(id); } - return false; + + return builder.toString(); } - private static void loadDescriptionForInventory(GuiOpenEvent event, GuiContainer gc, boolean skipLoadCheck) { + private static boolean loadDescriptionForInventory(GuiOpenEvent event, GuiContainer gc, boolean skipLoadCheck) { InventoryWrapper wrapper = new InventoryWrapper(); if (event.gui instanceof GuiChest) { if (!skipLoadCheck) @@ -146,6 +150,8 @@ public class DescriptionHandler { } } + allItemIds = getCurrentInventoryIds(gc); + NBTTagCompound compound = new NBTTagCompound(); NBTTagList tl = new NBTTagList(); @@ -158,6 +164,7 @@ public class DescriptionHandler { } } + boolean shouldGetRefreshed = false; ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { compound.setTag("i", tl); @@ -174,18 +181,29 @@ public class DescriptionHandler { String info = QueryServerCommands.PostRequest(Config.BaseUrl + "/api/mod/description/modifications", data); DescModification[][] arr = WSClient.gson.fromJson(info, DescModification[][].class); - int i = 0; - for (ItemStack stack : stacks) { - tooltipItemMap.put(stack, arr[i]); + for (int i = 0; i < stacks.size(); i++) { + ItemStack stack = stacks.get(i); String id = ExtractIdFromItemStack(stack); if (id.length() > 0) tooltipItemIdMap.put(id, arr[i]); - i++; + + if(stack == null) + continue; + NBTTagList lore = stack.getTagCompound().getCompoundTag("display").getTagList("Lore", 8); + for (int j = 0; j < lore.tagCount(); j++) { + String tag = lore.get(j).toString(); + System.out.println("tag: " + tag); + if(tag.contains("ยง7Refreshing...")){ + shouldGetRefreshed = true; + } + } } } catch (IOException e) { e.printStackTrace(); } + + return shouldGetRefreshed; } private static void waitForChestContentLoad(GuiOpenEvent event, GuiContainer gc) { @@ -235,8 +253,6 @@ public class DescriptionHandler { * Called when the inventory is closed */ public static void emptyTooltipData() { - tooltipItemMap.clear(); - tooltipItemIdMap.clear(); tooltipItemIdMap.clear(); } } |