diff options
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java | 919 |
1 files changed, 491 insertions, 428 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java index 44d5b7ef..3955b35f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/GuiPriceGraph.java @@ -31,462 +31,525 @@ import java.util.zip.GZIPOutputStream; public class GuiPriceGraph extends GuiScreen { - private static final Gson GSON = new GsonBuilder().create(); - private static final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); - private final ResourceLocation TEXTURE; - private static final int X_SIZE = 364; - private static final int Y_SIZE = 215; - private Data dataPoints; - private float highestValue; - private long firstTime; - private long lastTime; - private Float lowestValue = null; - private String itemName; - private final String itemId; - private int guiLeft; - private int guiTop; - private ItemStack itemStack = null; - private boolean loaded = false; - /** - * 0 = hour - * 1 = day - * 2 = week - * 3 = all - * 4 = custom - **/ - private int mode = NotEnoughUpdates.INSTANCE.config.ahGraph.defaultMode; - private long customStart = 0; - private long customEnd = 0; - private boolean customSelecting = false; + private static final Gson GSON = new GsonBuilder().create(); + private static final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); + private final ResourceLocation TEXTURE; + private static final int X_SIZE = 364; + private static final int Y_SIZE = 215; + private Data dataPoints; + private float highestValue; + private long firstTime; + private long lastTime; + private Float lowestValue = null; + private String itemName; + private final String itemId; + private int guiLeft; + private int guiTop; + private ItemStack itemStack = null; + private boolean loaded = false; + /** + * 0 = hour + * 1 = day + * 2 = week + * 3 = all + * 4 = custom + **/ + private int mode = NotEnoughUpdates.INSTANCE.config.ahGraph.defaultMode; + private long customStart = 0; + private long customEnd = 0; + private boolean customSelecting = false; - public GuiPriceGraph(String itemId) { - switch (NotEnoughUpdates.INSTANCE.config.ahGraph.graphStyle) { - case 1: - TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_dark.png"); - break; - case 2: - TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_phqdark.png"); - break; - case 3: - TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_fsr.png"); - break; - default: - TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui.png"); - break; - } - this.itemId = itemId; - if (NotEnoughUpdates.INSTANCE.manager.getItemInformation().containsKey(itemId)) { - JsonObject itemInfo = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(itemId); - itemName = itemInfo.get("displayname").getAsString(); - itemStack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(itemInfo); - } - loadData(); - } + public GuiPriceGraph(String itemId) { + switch (NotEnoughUpdates.INSTANCE.config.ahGraph.graphStyle) { + case 1: + TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_dark.png"); + break; + case 2: + TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_phqdark.png"); + break; + case 3: + TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui_fsr.png"); + break; + default: + TEXTURE = new ResourceLocation("notenoughupdates:price_graph_gui/price_information_gui.png"); + break; + } + this.itemId = itemId; + if (NotEnoughUpdates.INSTANCE.manager.getItemInformation().containsKey(itemId)) { + JsonObject itemInfo = NotEnoughUpdates.INSTANCE.manager.getItemInformation().get(itemId); + itemName = itemInfo.get("displayname").getAsString(); + itemStack = NotEnoughUpdates.INSTANCE.manager.jsonToStack(itemInfo); + } + loadData(); + } - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - guiLeft = (width - X_SIZE) / 2; - guiTop = (height - Y_SIZE) / 2; + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + guiLeft = (width - X_SIZE) / 2; + guiTop = (height - Y_SIZE) / 2; - Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); - GlStateManager.color(1, 1, 1, 1); - Utils.drawTexturedRect(guiLeft, guiTop, X_SIZE, Y_SIZE, - 0, X_SIZE / 512f, 0, Y_SIZE / 512f, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft + 245, guiTop + 17, 16, 16, - 0, 16 / 512f, (mode == 0 ? 215 : 231) / 512f, (mode == 0 ? 231 : 247) / 512f, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft + 263, guiTop + 17, 16, 16, - 16 / 512f, 32 / 512f, (mode == 1 ? 215 : 231) / 512f, (mode == 1 ? 231 : 247) / 512f, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft + 281, guiTop + 17, 16, 16, - 32 / 512f, 48 / 512f, (mode == 2 ? 215 : 231) / 512f, (mode == 2 ? 231 : 247) / 512f, GL11.GL_NEAREST); - Utils.drawTexturedRect(guiLeft + 299, guiTop + 17, 16, 16, - 48 / 512f, 64 / 512f, (mode == 3 ? 215 : 231) / 512f, (mode == 3 ? 231 : 247) / 512f, GL11.GL_NEAREST); + Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); + GlStateManager.color(1, 1, 1, 1); + Utils.drawTexturedRect(guiLeft, guiTop, X_SIZE, Y_SIZE, + 0, X_SIZE / 512f, 0, Y_SIZE / 512f, GL11.GL_NEAREST + ); + Utils.drawTexturedRect(guiLeft + 245, guiTop + 17, 16, 16, + 0, 16 / 512f, (mode == 0 ? 215 : 231) / 512f, (mode == 0 ? 231 : 247) / 512f, GL11.GL_NEAREST + ); + Utils.drawTexturedRect(guiLeft + 263, guiTop + 17, 16, 16, + 16 / 512f, 32 / 512f, (mode == 1 ? 215 : 231) / 512f, (mode == 1 ? 231 : 247) / 512f, GL11.GL_NEAREST + ); + Utils.drawTexturedRect(guiLeft + 281, guiTop + 17, 16, 16, + 32 / 512f, 48 / 512f, (mode == 2 ? 215 : 231) / 512f, (mode == 2 ? 231 : 247) / 512f, GL11.GL_NEAREST + ); + Utils.drawTexturedRect(guiLeft + 299, guiTop + 17, 16, 16, + 48 / 512f, 64 / 512f, (mode == 3 ? 215 : 231) / 512f, (mode == 3 ? 231 : 247) / 512f, GL11.GL_NEAREST + ); - if (itemName != null && itemStack != null) { - Utils.drawItemStack(itemStack, guiLeft + 16, guiTop + 11); - Utils.drawStringScaledMax(itemName, Minecraft.getMinecraft().fontRendererObj, guiLeft + 35, guiTop + 13, false, - 0xffffff, 1.77f, 208); - } + if (itemName != null && itemStack != null) { + Utils.drawItemStack(itemStack, guiLeft + 16, guiTop + 11); + Utils.drawStringScaledMax(itemName, Minecraft.getMinecraft().fontRendererObj, guiLeft + 35, guiTop + 13, false, + 0xffffff, 1.77f, 208 + ); + } - if (!loaded) - Utils.drawStringCentered("Loading...", Minecraft.getMinecraft().fontRendererObj, - guiLeft + 166, guiTop + 116, false, 0xffffff00); - else if (dataPoints == null || dataPoints.get() == null || dataPoints.get().size() <= 1) - Utils.drawStringCentered("No data found.", Minecraft.getMinecraft().fontRendererObj, - guiLeft + 166, guiTop + 116, false, 0xffff0000); - else { + if (!loaded) + Utils.drawStringCentered("Loading...", Minecraft.getMinecraft().fontRendererObj, + guiLeft + 166, guiTop + 116, false, 0xffffff00 + ); + else if (dataPoints == null || dataPoints.get() == null || dataPoints.get().size() <= 1) + Utils.drawStringCentered("No data found.", Minecraft.getMinecraft().fontRendererObj, + guiLeft + 166, guiTop + 116, false, 0xffff0000 + ); + else { - int graphColor = SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.ahGraph.graphColor); - int graphColor2 = SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.ahGraph.graphColor2); - Integer lowestDist = null; - Long lowestDistTime = null; - HashMap<Integer, Integer> secondLineData = new HashMap<>(); - for (int i = (dataPoints.isBz() ? 1 : 0); i >= 0; i--) { - Utils.drawGradientRect(0, guiLeft + 17, guiTop + 35, guiLeft + 315, guiTop + 198, - changeAlpha(i == 0 ? graphColor : graphColor2, 120), changeAlpha(i == 0 ? graphColor : graphColor2, 10)); - Integer prevX = null; - Integer prevY = null; - for (Long time : dataPoints.get().keySet()) { - float price = dataPoints.isBz() ? i == 0 ? dataPoints.bz.get(time).b : dataPoints.bz.get(time).s : dataPoints.ah.get(time); - int xPos = (int) map(time, firstTime, lastTime, guiLeft + 17, guiLeft + 315); - int yPos = (int) map(price, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198); - if (prevX != null) { - Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); - GlStateManager.color(1, 1, 1, 1); - Utils.drawTexturedQuad(prevX, prevY, xPos, yPos, xPos, guiTop + 35, prevX, guiTop + 35, 18 / 512f, 19 / 512f, - 36 / 512f, 37 / 512f, GL11.GL_NEAREST); - if (i == 0) { - Utils.drawLine(prevX, prevY + 0.5f, xPos, yPos + 0.5f, 2, graphColor); - if (dataPoints.isBz()) - Utils.drawLine(prevX, secondLineData.get(prevX) + 0.5f, xPos, secondLineData.get(xPos) + 0.5f, 2, graphColor2); - } - } - if (i == 1) - secondLineData.put(xPos, yPos); - if (mouseX >= guiLeft + 17 && mouseX <= guiLeft + 315 && mouseY >= guiTop + 35 && mouseY <= guiTop + 198) { - int dist = Math.abs(mouseX - xPos); - if (lowestDist == null || dist < lowestDist) { - lowestDist = dist; - lowestDistTime = time; - } - } - prevX = xPos; - prevY = yPos; - } - } - boolean showDays = lastTime - firstTime > 86400; - int prevNum = showDays ? Date.from(Instant.ofEpochSecond(firstTime)).getDate() : Date.from(Instant.ofEpochSecond(firstTime)).getHours(); - long prevXPos = -100; - for (long time = firstTime; time <= lastTime; time += showDays ? 3600 : 60) { - int num = showDays ? Date.from(Instant.ofEpochSecond(time)).getDate() : Date.from(Instant.ofEpochSecond(time)).getHours(); - if (num != prevNum) { - int xPos = (int) map(time, firstTime, lastTime, guiLeft + 17, guiLeft + 315); - if (Math.abs(prevXPos - xPos) > 30) { - Utils.drawStringCentered(String.valueOf(num), Minecraft.getMinecraft().fontRendererObj, - xPos, guiTop + 206, false, 0x8b8b8b); - prevXPos = xPos; - } - prevNum = num; - } - } - for (int i = 0; i <= 6; i++) { - long price = (long) map(i, 0, 6, highestValue, lowestValue); - String formattedPrice = formatPrice(price); - Utils.drawStringF(formattedPrice, Minecraft.getMinecraft().fontRendererObj, guiLeft + 320, - (float) map(i, 0, 6, guiTop + 35, guiTop + 198) - - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2f, - false, 0x8b8b8b); - } - if (customSelecting) { - Utils.drawDottedLine(customStart, guiTop + 36, customStart, guiTop + 197, 2, 10, 0xFFc6c6c6); - Utils.drawDottedLine(customEnd, guiTop + 36, customEnd, guiTop + 197, 2, 10, 0xFFc6c6c6); - Utils.drawDottedLine(customStart, guiTop + 36, customEnd, guiTop + 36, 2, 10, 0xFFc6c6c6); - Utils.drawDottedLine(customStart, guiTop + 197, customEnd, guiTop + 197, 2, 10, 0xFFc6c6c6); - } - if (lowestDist != null && !customSelecting) { - float price = dataPoints.isBz() ? dataPoints.bz.get(lowestDistTime).b : dataPoints.ah.get(lowestDistTime); - Float price2 = dataPoints.isBz() ? dataPoints.bz.get(lowestDistTime).s : null; - int xPos = (int) map(lowestDistTime, firstTime, lastTime, guiLeft + 17, guiLeft + 315); - int yPos = (int) map(price, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198); - int yPos2 = price2 != null ? (int) map(price2, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198) : 0; + int graphColor = SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.ahGraph.graphColor); + int graphColor2 = SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.ahGraph.graphColor2); + Integer lowestDist = null; + Long lowestDistTime = null; + HashMap<Integer, Integer> secondLineData = new HashMap<>(); + for (int i = (dataPoints.isBz() ? 1 : 0); i >= 0; i--) { + Utils.drawGradientRect(0, guiLeft + 17, guiTop + 35, guiLeft + 315, guiTop + 198, + changeAlpha(i == 0 ? graphColor : graphColor2, 120), changeAlpha(i == 0 ? graphColor : graphColor2, 10) + ); + Integer prevX = null; + Integer prevY = null; + for (Long time : dataPoints.get().keySet()) { + float price = dataPoints.isBz() + ? i == 0 ? dataPoints.bz.get(time).b : dataPoints.bz.get(time).s + : dataPoints.ah.get(time); + int xPos = (int) map(time, firstTime, lastTime, guiLeft + 17, guiLeft + 315); + int yPos = (int) map(price, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198); + if (prevX != null) { + Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); + GlStateManager.color(1, 1, 1, 1); + Utils.drawTexturedQuad( + prevX, + prevY, + xPos, + yPos, + xPos, + guiTop + 35, + prevX, + guiTop + 35, + 18 / 512f, + 19 / 512f, + 36 / 512f, + 37 / 512f, + GL11.GL_NEAREST + ); + if (i == 0) { + Utils.drawLine(prevX, prevY + 0.5f, xPos, yPos + 0.5f, 2, graphColor); + if (dataPoints.isBz()) + Utils.drawLine( + prevX, + secondLineData.get(prevX) + 0.5f, + xPos, + secondLineData.get(xPos) + 0.5f, + 2, + graphColor2 + ); + } + } + if (i == 1) + secondLineData.put(xPos, yPos); + if (mouseX >= guiLeft + 17 && mouseX <= guiLeft + 315 && mouseY >= guiTop + 35 && mouseY <= guiTop + 198) { + int dist = Math.abs(mouseX - xPos); + if (lowestDist == null || dist < lowestDist) { + lowestDist = dist; + lowestDistTime = time; + } + } + prevX = xPos; + prevY = yPos; + } + } + boolean showDays = lastTime - firstTime > 86400; + int prevNum = showDays ? Date.from(Instant.ofEpochSecond(firstTime)).getDate() : Date.from(Instant.ofEpochSecond( + firstTime)).getHours(); + long prevXPos = -100; + for (long time = firstTime; time <= lastTime; time += showDays ? 3600 : 60) { + int num = showDays + ? Date.from(Instant.ofEpochSecond(time)).getDate() + : Date.from(Instant.ofEpochSecond(time)).getHours(); + if (num != prevNum) { + int xPos = (int) map(time, firstTime, lastTime, guiLeft + 17, guiLeft + 315); + if (Math.abs(prevXPos - xPos) > 30) { + Utils.drawStringCentered(String.valueOf(num), Minecraft.getMinecraft().fontRendererObj, + xPos, guiTop + 206, false, 0x8b8b8b + ); + prevXPos = xPos; + } + prevNum = num; + } + } + for (int i = 0; i <= 6; i++) { + long price = (long) map(i, 0, 6, highestValue, lowestValue); + String formattedPrice = formatPrice(price); + Utils.drawStringF(formattedPrice, Minecraft.getMinecraft().fontRendererObj, guiLeft + 320, + (float) map(i, 0, 6, guiTop + 35, guiTop + 198) + - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2f, + false, 0x8b8b8b + ); + } + if (customSelecting) { + Utils.drawDottedLine(customStart, guiTop + 36, customStart, guiTop + 197, 2, 10, 0xFFc6c6c6); + Utils.drawDottedLine(customEnd, guiTop + 36, customEnd, guiTop + 197, 2, 10, 0xFFc6c6c6); + Utils.drawDottedLine(customStart, guiTop + 36, customEnd, guiTop + 36, 2, 10, 0xFFc6c6c6); + Utils.drawDottedLine(customStart, guiTop + 197, customEnd, guiTop + 197, 2, 10, 0xFFc6c6c6); + } + if (lowestDist != null && !customSelecting) { + float price = dataPoints.isBz() ? dataPoints.bz.get(lowestDistTime).b : dataPoints.ah.get(lowestDistTime); + Float price2 = dataPoints.isBz() ? dataPoints.bz.get(lowestDistTime).s : null; + int xPos = (int) map(lowestDistTime, firstTime, lastTime, guiLeft + 17, guiLeft + 315); + int yPos = (int) map(price, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198); + int yPos2 = price2 != null + ? (int) map(price2, highestValue + 10d, lowestValue - 10d, guiTop + 35, guiTop + 198) + : 0; - Utils.drawLine(xPos, guiTop + 35, xPos, guiTop + 198, 2, 0x4D8b8b8b); - Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); - GlStateManager.color(1, 1, 1, 1); - Utils.drawTexturedRect(xPos - 2.5f, yPos - 2.5f, 5, 5, - 0, 5 / 512f, 247 / 512f, 252 / 512f, GL11.GL_NEAREST); - if (price2 != null) { - Utils.drawTexturedRect(xPos - 2.5f, yPos2 - 2.5f, 5, 5, - 0, 5 / 512f, 247 / 512f, 252 / 512f, GL11.GL_NEAREST); - } + Utils.drawLine(xPos, guiTop + 35, xPos, guiTop + 198, 2, 0x4D8b8b8b); + Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE); + GlStateManager.color(1, 1, 1, 1); + Utils.drawTexturedRect(xPos - 2.5f, yPos - 2.5f, 5, 5, + 0, 5 / 512f, 247 / 512f, 252 / 512f, GL11.GL_NEAREST + ); + if (price2 != null) { + Utils.drawTexturedRect(xPos - 2.5f, yPos2 - 2.5f, 5, 5, + 0, 5 / 512f, 247 / 512f, 252 / 512f, GL11.GL_NEAREST + ); + } - Date date = Date.from(Instant.ofEpochSecond(lowestDistTime)); - SimpleDateFormat displayFormat = new SimpleDateFormat("'§b'd MMMMM yyyy '§eat§b' HH:mm"); - NumberFormat nf = NumberFormat.getInstance(); - ArrayList<String> text = new ArrayList<>(); - text.add(displayFormat.format(date)); - if (dataPoints.isBz()) { - text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Bazaar Insta-Buy: " + - EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price)); - text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Bazaar Insta-Sell: " + - EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price2)); - } else { - text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Lowest BIN: " + - EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price)); - } - drawHoveringText(text, xPos, yPos); - } - } + Date date = Date.from(Instant.ofEpochSecond(lowestDistTime)); + SimpleDateFormat displayFormat = new SimpleDateFormat("'§b'd MMMMM yyyy '§eat§b' HH:mm"); + NumberFormat nf = NumberFormat.getInstance(); + ArrayList<String> text = new ArrayList<>(); + text.add(displayFormat.format(date)); + if (dataPoints.isBz()) { + text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Bazaar Insta-Buy: " + + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price)); + text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Bazaar Insta-Sell: " + + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price2)); + } else { + text.add(EnumChatFormatting.YELLOW + "" + EnumChatFormatting.BOLD + "Lowest BIN: " + + EnumChatFormatting.GOLD + EnumChatFormatting.BOLD + nf.format(price)); + } + drawHoveringText(text, xPos, yPos); + } + } - if (mouseY >= guiTop + 17 && mouseY <= guiTop + 35 && mouseX >= guiLeft + 244 && mouseX <= guiLeft + 316) { - int index = (mouseX - guiLeft - 245) / 18; - switch (index) { - case 0: - Gui.drawRect(guiLeft + 245, guiTop + 17, guiLeft + 261, guiTop + 33, 0x80ffffff); - drawHoveringText(Collections.singletonList("Show 1 Hour"), mouseX, mouseY); - break; - case 1: - Gui.drawRect(guiLeft + 263, guiTop + 17, guiLeft + 279, guiTop + 33, 0x80ffffff); - drawHoveringText(Collections.singletonList("Show 1 Day"), mouseX, mouseY); - break; - case 2: - Gui.drawRect(guiLeft + 281, guiTop + 17, guiLeft + 297, guiTop + 33, 0x80ffffff); - drawHoveringText(Collections.singletonList("Show 1 Week"), mouseX, mouseY); - break; - case 3: - Gui.drawRect(guiLeft + 299, guiTop + 17, guiLeft + 315, guiTop + 33, 0x80ffffff); - drawHoveringText(Collections.singletonList("Show All"), mouseX, mouseY); - break; - } - } - } + if (mouseY >= guiTop + 17 && mouseY <= guiTop + 35 && mouseX >= guiLeft + 244 && mouseX <= guiLeft + 316) { + int index = (mouseX - guiLeft - 245) / 18; + switch (index) { + case 0: + Gui.drawRect(guiLeft + 245, guiTop + 17, guiLeft + 261, guiTop + 33, 0x80ffffff); + drawHoveringText(Collections.singletonList("Show 1 Hour"), mouseX, mouseY); + break; + case 1: + Gui.drawRect(guiLeft + 263, guiTop + 17, guiLeft + 279, guiTop + 33, 0x80ffffff); + drawHoveringText(Collections.singletonList("Show 1 Day"), mouseX, mouseY); + break; + case 2: + Gui.drawRect(guiLeft + 281, guiTop + 17, guiLeft + 297, guiTop + 33, 0x80ffffff); + drawHoveringText(Collections.singletonList("Show 1 Week"), mouseX, mouseY); + break; + case 3: + Gui.drawRect(guiLeft + 299, guiTop + 17, guiLeft + 315, guiTop + 33, 0x80ffffff); + drawHoveringText(Collections.singletonList("Show All"), mouseX, mouseY); + break; + } + } + } - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { - super.mouseClicked(mouseX, mouseY, mouseButton); - if (mouseY >= guiTop + 17 && mouseY <= guiTop + 35 && mouseX >= guiLeft + 244 && mouseX <= guiLeft + 316) { - mode = (mouseX - guiLeft - 245) / 18; - loadData(); - } else if (mouseY >= guiTop + 35 && mouseY <= guiTop + 198 && mouseX >= guiLeft + 17 && mouseX <= guiLeft + 315) { - customSelecting = true; - customStart = mouseX; - customEnd = mouseX; - } - } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + if (mouseY >= guiTop + 17 && mouseY <= guiTop + 35 && mouseX >= guiLeft + 244 && mouseX <= guiLeft + 316) { + mode = (mouseX - guiLeft - 245) / 18; + loadData(); + } else if (mouseY >= guiTop + 35 && mouseY <= guiTop + 198 && mouseX >= guiLeft + 17 && mouseX <= guiLeft + 315) { + customSelecting = true; + customStart = mouseX; + customEnd = mouseX; + } + } - @Override - protected void mouseReleased(int mouseX, int mouseY, int state) { - super.mouseReleased(mouseX, mouseY, state); - if (customSelecting) { - customSelecting = false; - customStart = (int) map(customStart, guiLeft + 17, guiLeft + 315, firstTime, lastTime); - customEnd = (int) map(mouseX, guiLeft + 17, guiLeft + 315, firstTime, lastTime); - if (customStart > customEnd) { - long temp = customStart; - customStart = customEnd; - customEnd = temp; - } - if (customEnd - customStart != 0) { - mode = 4; - loadData(); - } - } - } + @Override + protected void mouseReleased(int mouseX, int mouseY, int state) { + super.mouseReleased(mouseX, mouseY, state); + if (customSelecting) { + customSelecting = false; + customStart = (int) map(customStart, guiLeft + 17, guiLeft + 315, firstTime, lastTime); + customEnd = (int) map(mouseX, guiLeft + 17, guiLeft + 315, firstTime, lastTime); + if (customStart > customEnd) { + long temp = customStart; + customStart = customEnd; + customEnd = temp; + } + if (customEnd - customStart != 0) { + mode = 4; + loadData(); + } + } + } - @Override - protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) { - super.mouseClickMove(mouseX, mouseY, clickedMouseButton, timeSinceLastClick); - if (customSelecting) { - customEnd = mouseX < guiLeft + 18 ? guiLeft + 18 : Math.min(mouseX, guiLeft + 314); - } - } + @Override + protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) { + super.mouseClickMove(mouseX, mouseY, clickedMouseButton, timeSinceLastClick); + if (customSelecting) { + customEnd = mouseX < guiLeft + 18 ? guiLeft + 18 : Math.min(mouseX, guiLeft + 314); + } + } - private void loadData() { - dataPoints = null; - loaded = false; - new Thread(() -> { - File dir = new File("config/notenoughupdates/prices"); - if (!dir.exists()) { - loaded = true; - return; - } - File[] files = dir.listFiles(); - Data data = new Data(); - if (files == null) return; - for (File file : files) { - if (!file.getName().endsWith(".gz")) continue; - HashMap<String, Data> data2 = load(file); - if (data2 == null || !data2.containsKey(itemId)) continue; - if (data2.get(itemId).isBz()) { - if (data.bz == null) data.bz = data2.get(itemId).bz; - else data.bz.putAll(data2.get(itemId).bz); - } else if (data.ah == null) data.ah = data2.get(itemId).ah; - else data.ah.putAll(data2.get(itemId).ah); - } - if (data.get() != null && !data.get().isEmpty()) { - if (mode < 3) - data = new Data(new TreeMap<>(data.get().entrySet().stream() - .filter(e -> e.getKey() > System.currentTimeMillis() / 1000 - (mode == 0 ? 3600 : mode == 1 ? 86400 : 604800)) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))), data.isBz()); - else if (mode == 4) - data = new Data(new TreeMap<>(data.get().entrySet().stream() - .filter(e -> e.getKey() >= customStart && e.getKey() <= customEnd) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))), data.isBz()); - if (data.get() == null || data.get().isEmpty()) { - loaded = true; - return; - } - dataPoints = trimData(data); - firstTime = dataPoints.get().firstKey(); - lastTime = dataPoints.get().lastKey(); - highestValue = 0; - lowestValue = null; - for (long key : dataPoints.get().keySet()) { - float value1 = dataPoints.isBz() ? dataPoints.bz.get(key).b : dataPoints.ah.get(key); - Float value2 = dataPoints.isBz() ? dataPoints.bz.get(key).s : null; - if (value1 > highestValue) { - highestValue = value1; - } - if (value2 != null && value2 > highestValue) { - highestValue = value2; - } - if (lowestValue == null || value1 < lowestValue) { - lowestValue = value1; - } - if (value2 != null && value2 < lowestValue) { - lowestValue = value2; - } - } - } - loaded = true; - }).start(); - } + private void loadData() { + dataPoints = null; + loaded = false; + new Thread(() -> { + File dir = new File("config/notenoughupdates/prices"); + if (!dir.exists()) { + loaded = true; + return; + } + File[] files = dir.listFiles(); + Data data = new Data(); + if (files == null) return; + for (File file : files) { + if (!file.getName().endsWith(".gz")) continue; + HashMap<String, Data> data2 = load(file); + if (data2 == null || !data2.containsKey(itemId)) continue; + if (data2.get(itemId).isBz()) { + if (data.bz == null) data.bz = data2.get(itemId).bz; + else data.bz.putAll(data2.get(itemId).bz); + } else if (data.ah == null) data.ah = data2.get(itemId).ah; + else data.ah.putAll(data2.get(itemId).ah); + } + if (data.get() != null && !data.get().isEmpty()) { + if (mode < 3) + data = new Data( + new TreeMap<>(data.get().entrySet().stream() + .filter(e -> e.getKey() > System.currentTimeMillis() / 1000 - + (mode == 0 ? 3600 : mode == 1 ? 86400 : 604800)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))), + data.isBz() + ); + else if (mode == 4) + data = new Data( + new TreeMap<>(data.get().entrySet().stream() + .filter(e -> e.getKey() >= customStart && e.getKey() <= customEnd) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))), + data.isBz() + ); + if (data.get() == null || data.get().isEmpty()) { + loaded = true; + return; + } + dataPoints = trimData(data); + firstTime = dataPoints.get().firstKey(); + lastTime = dataPoints.get().lastKey(); + highestValue = 0; + lowestValue = null; + for (long key : dataPoints.get().keySet()) { + float value1 = dataPoints.isBz() ? dataPoints.bz.get(key).b : dataPoints.ah.get(key); + Float value2 = dataPoints.isBz() ? dataPoints.bz.get(key).s : null; + if (value1 > highestValue) { + highestValue = value1; + } + if (value2 != null && value2 > highestValue) { + highestValue = value2; + } + if (lowestValue == null || value1 < lowestValue) { + lowestValue = value1; + } + if (value2 != null && value2 < lowestValue) { + lowestValue = value2; + } + } + } + loaded = true; + }).start(); + } - public static void addToCache(JsonObject items, boolean bazaar) { - if (!NotEnoughUpdates.INSTANCE.config.ahGraph.graphEnabled) return; - try { - File dir = new File("config/notenoughupdates/prices"); - if (!dir.exists() && !dir.mkdir()) return; - File[] files = dir.listFiles(); - if (files != null) - for (File file : files) { - if (!file.getName().endsWith(".gz")) continue; - if (file.lastModified() < System.currentTimeMillis() - NotEnoughUpdates.INSTANCE.config.ahGraph.dataRetention * 86400000L) - file.delete(); - } - Date date = new Date(); - Long epochSecond = date.toInstant().getEpochSecond(); - File file = new File(dir, "prices_" + format.format(date) + ".gz"); - HashMap<String, Data> prices = new HashMap<>(); - if (file.exists()) - prices = load(file); - if (prices == null) return; - for (Map.Entry<String, JsonElement> item : items.entrySet()) { - if (prices.containsKey(item.getKey())) { - if (bazaar && item.getValue().getAsJsonObject().has("curr_buy") && item.getValue().getAsJsonObject().has("curr_sell")) - prices.get(item.getKey()).bz.put(epochSecond, new BzData(item.getValue().getAsJsonObject().get("curr_buy").getAsFloat(), - item.getValue().getAsJsonObject().get("curr_sell").getAsFloat())); - else if (!bazaar) - prices.get(item.getKey()).ah.put(epochSecond, item.getValue().getAsInt()); - } else { - TreeMap<Long, Object> mapData = new TreeMap<>(); - if (bazaar && item.getValue().getAsJsonObject().has("curr_buy") && item.getValue().getAsJsonObject().has("curr_sell")) - mapData.put(epochSecond, new BzData(item.getValue().getAsJsonObject().get("curr_buy").getAsFloat(), - item.getValue().getAsJsonObject().get("curr_sell").getAsFloat())); - else if (!bazaar) - mapData.put(epochSecond, item.getValue().getAsLong()); - prices.put(item.getKey(), new Data(mapData, bazaar)); - } - } - //noinspection ResultOfMethodCallIgnored - file.createNewFile(); - try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new GZIPOutputStream(new FileOutputStream(file)), StandardCharsets.UTF_8))) { - writer.write(GSON.toJson(prices)); - } - } catch (Exception e) { - e.printStackTrace(); - } - } + public static void addToCache(JsonObject items, boolean bazaar) { + if (!NotEnoughUpdates.INSTANCE.config.ahGraph.graphEnabled) return; + try { + File dir = new File("config/notenoughupdates/prices"); + if (!dir.exists() && !dir.mkdir()) return; + File[] files = dir.listFiles(); + if (files != null) + for (File file : files) { + if (!file.getName().endsWith(".gz")) continue; + if (file.lastModified() < + System.currentTimeMillis() - NotEnoughUpdates.INSTANCE.config.ahGraph.dataRetention * 86400000L) + file.delete(); + } + Date date = new Date(); + Long epochSecond = date.toInstant().getEpochSecond(); + File file = new File(dir, "prices_" + format.format(date) + ".gz"); + HashMap<String, Data> prices = new HashMap<>(); + if (file.exists()) + prices = load(file); + if (prices == null) return; + for (Map.Entry<String, JsonElement> item : items.entrySet()) { + if (prices.containsKey(item.getKey())) { + if (bazaar && item.getValue().getAsJsonObject().has("curr_buy") && item.getValue().getAsJsonObject().has( + "curr_sell")) + prices.get(item.getKey()).bz.put(epochSecond, new BzData( + item.getValue().getAsJsonObject().get("curr_buy").getAsFloat(), + item.getValue().getAsJsonObject().get("curr_sell").getAsFloat() + )); + else if (!bazaar) + prices.get(item.getKey()).ah.put(epochSecond, item.getValue().getAsInt()); + } else { + TreeMap<Long, Object> mapData = new TreeMap<>(); + if (bazaar && item.getValue().getAsJsonObject().has("curr_buy") && item.getValue().getAsJsonObject().has( + "curr_sell")) + mapData.put(epochSecond, new BzData( + item.getValue().getAsJsonObject().get("curr_buy").getAsFloat(), + item.getValue().getAsJsonObject().get("curr_sell").getAsFloat() + )); + else if (!bazaar) + mapData.put(epochSecond, item.getValue().getAsLong()); + prices.put(item.getKey(), new Data(mapData, bazaar)); + } + } + //noinspection ResultOfMethodCallIgnored + file.createNewFile(); + try ( + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( + new GZIPOutputStream(new FileOutputStream(file)), + StandardCharsets.UTF_8 + )) + ) { + writer.write(GSON.toJson(prices)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } - private Data trimData(Data data) { - long first = data.get().firstKey(); - long last = data.get().lastKey(); - Data trimmed = new Data(); - if (data.isBz()) - trimmed.bz = new TreeMap<>(); - else - trimmed.ah = new TreeMap<>(); - int zones = NotEnoughUpdates.INSTANCE.config.ahGraph.graphZones; - Long[] dataArray = !data.isBz() ? data.ah.keySet().toArray(new Long[0]) : data.bz.keySet().toArray(new Long[0]); - int prev = 0; - for (int i = 0; i < zones; i++) { - long lowest = (long) map(i, 0, zones, first, last); - long highest = (long) map(i + 1, 0, zones, first, last); - int amount = 0; - double sumBuy = 0; - double sumSell = 0; - for (int l = prev; l < dataArray.length; l++) { - if (dataArray[l] >= lowest && dataArray[l] <= highest) { - amount++; - sumBuy += data.isBz() ? data.bz.get(dataArray[l]).b : data.ah.get(dataArray[l]); - if (data.isBz()) sumSell += data.bz.get(dataArray[l]).s; - prev = l + 1; - } else if (dataArray[l] > highest) - break; - } - if (amount > 0) { - if (data.isBz()) - trimmed.bz.put(lowest, new BzData((float) (sumBuy / amount), (float) (sumSell / amount))); - else - trimmed.ah.put(lowest, (int) (sumBuy / amount)); - } - } - return trimmed; - } + private Data trimData(Data data) { + long first = data.get().firstKey(); + long last = data.get().lastKey(); + Data trimmed = new Data(); + if (data.isBz()) + trimmed.bz = new TreeMap<>(); + else + trimmed.ah = new TreeMap<>(); + int zones = NotEnoughUpdates.INSTANCE.config.ahGraph.graphZones; + Long[] dataArray = !data.isBz() ? data.ah.keySet().toArray(new Long[0]) : data.bz.keySet().toArray(new Long[0]); + int prev = 0; + for (int i = 0; i < zones; i++) { + long lowest = (long) map(i, 0, zones, first, last); + long highest = (long) map(i + 1, 0, zones, first, last); + int amount = 0; + double sumBuy = 0; + double sumSell = 0; + for (int l = prev; l < dataArray.length; l++) { + if (dataArray[l] >= lowest && dataArray[l] <= highest) { + amount++; + sumBuy += data.isBz() ? data.bz.get(dataArray[l]).b : data.ah.get(dataArray[l]); + if (data.isBz()) sumSell += data.bz.get(dataArray[l]).s; + prev = l + 1; + } else if (dataArray[l] > highest) + break; + } + if (amount > 0) { + if (data.isBz()) + trimmed.bz.put(lowest, new BzData((float) (sumBuy / amount), (float) (sumSell / amount))); + else + trimmed.ah.put(lowest, (int) (sumBuy / amount)); + } + } + return trimmed; |
