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 :) --- .../profileviewer/GuiProfileViewer.java | 9145 +++++++++++--------- 1 file changed, 5026 insertions(+), 4119 deletions(-) (limited to 'src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java index 7f59a683..44ea686d 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -61,3984 +61,4887 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class GuiProfileViewer extends GuiScreen { - private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); - public static final ResourceLocation pv_basic = new ResourceLocation("notenoughupdates:pv_basic.png"); - public static final ResourceLocation pv_dung = new ResourceLocation("notenoughupdates:pv_dung.png"); - public static final ResourceLocation pv_extra = new ResourceLocation("notenoughupdates:pv_extra.png"); - public static final ResourceLocation pv_mining = new ResourceLocation("notenoughupdates:pv_mining.png"); - public static final ResourceLocation pv_invs = new ResourceLocation("notenoughupdates:pv_invs.png"); - public static final ResourceLocation pv_cols = new ResourceLocation("notenoughupdates:pv_cols.png"); - public static final ResourceLocation pv_pets = new ResourceLocation("notenoughupdates:pv_pets.png"); - public static final ResourceLocation pv_dropdown = new ResourceLocation("notenoughupdates:pv_dropdown.png"); - public static final ResourceLocation pv_bg = new ResourceLocation("notenoughupdates:pv_bg.png"); - public static final ResourceLocation pv_elements = new ResourceLocation("notenoughupdates:pv_elements.png"); - public static final ResourceLocation pv_ironman = new ResourceLocation("notenoughupdates:pv_ironman.png"); - public static final ResourceLocation pv_bingo = new ResourceLocation("notenoughupdates:pv_bingo.png"); - public static final ResourceLocation pv_stranded = new ResourceLocation("notenoughupdates:pv_stranded.png"); - public static final ResourceLocation pv_unknown = new ResourceLocation("notenoughupdates:pv_unknown.png"); - public static final ResourceLocation resource_packs = new ResourceLocation("minecraft:textures/gui/resource_packs.png"); - public static final ResourceLocation icons = new ResourceLocation("textures/gui/icons.png"); - - private static final NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); - - private final ProfileViewer.Profile profile; - public static ProfileViewerPage currentPage = ProfileViewerPage.BASIC; - private int sizeX; - private int sizeY; - private int guiLeft; - private int guiTop; - - private float backgroundRotation = 0; - - private long currentTime = 0; - private long lastTime = 0; - private long startTime = 0; - - private List tooltipToDisplay = null; - - private String profileId = null; - private boolean profileDropdownSelected = false; - - public enum ProfileViewerPage { - LOADING(null), - INVALID_NAME(null), - NO_SKYBLOCK(null), - BASIC(new ItemStack(Items.paper)), - DUNG(new ItemStack(Item.getItemFromBlock(Blocks.deadbush))), - EXTRA(new ItemStack(Items.book)), - INVS(new ItemStack(Item.getItemFromBlock(Blocks.ender_chest))), - COLS(new ItemStack(Items.painting)), - PETS(new ItemStack(Items.bone)), - MINING(new ItemStack(Items.iron_pickaxe)); - - public final ItemStack stack; - - ProfileViewerPage(ItemStack stack) { - this.stack = stack; - } - } - - public GuiProfileViewer(ProfileViewer.Profile profile) { - this.profile = profile; - String name = ""; - if (profile != null && profile.getHypixelProfile() != null) { - name = profile.getHypixelProfile().get("displayname").getAsString(); - } - playerNameTextField = new GuiElementTextField(name, - GuiElementTextField.SCALE_TEXT); - playerNameTextField.setSize(100, 20); - - if (currentPage == ProfileViewerPage.LOADING) { - currentPage = ProfileViewerPage.BASIC; - } - } - - private final GuiElementTextField playerNameTextField; - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - currentTime = System.currentTimeMillis(); - if (startTime == 0) startTime = currentTime; - - ProfileViewerPage page = currentPage; - if (profile == null) { - page = ProfileViewerPage.INVALID_NAME; - } else if (profile.getPlayerInformation(null) == null) { - page = ProfileViewerPage.LOADING; - } else if (profile.getLatestProfile() == null) { - page = ProfileViewerPage.NO_SKYBLOCK; - } - - if (profileId == null && profile != null && profile.getLatestProfile() != null) { - profileId = profile.getLatestProfile(); - } - { - //this is just to cache the guild info - if (profile != null) { - JsonObject guildinfo = profile.getGuildInfo(null); - } - } - - this.sizeX = 431; - this.sizeY = 202; - this.guiLeft = (this.width - this.sizeX) / 2; - this.guiTop = (this.height - this.sizeY) / 2; - - super.drawScreen(mouseX, mouseY, partialTicks); - drawDefaultBackground(); - - blurBackground(); - renderBlurredBackground(width, height, guiLeft + 2, guiTop + 2, sizeX - 4, sizeY - 4); - - GlStateManager.enableDepth(); - GlStateManager.translate(0, 0, 5); - renderTabs(true); - GlStateManager.translate(0, 0, -3); - - GlStateManager.disableDepth(); - GlStateManager.translate(0, 0, -2); - renderTabs(false); - GlStateManager.translate(0, 0, 2); - - GlStateManager.disableLighting(); - GlStateManager.enableDepth(); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.enableAlpha(); - GlStateManager.alphaFunc(516, 0.1F); - - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_bg); - Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST); - - if (!(page == ProfileViewerPage.LOADING)) { - playerNameTextField.render(guiLeft + sizeX - 100, guiTop + sizeY + 5); - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - - if (profile != null) { - JsonObject currProfileInfo = profile.getProfileInformation(profileId); - //Render Profile chooser button - renderBlurredBackground(width, height, guiLeft + 2, guiTop + sizeY + 3 + 2, 100 - 4, 20 - 4); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_dropdown); - Utils.drawTexturedRect(guiLeft, guiTop + sizeY + 3, 100, 20, - 0, 100 / 200f, 0, 20 / 185f, GL11.GL_NEAREST); - Utils.drawStringCenteredScaledMaxWidth(profileId, Minecraft.getMinecraft().fontRendererObj, guiLeft + 50, - guiTop + sizeY + 3 + 10, true, 90, new Color(63, 224, 208, 255).getRGB()); - //ironman icon - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("ironman")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_ironman); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 5, 16, 16, GL11.GL_NEAREST); - } - //bingo! icon - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("bingo")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_bingo); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 5, 16, 16, GL11.GL_NEAREST); - } - //stranded icon - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("island")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_stranded); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 5, 16, 16, GL11.GL_NEAREST); - } - //icon if game mode is unknown - if (currProfileInfo != null && currProfileInfo.has("game_mode") && - !currProfileInfo.get("game_mode").getAsString().equals("island") && - !currProfileInfo.get("game_mode").getAsString().equals("bingo") && - !currProfileInfo.get("game_mode").getAsString().equals("ironman")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_unknown); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 5, 16, 16, GL11.GL_NEAREST); - } - //Render Open In Skycrypt button - renderBlurredBackground(width, height, guiLeft + 100 + 6 + 2, guiTop + sizeY + 3 + 2, 100 - 4, 20 - 4); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_dropdown); - Utils.drawTexturedRect(guiLeft + 100 + 6, guiTop + sizeY + 3, 100, 20, - 0, 100 / 200f, 0, 20 / 185f, GL11.GL_NEAREST); - Utils.drawStringCenteredScaledMaxWidth("Open in Skycrypt", Minecraft.getMinecraft().fontRendererObj, guiLeft + 50 + 100 + 6, - guiTop + sizeY + 3 + 10, true, 90, new Color(63, 224, 208, 255).getRGB()); - - if (profileDropdownSelected && !profile.getProfileIds().isEmpty() && scaledResolution.getScaleFactor() != 4) { - int dropdownOptionSize = scaledResolution.getScaleFactor() == 3 ? 10 : 20; - - int numProfiles = profile.getProfileIds().size(); - int sizeYDropdown = numProfiles * dropdownOptionSize; - renderBlurredBackground(width, height, guiLeft + 2, guiTop + sizeY + 23, 100 - 4, sizeYDropdown - 2); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_dropdown); - Utils.drawTexturedRect(guiLeft, guiTop + sizeY + 23 - 3, 100, 3, - 100 / 200f, 1, 0, 3 / 185f, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft, guiTop + sizeY + 23 + sizeYDropdown - 4, 100, 4, - 100 / 200f, 1, 181 / 185f, 1, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft, guiTop + sizeY + 23, 100, sizeYDropdown - 4, - 100 / 200f, 1, (181 - sizeYDropdown) / 185f, 181 / 185f, GL11.GL_NEAREST); - - for (int yIndex = 0; yIndex < profile.getProfileIds().size(); yIndex++) { - String otherProfileId = profile.getProfileIds().get(yIndex); - Utils.drawStringCenteredScaledMaxWidth(otherProfileId, Minecraft.getMinecraft().fontRendererObj, guiLeft + 50, - guiTop + sizeY + 23 + dropdownOptionSize / 2f + dropdownOptionSize * yIndex, true, 90, new Color(33, 112, 104, 255).getRGB()); - currProfileInfo = profile.getProfileInformation(otherProfileId); - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("ironman")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_ironman); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 2 + 23 + dropdownOptionSize * yIndex, 16, 16, GL11.GL_NEAREST); - } - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("bingo")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_bingo); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 2 + 23 + dropdownOptionSize * yIndex, 16, 16, GL11.GL_NEAREST); - } - if (currProfileInfo != null && currProfileInfo.has("game_mode") && currProfileInfo.get("game_mode").getAsString().equals("island")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_stranded); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 2 + 23 + dropdownOptionSize * yIndex, 16, 16, GL11.GL_NEAREST); - } - if (currProfileInfo != null && currProfileInfo.has("game_mode") && - !currProfileInfo.get("game_mode").getAsString().equals("island") && - !currProfileInfo.get("game_mode").getAsString().equals("bingo") && - !currProfileInfo.get("game_mode").getAsString().equals("ironman")) { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_unknown); - Utils.drawTexturedRect(guiLeft - 16 - 5, guiTop + sizeY + 2 + 23 + dropdownOptionSize * yIndex, 16, 16, GL11.GL_NEAREST); - } - } - - } - } - } - - GlStateManager.color(1, 1, 1, 1); - switch (page) { - case BASIC: - drawBasicPage(mouseX, mouseY, partialTicks); - break; - case DUNG: - drawDungPage(mouseX, mouseY, partialTicks); - break; - case EXTRA: - drawExtraPage(mouseX, mouseY, partialTicks); - break; - case INVS: - drawInvsPage(mouseX, mouseY, partialTicks); - break; - case COLS: - drawColsPage(mouseX, mouseY, partialTicks); - break; - case PETS: - drawPetsPage(mouseX, mouseY, partialTicks); - break; - case MINING: - drawMiningPage(mouseX, mouseY, partialTicks); - break; - case LOADING: - String str = EnumChatFormatting.YELLOW + "Loading player profiles."; - long currentTimeMod = System.currentTimeMillis() % 1000; - if (currentTimeMod > 333) { - if (currentTimeMod < 666) { - str += "."; - } else { - str += ".."; - } - } - - Utils.drawStringCentered(str, Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 101, true, 0); - - //This is just here to inform the player what to do - //like typing /api new or telling them to go find a psychotherapist - long timeDiff = System.currentTimeMillis() - startTime; - - if (timeDiff > 20000) { - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "Its taking a while...", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 111, true, 0); - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "Try \"/api new\".", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 121, true, 0); - if (timeDiff > 60000) { - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "Might be hypixel's fault.", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 131, true, 0); - if (timeDiff > 180000) { - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "Wow you're still here?", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 141, true, 0); - if (timeDiff > 360000) { - long second = (timeDiff / 1000) % 60; - long minute = (timeDiff / (1000 * 60)) % 60; - long hour = (timeDiff / (1000 * 60 * 60)) % 24; - - String time = String.format("%02d:%02d:%02d", hour, minute, second); - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "You've wasted your time here for: " + time, Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 151, true, 0); - Utils.drawStringCentered(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "What are you doing with your life?", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 161, true, 0); - if (timeDiff > 600000) { - Utils.drawStringCentered(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "Maniac", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 171, true, 0); - if (timeDiff > 1200000) { - Utils.drawStringCentered(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "You're a menace to society", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 181, true, 0); - if (timeDiff > 1800000) { - Utils.drawStringCentered(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "You don't know what's gonna happen to you", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 191, true, 0); - if (timeDiff > 3000000) { - Utils.drawStringCentered(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "You really want this?", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 91, true, 0); - if (timeDiff > 3300000) { - Utils.drawStringCentered(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "OW LORD FORGIVE ME FOR THIS", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 71, true, 0); - if (timeDiff > 3600000) { - throw new Error("Go do something productive") { - @Override - public void printStackTrace() { - throw new Error("Go do something productive"); - } - }; - } - } - } - } - } - } - } - } - } - } - - break; - case INVALID_NAME: - Utils.drawStringCentered(EnumChatFormatting.RED + "Invalid name or API is down!", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 101, true, 0); - break; - case NO_SKYBLOCK: - Utils.drawStringCentered(EnumChatFormatting.RED + "No skyblock data found!", Minecraft.getMinecraft().fontRendererObj, - guiLeft + sizeX / 2f, guiTop + 101, true, 0); - break; - } - - lastTime = currentTime; - - if (tooltipToDisplay != null) { - List grayTooltip = new ArrayList<>(tooltipToDisplay.size()); - for (String line : tooltipToDisplay) { - grayTooltip.add(EnumChatFormatting.GRAY + line); - } - Utils.drawHoveringText(grayTooltip, mouseX, mouseY, width, height, -1, Minecraft.getMinecraft().fontRendererObj); - tooltipToDisplay = null; - } - } - - private void renderTabs(boolean renderPressed) { - int ignoredTabs = 0; - for (int i = 0; i < ProfileViewerPage.values().length; i++) { - ProfileViewerPage page = ProfileViewerPage.values()[i]; - if (page.stack == null) { - ignoredTabs++; - continue; - } - boolean pressed = page == currentPage; - if (pressed == renderPressed) { - renderTab(page.stack, i - ignoredTabs, pressed); - } - } - } - - private void renderTab(ItemStack stack, int xIndex, boolean pressed) { - GlStateManager.disableLighting(); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.enableAlpha(); - GlStateManager.alphaFunc(516, 0.1F); - - int x = guiLeft + xIndex * 28; - int y = guiTop - 28; - - float uMin = 0; - float uMax = 28 / 256f; - float vMin = 20 / 256f; - float vMax = 51 / 256f; - if (pressed) { - vMin = 52 / 256f; - vMax = 84 / 256f; - - if (xIndex != 0) { - uMin = 28 / 256f; - uMax = 56 / 256f; - } - - renderBlurredBackground(width, height, x + 2, y + 2, 28 - 4, 28 - 4); - } else { - renderBlurredBackground(width, height, x + 2, y + 4, 28 - 4, 28 - 4); - } - - GlStateManager.disableLighting(); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.enableAlpha(); - GlStateManager.alphaFunc(516, 0.1F); - - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_elements); - Utils.drawTexturedRect(x, y, 28, pressed ? 32 : 31, uMin, uMax, vMin, vMax, GL11.GL_NEAREST); - - GlStateManager.enableDepth(); - Utils.drawItemStack(stack, x + 6, y + 9); - } - - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { - if (currentPage != ProfileViewerPage.LOADING && currentPage != ProfileViewerPage.INVALID_NAME) { - int ignoredTabs = 0; - for (int i = 0; i < ProfileViewerPage.values().length; i++) { - ProfileViewerPage page = ProfileViewerPage.values()[i]; - if (page.stack == null) { - ignoredTabs++; - continue; - } - int i2 = i - ignoredTabs; - int x = guiLeft + i2 * 28; - int y = guiTop - 28; - - if (mouseX > x && mouseX < x + 28) { - if (mouseY > y && mouseY < y + 32) { - if (currentPage != page) Utils.playPressSound(); - currentPage = page; - inventoryTextField.otherComponentClick(); - playerNameTextField.otherComponentClick(); - return; - } - } - } - } - switch (currentPage) { - case DUNG: - mouseClickedDung(mouseX, mouseY, mouseButton); - break; - case INVS: - inventoryTextField.setSize(88, 20); - if (mouseX > guiLeft + 19 && mouseX < guiLeft + 19 + 88) { - if (mouseY > guiTop + sizeY - 26 - 20 && mouseY < guiTop + sizeY - 26) { - inventoryTextField.mouseClicked(mouseX, mouseY, mouseButton); - playerNameTextField.otherComponentClick(); - return; - } - } - break; - case PETS: - if (sortedPets == null) break; - for (int i = petsPage * 20; i < Math.min(petsPage * 20 + 20, sortedPets.size()); i++) { - int xIndex = (i % 20) % COLLS_XCOUNT; - int yIndex = (i % 20) / COLLS_XCOUNT; - - float x = 5 + COLLS_XPADDING + (COLLS_XPADDING + 20) * xIndex; - float y = 7 + COLLS_YPADDING + (COLLS_YPADDING + 20) * yIndex; - - if (mouseX > guiLeft + x && mouseX < guiLeft + x + 20) { - if (mouseY > guiTop + y && mouseY < guiTop + y + 20) { - selectedPet = i; - return; - } - } - } - break; - } - if (mouseX > guiLeft + sizeX - 100 && mouseX < guiLeft + sizeX) { - if (mouseY > guiTop + sizeY + 5 && mouseY < guiTop + sizeY + 25) { - playerNameTextField.mouseClicked(mouseX, mouseY, mouseButton); - inventoryTextField.otherComponentClick(); - return; - } - } - if (mouseX > guiLeft + 106 && mouseX < guiLeft + 106 + 100 && profile != null && !profile.getProfileIds().isEmpty() && profileId != null) { - if (mouseY > guiTop + sizeY + 3 && mouseY < guiTop + sizeY + 23) { - try { - Desktop desk = Desktop.getDesktop(); - desk.browse(new URI("https://sky.shiiyu.moe/stats/" + profile.getHypixelProfile().get("displayname").getAsString() + "/" + profileId)); - Utils.playPressSound(); - return; - } catch (UnsupportedOperationException | IOException | URISyntaxException ignored) { - //no idea how this sounds, but ya know just in case - Utils.playSound(new ResourceLocation("game.player.hurt"), true); - return; - } - } - } - - if (mouseX > guiLeft && mouseX < guiLeft + 100 && profile != null && !profile.getProfileIds().isEmpty()) { - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - if (mouseY > guiTop + sizeY + 3 && mouseY < guiTop + sizeY + 23) { - if (scaledResolution.getScaleFactor() == 4) { - profileDropdownSelected = false; - int profileNum = 0; - for (int index = 0; index < profile.getProfileIds().size(); index++) { - if (profile.getProfileIds().get(index).equals(profileId)) { - profileNum = index; - break; - } - } - if (mouseButton == 0) { - profileNum++; - } else { - profileNum--; - } - if (profileNum >= profile.getProfileIds().size()) profileNum = 0; - if (profileNum < 0) profileNum = profile.getProfileIds().size() - 1; - - String newProfileId = profile.getProfileIds().get(profileNum); - if (profileId != null && !profileId.equals(newProfileId)) { - resetCache(); - } - profileId = newProfileId; - } else { - profileDropdownSelected = !profileDropdownSelected; - } - } else if (scaledResolution.getScaleFactor() != 4 && profileDropdownSelected) { - int dropdownOptionSize = scaledResolution.getScaleFactor() == 3 ? 10 : 20; - int extraY = mouseY - (guiTop + sizeY + 23); - int index = extraY / dropdownOptionSize; - if (index >= 0 && index < profile.getProfileIds().size()) { - String newProfileId = profile.getProfileIds().get(index); - if (profileId != null && !profileId.equals(newProfileId)) { - resetCache(); - } - profileId = newProfileId; - } - } - playerNameTextField.otherComponentClick(); - inventoryTextField.otherComponentClick(); - return; - } - profileDropdownSelected = false; - playerNameTextField.otherComponentClick(); - inventoryTextField.otherComponentClick(); - } - - @Override - protected void keyTyped(char typedChar, int keyCode) throws IOException { - super.keyTyped(typedChar, keyCode); - switch (currentPage) { - case INVS: - keyTypedInvs(typedChar, keyCode); - inventoryTextField.keyTyped(typedChar, keyCode); - break; - case COLS: - keyTypedCols(typedChar, keyCode); - break; - case DUNG: - keyTypedDung(typedChar, keyCode); - break; - } - if (playerNameTextField.getFocus() && !(currentPage == ProfileViewerPage.LOADING)) { - if (keyCode == Keyboard.KEY_RETURN) { - currentPage = ProfileViewerPage.LOADING; - NotEnoughUpdates.profileViewer.getProfileByName(playerNameTextField.getText(), profile -> { //todo: invalid name - if (profile != null) profile.resetCache(); - Minecraft.getMinecraft().displayGuiScreen(new GuiProfileViewer(profile)); - }); - } - playerNameTextField.keyTyped(typedChar, keyCode); - } - } - - @Override - protected void mouseReleased(int mouseX, int mouseY, int mouseButton) { - super.mouseReleased(mouseX, mouseY, mouseButton); - - switch (currentPage) { - case INVS: - mouseReleasedInvs(mouseX, mouseY, mouseButton); - break; - case COLS: - mouseReleasedCols(mouseX, mouseY, mouseButton); - break; - case PETS: - mouseReleasedPets(mouseX, mouseY, mouseButton); - } - } - - protected void mouseClickedDung(int mouseX, int mouseY, int mouseButton) { - if (mouseX >= guiLeft + 50 && mouseX <= guiLeft + 70 && - mouseY >= guiTop + 54 && mouseY <= guiTop + 64) { - dungeonLevelTextField.mouseClicked(mouseX, mouseY, mouseButton); - } else { - dungeonLevelTextField.otherComponentClick(); - } - - int cW = fontRendererObj.getStringWidth("Calculate"); - if (mouseX >= guiLeft + 23 + 110 - 17 - cW && mouseX <= guiLeft + 23 + 110 - 17 && - mouseY >= guiTop + 55 && mouseY <= guiTop + 65) { - calculateFloorLevelXP(); - } - - int y = guiTop + 142; - - if (mouseY >= y - 2 && mouseY <= y + 9) { - for (int i = 1; i <= 7; i++) { - int w = fontRendererObj.getStringWidth("" + i); - - int x = guiLeft + 23 + 110 * i / 8 - w / 2; - - if (mouseX >= x - 2 && mouseX <= x + 7) { - floorTime = i; - return; - } - } - } - if (mouseX >= guiLeft - 29 && mouseX <= guiLeft) { - if (mouseY >= guiTop && mouseY <= guiTop + 28) { - onMasterMode = false; - return; - } else if (mouseY + 28 >= guiTop && mouseY <= guiTop + 28 * 2) { - onMasterMode = true; - return; - } - } - } - - protected void keyTypedDung(char typedChar, int keyCode) { - dungeonLevelTextField.keyTyped(typedChar, keyCode); - } - - protected void keyTypedInvs(char typedChar, int keyCode) throws IOException { - switch (keyCode) { - case Keyboard.KEY_1: - case Keyboard.KEY_NUMPAD1: - selectedInventory = "inv_contents"; - break; - case Keyboard.KEY_2: - case Keyboard.KEY_NUMPAD2: - selectedInventory = "ender_chest_contents"; - break; - case Keyboard.KEY_3: - case Keyboard.KEY_NUMPAD3: - selectedInventory = "backpack_contents"; - break; - case Keyboard.KEY_4: - case Keyboard.KEY_NUMPAD4: - selectedInventory = "personal_vault_contents"; - break; - case Keyboard.KEY_5: - case Keyboard.KEY_NUMPAD5: - selectedInventory = "talisman_bag"; - break; - case Keyboard.KEY_6: - case Keyboard.KEY_NUMPAD6: - selectedInventory = "wardrobe_contents"; - break; - case Keyboard.KEY_7: - case Keyboard.KEY_NUMPAD7: - selectedInventory = "fishing_bag"; - break; - case Keyboard.KEY_8: - case Keyboard.KEY_NUMPAD8: - selectedInventory = "potion_bag"; - break; - - } - Utils.playPressSound(); - } - - protected void keyTypedCols(char typedChar, int keyCode) throws IOException { - ItemStack stack = null; - Iterator items = ProfileViewer.getCollectionCatToCollectionMap().keySet().iterator(); - switch (keyCode) { - case Keyboard.KEY_5: - case Keyboard.KEY_NUMPAD5: - stack = items.next(); - case Keyboard.KEY_4: - case Keyboard.KEY_NUMPAD4: - stack = items.next(); - case Keyboard.KEY_3: - case Keyboard.KEY_NUMPAD3: - stack = items.next(); - case Keyboard.KEY_2: - case Keyboard.KEY_NUMPAD2: - stack = items.next(); - case Keyboard.KEY_1: - case Keyboard.KEY_NUMPAD1: - stack = items.next(); - } - if (stack != null) { - selectedCollectionCategory = stack; - } - Utils.playPressSound(); - } - - private void mouseReleasedPets(int mouseX, int mouseY, int mouseButton) { - if (mouseY > guiTop + 6 && mouseY < guiTop + 22) { - if (mouseX > guiLeft + 100 - 15 - 12 && mouseX < guiLeft + 100 - 20) { - if (petsPage > 0) { - petsPage--; - } - return; - } else if (mouseX > guiLeft + 100 + 15 && mouseX < guiLeft + 100 + 20 + 12) { - if (sortedPets != null && petsPage < Math.ceil(sortedPets.size() / 20f) - 1) { - petsPage++; - } - return; - } - } - } - - private void mouseReleasedInvs(int mouseX, int mouseY, int mouseButton) { - if (mouseButton == 0) { - int i = 0; - for (Map.Entry entry : invNameToDisplayMap.entrySet()) { - int xIndex = i % 3; - int yIndex = i / 3; - - int x = guiLeft + 19 + 34 * xIndex; - int y = guiTop + 26 + 34 * yIndex; - - if (mouseX >= x && mouseX <= x + 16) { - if (mouseY >= y && mouseY <= y + 16) { - if (selectedInventory != entry.getKey()) Utils.playPressSound(); - selectedInventory = entry.getKey(); - return; - } - } - - i++; - } - - JsonObject inventoryInfo = profile.getInventoryInfo(profileId); - if (inventoryInfo == null) return; - - ItemStack[][][] inventories = getItemsForInventory(inventoryInfo, selectedInventory); - if (currentInventoryIndex >= inventories.length) currentInventoryIndex = inventories.length - 1; - if (currentInventoryIndex < 0) currentInventoryIndex = 0; - - ItemStack[][] inventory = inventories[currentInventoryIndex]; - if (inventory == null) return; - - int inventoryRows = inventory.length; - int invSizeY = inventoryRows * 18 + 17 + 7; - - int y = guiTop + 101 - invSizeY / 2; - int staticSelectorHeight = guiTop + 177; - - if (mouseY > staticSelectorHeight && mouseY < staticSelectorHeight + 16) { - if (mouseX > guiLeft + 320 - 12 && mouseX < guiLeft + 320 + 12) { - if (mouseX < guiLeft + 320) { - currentInventoryIndex--; - } else { - currentInventoryIndex++; - } - } - } - } - } - - private ItemStack selectedCollectionCategory = null; - - private void mouseReleasedCols(int mouseX, int mouseY, int mouseButton) { - int collectionCatSize = ProfileViewer.getCollectionCatToCollectionMap().size(); - int collectionCatYSize = (int) (162f / (collectionCatSize - 1 + 0.0000001f)); - int yIndex = 0; - for (ItemStack stack : ProfileViewer.getCollectionCatToCollectionMap().keySet()) { - if (mouseX > guiLeft + 7 && mouseX < guiLeft + 7 + 20) { - if (mouseY > guiTop + 10 + collectionCatYSize * yIndex && mouseY < guiTop + 10 + collectionCatYSize * yIndex + 20) { - selectedCollectionCategory = stack; - Utils.playPressSound(); - return; - } - } - yIndex++; - } - } - - private static final ItemStack DEADBUSH = new ItemStack(Item.getItemFromBlock(Blocks.deadbush)); - private static final ItemStack iron_pick = new ItemStack(Items.iron_pickaxe); - private static final ItemStack[] BOSS_HEADS = new ItemStack[7]; - - private final HashMap levelObjCatas = new HashMap<>(); - private final HashMap levelObjhotms = new HashMap<>(); - private final HashMap> levelObjClasseses = new HashMap<>(); - - private final GuiElementTextField dungeonLevelTextField = new GuiElementTextField("", GuiElementTextField.SCALE_TEXT); - - private static final String[] dungSkillsName = {"Healer", "Mage", "Berserk", "Archer", "Tank"}; - private static final ItemStack[] dungSkillsStack = {new ItemStack(Items.potionitem, 1, 16389), - new ItemStack(Items.blaze_rod), new ItemStack(Items.iron_sword), new ItemStack(Items.bow), new ItemStack(Items.leather_chestplate)}; - private static final String[] bossFloorArr = {"Bonzo", "Scarf", "Professor", "Thorn", "Livid", "Sadan", "Necron"}; - private static final String[] bossFloorHeads = { - "12716ecbf5b8da00b05f316ec6af61e8bd02805b21eb8e440151468dc656549c", - "7de7bbbdf22bfe17980d4e20687e386f11d59ee1db6f8b4762391b79a5ac532d", - "9971cee8b833a62fc2a612f3503437fdf93cad692d216b8cf90bbb0538c47dd8", - "8b6a72138d69fbbd2fea3fa251cabd87152e4f1c97e5f986bf685571db3cc0", - "c1007c5b7114abec734206d4fc613da4f3a0e99f71ff949cedadc99079135a0b", - "fa06cb0c471c1c9bc169af270cd466ea701946776056e472ecdaeb49f0f4a4dc", - "a435164c05cea299a3f016bbbed05706ebb720dac912ce4351c2296626aecd9a" - }; - private static int floorTime = 7; - private int floorLevelTo = -1; - private int floorLevelToXP = -1; - - private void calculateFloorLevelXP() { - JsonObject leveling = Constants.LEVELING; - if (leveling == null) return; - ProfileViewer.Level levelObjCata = levelObjCatas.get(profileId); - if (levelObjCata == null) return; - - try { - dungeonLevelTextField.setCustomBorderColour(0xffffffff); - floorLevelTo = Integer.parseInt(dungeonLevelTextField.getText()); - - JsonArray levelingArray = Utils.getElement(leveling, "catacombs").getAsJsonArray(); - - float remaining = -((levelObjCata.level % 1) * levelObjCata.maxXpForLevel); - - for (int level = 0; level < Math.min(floorLevelTo, levelingArray.size()); level++) { - if (level < Math.floor(levelObjCata.level)) { - continue; - } - remaining += levelingArray.get(level).getAsFloat(); - } - - if (remaining < 0) { - remaining = 0; - } - floorLevelToXP = (int) remaining; - } catch (Exception e) { - dungeonLevelTextField.setCustomBorderColour(0xffff0000); - } - } - - private static final LinkedHashMap dungeonsModeIcons = new LinkedHashMap() {{ - put("catacombs", Utils.editItemStackInfo(NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager.getItemInformation().get("DUNGEON_STONE")), EnumChatFormatting.GRAY + "Normal Mode", true)); - put("master_catacombs", Utils.editItemStackInfo(NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager.getItemInformation().get("MASTER_SKULL_TIER_7")), EnumChatFormatting.GRAY + "Master Mode", true)); - }}; - - private void drawDungPage(int mouseX, int mouseY, float partialTicks) { - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_dung); - Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST); - - JsonObject hypixelInfo = profile.getHypixelProfile(); - if (hypixelInfo == null) return; - JsonObject profileInfo = profile.getProfileInformation(profileId); - if (profileInfo == null) return; - - JsonObject leveling = Constants.LEVELING; - if (leveling == null) return; - - int sectionWidth = 110; - - String dungeonString = onMasterMode ? "master_catacombs" : "catacombs"; - - //Utils.drawStringCentered((onMasterMode?"Master Mode":"Catacombs"),fontRendererObj,(guiLeft+sizeX/2), guiTop+10, true, 0xffff0000); - Utils.renderShadowedString(EnumChatFormatting.RED + (onMasterMode ? "Master Mode" : "Catacombs"), - (guiLeft + sizeX / 2), guiTop + 5, sectionWidth); - - ProfileViewer.Level levelObjCata = levelObjCatas.get(profileId); - //Catacombs level thingy - { - if (levelObjCata == null) { - float cataXp = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.experience"), 0); - levelObjCata = ProfileViewer.getLevel(Utils.getElement(leveling, "catacombs").getAsJsonArray(), - cataXp, 50, false); - levelObjCata.totalXp = cataXp; - levelObjCatas.put(profileId, levelObjCata); - } - - String skillName = EnumChatFormatting.RED + "Catacombs"; - float level = levelObjCata.level; - int levelFloored = (int) Math.floor(level); - - if (floorLevelTo == -1 && levelFloored >= 0) { - dungeonLevelTextField.setText("" + (levelFloored + 1)); - calculateFloorLevelXP(); - } - - int x = guiLeft + 23; - int y = guiTop + 25; - - renderXpBar(skillName, DEADBUSH, x, y, sectionWidth, levelObjCata, mouseX, mouseY); - - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Until Cata " + floorLevelTo + ": ", - EnumChatFormatting.WHITE + shortNumberFormat(floorLevelToXP, 0), x, y + 16, sectionWidth); - - if(mouseX > x && mouseX < x + sectionWidth && mouseY > y+16 && mouseY < y+24 && !onMasterMode) { - float F5 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.catacombs.tier_completions."+5), 0)); //this can prob be done better - float F6 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.catacombs.tier_completions."+6), 0)); - float F7 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.catacombs.tier_completions."+7), 0)); - if (F5 > 150){ - F5 = 150; - } if (F6 > 100){ - F6 = 100; - } if (F7 > 50){ - F7 = 50; - } - float xpF5 = 2000*(F5/100+1); - float xpF6 = 4000*(F6/100+1); - float xpF7 = 20000*(F7/100+1); - if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - xpF5 *= 1.1; - xpF6 *= 1.1; - xpF7 *= 1.1; - } - - long runsF5 = (int) Math.ceil(floorLevelToXP / xpF5); - long runsF6 = (int) Math.ceil(floorLevelToXP / xpF6); - long runsF7 = (int) Math.ceil(floorLevelToXP / xpF7); - - float timeF5 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.fastest_time_s_plus.5"), 0); - float timeF6 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.fastest_time_s_plus.6"), 0); - float timeF7 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.fastest_time_s_plus.7"), 0); - - tooltipToDisplay = Lists.newArrayList( - String.format("# F5 Runs (%s xp) : %d", shortNumberFormat(xpF5, 0), runsF5), - String.format("# F6 Runs (%s xp) : %d", shortNumberFormat(xpF6, 0), runsF6), - String.format("# F7 Runs (%s xp) : %d", shortNumberFormat(xpF7, 0), runsF7), - "" - ); - boolean hasTime = false; - if (timeF5 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (F5) : %s", Utils.prettyTime(runsF5 * (long) (timeF5 * 1.2)))); - hasTime = true; - } - if (timeF6 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (F6) : %s", Utils.prettyTime(runsF6 * (long) (timeF6 * 1.2)))); - hasTime = true; - } - if (timeF7 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (F7) : %s", Utils.prettyTime(runsF7 * (long) (timeF7 * 1.2)))); - hasTime = true; - } - if (hasTime) { - tooltipToDisplay.add(""); - } - if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - tooltipToDisplay.add("[Hold " + EnumChatFormatting.YELLOW + "SHIFT" + EnumChatFormatting.GRAY + " to show without Expert Ring]"); - } - if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) { - if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) tooltipToDisplay.add(""); - tooltipToDisplay.add("Number of runs is calculated as [Remaining XP]/[XP per Run]."); - tooltipToDisplay.add("The [XP per Run] is the average xp gained from an S+ run"); - tooltipToDisplay.add("The "+EnumChatFormatting.DARK_PURPLE+"Catacombs Expert Ring"+EnumChatFormatting.GRAY+ - " is assumed to be used, unless "+EnumChatFormatting.YELLOW+"SHIFT"+EnumChatFormatting.GRAY+" is held."); - tooltipToDisplay.add("[Time per run] is calculated using Fastest S+ x 120%"); - } else { - tooltipToDisplay.add("[Hold "+EnumChatFormatting.YELLOW+"CTRL"+EnumChatFormatting.GRAY+" to see details]"); - } - } - - if(mouseX > x && mouseX < x + sectionWidth && mouseY > y+16 && mouseY < y+24 && onMasterMode) { - float M3 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.master_catacombs.tier_completions."+3), 0)); - float M4 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.master_catacombs.tier_completions."+4), 0)); - float M5 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.master_catacombs.tier_completions."+5), 0)); //this can prob be done better - float M6 = (Utils.getElementAsFloat(Utils.getElement(profileInfo, "dungeons.dungeon_types.master_catacombs.tier_completions."+6), 0)); - if (M3 > 50){ - M3 = 50; - } if (M4 > 50){ - M4 = 50; - } if (M5 > 50){ - M5 = 50; - } if (M6 > 50){ - M6 = 50; - } - float xpM3 = 36500*(M3/100+1); - float xpM4 = 48500*(M4/100+1); - float xpM5 = 70000*(M5/100+1); - float xpM6 = 100000*(M6/100+1); - //No clue if M3 or M4 xp values are right - if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - xpM3 *= 1.1; - xpM4 *= 1.1; - xpM5 *= 1.1; - xpM6 *= 1.1; - } - - long runsM3 = (int)Math.ceil(floorLevelToXP/xpM3); - long runsM4 = (int)Math.ceil(floorLevelToXP/xpM4); - long runsM5 = (int)Math.ceil(floorLevelToXP/xpM5); - long runsM6 = (int)Math.ceil(floorLevelToXP/xpM6); - - float timeM3 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.fastest_time_s_plus.3"), 0); - float timeM4 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.fastest_time_s_plus.4"), 0); - float timeM5 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.fastest_time_s_plus.5"), 0); - float timeM6 = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.fastest_time_s_plus.6"), 0); - - tooltipToDisplay = Lists.newArrayList( - String.format("# M3 Runs (%s xp) : %d", shortNumberFormat(xpM3, 0), runsM3), - String.format("# M4 Runs (%s xp) : %d", shortNumberFormat(xpM4, 0), runsM4), - String.format("# M5 Runs (%s xp) : %d", shortNumberFormat(xpM5, 0), runsM5), - String.format("# M6 Runs (%s xp) : %d", shortNumberFormat(xpM6, 0), runsM6), - "" - ); - boolean hasTime = false; - if(timeM3 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (M3) : %s", Utils.prettyTime(runsM3*(long)(timeM3*1.2)))); - hasTime = true; - } - if(timeM4 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (M4) : %s", Utils.prettyTime(runsM4*(long)(timeM4*1.2)))); - hasTime = true; - } - if(timeM5 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (M5) : %s", Utils.prettyTime(runsM5*(long)(timeM5*1.2)))); - hasTime = true; - } - if(timeM6 > 1000) { - tooltipToDisplay.add(String.format("Expected Time (M6) : %s", Utils.prettyTime(runsM6*(long)(timeM6*1.2)))); - hasTime = true; - } - if(hasTime) { - tooltipToDisplay.add(""); - } - if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - tooltipToDisplay.add("[Hold "+EnumChatFormatting.YELLOW+"SHIFT"+EnumChatFormatting.GRAY+" to show without Expert Ring]"); - } - if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) { - if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) tooltipToDisplay.add(""); - tooltipToDisplay.add("Number of runs is calculated as [Remaining XP]/[XP per Run]."); - tooltipToDisplay.add("The [XP per Run] is the average xp gained from an S+ run"); - tooltipToDisplay.add("The "+EnumChatFormatting.DARK_PURPLE+"Catacombs Expert Ring"+EnumChatFormatting.GRAY+ - " is assumed to be used, unless "+EnumChatFormatting.YELLOW+"SHIFT"+EnumChatFormatting.GRAY+" is held."); - tooltipToDisplay.add("[Time per run] is calculated using Fastest S+ x 120%"); - } else { - tooltipToDisplay.add("[Hold " + EnumChatFormatting.YELLOW + "CTRL" + EnumChatFormatting.GRAY + " to see details]"); - } - } - - dungeonLevelTextField.setSize(20, 10); - dungeonLevelTextField.render(x + 22, y + 29); - int calcLen = fontRendererObj.getStringWidth("Calculate"); - Utils.renderShadowedString(EnumChatFormatting.WHITE + "Calculate", x + sectionWidth - 17 - calcLen / 2f, - y + 30, 100); - - //Random stats - - float secrets = Utils.getElementAsFloat(Utils.getElement(hypixelInfo, - "achievements.skyblock_treasure_hunter"), 0); - float totalRuns = 0; - float totalRunsF = 0; - float totalRunsF5 = 0; - for (int i = 1; i <= 7; i++) { - float runs = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.tier_completions." + i), 0); - totalRunsF += runs; - if (i >= 5) { - totalRunsF5 += runs; - } - } - float totalRunsM = 0; - float totalRunsM5 = 0; - for (int i = 1; i <= 7; i++) { - float runs = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.tier_completions." + i), 0); - totalRunsM += runs; - if (i >= 5) { - totalRunsM5 += runs; - } - } - totalRuns = totalRunsF + totalRunsM; - - float mobKills = 0; - float mobKillsF = 0; - float mobKillsF5 = 0; - for (int i = 1; i <= 7; i++) { - float kills = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.catacombs.mobs_killed." + i), 0); - mobKillsF += kills; - if (i >= 5) { - mobKillsF5 += kills; - } - } - float mobKillsM = 0; - float mobKillsM5 = 0; - for (int i = 1; i <= 7; i++) { - float kills = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types.master_catacombs.mobs_killed." + i), 0); - mobKillsM += kills; - if (i >= 5) { - mobKillsM5 += kills; - } - } - mobKills = mobKillsF + mobKillsM; - - int miscTopY = y + 55; - - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Total Runs " + (onMasterMode ? "M" : "F"), - EnumChatFormatting.WHITE.toString() + ((int) (onMasterMode ? totalRunsM : totalRunsF)), x, miscTopY, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Total Runs (" + (onMasterMode ? "M" : "F") + "5-7) ", - EnumChatFormatting.WHITE.toString() + ((int) (onMasterMode ? totalRunsM5 : totalRunsF5)), x, miscTopY + 10, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Secrets (Total) ", - EnumChatFormatting.WHITE + shortNumberFormat(secrets, 0), x, miscTopY + 20, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Secrets (/Run) ", - EnumChatFormatting.WHITE.toString() + (Math.round(secrets / Math.max(1, totalRuns) * 100) / 100f), x, miscTopY + 30, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Mob Kills (Total) ", - EnumChatFormatting.WHITE + shortNumberFormat(mobKills, 0), x, miscTopY + 40, sectionWidth); - - int y3 = y + 117; - - for (int i = 1; i <= 7; i++) { - int w = fontRendererObj.getStringWidth("" + i); - - int bx = x + sectionWidth * i / 8 - w / 2; - - boolean invert = i == floorTime; - float uMin = 20 / 256f; - float uMax = 29 / 256f; - float vMin = 0 / 256f; - float vMax = 11 / 256f; - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(pv_elements); - Utils.drawTexturedRect(bx - 2, y3 - 2, 9, 11, - invert ? uMax : uMin, invert ? uMin : uMax, - invert ? vMax : vMin, invert ? vMin : vMax, GL11.GL_NEAREST); - - Utils.renderShadowedString(EnumChatFormatting.WHITE.toString() + i, bx + w / 2, y3, 10); - } - - float timeNorm = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types." + dungeonString + ".fastest_time." + floorTime), 0); - float timeS = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types." + dungeonString + ".fastest_time_s." + floorTime), 0); - float timeSPLUS = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types." + dungeonString + ".fastest_time_s_plus." + floorTime), 0); - String timeNormStr = timeNorm <= 0 ? "N/A" : Utils.prettyTime((long) timeNorm); - String timeSStr = timeS <= 0 ? "N/A" : Utils.prettyTime((long) timeS); - String timeSPlusStr = timeSPLUS <= 0 ? "N/A" : Utils.prettyTime((long) timeSPLUS); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Floor " + floorTime + " ", - EnumChatFormatting.WHITE + timeNormStr, x, y3 + 10, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Floor " + floorTime + " S", - EnumChatFormatting.WHITE + timeSStr, x, y3 + 20, sectionWidth); - Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Floor " + floorTime + " S+", - EnumChatFormatting.WHITE + timeSPlusStr, x, y3 + 30, sectionWidth); - } - - //Completions - { - int x = guiLeft + 161; - int y = guiTop + 27; - - Utils.renderShadowedString(EnumChatFormatting.RED + "Boss Collections", - x + sectionWidth / 2, y, sectionWidth); - for (int i = 1; i <= 7; i++) { - float compl = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.dungeon_types." + dungeonString + ".tier_completions." + i), 0); - - if (BOSS_HEADS[i - 1] == null) { - String textureLink = bossFloorHeads[i - 1]; - - String b64Decoded = "{\"textures\":{\"SKIN\":{\"url\":\"http://textures.minecraft.net/texture/" + textureLink + "\"}}}"; - String b64Encoded = new String(Base64.getEncoder().encode(b64Decoded.getBytes())); - - ItemStack stack = new ItemStack(Items.skull, 1, 3); - NBTTagCompound nbt = new NBTTagCompound(); - NBTTagCompound skullOwner = new NBTTagCompound(); - NBTTagCompound properties = new NBTTagCompound(); - NBTTagList textures = new NBTTagList(); - NBTTagCompound textures_0 = new NBTTagCompound(); - - String uuid = UUID.nameUUIDFromBytes(b64Encoded.getBytes()).toString(); - skullOwner.setString("Id", uuid); - skullOwner.setString("Name", uuid); - - textures_0.setString("Value", b64Encoded); - textures.appendTag(textures_0); - - properties.setTag("textures", textures); - skullOwner.setTag("Properties", properties); - nbt.setTag("SkullOwner", skullOwner); - stack.setTagCompound(nbt); - - BOSS_HEADS[i - 1] = stack; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(x - 4, y + 10 + 20 * (i - 1), 0); - GlStateManager.scale(1.3f, 1.3f, 1); - Utils.drawItemStack(BOSS_HEADS[i - 1], 0, 0); - GlStateManager.popMatrix(); - - Utils.renderAlignedString(String.format(EnumChatFormatting.YELLOW + "%s (" + (onMasterMode ? "M" : "F") + "%d) ", bossFloorArr[i - 1], i), - EnumChatFormatting.WHITE.toString() + (int) compl, - x + 16, y + 18 + 20 * (i - 1), sectionWidth - 15); - - } - } - - //Skills - { - int x = guiLeft + 298; - int y = guiTop + 27; - - //Gui.drawRect(x, y, x+120, y+147, 0xffffffff); - - Utils.renderShadowedString(EnumChatFormatting.DARK_PURPLE + "Class Levels", - x + sectionWidth / 2, y, sectionWidth); - - JsonElement activeClassElement = Utils.getElement(profileInfo, "dungeons.selected_dungeon_class"); - String activeClass = null; - if (activeClassElement instanceof JsonPrimitive && ((JsonPrimitive) activeClassElement).isString()) { - activeClass = activeClassElement.getAsString(); - } - - for (int i = 0; i < dungSkillsName.length; i++) { - String skillName = dungSkillsName[i]; - - HashMap levelObjClasses = levelObjClasseses.computeIfAbsent(profileId, k -> new HashMap<>()); - if (!levelObjClasses.containsKey(skillName)) { - float cataXp = Utils.getElementAsFloat(Utils.getElement(profileInfo, - "dungeons.player_classes." + skillName.toLowerCase() + ".experience"), 0); - ProfileViewer.Level levelObj = ProfileViewer.getLevel(Utils.getElement(leveling, "catacombs").getAsJsonArray(), - cataXp, 50, false); - levelObjClasses.put(skillName, levelObj); - } - - String colour = EnumChatFormatting.WHITE.toString(); - if (skillName.toLowerCase().equals(activeClass)) { - colour = EnumChatFormatting.GREEN.toString(); - } - - ProfileViewer.Level levelObj = levelObjClasses.get(skillName); - - renderXpBar(colour + skillName, dungSkillsStack[i], x, y + 20 + 29 * i, sectionWidth, levelOb