From b09f774d422263ce15b97d6d0804beddf856176d Mon Sep 17 00:00:00 2001 From: IRONM00N <64110067+IRONM00N@users.noreply.github.com> Date: Sun, 27 Feb 2022 11:53:57 -0500 Subject: feat: improve formating :) --- .../miscgui/AccessoryBagOverlay.java | 1990 +++++++++++--------- 1 file changed, 1122 insertions(+), 868 deletions(-) (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java index 584f6bf7..8996dc7a 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java @@ -41,690 +41,940 @@ import java.util.regex.Pattern; import static io.github.moulberry.notenoughupdates.util.GuiTextures.accessory_bag_overlay; public class AccessoryBagOverlay { - private static final int TAB_BASIC = 0; - private static final int TAB_TOTAL = 1; - private static final int TAB_BONUS = 2; - private static final int TAB_DUP = 3; - private static final int TAB_MISSING = 4; - private static final int TAB_OPTIMIZER = 5; - - private static final ItemStack[] TAB_STACKS = new ItemStack[]{ - Utils.createItemStack(Items.dye, EnumChatFormatting.DARK_AQUA + "Basic Information", - 10, EnumChatFormatting.GREEN + "- Talis count by rarity"), - Utils.createItemStack(Items.diamond_sword, EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses", - 0), - Utils.createItemStack(Item.getItemFromBlock(Blocks.anvil), EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses (from reforges)", - 0), - Utils.createItemStack(Items.dye, EnumChatFormatting.DARK_AQUA + "Duplicates", - 8), - Utils.createItemStack(Item.getItemFromBlock(Blocks.barrier), EnumChatFormatting.DARK_AQUA + "Missing", - 0), - Utils.createItemStack(Item.getItemFromBlock(Blocks.redstone_block), EnumChatFormatting.DARK_AQUA + "Optimizer", - 0), - }; - - private static int currentTab = TAB_BASIC; - - public static boolean mouseClick() { - if (Minecraft.getMinecraft().currentScreen instanceof GuiChest) { - GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen; - ContainerChest cc = (ContainerChest) eventGui.inventorySlots; - String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); - if (!containerName.trim().startsWith("Accessory Bag")) { - return false; - } - } else { - return false; - } - - if (!Mouse.getEventButtonState()) return false; - try { - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - - int mouseX = Mouse.getX() / scaledResolution.getScaleFactor(); - int mouseY = height - Mouse.getY() / scaledResolution.getScaleFactor(); - - int xSize = (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "xSize", "field_146999_f"); - int ySize = (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "ySize", "field_147000_g"); - int guiLeft = (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "guiLeft", "field_147003_i"); - int guiTop = (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "guiTop", "field_147009_r"); - - if (mouseX < guiLeft + xSize + 3 || mouseX > guiLeft + xSize + 80 + 28) return false; - if (mouseY < guiTop || mouseY > guiTop + 166) return false; - - if (mouseX > guiLeft + xSize + 83 && mouseY < guiTop + 20 * TAB_MISSING + 22) { - currentTab = (mouseY - guiTop) / 20; - if (currentTab < 0) currentTab = 0; - if (currentTab > TAB_MISSING) currentTab = TAB_MISSING; - } - - if (currentTab == TAB_OPTIMIZER) { - int x = guiLeft + xSize + 3; - int y = guiTop; - - if (mouseY > y + 92 && mouseY < y + 103) { - if (mouseX > x + 5 && mouseX < x + 75) { - mainWeapon = (int) Math.floor((mouseX - x - 5) / 70f * 9); - if (mainWeapon < 1) { - mainWeapon = 1; - } else if (mainWeapon > 9) { - mainWeapon = 9; - } - } - } - - if (mouseX > x + 5 && mouseX < x + 35 || mouseX > x + 45 && mouseX < x + 75) { - boolean set = mouseX > x + 5 && mouseX < x + 35; - - if (mouseY > y + 32 && mouseY < y + 43) { - forceCC = set; - } else if (mouseY > y + 52 && mouseY < y + 63) { - forceAS = set; - } else if (mouseY > y + 72 && mouseY < y + 83) { - useGodPot = set; - } else if (mouseY > y + 92 && mouseY < y + 103) { - allowShaded = set; - } - } - } - - return true; - } catch (Exception e) { - return false; - } - } - - public static void resetCache() { - accessoryStacks = new HashSet<>(); - pagesVisited = new HashSet<>(); - talismanCountRarity = null; - totalStats = null; - reforgeStats = null; - duplicates = null; - missing = null; - } - - private static Set accessoryStacks = new HashSet<>(); - private static Set pagesVisited = new HashSet<>(); - - public static void renderVisitOverlay(int x, int y) { - Utils.drawStringCenteredScaledMaxWidth("Please visit all", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 78, true, 70, -1); - Utils.drawStringCenteredScaledMaxWidth("pages of the bag", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 86, true, 70, -1); - } - - private static TreeMap talismanCountRarity = null; - - public static void renderBasicOverlay(int x, int y) { - if (talismanCountRarity == null) { - talismanCountRarity = new TreeMap<>(); - for (ItemStack stack : accessoryStacks) { - int rarity = getRarity(stack); - if (rarity >= 0) { - talismanCountRarity.put(rarity, talismanCountRarity.getOrDefault(rarity, 0) + 1); - } - } - } - - Utils.drawStringCenteredScaledMaxWidth("# By Rarity", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - - int yIndex = 0; - for (Map.Entry entry : talismanCountRarity.descendingMap().entrySet()) { - String rarityName = Utils.rarityArrC[entry.getKey()]; - Utils.renderAlignedString(rarityName, EnumChatFormatting.WHITE.toString() + entry.getValue(), x + 5, y + 20 + 11 * yIndex, 70); - yIndex++; - } - } - - private static PlayerStats.Stats totalStats = null; - - public static void renderTotalStatsOverlay(int x, int y) { - if (totalStats == null) { - totalStats = new PlayerStats.Stats(); - for (ItemStack stack : accessoryStacks) { - if (stack != null) totalStats.add(getStatForItem(stack, STAT_PATTERN_MAP, true)); - } - } - - Utils.drawStringCenteredScaledMaxWidth("Total Stats", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - int yIndex = 0; - for (int i = 0; i < PlayerStats.defaultStatNames.length; i++) { - String statName = PlayerStats.defaultStatNames[i]; - String statNamePretty = PlayerStats.defaultStatNamesPretty[i]; - - int val = Math.round(totalStats.get(statName)); - - if (Math.abs(val) < 1E-5) continue; - - GlStateManager.color(1, 1, 1, 1); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - Utils.renderAlignedString(statNamePretty, EnumChatFormatting.WHITE.toString() + val, x + 5, y + 20 + 11 * yIndex, 70); - - yIndex++; - } - } - - private static PlayerStats.Stats reforgeStats = null; - - public static void renderReforgeStatsOverlay(int x, int y) { - if (reforgeStats == null) { - reforgeStats = new PlayerStats.Stats(); - for (ItemStack stack : accessoryStacks) { - if (stack != null) reforgeStats.add(getStatForItem(stack, STAT_PATTERN_MAP_BONUS, false)); - } - } - - Utils.drawStringCenteredScaledMaxWidth("Reforge Stats", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - int yIndex = 0; - for (int i = 0; i < PlayerStats.defaultStatNames.length; i++) { - String statName = PlayerStats.defaultStatNames[i]; - String statNamePretty = PlayerStats.defaultStatNamesPretty[i]; - - int val = Math.round(reforgeStats.get(statName)); - - if (Math.abs(val) < 1E-5) continue; - - GlStateManager.color(1, 1, 1, 1); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - Utils.renderAlignedString(statNamePretty, EnumChatFormatting.WHITE.toString() + val, x + 5, y + 20 + 11 * yIndex, 70); - - yIndex++; - } - } - - private static Set duplicates = null; - - public static void renderDuplicatesOverlay(int x, int y) { - if (duplicates == null) { - JsonObject misc = Constants.MISC; - if (misc == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - return; - } - JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); - if (talisman_upgrades_element == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - return; - } - JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject(); - - duplicates = new HashSet<>(); - - Set prevInternalnames = new HashSet<>(); - for (ItemStack stack : accessoryStacks) { - String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack); - - if (prevInternalnames.contains(internalname)) { - duplicates.add(stack); - continue; - } - prevInternalnames.add(internalname); - - if (talisman_upgrades.has(internalname)) { - JsonArray upgrades = talisman_upgrades.get(internalname).getAsJsonArray(); - for (ItemStack stack2 : accessoryStacks) { - if (stack != stack2) { - String internalname2 = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack2); - for (int j = 0; j < upgrades.size(); j++) { - String upgrade = upgrades.get(j).getAsString(); - if (internalname2.equals(upgrade)) { - duplicates.add(stack); - break; - } - } - } - } - } - } - } - if (duplicates.isEmpty()) { - Utils.drawStringCenteredScaledMaxWidth("No Duplicates", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - } else { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: " + duplicates.size(), Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - - int yIndex = 0; - for (ItemStack duplicate : duplicates) { - String s = duplicate.getDisplayName(); - Utils.renderShadowedString(s, x + 40, y + 20 + 11 * yIndex, 70); - if (duplicates.size() > 11) { - if (++yIndex >= 10) break; - } else { - if (++yIndex >= 11) break; - } - } - - if (duplicates.size() > 11) { - Utils.drawStringCenteredScaledMaxWidth("+" + (duplicates.size() - 10) + " More", - Minecraft.getMinecraft().fontRendererObj, x + 40, y + 16 + 121, false, 70, - new Color(80, 80, 80).getRGB()); - } - } - } - - private static List missing = null; - - public static void renderMissingOverlay(int x, int y) { - if (missing == null) { - JsonObject misc = Constants.MISC; - if (misc == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - return; - } - JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); - if (talisman_upgrades_element == null) { - Utils.drawStringCenteredScaledMaxWidth("Duplicates: ERROR", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - return; - } - JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject(); - - missing = new ArrayList<>(); - - List missingInternal = new ArrayList<>(); - for (Map.Entry entry : NotEnoughUpdates.INSTANCE.manager.getItemInformation().entrySet()) { - if (entry.getValue().has("lore")) { - if (checkItemType(entry.getValue().get("lore").getAsJsonArray(), "ACCESSORY", "HATCCESSORY", "DUNGEON ACCESSORY") >= 0) { - missingInternal.add(entry.getKey()); - } - } - } - - for (ItemStack stack : accessoryStacks) { - String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack); - missingInternal.remove(internalname); - - for (Map.Entry talisman_upgrade_element : talisman_upgrades.entrySet()) { - JsonArray upgrades = talisman_upgrade_element.getValue().getAsJsonArray(); - for (int j = 0; j < upgrades.size(); j++) { - String upgrade = upgrades.get(j).getAsString(); - if (internalname.equals(upgrade)) { - missingInternal.remove(talisman_upgrade_element.getKey()); - break; - } - } - } - } - - missingInternal.sort(getItemComparator()); - - Set missingDisplayNames = new HashSet<>(); - for (String internal : missingInternal) { - boolean hasDup = false; - - if (talisman_upgrades.has(internal)) { - JsonArray upgrades = talisman_upgrades.get(internal).getAsJsonArray(); - for (int j = 0; j < upgrades.size(); j++) { - String upgrade = upgrades.get(j).getAsString(); - if (missingInternal.contains(upgrade)) { - hasDup = true; - break; - } - } - } - - ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(internal), false); - - if (missingDisplayNames.contains(stack.getDisplayName())) continue; - missingDisplayNames.add(stack.getDisplayName()); - - if (hasDup) { - stack.setStackDisplayName(stack.getDisplayName() + "*"); - } - missing.add(stack); - } - } - if (missing.isEmpty()) { - Utils.drawStringCenteredScaledMaxWidth("No Missing", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - } else { - Utils.drawStringCenteredScaledMaxWidth("Missing: " + missing.size(), Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - - int yIndex = 0; - long currentTime = System.currentTimeMillis(); - int marqueeOffset = (int) (currentTime / 500 % 100); - for (ItemStack missingStack : missing) { - String s = missingStack.getDisplayName(); - - //int marueeOffset - //if(s.length()) { - - //} - - s = Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(s, 70); - - String clean = StringUtils.cleanColourNotModifiers(s); - for (int xO = -1; xO <= 1; xO++) { - for (int yO = -1; yO <= 1; yO++) { - int col = 0xff202020; - //if(xO != 0 && yO != 0) col = 0xff252525; - Minecraft.getMinecraft().fontRendererObj.drawString(clean, x + 5 + xO, y + 20 + 11 * yIndex + yO, col, false); - } - } - Minecraft.getMinecraft().fontRendererObj.drawString(s, x + 5, y + 20 + 11 * yIndex, 0xffffff, false); - if (missing.size() > 11) { - if (++yIndex >= 10) break; - } else { - if (++yIndex >= 11) break; - } - } - - if (missing.size() > 11) { - Utils.drawStringCenteredScaledMaxWidth("Show All", - Minecraft.getMinecraft().fontRendererObj, x + 40, y + 16 + 121, false, 70, - new Color(80, 80, 80).getRGB()); - - final ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); - final int scaledWidth = scaledresolution.getScaledWidth(); - final int scaledHeight = scaledresolution.getScaledHeight(); - int mouseX = Mouse.getX() * scaledWidth / Minecraft.getMinecraft().displayWidth; - int mouseY = scaledHeight - Mouse.getY() * scaledHeight / Minecraft.getMinecraft().displayHeight - 1; - - if (mouseX > x && mouseX < x + 80 && - mouseY > y + 11 + 121 && mouseY < y + 21 + 121) { - List text = new ArrayList<>(); - StringBuilder line = new StringBuilder(); - int leftMaxSize = 0; - int middleMaxSize = 0; - for (int i = 0; i < missing.size(); i += 3) { - leftMaxSize = Math.max(leftMaxSize, Minecraft.getMinecraft().fontRendererObj. - getStringWidth(missing.get(i).getDisplayName())); - } - for (int i = 1; i < missing.size(); i += 3) { - middleMaxSize = Math.max(middleMaxSize, Minecraft.getMinecraft().fontRendererObj. - getStringWidth(missing.get(i).getDisplayName())); - } - for (int i = 0; i < missing.size(); i++) { - if (i % 3 == 0 && i > 0) { - text.add(line.toString()); - line = new StringBuilder(); - } - StringBuilder name = new StringBuilder(missing.get(i).getDisplayName()); - int nameLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(name.toString()); - - int padSize = -1; - if (i % 3 == 0) padSize = leftMaxSize; - if (i % 3 == 1) padSize = middleMaxSize; - if (padSize > 0) { - float padNum = (padSize - nameLen) / 4.0f; - int remainder = (int) ((padNum % 1) * 4); - while (padNum >= 1) { - if (remainder > 0) { - name.append(EnumChatFormatting.BOLD).append(" "); - remainder--; - } else { - name.append(EnumChatFormatting.RESET).append(" "); - } - padNum--; - } - } - line.append('\u00A7').append(Utils.getPrimaryColourCode(missing.get(i).getDisplayName())); - if (i < 9) { - line.append((char) ('\u2776' + i)).append(' '); - } else { - line.append("\u2b24 "); - } - line.append(name); - if (i % 3 < 2) line.append(" "); - } - - GlStateManager.pushMatrix(); - GlStateManager.scale(2f / scaledresolution.getScaleFactor(), 2f / scaledresolution.getScaleFactor(), 1); - Utils.drawHoveringText(text, - mouseX * scaledresolution.getScaleFactor() / 2, - mouseY * scaledresolution.getScaleFactor() / 2, - scaledWidth * scaledresolution.getScaleFactor() / 2, - scaledHeight * scaledresolution.getScaleFactor() / 2, -1, Minecraft.getMinecraft().fontRendererObj); - GlStateManager.popMatrix(); - } - } - } - } - - private static boolean forceCC = false; - private static boolean forceAS = false; - private static boolean useGodPot = true; - private static boolean allowShaded = true; - private static int mainWeapon = 1; - - public static void renderOptimizerOverlay(int x, int y) { - Utils.drawStringCenteredScaledMaxWidth("Optimizer", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 12, false, 70, - new Color(80, 80, 80).getRGB()); - - int light = new Color(220, 220, 220).getRGB(); - int dark = new Color(170, 170, 170).getRGB(); - - Gui.drawRect(x + 5, y + 32, x + 35, y + 43, forceCC ? dark : light); - Gui.drawRect(x + 45, y + 32, x + 75, y + 43, forceCC ? light : dark); - - Gui.drawRect(x + 5, y + 52, x + 35, y + 63, forceAS ? dark : light); - Gui.drawRect(x + 45, y + 52, x + 75, y + 63, forceAS ? light : dark); - - Gui.drawRect(x + 5, y + 72, x + 35, y + 83, useGodPot ? dark : light); - Gui.drawRect(x + 45, y + 72, x + 75, y + 83, useGodPot ? light : dark); - - Gui.drawRect(x + 5, y + 92, x + 35, y + 103, allowShaded ? dark : light); - Gui.drawRect(x + 45, y + 92, x + 75, y + 103, allowShaded ? light : dark); - - Gui.drawRect(x + 5, y + 102, x + 75, y + 113, light); - Gui.drawRect(x + 5 + (int) ((mainWeapon - 1) / 9f * 70), y + 102, x + 5 + (int) (mainWeapon / 9f * 70), y + 113, dark); - - Utils.drawStringCenteredScaledMaxWidth("Force 100% CC", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 27, false, 70, - new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((forceCC ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", - Minecraft.getMinecraft().fontRendererObj, x + 20, y + 37, - true, 30, new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((forceCC ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 37, - true, 30, new Color(80, 80, 80).getRGB()); - - Utils.drawStringCenteredScaledMaxWidth("Force 100% ATKSPEED", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 47, false, 70, - new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((forceAS ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", Minecraft.getMinecraft().fontRendererObj, x + 20, y + 57, - true, 30, new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((forceAS ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 57, - true, 30, new Color(80, 80, 80).getRGB()); - - Utils.drawStringCenteredScaledMaxWidth("Use God Potion", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 67, false, 70, - new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((useGodPot ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", Minecraft.getMinecraft().fontRendererObj, x + 20, y + 77, - true, 30, new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((useGodPot ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", Minecraft.getMinecraft().fontRendererObj, x + 60, y + 77, - true, 30, new Color(80, 80, 80).getRGB()); - - Utils.drawStringCenteredScaledMaxWidth("Use God Potion", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 87, false, 70, - new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", - Minecraft.getMinecraft().fontRendererObj, x + 20, y + 97, - true, 30, new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", - Minecraft.getMinecraft().fontRendererObj, x + 60, y + 97, - true, 30, new Color(80, 80, 80).getRGB()); - - Utils.drawStringCenteredScaledMaxWidth("Main Weapon", Minecraft.getMinecraft().fontRendererObj, x + 40, y + 107, false, 70, - new Color(80, 80, 80).getRGB()); - Utils.drawStringCenteredScaled("1 2 3 4 5 6 7 8 9", - Minecraft.getMinecraft().fontRendererObj, x + 40, y + 117, - true, 70, new Color(80, 80, 80).getRGB()); - } - - private static Comparator getItemComparator() { - return (o1, o2) -> { - float cost1; - JsonObject o1Auc = NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfo(o1); - if (o1Auc != null && o1Auc.has("price")) { - cost1 = o1Auc.get("price").getAsFloat(); - } else { - APIManager.CraftInfo info = NotEnoughUpdates.INSTANCE.manager.auctionManager.getCraftCost(o1); - if (info != null) - cost1 = info.craftCost; - else - cost1 = 0; - } - float cost2; - JsonObject o2Auc = NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfo(o2); - if (o2Auc != null && o2Auc.has("price")) { - cost2 = o2Auc.get("price").getAsFloat(); - } else { - APIManager.CraftInfo info = NotEnoughUpdates.INSTANCE.manager.auctionManager.getCraftCost(o2); - if (info != null) - cost2 = info.craftCost; - else - cost2 = 0; - } - - if (cost1 == -1 && cost2 == -1) return o1.compareTo(o2); - if (cost1 == -1) return 1; - if (cost2 == -1) return -1; - - if (cost1 < cost2) return -1; - if (cost1 > cost2) return 1; - - return o1.compareTo(o2); - }; - } - - private static boolean inAccessoryBag = false; - - public static boolean isInAccessoryBag() { - return inAccessoryBag; - } - - public static void renderOverlay() { - inAccessoryBag = false; - if (Minecraft.getMinecraft().currentScreen instanceof GuiChest && NEUEventListener.inventoryLoaded) { - GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen; - ContainerChest cc = (ContainerChest) eventGui.inventorySlots; - String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); - if (containerName.trim().startsWith("Accessory Bag")) { - inAccessoryBag = true; - try { - int xSize = (int) Utils.getField(GuiContainer.class, eventGui, "xSize", "field_146999_f"); - int ySize = (int) Utils.getField(GuiContainer.class, eventGui, "ySize", "field_147000_g"); - int guiLeft = (int) Utils.getField(GuiContainer.class, eventGui, "guiLeft", "field_147003_i"); - int guiTop = (int) Utils.getField(GuiContainer.class, eventGui, "guiTop", "field_147009_r"); - - if (accessoryStacks.isEmpty()) { - for (ItemStack stack : Minecraft.getMinecraft().thePlayer.inventory.mainInventory) { - if (stack != null && isAccessory(stack)) { - accessoryStacks.add(stack); - } - } - } - - if (containerName.trim().contains("(")) { - String first = containerName.trim().split("\\(")[1].split("/")[0]; - Integer currentPageNumber = Integer.parseInt(first); - //System.out.println("current:"+currentPageNumber); - if (!pagesVisited.contains(currentPageNumber)) { - boolean hasStack = false; - if (Minecraft.getMinecraft().thePlayer.openContainer instanceof ContainerChest) { - IInventory inv = ((ContainerChest) Minecraft.getMinecraft().thePlayer.openContainer).getLowerChestInventory(); - for (int i = 0; i < inv.getSizeInventory(); i++) { - ItemStack stack = inv.getStackInSlot(i); - if (stack != null) { - hasStack = true; - if (isAccessory(stack)) { - accessoryStacks.add(stack); - } - } - } - } - - if (hasStack) pagesVisited.add(currentPageNumber); - } - - String second = containerName.trim().split("/")[1].split("\\)")[0]; - //System.out.println(second + ":" + pagesVisited.size()); - if (Integer.parseInt(second) > pagesVisited.size()) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); - Utils.drawTexturedRect(guiLeft + xSize + 3, guiTop, 80, 149, 0, 80 / 256f, 0, 149 / 256f, GL11.GL_NEAREST); - - renderVisitOverlay(guiLeft + xSize + 3, guiTop); - return; - } - } else if (pagesVisited.isEmpty()) { - boolean hasStack = false; - if (Minecraft.getMinecraft().thePlayer.openContainer instanceof ContainerChest) { - IInventory inv = ((ContainerChest) Minecraft.getMinecraft().thePlayer.openContainer).getLowerChestInventory(); - for (int i = 0; i < inv.getSizeInventory(); i++) { - ItemStack stack = inv.getStackInSlot(i); - if (stack != null) { - hasStack = true; - if (isAccessory(stack)) { - accessoryStacks.add(stack); - } - } - } - } - - if (hasStack) pagesVisited.add(1); - } - - GlStateManager.disableLighting(); - - for (int i = 0; i <= TAB_MISSING; i++) { - if (i != currentTab) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); - Utils.drawTexturedRect(guiLeft + xSize + 80, guiTop + 20 * i, 25, 22, - 80 / 256f, 105 / 256f, 0, 22 / 256f, GL11.GL_NEAREST); - Utils.drawItemStack(TAB_STACKS[i], guiLeft + xSize + 80 + 5, guiTop + 20 * i + 3); - } - } - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); - Utils.drawTexturedRect(guiLeft + xSize + 3, guiTop, 80, 149, 0, 80 / 256f, 0, 149 / 256f, GL11.GL_NEAREST); - - if (pagesVisited.size() < 1) { - renderVisitOverlay(guiLeft + xSize + 3, guiTop); - return; - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); - Utils.drawTexturedRect(guiLeft + xSize + 80, guiTop + 20 * currentTab, 28, 22, - 80 / 256f, 108 / 256f, 22 / 256f, 44 / 256f, GL11.GL_NEAREST); - Utils.drawItemStack(TAB_STACKS[currentTab], guiLeft + xSize + 80 + 8, guiTop + 20 * currentTab + 3); - - switch (currentTab) { - case TAB_BASIC: - renderBasicOverlay(guiLeft + xSize + 3, guiTop); - return; - case TAB_TOTAL: - renderTotalStatsOverlay(guiLeft + xSize + 3, guiTop); - return; - case TAB_BONUS: - renderReforgeStatsOverlay(guiLeft + xSize + 3, guiTop); - return; - case TAB_DUP: - renderDuplicatesOverlay(guiLeft + xSize + 3, guiTop); - return; - case TAB_MISSING: - renderMissingOverlay(guiLeft + xSize + 3, guiTop); - return; - case TAB_OPTIMIZER: - renderOptimizerOverlay(guiLeft + xSize + 3, guiTop); - return; - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } + private static final int TAB_BASIC = 0; + private static final int TAB_TOTAL = 1; + private static final int TAB_BONUS = 2; + private static final int TAB_DUP = 3; + private static final int TAB_MISSING = 4; + private static final int TAB_OPTIMIZER = 5; + + private static final ItemStack[] TAB_STACKS = new ItemStack[]{ + Utils.createItemStack(Items.dye, EnumChatFormatting.DARK_AQUA + "Basic Information", + 10, EnumChatFormatting.GREEN + "- Talis count by rarity" + ), + Utils.createItemStack(Items.diamond_sword, EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses", + 0 + ), + Utils.createItemStack( + Item.getItemFromBlock(Blocks.anvil), + EnumChatFormatting.DARK_AQUA + "Total Stat Bonuses (from reforges)", + 0 + ), + Utils.createItemStack(Items.dye, EnumChatFormatting.DARK_AQUA + "Duplicates", + 8 + ), + Utils.createItemStack(Item.getItemFromBlock(Blocks.barrier), EnumChatFormatting.DARK_AQUA + "Missing", + 0 + ), + Utils.createItemStack(Item.getItemFromBlock(Blocks.redstone_block), EnumChatFormatting.DARK_AQUA + "Optimizer", + 0 + ), + }; + + private static int currentTab = TAB_BASIC; + + public static boolean mouseClick() { + if (Minecraft.getMinecraft().currentScreen instanceof GuiChest) { + GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen; + ContainerChest cc = (ContainerChest) eventGui.inventorySlots; + String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); + if (!containerName.trim().startsWith("Accessory Bag")) { + return false; + } + } else { + return false; + } + + if (!Mouse.getEventButtonState()) return false; + try { + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + + int mouseX = Mouse.getX() / scaledResolution.getScaleFactor(); + int mouseY = height - Mouse.getY() / scaledResolution.getScaleFactor(); + + int xSize = + (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "xSize", "field_146999_f"); + int ySize = + (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "ySize", "field_147000_g"); + int guiLeft = + (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "guiLeft", "field_147003_i"); + int guiTop = + (int) Utils.getField(GuiContainer.class, Minecraft.getMinecraft().currentScreen, "guiTop", "field_147009_r"); + + if (mouseX < guiLeft + xSize + 3 || mouseX > guiLeft + xSize + 80 + 28) return false; + if (mouseY < guiTop || mouseY > guiTop + 166) return false; + + if (mouseX > guiLeft + xSize + 83 && mouseY < guiTop + 20 * TAB_MISSING + 22) { + currentTab = (mouseY - guiTop) / 20; + if (currentTab < 0) currentTab = 0; + if (currentTab > TAB_MISSING) currentTab = TAB_MISSING; + } + + if (currentTab == TAB_OPTIMIZER) { + int x = guiLeft + xSize + 3; + int y = guiTop; + + if (mouseY > y + 92 && mouseY < y + 103) { + if (mouseX > x + 5 && mouseX < x + 75) { + mainWeapon = (int) Math.floor((mouseX - x - 5) / 70f * 9); + if (mainWeapon < 1) { + mainWeapon = 1; + } else if (mainWeapon > 9) { + mainWeapon = 9; + } + } + } + + if (mouseX > x + 5 && mouseX < x + 35 || mouseX > x + 45 && mouseX < x + 75) { + boolean set = mouseX > x + 5 && mouseX < x + 35; + + if (mouseY > y + 32 && mouseY < y + 43) { + forceCC = set; + } else if (mouseY > y + 52 && mouseY < y + 63) { + forceAS = set; + } else if (mouseY > y + 72 && mouseY < y + 83) { + useGodPot = set; + } else if (mouseY > y + 92 && mouseY < y + 103) { + allowShaded = set; + } + } + } + + return true; + } catch (Exception e) { + return false; + } + } + + public static void resetCache() { + accessoryStacks = new HashSet<>(); + pagesVisited = new HashSet<>(); + talismanCountRarity = null; + totalStats = null; + reforgeStats = null; + duplicates = null; + missing = null; + } + + private static Set accessoryStacks = new HashSet<>(); + private static Set pagesVisited = new HashSet<>(); + + public static void renderVisitOverlay(int x, int y) { + Utils.drawStringCenteredScaledMaxWidth( + "Please visit all", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 78, + true, + 70, + -1 + ); + Utils.drawStringCenteredScaledMaxWidth( + "pages of the bag", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 86, + true, + 70, + -1 + ); + } + + private static TreeMap talismanCountRarity = null; + + public static void renderBasicOverlay(int x, int y) { + if (talismanCountRarity == null) { + talismanCountRarity = new TreeMap<>(); + for (ItemStack stack : accessoryStacks) { + int rarity = getRarity(stack); + if (rarity >= 0) { + talismanCountRarity.put(rarity, talismanCountRarity.getOrDefault(rarity, 0) + 1); + } + } + } + + Utils.drawStringCenteredScaledMaxWidth( + "# By Rarity", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + + int yIndex = 0; + for (Map.Entry entry : talismanCountRarity.descendingMap().entrySet()) { + String rarityName = Utils.rarityArrC[entry.getKey()]; + Utils.renderAlignedString( + rarityName, + EnumChatFormatting.WHITE.toString() + entry.getValue(), + x + 5, + y + 20 + 11 * yIndex, + 70 + ); + yIndex++; + } + } + + private static PlayerStats.Stats totalStats = null; + + public static void renderTotalStatsOverlay(int x, int y) { + if (totalStats == null) { + totalStats = new PlayerStats.Stats(); + for (ItemStack stack : accessoryStacks) { + if (stack != null) totalStats.add(getStatForItem(stack, STAT_PATTERN_MAP, true)); + } + } + + Utils.drawStringCenteredScaledMaxWidth( + "Total Stats", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + int yIndex = 0; + for (int i = 0; i < PlayerStats.defaultStatNames.length; i++) { + String statName = PlayerStats.defaultStatNames[i]; + String statNamePretty = PlayerStats.defaultStatNamesPretty[i]; + + int val = Math.round(totalStats.get(statName)); + + if (Math.abs(val) < 1E-5) continue; + + GlStateManager.color(1, 1, 1, 1); + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate( + GL11.GL_SRC_ALPHA, + GL11.GL_ONE_MINUS_SRC_ALPHA, + GL11.GL_ONE, + GL11.GL_ONE_MINUS_SRC_ALPHA + ); + Utils.renderAlignedString( + statNamePretty, + EnumChatFormatting.WHITE.toString() + val, + x + 5, + y + 20 + 11 * yIndex, + 70 + ); + + yIndex++; + } + } + + private static PlayerStats.Stats reforgeStats = null; + + public static void renderReforgeStatsOverlay(int x, int y) { + if (reforgeStats == null) { + reforgeStats = new PlayerStats.Stats(); + for (ItemStack stack : accessoryStacks) { + if (stack != null) reforgeStats.add(getStatForItem(stack, STAT_PATTERN_MAP_BONUS, false)); + } + } + + Utils.drawStringCenteredScaledMaxWidth( + "Reforge Stats", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + int yIndex = 0; + for (int i = 0; i < PlayerStats.defaultStatNames.length; i++) { + String statName = PlayerStats.defaultStatNames[i]; + String statNamePretty = PlayerStats.defaultStatNamesPretty[i]; + + int val = Math.round(reforgeStats.get(statName)); + + if (Math.abs(val) < 1E-5) continue; + + GlStateManager.color(1, 1, 1, 1); + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate( + GL11.GL_SRC_ALPHA, + GL11.GL_ONE_MINUS_SRC_ALPHA, + GL11.GL_ONE, + GL11.GL_ONE_MINUS_SRC_ALPHA + ); + Utils.renderAlignedString( + statNamePretty, + EnumChatFormatting.WHITE.toString() + val, + x + 5, + y + 20 + 11 * yIndex, + 70 + ); + + yIndex++; + } + } + + private static Set duplicates = null; + + public static void renderDuplicatesOverlay(int x, int y) { + if (duplicates == null) { + JsonObject misc = Constants.MISC; + if (misc == null) { + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + return; + } + JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); + if (talisman_upgrades_element == null) { + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + return; + } + JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject(); + + duplicates = new HashSet<>(); + + Set prevInternalnames = new HashSet<>(); + for (ItemStack stack : accessoryStacks) { + String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack); + + if (prevInternalnames.contains(internalname)) { + duplicates.add(stack); + continue; + } + prevInternalnames.add(internalname); + + if (talisman_upgrades.has(internalname)) { + JsonArray upgrades = talisman_upgrades.get(internalname).getAsJsonArray(); + for (ItemStack stack2 : accessoryStacks) { + if (stack != stack2) { + String internalname2 = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack2); + for (int j = 0; j < upgrades.size(); j++) { + String upgrade = upgrades.get(j).getAsString(); + if (internalname2.equals(upgrade)) { + duplicates.add(stack); + break; + } + } + } + } + } + } + } + if (duplicates.isEmpty()) { + Utils.drawStringCenteredScaledMaxWidth( + "No Duplicates", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + } else { + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: " + duplicates.size(), + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + + int yIndex = 0; + for (ItemStack duplicate : duplicates) { + String s = duplicate.getDisplayName(); + Utils.renderShadowedString(s, x + 40, y + 20 + 11 * yIndex, 70); + if (duplicates.size() > 11) { + if (++yIndex >= 10) break; + } else { + if (++yIndex >= 11) break; + } + } + + if (duplicates.size() > 11) { + Utils.drawStringCenteredScaledMaxWidth("+" + (duplicates.size() - 10) + " More", + Minecraft.getMinecraft().fontRendererObj, x + 40, y + 16 + 121, false, 70, + new Color(80, 80, 80).getRGB() + ); + } + } + } + + private static List missing = null; + + public static void renderMissingOverlay(int x, int y) { + if (missing == null) { + JsonObject misc = Constants.MISC; + if (misc == null) { + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + return; + } + JsonElement talisman_upgrades_element = misc.get("talisman_upgrades"); + if (talisman_upgrades_element == null) { + Utils.drawStringCenteredScaledMaxWidth( + "Duplicates: ERROR", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + return; + } + JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject(); + + missing = new ArrayList<>(); + + List missingInternal = new ArrayList<>(); + for (Map.Entry entry : NotEnoughUpdates.INSTANCE.manager.getItemInformation().entrySet()) { + if (entry.getValue().has("lore")) { + if (checkItemType( + entry.getValue().get("lore").getAsJsonArray(), + "ACCESSORY", + "HATCCESSORY", + "DUNGEON ACCESSORY" + ) >= 0) { + missingInternal.add(entry.getKey()); + } + } + } + + for (ItemStack stack : accessoryStacks) { + String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack); + missingInternal.remove(internalname); + + for (Map.Entry talisman_upgrade_element : talisman_upgrades.entrySet()) { + JsonArray upgrades = talisman_upgrade_element.getValue().getAsJsonArray(); + for (int j = 0; j < upgrades.size(); j++) { + String upgrade = upgrades.get(j).getAsString(); + if (internalname.equals(upgrade)) { + missingInternal.remove(talisman_upgrade_element.getKey()); + break; + } + } + } + } + + missingInternal.sort(getItemComparator()); + + Set missingDisplayNames = new HashSet<>(); + for (String internal : missingInternal) { + boolean hasDup = false; + + if (talisman_upgrades.has(internal)) { + JsonArray upgrades = talisman_upgrades.get(internal).getAsJsonArray(); + for (int j = 0; j < upgrades.size(); j++) { + String upgrade = upgrades.get(j).getAsString(); + if (missingInternal.contains(upgrade)) { + hasDup = true; + break; + } + } + } + + ItemStack stack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager + .getItemInformation() + .get(internal), false); + + if (missingDisplayNames.contains(stack.getDisplayName())) continue; + missingDisplayNames.add(stack.getDisplayName()); + + if (hasDup) { + stack.setStackDisplayName(stack.getDisplayName() + "*"); + } + missing.add(stack); + } + } + if (missing.isEmpty()) { + Utils.drawStringCenteredScaledMaxWidth( + "No Missing", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + } else { + Utils.drawStringCenteredScaledMaxWidth( + "Missing: " + missing.size(), + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + + int yIndex = 0; + long currentTime = System.currentTimeMillis(); + int marqueeOffset = (int) (currentTime / 500 % 100); + for (ItemStack missingStack : missing) { + String s = missingStack.getDisplayName(); + + //int marueeOffset + //if(s.length()) { + + //} + + s = Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(s, 70); + + String clean = StringUtils.cleanColourNotModifiers(s); + for (int xO = -1; xO <= 1; xO++) { + for (int yO = -1; yO <= 1; yO++) { + int col = 0xff202020; + //if(xO != 0 && yO != 0) col = 0xff252525; + Minecraft.getMinecraft().fontRendererObj.drawString( + clean, + x + 5 + xO, + y + 20 + 11 * yIndex + yO, + col, + false + ); + } + } + Minecraft.getMinecraft().fontRendererObj.drawString(s, x + 5, y + 20 + 11 * yIndex, 0xffffff, false); + if (missing.size() > 11) { + if (++yIndex >= 10) break; + } else { + if (++yIndex >= 11) break; + } + } + + if (missing.size() > 11) { + Utils.drawStringCenteredScaledMaxWidth("Show All", + Minecraft.getMinecraft().fontRendererObj, x + 40, y + 16 + 121, false, 70, + new Color(80, 80, 80).getRGB() + ); + + final ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + final int scaledWidth = scaledresolution.getScaledWidth(); + final int scaledHeight = scaledresolution.getScaledHeight(); + int mouseX = Mouse.getX() * scaledWidth / Minecraft.getMinecraft().displayWidth; + int mouseY = scaledHeight - Mouse.getY() * scaledHeight / Minecraft.getMinecraft().displayHeight - 1; + + if (mouseX > x && mouseX < x + 80 && + mouseY > y + 11 + 121 && mouseY < y + 21 + 121) { + List text = new ArrayList<>(); + StringBuilder line = new StringBuilder(); + int leftMaxSize = 0; + int middleMaxSize = 0; + for (int i = 0; i < missing.size(); i += 3) { + leftMaxSize = Math.max(leftMaxSize, Minecraft.getMinecraft().fontRendererObj. + getStringWidth(missing.get(i).getDisplayName())); + } + for (int i = 1; i < missing.size(); i += 3) { + middleMaxSize = Math.max(middleMaxSize, Minecraft.getMinecraft().fontRendererObj. + getStringWidth(missing.get(i).getDisplayName())); + } + for (int i = 0; i < missing.size(); i++) { + if (i % 3 == 0 && i > 0) { + text.add(line.toString()); + line = new StringBuilder(); + } + StringBuilder name = new StringBuilder(missing.get(i).getDisplayName()); + int nameLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(name.toString()); + + int padSize = -1; + if (i % 3 == 0) padSize = leftMaxSize; + if (i % 3 == 1) padSize = middleMaxSize; + if (padSize > 0) { + float padNum = (padSize - nameLen) / 4.0f; + int remainder = (int) ((padNum % 1) * 4); + while (padNum >= 1) { + if (remainder > 0) { + name.append(EnumChatFormatting.BOLD).append(" "); + remainder--; + } else { + name.append(EnumChatFormatting.RESET).append(" "); + } + padNum--; + } + } + line.append('\u00A7').append(Utils.getPrimaryColourCode(missing.get(i).getDisplayName())); + if (i < 9) { + line.append((char) ('\u2776' + i)).append(' '); + } else { + line.append("\u2b24 "); + } + line.append(name); + if (i % 3 < 2) line.append(" "); + } + + GlStateManager.pushMatrix(); + GlStateManager.scale(2f / scaledresolution.getScaleFactor(), 2f / scaledresolution.getScaleFactor(), 1); + Utils.drawHoveringText(text, + mouseX * scaledresolution.getScaleFactor() / 2, + mouseY * scaledresolution.getScaleFactor() / 2, + scaledWidth * scaledresolution.getScaleFactor() / 2, + scaledHeight * scaledresolution.getScaleFactor() / 2, -1, Minecraft.getMinecraft().fontRendererObj + ); + GlStateManager.popMatrix(); + } + } + } + } + + private static boolean forceCC = false; + private static boolean forceAS = false; + private static boolean useGodPot = true; + private static boolean allowShaded = true; + private static int mainWeapon = 1; + + public static void renderOptimizerOverlay(int x, int y) { + Utils.drawStringCenteredScaledMaxWidth( + "Optimizer", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 12, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + + int light = new Color(220, 220, 220).getRGB(); + int dark = new Color(170, 170, 170).getRGB(); + + Gui.drawRect(x + 5, y + 32, x + 35, y + 43, forceCC ? dark : light); + Gui.drawRect(x + 45, y + 32, x + 75, y + 43, forceCC ? light : dark); + + Gui.drawRect(x + 5, y + 52, x + 35, y + 63, forceAS ? dark : light); + Gui.drawRect(x + 45, y + 52, x + 75, y + 63, forceAS ? light : dark); + + Gui.drawRect(x + 5, y + 72, x + 35, y + 83, useGodPot ? dark : light); + Gui.drawRect(x + 45, y + 72, x + 75, y + 83, useGodPot ? light : dark); + + Gui.drawRect(x + 5, y + 92, x + 35, y + 103, allowShaded ? dark : light); + Gui.drawRect(x + 45, y + 92, x + 75, y + 103, allowShaded ? light : dark); + + Gui.drawRect(x + 5, y + 102, x + 75, y + 113, light); + Gui.drawRect( + x + 5 + (int) ((mainWeapon - 1) / 9f * 70), + y + 102, + x + 5 + (int) (mainWeapon / 9f * 70), + y + 113, + dark + ); + + Utils.drawStringCenteredScaledMaxWidth( + "Force 100% CC", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 27, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth((forceCC ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Minecraft.getMinecraft().fontRendererObj, x + 20, y + 37, + true, 30, new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth( + (forceCC ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Minecraft.getMinecraft().fontRendererObj, + x + 60, + y + 37, + true, + 30, + new Color(80, 80, 80).getRGB() + ); + + Utils.drawStringCenteredScaledMaxWidth( + "Force 100% ATKSPEED", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 47, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth( + (forceAS ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Minecraft.getMinecraft().fontRendererObj, + x + 20, + y + 57, + true, + 30, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth( + (forceAS ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Minecraft.getMinecraft().fontRendererObj, + x + 60, + y + 57, + true, + 30, + new Color(80, 80, 80).getRGB() + ); + + Utils.drawStringCenteredScaledMaxWidth( + "Use God Potion", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 67, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth( + (useGodPot ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Minecraft.getMinecraft().fontRendererObj, + x + 20, + y + 77, + true, + 30, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth( + (useGodPot ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Minecraft.getMinecraft().fontRendererObj, + x + 60, + y + 77, + true, + 30, + new Color(80, 80, 80).getRGB() + ); + + Utils.drawStringCenteredScaledMaxWidth( + "Use God Potion", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 87, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", + Minecraft.getMinecraft().fontRendererObj, x + 20, y + 97, + true, 30, new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO", + Minecraft.getMinecraft().fontRendererObj, x + 60, y + 97, + true, 30, new Color(80, 80, 80).getRGB() + ); + + Utils.drawStringCenteredScaledMaxWidth( + "Main Weapon", + Minecraft.getMinecraft().fontRendererObj, + x + 40, + y + 107, + false, + 70, + new Color(80, 80, 80).getRGB() + ); + Utils.drawStringCenteredScaled("1 2 3 4 5 6 7 8 9", + Minecraft.getMinecraft().fontRendererObj, x + 40, y + 117, + true, 70, new Color(80, 80, 80).getRGB() + ); + } + + private static Comparator getItemComparator() { + return (o1, o2) -> { + float cost1; + JsonObject o1Auc = NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfo(o1); + if (o1Auc != null && o1Auc.has("price")) { + cost1 = o1Auc.get("price").getAsFloat(); + } else { + APIManager.CraftInfo info = NotEnoughUpdates.INSTANCE.manager.auctionManager.getCraftCost(o1); + if (info != null) + cost1 = info.craftCost; + else + cost1 = 0; + } + float cost2; + JsonObject o2Auc = NotEnoughUpdates.INSTANCE.manager.auctionManager.getItemAuctionInfo(o2); + if (o2Auc != null && o2Auc.has("price")) { + cost2 = o2Auc.get("price").getAsFloat(); + } else { + APIManager.CraftInfo info = NotEnoughUpdates.INSTANCE.manager.auctionManager.getCraftCost(o2); + if (info != null) + cost2 = info.craftCost; + else + cost2 = 0; + } + + if (cost1 == -1 && cost2 == -1) return o1.compareTo(o2); + if (cost1 == -1) return 1; + if (cost2 == -1) return -1; + + if (cost1 < cost2) return -1; + if (cost1 > cost2) return 1; + + return o1.compareTo(o2); + }; + } + + private static boolean inAccessoryBag = false; + + public static boolean isInAccessoryBag() { + return inAccessoryBag; + } + + public static void renderOverlay() { + inAccessoryBag = false; + if (Minecraft.getMinecraft().currentScreen instanceof GuiChest && NEUEventListener.inventoryLoaded) { + GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen; + ContainerChest cc = (ContainerChest) eventGui.inventorySlots; + String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText(); + if (containerName.trim().startsWith("Accessory Bag")) { + inAccessoryBag = true; + try { + int xSize = (int) Utils.getField(GuiContainer.class, eventGui, "xSize", "field_146999_f"); + int ySize = (int) Utils.getField(GuiContainer.class, eventGui, "ySize", "field_147000_g"); + int guiLeft = (int) Utils.getField(GuiContainer.class, eventGui, "guiLeft", "field_147003_i"); + int guiTop = (int) Utils.getField(GuiContainer.class, eventGui, "guiTop", "field_147009_r"); + + if (accessoryStacks.isEmpty()) { + for (ItemStack stack : Minecraft.getMinecraft().thePlayer.inventory.mainInventory) { + if (stack != null && isAccessory(stack)) { + accessoryStacks.add(stack); + } + } + } + + if (containerName.trim().contains("(")) { + String first = containerName.trim().split("\\(")[1].split("/")[0]; + Integer currentPageNumber = Integer.parseInt(first); + //System.out.println("current:"+currentPageNumber); + if (!pagesVisited.contains(currentPageNumber)) { + boolean hasStack = false; + if (Minecraft.getMinecraft().thePlayer.openContainer instanceof ContainerChest) { + IInventory inv = + ((ContainerChest) Minecraft.getMinecraft().thePlayer.openContainer).getLowerChestInventory(); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + hasStack = true; + if (isAccessory(stack)) { + accessoryStacks.add(stack); + } + } + } + } + + if (hasStack) pagesVisited.add(currentPageNumber); + } + + String second = containerName.trim().split("/")[1].split("\\)")[0]; + //System.out.println(second + ":" + pagesVisited.size()); + if (Integer.parseInt(second) > pagesVisited.size()) { + GlStateManager.color(1, 1, 1, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); + Utils.drawTexturedRect( + guiLeft + xSize + 3, + guiTop, + 80, + 149, + 0, + 80 / 256f, + 0, + 149 / 256f, + GL11.GL_NEAREST + ); + + renderVisitOverlay(guiLeft + xSize + 3, guiTop); + return; + } + } else if (pagesVisited.isEmpty()) { + boolean hasStack = false; + if (Minecraft.getMinecraft().thePlayer.openContainer instanceof ContainerChest) { + IInventory inv = + ((ContainerChest) Minecraft.getMinecraft().thePlayer.openContainer).getLowerChestInventory(); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if (stack != null) { + hasStack = true; + if (isAccessory(stack)) { + accessoryStacks.add(stack); + } + } + } + } + + if (hasStack) pagesVisited.add(1); + } + + GlStateManager.disableLighting(); + + for (int i = 0; i <= TAB_MISSING; i++) { + if (i != currentTab) { + GlStateManager.color(1, 1, 1, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); + Utils.drawTexturedRect(guiLeft + xSize + 80, guiTop + 20 * i, 25, 22, + 80 / 256f, 105 / 256f, 0, 22 / 256f, GL11.GL_NEAREST + ); + Utils.drawItemStack(TAB_STACKS[i], guiLeft + xSize + 80 + 5, guiTop + 20 * i + 3); + } + } + + GlStateManager.color(1, 1, 1, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); + Utils.drawTexturedRect(guiLeft + xSize + 3, guiTop, 80, 149, 0, 80 / 256f, 0, 149 / 256f, GL11.GL_NEAREST); + + if (pagesVisited.size() < 1) { + renderVisitOverlay(guiLeft + xSize + 3, guiTop); + return; + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(accessory_bag_overlay); + Utils.drawTexturedRect(guiLeft + xSize + 80, guiTop + 20 * currentTab, 28, 22, + 80 / 256f, 108 / 256f, 22 / 256f, 44 / 256f, GL11.GL_NEAREST + ); + Utils.drawItemStack(TAB_STACKS[currentTab], guiLeft + xSize + 80 + 8, guiTop + 20 * currentTab + 3); + + switch (currentTab) { + case TAB_BASIC: + renderBasicOverlay(guiLeft + xSize + 3, gu