diff options
| author | NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> | 2024-07-14 02:21:06 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-13 18:21:06 +0200 |
| commit | d8a22fcf54f97d22e85f27e6df5eb775305f0a79 (patch) | |
| tree | bb0da83dc1faab1227ce157f5a493279128e7cef | |
| parent | 1e587bdb6003b0beffa0c554582fbd846c314954 (diff) | |
| download | notenoughupdates-d8a22fcf54f97d22e85f27e6df5eb775305f0a79.tar.gz notenoughupdates-d8a22fcf54f97d22e85f27e6df5eb775305f0a79.tar.bz2 notenoughupdates-d8a22fcf54f97d22e85f27e6df5eb775305f0a79.zip | |
Fix spirit pet not working in croesus overlay (#1238)
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/util/ItemResolutionQuery.java | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/ItemResolutionQuery.java b/src/main/java/io/github/moulberry/notenoughupdates/util/ItemResolutionQuery.java index 9cefca1f..9a2fb1fd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/util/ItemResolutionQuery.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/util/ItemResolutionQuery.java @@ -48,6 +48,7 @@ import java.util.regex.Pattern; public class ItemResolutionQuery { private static final Pattern ENCHANTED_BOOK_NAME_PATTERN = Pattern.compile("^((?:§.)*)([^§]+) ([IVXL]+)$"); + private static final Pattern PET_PATTERN = Pattern.compile(".*(\\[Lvl .*\\] )§(.).*"); private static final String EXTRA_ATTRIBUTES = "ExtraAttributes"; private static final List<String> PET_RARITIES = Arrays.asList( "COMMON", @@ -209,9 +210,8 @@ public class ItemResolutionQuery { * @return the internal neu item id of that item, or null */ public static String findInternalNameByDisplayName(String displayName, boolean mayBeMangled) { - var cleanDisplayName = StringUtils.cleanColour(displayName); return filterInternalNameCandidates( - findInternalNameCandidatesForDisplayName(cleanDisplayName), + findInternalNameCandidatesForDisplayName(displayName), displayName, mayBeMangled ); @@ -222,13 +222,35 @@ public class ItemResolutionQuery { String displayName, boolean mayBeMangled ) { + boolean isPet = displayName.contains("[Lvl "); + String petRarity = null; + if (isPet) { + Matcher matcher = PET_PATTERN.matcher(displayName); + if (matcher.matches()) { + displayName = displayName.replace(matcher.group(1), ""); + petRarity = matcher.group(2); + } + } var cleanDisplayName = StringUtils.cleanColour(displayName); var manager = NotEnoughUpdates.INSTANCE.manager; String bestMatch = null; int bestMatchLength = -1; for (String internalName : candidateInternalNames) { - var cleanItemDisplayName = StringUtils.cleanColour(manager.getDisplayName(internalName)); + + String unCleanItemDisplayName = manager.getDisplayName(internalName); + var cleanItemDisplayName = StringUtils.cleanColour(unCleanItemDisplayName); if (cleanItemDisplayName.length() == 0) continue; + if (isPet) { + if (!cleanItemDisplayName.contains("[Lvl {LVL}] ")) continue; + cleanItemDisplayName = cleanItemDisplayName.replace("[Lvl {LVL}] ", ""); + Matcher matcher = PET_PATTERN.matcher(unCleanItemDisplayName); + if (matcher.matches()) { + if (!matcher.group(2).equals(petRarity)) { + continue; + } + } + } + if (mayBeMangled ? !cleanDisplayName.contains(cleanItemDisplayName) : !cleanItemDisplayName.equals(cleanDisplayName)) { @@ -252,13 +274,18 @@ public class ItemResolutionQuery { * @return a list of internal neu item ids some of which may have a matching display name */ public static Set<String> findInternalNameCandidatesForDisplayName(String displayName) { + boolean isPet = displayName.contains("[Lvl "); var cleanDisplayName = NEUManager.cleanForTitleMapSearch(displayName); var titleWordMap = NotEnoughUpdates.INSTANCE.manager.titleWordMap; var candidates = new HashSet<String>(); for (var partialDisplayName : cleanDisplayName.split(" ")) { if ("".equals(partialDisplayName)) continue; if (!titleWordMap.containsKey(partialDisplayName)) continue; - candidates.addAll(titleWordMap.get(partialDisplayName).keySet()); + Set<String> c = titleWordMap.get(partialDisplayName).keySet(); + for (String s : c) { + if (isPet && !s.contains(";")) continue; + candidates.add(s); + } } return candidates; } |
