From 78714fc2fddb99ba9f1239d7d0d95837a312cbb8 Mon Sep 17 00:00:00 2001 From: Cobble8 <41165207+Cobble8@users.noreply.github.com> Date: Fri, 21 Oct 2022 10:28:32 -0400 Subject: Made cool kill/death stuff in profile viewer (#376) --- .../notenoughupdates/profileviewer/ExtraPage.java | 97 ++++++++++++++++++---- .../profileviewer/GuiProfileViewer.java | 5 ++ 2 files changed, 84 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ExtraPage.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ExtraPage.java index f8da4144..a0af254c 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ExtraPage.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ExtraPage.java @@ -31,8 +31,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import org.apache.commons.lang3.text.WordUtils; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; +import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; @@ -41,6 +43,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TimeZone; @@ -51,9 +54,43 @@ public class ExtraPage extends GuiProfileViewerPage { private static final ResourceLocation pv_extra = new ResourceLocation("notenoughupdates:pv_extra.png"); private TreeMap> topKills = null; private TreeMap> topDeaths = null; + private int deathScroll = 0; + private int killScroll = 0; + private int mouseDWheel = 0; + public ExtraPage(GuiProfileViewer instance) { super(instance); + getInstance().killDeathSearchTextField.setSize(80, 12); + } + + @Override + public void keyTyped(char typedChar, int keyCode) throws IOException { + super.keyTyped(typedChar, keyCode); + if (getInstance().killDeathSearchTextField.getFocus()) { + getInstance().killDeathSearchTextField.keyTyped(typedChar, keyCode); + killScroll = 0; + deathScroll = 0; + } + } + + @Override + public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + //Note: don't know why it made me make it return a boolean, but it fixed the error, so I left it alone. + + //Dimensions: X: guiLeft + xStart + xOffset * 3, Y: guiTop + yStartBottom + 77, Width: 80, Height: 12 + if (mouseX >= GuiProfileViewer.getGuiLeft() + 22 + 103 * 3 && + mouseX <= GuiProfileViewer.getGuiLeft() + 22 + 103 * 3 + 80 && + mouseY >= GuiProfileViewer.getGuiTop() + 105 + 77 && mouseY <= GuiProfileViewer.getGuiTop() + 105 + 77 + 12) { + getInstance().killDeathSearchTextField.mouseClicked(mouseX, mouseY, mouseButton); + getInstance().playerNameTextField.otherComponentClick(); + return true; + } + + getInstance().killDeathSearchTextField.otherComponentClick(); + + return false; } // pls update in the future tyvm !!! @@ -411,35 +448,59 @@ public class ExtraPage extends GuiProfileViewerPage { } } + getInstance().killDeathSearchTextField.render((int) (guiLeft + xStart + xOffset * 3), (int) (guiTop + yStartBottom + 77)); + + float killDeathX = guiLeft + xStart + xOffset * 3; + if(mouseX >= killDeathX && mouseX <= killDeathX+76) { + if(mouseY >= guiTop + yStartTop && mouseY <= guiTop + yStartTop + 65) { + if(mouseDWheel != 0) {if(mouseDWheel > 0) {killScroll-=1;} else {killScroll+=1;}} mouseDWheel = Mouse.getDWheel(); + if(killScroll < 0) {killScroll = 0;} + } else if(mouseY >= guiTop + yStartBottom && mouseY <= guiTop + yStartBottom + 65) { + if(mouseDWheel != 0) {if(mouseDWheel > 0) {deathScroll-=1;} else {deathScroll+=1;}} mouseDWheel = Mouse.getDWheel(); + if(deathScroll < 0) {deathScroll = 0;} + } + + } + int index = 0; + int skipCount = 0; for (int killCount : topKills.descendingKeySet()) { - if (index >= 6) break; Set kills = topKills.get(killCount); for (String killType : kills) { - if (index >= 6) break; - Utils.renderAlignedString( - EnumChatFormatting.YELLOW + killType + " Kills", - EnumChatFormatting.WHITE.toString() + killCount, - guiLeft + xStart + xOffset * 3, - guiTop + yStartTop + yOffset * index, - 76 - ); + boolean isSearch = getInstance().killDeathSearchTextField.getText().isEmpty() || killType.toLowerCase(Locale.ROOT).contains(getInstance().killDeathSearchTextField.getText().toLowerCase(Locale.ROOT)); + float killY = guiTop + yStartTop + yOffset * ((index-skipCount) - killScroll); + if(!isSearch) skipCount++; + if(isSearch && killY+6 < guiTop+yStartTop+65 && killY >= guiTop + yStartTop) { + Utils.renderAlignedString( + EnumChatFormatting.YELLOW + killType + " Kills", + EnumChatFormatting.WHITE.toString() + killCount, + killDeathX, + killY, + 76 + ); + } + + index++; } } index = 0; + skipCount = 0; for (int deathCount : topDeaths.descendingKeySet()) { - if (index >= 6) break; Set deaths = topDeaths.get(deathCount); for (String deathType : deaths) { - if (index >= 6) break; - Utils.renderAlignedString( - EnumChatFormatting.YELLOW + "Deaths: " + deathType, - EnumChatFormatting.WHITE.toString() + deathCount, - guiLeft + xStart + xOffset * 3, - guiTop + yStartBottom + yOffset * index, - 76 - ); + boolean isSearch = getInstance().killDeathSearchTextField.getText().isEmpty() || deathType.toLowerCase(Locale.ROOT).contains(getInstance().killDeathSearchTextField.getText().toLowerCase(Locale.ROOT)); + float deathY = guiTop + yStartBottom + yOffset * ((index-skipCount) - deathScroll); + if(!isSearch) skipCount++; + if(isSearch && deathY+6 < guiTop+yStartBottom+65 && deathY >= guiTop + yStartBottom) { + Utils.renderAlignedString( + EnumChatFormatting.YELLOW + "Deaths: " + deathType, + EnumChatFormatting.WHITE.toString() + deathCount, + killDeathX, + deathY, + 76 + ); + } index++; } } 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 c78a6167..f327dae5 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -176,6 +176,7 @@ public class GuiProfileViewer extends GuiScreen { ); public final GuiElementTextField playerNameTextField; public final GuiElementTextField inventoryTextField = new GuiElementTextField("", GuiElementTextField.SCALE_TEXT); + public final GuiElementTextField killDeathSearchTextField = new GuiElementTextField("", GuiElementTextField.SCALE_TEXT); private final Map pages = new HashMap<>(); public int sizeX; public int sizeY; @@ -874,6 +875,7 @@ public class GuiProfileViewer extends GuiScreen { currentPage = page; inventoryTextField.otherComponentClick(); playerNameTextField.otherComponentClick(); + killDeathSearchTextField.otherComponentClick(); return; } } @@ -890,6 +892,7 @@ public class GuiProfileViewer extends GuiScreen { if (mouseY > guiTop + sizeY + 5 && mouseY < guiTop + sizeY + 25) { playerNameTextField.mouseClicked(mouseX, mouseY, mouseButton); inventoryTextField.otherComponentClick(); + killDeathSearchTextField.otherComponentClick(); return; } } @@ -961,11 +964,13 @@ public class GuiProfileViewer extends GuiScreen { } playerNameTextField.otherComponentClick(); inventoryTextField.otherComponentClick(); + killDeathSearchTextField.otherComponentClick(); return; } profileDropdownSelected = false; playerNameTextField.otherComponentClick(); inventoryTextField.otherComponentClick(); + killDeathSearchTextField.otherComponentClick(); } @Override -- cgit