diff options
author | Linnea Gräf <nea@nea.moe> | 2023-11-25 11:32:53 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2023-12-16 11:53:27 +0100 |
commit | 6e3885d7e07df7c4a51bb9aa8e74b97e631f1c4a (patch) | |
tree | c3d4a5f03fdf9913cac520742bf42d6095157917 | |
parent | fc6bcda767b49305ee35c27c5a5cd311ca921a52 (diff) | |
download | Skyblock-Dungeons-Guide-6e3885d7e07df7c4a51bb9aa8e74b97e631f1c4a.tar.gz Skyblock-Dungeons-Guide-6e3885d7e07df7c4a51bb9aa8e74b97e631f1c4a.tar.bz2 Skyblock-Dungeons-Guide-6e3885d7e07df7c4a51bb9aa8e74b97e631f1c4a.zip |
Add party finder parserpartynotethingy
Unify multiple parser into one. Also fix multi line notes being parsed
incorrectly
4 files changed, 107 insertions, 85 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java index c0f911f5..a4628303 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java @@ -23,6 +23,7 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.party; import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler; import kr.syeyoung.dungeonsguide.mod.features.SimpleFeature; import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics; +import kr.syeyoung.dungeonsguide.mod.utils.PartyFinderParty; import kr.syeyoung.dungeonsguide.mod.utils.TextUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -74,22 +75,12 @@ public class FeatureGoodParties extends SimpleFeature { if (nbt == null || nbt.hasNoTags()) continue; NBTTagCompound display = nbt.getCompoundTag("display"); if (display.hasNoTags()) return; - NBTTagList lore = display.getTagList("Lore", 8); - int classLvReq = 0; - int cataLvReq = 0; - boolean Req = false; - String note = ""; - for (int n = 0; n < lore.tagCount(); n++) { - String str = lore.getStringTagAt(n); - if (str.startsWith("§7Dungeon Level Required: §b")) cataLvReq = Integer.parseInt(str.substring(28)); - if (str.startsWith("§7Class Level Required: §b")) classLvReq = Integer.parseInt(str.substring(26)); - if (str.startsWith("§7§7Note:")) note = TextUtils.stripColor(str.substring(10)); - if (str.startsWith("§cRequires")) Req = true; - } + + PartyFinderParty party = PartyFinderParty.fromItemStack(s.getStack()); int x = s.xDisplayPosition; int y = s.yDisplayPosition; - if (Req) { + if (!party.canJoin) { Gui.drawRect(x, y, x + 16, y + 16, 0x77AA0000); } else { @@ -97,18 +88,18 @@ public class FeatureGoodParties extends SimpleFeature { GlStateManager.enableBlend(); GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - if (note.toLowerCase().contains("car")) { + if (party.note.toLowerCase().contains("car")) { fr.drawStringWithShadow("C", x + 1, y + 1, 0xFFFF0000); - } else if (note.toLowerCase().replace(" ", "").contains("s/s+")) { + } else if (party.note.toLowerCase().replace(" ", "").contains("s/s+")) { fr.drawStringWithShadow("S+", x + 1, y + 1, 0xFFFFFF00); - } else if (note.toLowerCase().contains("s+")) { + } else if (party.note.toLowerCase().contains("s+")) { fr.drawStringWithShadow("S+", x + 1, y + 1, 0xFF00FF00); - } else if (note.toLowerCase().contains(" s") || note.toLowerCase().contains(" s ")) { + } else if (party.note.toLowerCase().contains(" s") || party.note.toLowerCase().contains(" s ")) { fr.drawStringWithShadow("S", x + 1, y + 1, 0xFFFFFF00); - } else if (note.toLowerCase().contains("rush")) { + } else if (party.note.toLowerCase().contains("rush")) { fr.drawStringWithShadow("R", x + 1, y + 1, 0xFFFF0000); } - fr.drawStringWithShadow("§e"+Integer.max(classLvReq, cataLvReq), x + 1, y + fr.FONT_HEIGHT, 0xFFFFFFFF); + fr.drawStringWithShadow("§e"+Integer.max(party.requiredClassLevel, party.requiredDungeonLevel), x + 1, y + fr.FONT_HEIGHT, 0xFFFFFFFF); } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinderSettings.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinderSettings.java index 97538a60..c4026311 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinderSettings.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinderSettings.java @@ -23,6 +23,7 @@ import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessor; import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.mod.gui.elements.*; import kr.syeyoung.dungeonsguide.mod.party.PartyManager; +import kr.syeyoung.dungeonsguide.mod.utils.PartyFinderParty; import kr.syeyoung.dungeonsguide.mod.utils.TextUtils; import lombok.Getter; import net.minecraft.client.Minecraft; @@ -244,46 +245,27 @@ public class PanelPartyFinderSettings extends MPanelScaledGUI { } public boolean filter(ItemStack itemStack) { - NBTTagCompound stackTagCompound = itemStack.getTagCompound(); - String note = ""; - int dLV = 0; + PartyFinderParty party = PartyFinderParty.fromItemStack(itemStack); + Set<String> invalidClasses = new HashSet<>(); for (String s : blacklistClassTxt.getText().split(",")) { - invalidClasses.add(s.toLowerCase()); + invalidClasses.add(s.toLowerCase().trim()); } - if (stackTagCompound.hasKey("display", 10)) { - NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display"); - - if (nbttagcompound.getTagId("Lore") == 9) { - NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8); - - for (int i = 0; i < nbttaglist1.tagCount(); i++) { - String str = nbttaglist1.getStringTagAt(i); - if (str.startsWith("§cRequires ") && filterCantjoinButton.isEnabled()) return false; - if (str.startsWith("§7§7Note:")) { - note = str.substring(12); - } - if (str.startsWith("§7Dungeon Level Required: §b")) { - dLV = Integer.parseInt(str.substring(28)); - } - if (str.startsWith(" ") && str.contains(":")) { - String clazz = TextUtils.stripColor(str).trim().split(" ")[1]; - if (invalidClasses.contains(clazz.toLowerCase())) return false; - } - } - } + for(String badClass : invalidClasses) { + if(party.classes.contains(badClass))return false; } - if (integerSelection.getData() >dLV) return false; + if (!party.canJoin && filterCantjoinButton.isEnabled()) return false; + if (integerSelection.getData() > party.requiredDungeonLevel) return false; if (!filterBlacklist.getText().isEmpty()) { for (String s1 : filterBlacklist.getText().split(",")) { - if (note.toLowerCase().contains(s1.toLowerCase())) return false; + if (party.note.toLowerCase().contains(s1.toLowerCase())) return false; } } if (!filterWhitelist.getText().isEmpty()) { boolean s = false; for (String s1 : filterWhitelist.getText().split(",")) { - if (note.toLowerCase().contains(s1.toLowerCase())) { + if (party.note.toLowerCase().contains(s1.toLowerCase())) { s = true; break; } } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyListElement.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyListElement.java index 51c9fdaf..6929e13d 100644 --- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyListElement.java +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyListElement.java @@ -22,6 +22,7 @@ import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry; import kr.syeyoung.dungeonsguide.mod.gui.MPanel; import kr.syeyoung.dungeonsguide.mod.gui.elements.MTooltip; import kr.syeyoung.dungeonsguide.mod.gui.elements.MTooltipText; +import kr.syeyoung.dungeonsguide.mod.utils.PartyFinderParty; import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils; import kr.syeyoung.dungeonsguide.mod.utils.TextUtils; import kr.syeyoung.dungeonsguide.mod.utils.cursor.EnumCursor; @@ -76,44 +77,15 @@ public class PanelPartyListElement extends MPanel { itemStack = lastStack; int color = RenderUtils.blendAlpha(0x141414, 0.0f); - String note = ""; + PartyFinderParty party = PartyFinderParty.fromItemStack(itemStack); + String note = party.note; boolean notFound = false; - boolean cantJoin = false; + boolean cantJoin = !party.canJoin; if (itemStack.getItem() == Item.getItemFromBlock(Blocks.bedrock)) { cantJoin = true; notFound = true; } - int minClass = -1, minDungeon = -1; - int pplIn = 0; - Set<String> dungeonClasses = new HashSet<>(); - { - NBTTagCompound stackTagCompound = itemStack.getTagCompound(); - if (stackTagCompound.hasKey("display", 10)) { - NBTTagCompound nbtTagCompound = stackTagCompound.getCompoundTag("display"); - - if (nbtTagCompound.getTagId("Lore") == 9) { - NBTTagList nbtTagList1 = nbtTagCompound.getTagList("Lore", 8); - - for (int i = 0; i < nbtTagList1.tagCount(); i++) { - String str = nbtTagList1.getStringTagAt(i); - if (str.startsWith("§7§7Note:")) { - note = str.substring(12); - } else if (str.startsWith("§7Class Level Required: §b")) { - minClass = Integer.parseInt(str.substring(26)); - } else if (str.startsWith("§7Dungeon Level Required: §b")) { - minDungeon = Integer.parseInt(str.substring(28)); - } else if (str.startsWith("§cRequires ")) cantJoin = true; - if (str.endsWith("§b)")) pplIn ++; - - if (str.startsWith(" ") && str.contains(":")) { - String clazz = TextUtils.stripColor(str).trim().split(" ")[1]; - dungeonClasses.add(clazz); - } - } - } - } - } - + int minClass = party.requiredClassLevel, minDungeon = party.requiredDungeonLevel; boolean nodupe = note.toLowerCase().contains("nodupe") || note.toLowerCase().contains("no dupe") || (note.toLowerCase().contains("nd") && (note.toLowerCase().indexOf("nd") == 0 || note.charAt(note.toLowerCase().indexOf("nd")-1) == ' ')); note = note.replaceAll("(?i)(S\\+)", "§6$1§r"); @@ -140,7 +112,7 @@ public class PanelPartyListElement extends MPanel { color = RenderUtils.blendTwoColors(color, 0x44FFAA00); } - if (nodupe && dungeonClasses.contains(FeatureRegistry.PARTYKICKER_CUSTOM.getLastClass())) { + if (nodupe && party.classes.contains(FeatureRegistry.PARTYKICKER_CUSTOM.getLastClass())) { color = RenderUtils.blendTwoColors(color, 0x44FF0000); note = note.replace("nodupe", "§cnodupe§r").replace("no dupe", "§cno dupe§r").replace("nd", "§cnd§r"); } @@ -165,13 +137,13 @@ public class PanelPartyListElement extends MPanel { fr.drawString(name, 0,0,-1); if (!notFound) - note = "§7("+pplIn+") §f"+note; + note = "§7("+party.classes.size()+") §f"+note; fr.drawString(note, fr.getStringWidth("AAAAAAAAAAAAAAAA")+5, 0,-1); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); String sideNote = ""; - if (minClass != -1) sideNote += "§7CLv ≥§b"+minClass+" "; - if (minDungeon != -1) sideNote += "§7DLv ≥§b"+minDungeon+" "; + if (minClass > 0) sideNote += "§7CLv ≥§b"+minClass+" "; + if (minDungeon > 0) sideNote += "§7DLv ≥§b"+minDungeon+" "; if (cantJoin && !notFound) sideNote = "§cCan't join"; sideNote = sideNote.trim(); @@ -197,7 +169,7 @@ public class PanelPartyListElement extends MPanel { mTooltip.open(this); } else if (!lastAbsClip.contains(absMousex, absMousey)){ if (mTooltip != null) - mTooltip.close(); + mTooltip.close(); mTooltip = null; } } diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/PartyFinderParty.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/PartyFinderParty.java new file mode 100644 index 00000000..053fe0c8 --- /dev/null +++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/PartyFinderParty.java @@ -0,0 +1,77 @@ +/* + * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod + * Copyright (C) 2023 Linnea Gräf + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package kr.syeyoung.dungeonsguide.mod.utils; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import java.util.ArrayList; +import java.util.List; + +public class PartyFinderParty { + public String note = ""; + public boolean canJoin = true; + public int requiredDungeonLevel = 0; + public int requiredClassLevel = 0; + public List<String> classes = new ArrayList<>(); + + public static PartyFinderParty fromItemStack(ItemStack itemStack) { + return fromItemNbt(itemStack.getTagCompound()); + } + + public static PartyFinderParty fromItemNbt(NBTTagCompound stackTagCompound) { + if (stackTagCompound != null && stackTagCompound.hasKey("display", 10)) { + NBTTagCompound nbttagcompound = stackTagCompound.getCompoundTag("display"); + + if (nbttagcompound.getTagId("Lore") == 9) { + NBTTagList nbttaglist1 = nbttagcompound.getTagList("Lore", 8); + return fromLore(nbttaglist1); + } + } + return new PartyFinderParty(); + } + + public static PartyFinderParty fromLore(NBTTagList tagList) { + PartyFinderParty party = new PartyFinderParty(); + for (int i = 0; i < tagList.tagCount(); i++) { + String line = tagList.getStringTagAt(i); + if (line.startsWith("§7§7Note:")) { + party.note = line.substring(12).trim(); + if (i + 1 < tagList.tagCount()) { + String nextLine = tagList.getStringTagAt(i + 1); + if (!nextLine.contains("§7") && !nextLine.replaceAll("§.| ", "").isEmpty()) { + i++; + party.note += " " + nextLine; + } + } + } else if (line.startsWith("§cRequires ")) { + party.canJoin = false; + } else if (line.startsWith("§7Dungeon Level Required: §b")) { + party.requiredDungeonLevel = Integer.parseInt(line.substring(28)); + } else if (line.startsWith("§7Class Level Required: §b")) { + party.requiredClassLevel = Integer.parseInt(line.substring(26)); + } else if (line.startsWith(" ") && line.contains(":")) { + String dungeonClass = TextUtils.stripColor(line).trim().split(" ")[1]; + party.classes.add(dungeonClass); + } + } + return party; + } +} |