aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMadeleaan <70163122+Madeleaan@users.noreply.github.com>2024-08-03 17:50:56 +0200
committerGitHub <noreply@github.com>2024-08-03 17:50:56 +0200
commiteffe46a69d26d05b5f4d9360b92414e1cee7b387 (patch)
tree371424f858e2d3986348d01d3e18dbb57e35e7b0
parentcdff3a6ce8f0320a336f89ff165d23048388fddc (diff)
downloadnotenoughupdates-effe46a69d26d05b5f4d9360b92414e1cee7b387.tar.gz
notenoughupdates-effe46a69d26d05b5f4d9360b92414e1cee7b387.tar.bz2
notenoughupdates-effe46a69d26d05b5f4d9360b92414e1cee7b387.zip
Add accessory bag overlay features (#1269)
Co-authored-by: nopo <nopotheemail@gmail.com>
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java1093
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java9
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java309
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/GuiTextures.java4
-rw-r--r--src/main/resources/assets/notenoughupdates/accessory_bag_overlay.pngbin429 -> 0 bytes
-rw-r--r--src/main/resources/assets/notenoughupdates/accessory_bag_overlay_v2.pngbin0 -> 4992 bytes
6 files changed, 817 insertions, 598 deletions
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 6e81351a..013807c3 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2022 NotEnoughUpdates contributors
+ * Copyright (C) 2022-2024 NotEnoughUpdates contributors
*
* This file is part of NotEnoughUpdates.
*
@@ -22,41 +22,47 @@ package io.github.moulberry.notenoughupdates.miscgui;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import io.github.moulberry.notenoughupdates.NEUManager;
+import io.github.moulberry.notenoughupdates.NEUOverlay;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.auction.APIManager;
import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe;
-import io.github.moulberry.notenoughupdates.core.util.StringUtils;
+import io.github.moulberry.notenoughupdates.core.util.ArrowPagesUtils;
import io.github.moulberry.notenoughupdates.events.ButtonExclusionZoneEvent;
-import io.github.moulberry.notenoughupdates.listener.RenderListener;
+import io.github.moulberry.notenoughupdates.mixins.AccessorGuiContainer;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer;
import io.github.moulberry.notenoughupdates.profileviewer.PlayerStats;
import io.github.moulberry.notenoughupdates.util.Constants;
+import io.github.moulberry.notenoughupdates.util.ItemUtils;
import io.github.moulberry.notenoughupdates.util.Rectangle;
import io.github.moulberry.notenoughupdates.util.Utils;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiChest;
-import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
import java.awt.*;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
@@ -66,20 +72,35 @@ import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import static io.github.moulberry.notenoughupdates.util.GuiTextures.accessory_bag_overlay;
@NEUAutoSubscribe
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 enum Tabs {
+ TAB_BASIC, TAB_TOTAL, TAB_DUP, TAB_MISSING
+ }
public static final AccessoryBagOverlay INSTANCE = new AccessoryBagOverlay();
+ // Arrow pages variables
+ private static int statsPageActive = 0;
+ private static int statsPagesTotal = 0;
+ private static int dupePageActive = 0;
+ private static int dupePagesTotal = 0;
+ private static int missingPageActive = 0;
+ private static int missingPagesTotal = 0;
+
+ // Page-specific button variables
+ private static boolean dupe_highlight = true;
+ private static boolean dupe_showPersonal = false;
+ private static boolean missing_showAllTiers = true;
+ private static boolean missing_useMP = true;
+
+ private static List<String> tooltipToDisplay = null;
+ private static boolean offsetButtons = false;
+
@SubscribeEvent
public void onButtonExclusionZones(ButtonExclusionZoneEvent event) {
if (isInAccessoryBag()) {
@@ -87,7 +108,7 @@ public class AccessoryBagOverlay {
new Rectangle(
event.getGuiBaseRect().getRight(),
event.getGuiBaseRect().getTop(),
- 80 /*pane*/ + 24 /*tabs*/ + 4 /*space*/, 150
+ 168 /*pane*/ + (offsetButtons ? 24 : 0) /*tabs*/ + 5 /*space*/, 128
),
ButtonExclusionZoneEvent.PushDirection.TOWARDS_RIGHT
);
@@ -101,23 +122,15 @@ public class AccessoryBagOverlay {
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;
+ private static Tabs currentTab = Tabs.TAB_BASIC;
public static boolean mouseClick() {
if (Minecraft.getMinecraft().currentScreen instanceof GuiChest) {
@@ -133,75 +146,71 @@ public class AccessoryBagOverlay {
if (!Mouse.getEventButtonState()) return false;
try {
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
-
- int width = scaledResolution.getScaledWidth();
- int height = scaledResolution.getScaledHeight();
+ AccessorGuiContainer accessor = (AccessorGuiContainer) Minecraft.getMinecraft().currentScreen;
+ int xSize = accessor.getXSize();
+ int guiLeft = accessor.getGuiLeft();
+ int guiTop = accessor.getGuiTop();
+
+ if (mouseX() < guiLeft + xSize + 3 || mouseX() > guiLeft + xSize + 168 + 28) return false;
+ if (mouseY() < guiTop || mouseY() > guiTop + 128) return false;
+
+ if (mouseX() > guiLeft + xSize + 168 + 3 && mouseY() < guiTop + 20 * Tabs.values().length + 22) {
+ int tabClicked = (mouseY() - guiTop) / 20;
+ tabClicked = Math.min(Math.max(0, tabClicked), Tabs.values().length - 1);
+ currentTab = Tabs.values()[tabClicked];
+ playPressSound();
+ }
- int mouseX = Mouse.getX() / scaledResolution.getScaleFactor();
- int mouseY = height - Mouse.getY() / scaledResolution.getScaleFactor();
+ if (currentTab == Tabs.TAB_TOTAL) {
+ if (statsPagesTotal > 1) ArrowPagesUtils.onPageSwitchMouse(
+ guiLeft + xSize + 3,
+ guiTop,
+ new int[]{60, 110},
+ statsPageActive,
+ statsPagesTotal,
+ integer -> statsPageActive = integer
+ );
+ }
+ if (currentTab == Tabs.TAB_DUP) {
+ if (dupePagesTotal > 1) ArrowPagesUtils.onPageSwitchMouse(
+ guiLeft + xSize + 3,
+ guiTop,
+ new int[]{60, 110},
+ dupePageActive,
+ dupePagesTotal,
+ integer -> dupePageActive = integer
+ );
- 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 (new Rectangle(guiLeft + xSize + 3 + 120, guiTop + 108, 16, 16).contains(mouseX(), mouseY())) {
+ dupe_highlight = !dupe_highlight;
+ playPressSound();
+ }
- if (mouseX < guiLeft + xSize + 3 || mouseX > guiLeft + xSize + 80 + 28) return false;
- if (mouseY < guiTop || mouseY > guiTop + 166) return false;
+ if (new Rectangle(guiLeft + xSize + 3 + 141, guiTop + 108, 16, 16).contains(mouseX(), mouseY())) {
+ dupe_showPersonal = !dupe_showPersonal;
+ playPressSound();
+ }
- 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 == Tabs.TAB_MISSING) {
+ if (missingPagesTotal > 1) ArrowPagesUtils.onPageSwitchMouse(
+ guiLeft + xSize + 3,
+ guiTop,
+ new int[]{60, 110},
+ missingPageActive,
+ missingPagesTotal,
+ integer -> missingPageActive = integer
+ );
- 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 (new Rectangle(guiLeft + xSize + 3 + 120, guiTop + 108, 16, 16).contains(mouseX(), mouseY())) {
+ missing_useMP = !missing_useMP;
+ missing = null;
+ playPressSound();
}
-
- 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;
- }
+ if (new Rectangle(guiLeft + xSize + 3 + 141, guiTop + 108, 16, 16).contains(mouseX(), mouseY())) {
+ missing_showAllTiers = !missing_showAllTiers;
+ missing = null;
+ playPressSound();
}
}
@@ -216,7 +225,6 @@ public class AccessoryBagOverlay {
pagesVisited = new HashSet<>();
talismanCountRarity = null;
totalStats = null;
- reforgeStats = null;
duplicates = null;
missing = null;
}
@@ -225,8 +233,8 @@ public class AccessoryBagOverlay {
private static Set<Integer> pagesVisited = new HashSet<>();
public static void renderVisitOverlay(int x, int y) {
- Utils.drawStringCenteredScaledMaxWidth("Please visit all", x + 40, y + 78, true, 70, -1);
- Utils.drawStringCenteredScaledMaxWidth("pages of the bag", x + 40, y + 86, true, 70, -1);
+ Utils.drawStringCenteredScaledMaxWidth("Please visit all", x + 80, y + 60, true, 140, -1);
+ Utils.drawStringCenteredScaledMaxWidth("pages of the bag", x + 80, y + 72, true, 140, -1);
}
private static TreeMap<Integer, Integer> talismanCountRarity = null;
@@ -242,7 +250,7 @@ public class AccessoryBagOverlay {
}
}
- drawString(x, y, "# By Rarity");
+ drawTitle(x, y, "Total Counts By Rarity");
int yIndex = 0;
for (Map.Entry<Integer, Integer> entry : talismanCountRarity.descendingMap().entrySet()) {
@@ -250,12 +258,21 @@ public class AccessoryBagOverlay {
Utils.renderAlignedString(
rarityName,
EnumChatFormatting.WHITE.toString() + entry.getValue(),
- x + 5,
+ x + 34,
y + 20 + 11 * yIndex,
- 70
+ 100
);
yIndex++;
}
+
+ NEUConfig.HiddenProfileSpecific profileSpecific = NotEnoughUpdates.INSTANCE.config.getProfileSpecific();
+ int mp = 0;
+ if (profileSpecific != null) mp = profileSpecific.magicalPower;
+ Utils.renderAlignedString(
+ EnumChatFormatting.AQUA + "Magical Power",
+ mp != 0 ? EnumChatFormatting.WHITE.toString() + mp : EnumChatFormatting.RED + "NO DATA, DO /PV",
+ x + 20, y + 25 + 88, 130
+ );
}
private static PlayerStats.Stats totalStats = null;
@@ -264,77 +281,37 @@ public class AccessoryBagOverlay {
if (totalStats == null) {
totalStats = new PlayerStats.Stats();
for (ItemStack stack : accessoryStacks) {
- if (stack != null) totalStats.add(getStatForItem(stack, STAT_PATTERN_MAP, true));
+ if (stack != null) totalStats.add(getStatForItem(stack, PlayerStats.STAT_PATTERN_MAP, true));
}
}
- drawString(x, y, "Total Stats");
+ drawTitle(x, y, "Total Stats");
int yIndex = 0;
+ List<Pair<String, Integer>> statPairs = new ArrayList<>();
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++;
+ if (Math.abs(val) >= 1E-5) statPairs.add(new ImmutablePair<>(statNamePretty, val));
}
- }
-
- 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));
- }
- }
-
- drawString(x, y, "Reforge Stats");
- 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
- );
+ statsPageActive = Math.min(statsPageActive, (statPairs.size() / 8));
+ for (Pair<String, Integer> pair : statPairs.subList(statsPageActive * 8, statPairs.size())) {
Utils.renderAlignedString(
- statNamePretty,
- EnumChatFormatting.WHITE.toString() + val,
- x + 5,
- y + 20 + 11 * yIndex,
- 70
+ pair.getKey(),
+ EnumChatFormatting.WHITE.toString() + pair.getValue(),
+ x + 6,
+ y + 20 + 11 * yIndex, 158
);
+ if (yIndex++ >= 7 && statPairs.size() > 9) break;
+ }
- yIndex++;
+ statsPagesTotal = (int) Math.ceil(statPairs.size() / 8.0);
+ if (statPairs.size() > 9) {
+ GlStateManager.color(1f, 1f, 1f, 1f);
+ ArrowPagesUtils.onDraw(x, y, new int[]{60, 110}, statsPageActive, statsPagesTotal);
}
}
@@ -344,71 +321,68 @@ public class AccessoryBagOverlay {
if (duplicates == null) {
JsonObject misc = Constants.MISC;
if (misc == null) {
- drawString(x, y, "Duplicates: ERROR");
- return;
- }
- JsonElement talisman_upgrades_element = misc.get("talisman_upgrades");
- if (talisman_upgrades_element == null) {
- drawString(x, y, "Duplicates: ERROR");
+ drawTitle(x, y, "Duplicates: REPO ERROR");
+ Utils.showOutdatedRepoNotification("misc.json");
return;
}
- JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject();
-
- duplicates = new HashSet<>();
-
- Set<String> 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()) {
- drawString(x, y, "No Duplicates");
+ drawTitle(x, y, "No Duplicates");
} else {
- drawString(x, y, "Duplicates: " + duplicates.size());
+ drawTitle(x, y, "Duplicates: " + duplicates.size());
int yIndex = 0;
- for (ItemStack duplicate : duplicates) {
+ List<ItemStack> sortedDupes =
+ duplicates.stream().sorted((Comparator.comparing(ItemStack::getDisplayName))).collect(Collectors.toList());
+
+ dupePageActive = Math.min(dupePageActive, (duplicates.size() / 8));
+ for (ItemStack duplicate : sortedDupes.subList(dupePageActive * 8, sortedDupes.size())) {
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;
- }
+ Utils.renderShadowedString(s.substring(0, Math.min(s.length(), 35)), x + 84, y + 20 + 11 * yIndex, 158);
+ if (++yIndex >= 8 && sortedDupes.size() > 9) break;
}
- if (duplicates.size() > 11) {
- Utils.drawStringCenteredScaledMaxWidth(
- "+" + (duplicates.size() - 10) + " More",
- x + 40, y + 16 + 121,
- false,
- 70,
- gray()
- );
+ dupePagesTotal = (int) Math.ceil(sortedDupes.size() / 8.0);
+ if (sortedDupes.size() > 9) {
+ GlStateManager.color(1f, 1f, 1f, 1f);
+ ArrowPagesUtils.onDraw(x, y, new int[]{60, 110}, dupePageActive, dupePagesTotal);
}
}
+
+ List<String> highlightTooltip = new ArrayList<>();
+ if (dupe_highlight) {
+ highlightTooltip.add("§aHighlight dupes");
+ highlightTooltip.add("§7Will highlight accessories");
+ highlightTooltip.add("§7you have duplicates of.");
+ } else {
+ highlightTooltip.add("§cDon't highlight dupes");
+ highlightTooltip.add("§7Will not highlight accessories");
+ highlightTooltip.add("§7you have duplicates of.");
+ }
+ renderButton(
+ new ItemStack(dupe_highlight ? Items.ender_eye : Items.ender_pearl),
+ x + 120,
+ y + 107,
+ highlightTooltip
+ );
+
+ List<String> compDeletorTooltip = new ArrayList<>();
+ if (dupe_showPersonal) {
+ compDeletorTooltip.add("§aHighlight Compactors & Deletors");
+ compDeletorTooltip.add("§7Will highlight all duplicates.");
+ } else {
+ compDeletorTooltip.add("§cDon't highlight Compactors & Deletors");
+ compDeletorTooltip.add("§7Duplicates allow you to specify");
+ compDeletorTooltip.add("§7more things to compact and delete,");
+ compDeletorTooltip.add("§7but they do not give more MP!");
+ }
+ renderButton(
+ NotEnoughUpdates.INSTANCE.manager.createItem(dupe_showPersonal ? "PERSONAL_DELETOR_4000" : "DISPENSER"),
+ x + 141,
+ y + 107,
+ compDeletorTooltip
+ );
+
}
private static List<ItemStack> missing = null;
@@ -417,12 +391,14 @@ public class AccessoryBagOverlay {
if (missing == null) {
JsonObject misc = Constants.MISC;
if (misc == null) {
- drawString(x, y, "Duplicates: ERROR");
+ drawTitle(x, y, "Missing: REPO ERROR");
+ Utils.showOutdatedRepoNotification("misc.json");
return;
}
JsonElement talisman_upgrades_element = misc.get("talisman_upgrades");
if (talisman_upgrades_element == null) {
- drawString(x, y, "Duplicates: ERROR");
+ drawTitle(x, y, "Missing: REPO ERROR");
+ Utils.showOutdatedRepoNotification("misc.json talisman_upgrades");
return;
}
JsonObject talisman_upgrades = talisman_upgrades_element.getAsJsonObject();
@@ -453,7 +429,8 @@ public class AccessoryBagOverlay {
}
for (ItemStack stack : accessoryStacks) {
- String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(stack);
+ String internalname =
+ NotEnoughUpdates.INSTANCE.manager.createItemResolutionQuery().withItemStack(stack).resolveInternalName();
missingInternal.remove(internalname);
for (Map.Entry<String, JsonElement> talisman_upgrade_element : talisman_upgrades.entrySet()) {
@@ -466,9 +443,15 @@ public class AccessoryBagOverlay {
}
}
}
- }
- missingInternal.sort(getItemComparator());
+ if (internalname.contains("ABICASE")) {
+ missingInternal.removeAll(missingInternal
+ .stream()
+ .filter(s -> s.contains("ABICASE"))
+ .collect(Collectors.toList()));
+ }
+ }
+ missingInternal.sort(getItemComparator(missing_useMP));
Set<String> missingDisplayNames = new HashSet<>();
for (String internal : missingInternal) {
@@ -493,222 +476,88 @@ public class AccessoryBagOverlay {
missingDisplayNames.add(stack.getDisplayName());
if (hasDup) {
+ if (!missing_showAllTiers) continue;
stack.setStackDisplayName(stack.getDisplayName() + "*");
}
missing.add(stack);
}
}
if (missing.isEmpty()) {
- drawString(x, y, "No Missing");
+ drawTitle(x, y, "No Missing");
} else {
- drawString(x, y, "Missing: " + missing.size());
+ drawTitle(x, y, "Missing: " + missing.size());
int yIndex = 0;
- long currentTime = System.currentTimeMillis();
- for (ItemStack missingStack : missing) {
+ missingPageActive = Math.min(missingPageActive, missing.size() / 8);
+ for (ItemStack missingStack : missing.subList(missingPageActive * 8, missing.size())) {
String s = missingStack.getDisplayName();
+ String internal = NotEnoughUpdates.INSTANCE.manager
+ .createItemResolutionQuery()
+ .withItemStack(missingStack)
+ .resolveInternalName();
+ if (internal.equals("RIFT_PRISM") && hasConsumedRiftPrism()) continue;
+ double price = getItemPrice(internal);
+ Utils.renderAlignedString(
+ s,
+ price != -1
+ ? "§6" + Utils.shortNumberFormat(price, 0)
+ : "§c" + "NO DATA",
+ x + 5,
+ y + 20 + 11 * yIndex,
+ 158
+ );
+ Rectangle rect = new Rectangle(x, y + 20 + 11 * yIndex, 168, 11);
+ renderAccessoryHover(rect, missingStack);
+ if (++yIndex >= 8 && missing.size() > 9) break;
+ }
- 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;
- }
+ missingPagesTotal = (int) Math.ceil(missing.size() / 8.0);
+ if (missing.size() > 9) {
+ GlStateManager.color(1f, 1f, 1f, 1f);
+ ArrowPagesUtils.onDraw(x, y, new int[]{60, 110}, missingPageActive, missingPagesTotal);
}
- if (missing.size() > 11) {
- Utils.drawStringCenteredScaledMaxWidth("Show All", x + 40, y + 16 + 121, false, 70, gray());
-
- 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<String> 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(" ");
- }
+ List<String> mpTooltip = new ArrayList<>();
+ if (missing_useMP) {
+ mpTooltip.add("§bSort by Magical Power");
+ mpTooltip.add("§7Will sort the accessories");
+ mpTooltip.add("§7by the best MP gain.");
+ } else {
+ mpTooltip.add("§6Sort by Coins");
+ mpTooltip.add("§7Will sort the accessories");
+ mpTooltip.add("§7by the cheapest options.");
+ }
+ renderButton(ItemUtils.getCoinItemStack(missing_useMP ? 10_000_000 : 100_000), x + 120, y + 107, mpTooltip);
- 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
- );
- GlStateManager.popMatrix();
- }
+ List<String> tieredTooltip = new ArrayList<>();
+ if (missing_showAllTiers) {
+ tieredTooltip.add("§aShow all tiers");
+ tieredTooltip.add("§7Will show all the tiers");
+ tieredTooltip.add("§7to get the cheapest options.");
+ } else {
+ tieredTooltip.add("§6Show highest tier");
+ tieredTooltip.add("§7Will show only the highest tier");
+ tieredTooltip.add("§7to avoid wasting money on lower ones.");
}
+ renderButton(new ItemStack(missing_showAllTiers ? Items.coal : Items.diamond), x + 141, y + 107, tieredTooltip);
}
}
- private static void drawString(int x, int y, String abc) {
- Utils.drawStringCenteredScaledMaxWidth(abc, x + 40, y + 12, false, 70, gray());
- }
-
- 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", x + 40, y + 12, false, 70, gray());
-
- 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", x + 40, y + 27, false, 70, gray());
- Utils.drawStringCenteredScaledMaxWidth(
- (forceCC ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES", x + 20, y + 37, true, 30, gray()
- );
- Utils.drawStringCenteredScaledMaxWidth(
- (forceCC ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO",
- x + 60, y + 37, true, 30, gray()
- );
-
- Utils.drawStringCenteredScaledMaxWidth("Force 100% ATKSPEED", x + 40, y + 47, false, 70, gray());
- Utils.drawStringCenteredScaledMaxWidth(
- (forceAS ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES",
- x + 20, y + 57, true, 30, gray()
- );
- Utils.drawStringCenteredScaledMaxWidth(
- (forceAS ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO",
- x + 60, y + 57, true, 30, gray()
- );
-
- Utils.drawStringCenteredScaledMaxWidth("Use God Potion", x + 40, y + 67, false, 70, gray());
- Utils.drawStringCenteredScaledMaxWidth(
- (useGodPot ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES",
- x + 20, y + 77, true, 30, gray()
- );
- Utils.drawStringCenteredScaledMaxWidth(
- (useGodPot ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO",
- x + 60, y + 77, true, 30, gray()
- );
-
- Utils.drawStringCenteredScaledMaxWidth("Use God Potion", x + 40, y + 87, false, 70, gray());
- Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GREEN : EnumChatFormatting.GRAY) + "YES",
- x + 20, y + 97, true, 30, gray()
- );
- Utils.drawStringCenteredScaledMaxWidth((allowShaded ? EnumChatFormatting.GRAY : EnumChatFormatting.RED) + "NO",
- x + 60, y + 97,
- true, 30, gray()
- );
-
- Utils.drawStringCenteredScaledMaxWidth("Main Weapon", x + 40, y + 107, false, 70, gray());
- Utils.drawStringCenteredScaled("1 2 3 4 5 6 7 8 9", x + 40, y + 117, true, 70, gray());
+ private static void drawTitle(int x, int y, String abc) {
+ Utils.drawStringCenteredScaledMaxWidth(abc, x + 84, y + 12, false, 158, gray());
}
private static int gray() {
return new Color(80, 80, 80).getRGB();
}
- private static Comparator<String> getItemComparator() {
+ private static Comparator<String> getItemComparator(boolean accountMP) {
return (o1, o2) -> {
- double 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 = -1;
- }
- double 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 = -1;
+ double cost1 = getItemPrice(o1);
+ double cost2 = getItemPrice(o2);
+ if (accountMP) {
+ cost1 /= cost1 != -1 ? getMagicalPowerForItem(o1) : -1E-99; // Artificially push items with -1 price to the end
+ cost2 /= cost2 != -1 ? getMagicalPowerForItem(o2) : -1E-99; // since they would be put at the start otherwise
}
if (cost1 == -1 && cost2 == -1) return o1.compareTo(o2);
@@ -730,7 +579,8 @@ public class AccessoryBagOverlay {
public static void renderOverlay() {
inAccessoryBag = false;
- if (Minecraft.getMinecraft().currentScreen instanceof GuiChest && RenderListener.inventoryLoaded) {
+ offsetButtons = false;
+ if (Minecraft.getMinecraft().currentScreen instanceof GuiChest) {
GuiChest eventGui = (GuiChest) Minecraft.getMinecraft().currentScreen;
ContainerChest cc = (ContainerChest) eventGui.inventorySlots;
String containerName = cc.getLowerChestInventory().getDisplayName().getUnformattedText();
@@ -738,10 +588,10 @@ public class AccessoryBagOverlay {
!containerName.contains("Upgrades")) {
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");
+ AccessorGuiContainer accessor = (AccessorGuiContainer) Minecraft.getMinecraft().currentScreen;
+ int xSize = accessor.getXSize();
+ int guiLeft = accessor.getGuiLeft();
+ int guiTop = accessor.getGuiTop();
if (accessoryStacks.isEmpty()) {
for (ItemStack stack : Minecraft.getMinecraft().thePlayer.inventory.mainInventory) {
@@ -754,42 +604,40 @@ public class AccessoryBagOverlay {
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);
+ 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)) {
+ boolean toAdd = true;
+ for (ItemStack accessoryStack : accessoryStacks) {
+ String s = NEUManager.getUUIDForItem(accessoryStack);
+
+ String ss