From 0a95a791eb57a546fb5421594abae740faf1dfdb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:51:02 +0100 Subject: Internal Changes: Many small code cleanups (#1101) Co-authored-by: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- src/main/java/SkyHanniInstallerFrame.java | 19 ------------ .../at/hannibal2/skyhanni/api/CollectionAPI.kt | 13 ++++---- .../java/at/hannibal2/skyhanni/api/SkillAPI.kt | 20 ++++++------ .../skyhanni/data/GardenComposterUpgradesData.kt | 3 +- .../data/GardenCropMilestonesCommunityFix.kt | 12 ++++---- .../hannibal2/skyhanni/data/GardenCropUpgrades.kt | 2 +- .../java/at/hannibal2/skyhanni/data/SackAPI.kt | 21 +++++++------ .../at/hannibal2/skyhanni/data/SkillExperience.kt | 11 +++---- .../skyhanni/features/bingo/FirstMinionTier.kt | 2 +- .../skyhanni/features/bingo/MinionCraftHelper.kt | 7 +++-- .../features/bingo/card/BingoCardReader.kt | 2 +- .../card/nextstephelper/BingoNextStepHelper.kt | 10 +++--- .../skyhanni/features/combat/BestiaryData.kt | 18 +++++------ .../damageindicator/DamageIndicatorManager.kt | 26 +++++++++++++--- .../features/dungeon/DungeonFinderFeatures.kt | 5 ++- .../features/event/diana/AllBurrowsList.kt | 3 +- .../lobby/waypoints/halloween/BasketWaypoints.kt | 8 +++-- .../skyhanni/features/fame/CityProjectFeatures.kt | 36 ++++++++++++---------- .../skyhanni/features/fishing/FishingAPI.kt | 10 +++--- .../features/fishing/FishingBaitWarnings.kt | 3 +- .../features/fishing/ShowFishingItemName.kt | 2 +- .../features/fishing/trophy/OdgerWaypoint.kt | 5 ++- .../skyhanni/features/garden/AnitaMedalProfit.kt | 16 +++++----- .../skyhanni/features/garden/GardenLevelDisplay.kt | 13 ++++---- .../features/garden/GardenNextJacobContest.kt | 6 ++-- .../features/garden/composter/ComposterAPI.kt | 6 ++-- .../features/garden/composter/ComposterDisplay.kt | 2 ++ .../garden/composter/ComposterInventoryNumbers.kt | 5 +-- .../features/garden/composter/ComposterOverlay.kt | 34 ++++++++++---------- .../features/garden/contest/FarmingContestAPI.kt | 3 +- .../garden/contest/JacobContestFFNeededDisplay.kt | 3 +- .../contest/JacobFarmingContestsInventory.kt | 6 ++-- .../features/garden/farming/CropMoneyDisplay.kt | 17 +++++++--- .../features/garden/farming/DicerRngDropTracker.kt | 2 +- .../farming/WildStrawberryDyeNotification.kt | 2 +- .../features/garden/fortuneguide/FFGuideGUI.kt | 2 +- .../garden/inventory/AnitaExtraFarmingFortune.kt | 4 +-- .../garden/inventory/GardenInventoryNumbers.kt | 8 ++--- .../garden/inventory/GardenNextPlotPrice.kt | 19 +++++++----- .../garden/inventory/SkyMartCopperPrice.kt | 10 +++--- .../garden/visitor/GardenVisitorFeatures.kt | 19 +++++------- .../features/garden/visitor/VisitorListener.kt | 2 +- .../features/inventory/AuctionsHighlighter.kt | 4 +-- .../inventory/ItemDisplayOverlayFeatures.kt | 23 ++++++-------- .../skyhanni/features/inventory/ItemStars.kt | 4 +-- .../features/inventory/QuickCraftFeatures.kt | 3 +- .../features/inventory/RngMeterInventory.kt | 3 +- .../inventory/SkyblockGuideHighlightFeature.kt | 7 +++-- .../skyhanni/features/inventory/StatsTuning.kt | 6 ++-- .../features/inventory/bazaar/BazaarApi.kt | 17 ++++++---- .../inventory/bazaar/BazaarBestSellMethod.kt | 4 +-- .../bazaar/BazaarCancelledBuyOrderClipboard.kt | 3 +- .../features/inventory/bazaar/BazaarDataHolder.kt | 2 +- .../inventory/bazaar/BazaarOpenPriceWebsite.kt | 5 +-- .../features/inventory/bazaar/BazaarOrderHelper.kt | 15 ++++----- .../features/itemabilities/ChickenHeadTimer.kt | 25 ++++++++------- .../skyhanni/features/minion/MinionFeatures.kt | 11 ++++--- .../skyhanni/features/misc/BrewingStandOverlay.kt | 2 +- .../skyhanni/features/misc/CollectionTracker.kt | 6 ++-- .../features/misc/NonGodPotEffectDisplay.kt | 14 ++++----- .../skyhanni/features/misc/PetExpTooltip.kt | 2 +- .../misc/items/AuctionHouseCopyUnderbidPrice.kt | 4 +-- .../features/misc/items/EstimatedItemValue.kt | 2 +- .../features/misc/items/EstimatedWardrobePrice.kt | 3 +- .../features/misc/items/GlowingDroppedItems.kt | 2 +- .../misc/teleportpad/TeleportPadInventoryNumber.kt | 7 ++--- .../skyhanni/features/nether/PabloHelper.kt | 2 +- .../nether/ashfang/AshfangHideParticles.kt | 2 +- .../dailyquest/DailyQuestHelper.kt | 8 ++--- .../features/skillprogress/SkillProgress.kt | 5 +-- .../skyhanni/test/TestCopyBestiaryValues.kt | 13 ++++---- .../skyhanni/test/command/CopyBossbarCommand.kt | 6 ++-- .../skyhanni/test/command/ErrorManager.kt | 4 +-- .../java/at/hannibal2/skyhanni/utils/APIUtil.kt | 7 ++++- .../at/hannibal2/skyhanni/utils/ItemCategory.kt | 1 + .../java/at/hannibal2/skyhanni/utils/ItemUtils.kt | 25 +++++++++------ .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 3 -- .../java/at/hannibal2/skyhanni/utils/NEUItems.kt | 8 ++--- .../at/hannibal2/skyhanni/utils/SimpleTimeMark.kt | 1 + .../skyhanni/utils/SkyBlockItemModifierUtils.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/TimeUtils.kt | 7 +++-- .../at/hannibal2/skyhanni/utils/UtilsPatterns.kt | 6 ++++ 82 files changed, 352 insertions(+), 339 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/SkyHanniInstallerFrame.java b/src/main/java/SkyHanniInstallerFrame.java index dee06da43..9381e9aef 100644 --- a/src/main/java/SkyHanniInstallerFrame.java +++ b/src/main/java/SkyHanniInstallerFrame.java @@ -642,25 +642,6 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo return version; } -// private String getVersionFromMcmodInfo() { -// String version = ""; -// try { -// BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Objects.requireNonNull(getClass() -// .getClassLoader() -// .getResourceAsStream("mcmod.info"), "mcmod.info not found."))); -// while ((version = bufferedReader.readLine()) != null) { -// if (version.contains("\"version\": \"")) { -// version = version.split(Pattern.quote("\"version\": \""))[1]; -// version = version.substring(0, version.length() - 2); -// break; -// } -// } -// } catch (Exception ex) { -// // It's okay, I guess just don't use the version lol. -// } -// return version; -// } - private File getThisFile() { try { return new File(SkyHanniInstallerFrame.class diff --git a/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt index 1e991605e..0077a6e83 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt @@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches import at.hannibal2.skyhanni.utils.StringUtils.removeColor @@ -46,10 +47,9 @@ object CollectionAPI { val stack = event.inventoryItems[4] ?: return loop@ for (line in stack.getLore()) { singleCounterPattern.matchMatcher(line) { - val counter = group("amount").replace(",", "").toLong() + val counter = group("amount").formatLong() val name = inventoryName.split(" ").dropLast(1).joinToString(" ") - val internalName = NEUItems.getInternalNameOrNull(name) ?: continue@loop - collectionValue[internalName] = counter + collectionValue[NEUInternalName.fromItemName(name)] = counter } } CollectionUpdateEvent().postAndCatch() @@ -59,7 +59,7 @@ object CollectionAPI { if (inventoryName == "Boss Collections") return for ((_, stack) in event.inventoryItems) { - var name = stack.name?.removeColor() ?: continue + var name = stack.name.removeColor() if (name.contains("Collections")) continue val lore = stack.getLore() @@ -71,9 +71,8 @@ object CollectionAPI { loop@ for (line in lore) { counterPattern.matchMatcher(line) { - val counter = group("amount").replace(",", "").toLong() - val internalName = NEUItems.getInternalNameOrNull(name) ?: continue@loop - collectionValue[internalName] = counter + val counter = group("amount").formatLong() + collectionValue[NEUInternalName.fromItemName(name)] = counter } } } diff --git a/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt index 0df046a65..64d905ccb 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt @@ -21,8 +21,9 @@ import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.ItemUtils.cleanName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.NumberUtil.formatDouble +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.NumberUtil.formatLongOrUserError -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.removeColor @@ -170,7 +171,7 @@ object SkillAPI { val previousLine = stack.getLore()[lineIndex - 1] val progress = cleanLine.substring(cleanLine.lastIndexOf(' ') + 1) if (previousLine == "§7§8Max Skill level reached!") { - var totalXp = progress.formatNumber() + var totalXp = progress.formatLong() val minus = if (skillLevel == 50) 4_000_000 else if (skillLevel == 60) 7_000_000 else 0 totalXp -= minus val (overflowLevel, overflowCurrent, overflowNeeded, overflowTotal) = getSkillInfo( @@ -192,8 +193,8 @@ object SkillAPI { } } else { val splitProgress = progress.split("/") - val currentXp = splitProgress.first().formatNumber() - val neededXp = splitProgress.last().formatNumber() + val currentXp = splitProgress.first().formatLong() + val neededXp = splitProgress.last().formatLong() val levelingArray = levelArray() val levelXp = calculateLevelXp(levelingArray, skillLevel - 1).toLong() @@ -266,8 +267,8 @@ object SkillAPI { } private fun handleSkillPattern(matcher: Matcher, skillType: SkillType, skillInfo: SkillInfo) { - val currentXp = matcher.group("current").formatNumber() - val maxXp = matcher.group("needed").formatNumber() + val currentXp = matcher.group("current").formatLong() + val maxXp = matcher.group("needed").formatLong() val level = getLevelExact(maxXp) val (levelOverflow, currentOverflow, currentMaxOverflow, totalOverflow) = getSkillInfo( @@ -311,8 +312,7 @@ object SkillAPI { } } val existingLevel = getSkillInfo(skillType) ?: SkillInfo() - val xpPercentageS = matcher.group("progress").replace(",", "") - val xpPercentage = xpPercentageS.toFloatOrNull() ?: return + val xpPercentage = matcher.group("progress").formatDouble() val levelingArray = levelArray() val levelXp = calculateLevelXp(levelingArray, existingLevel.level - 1) val nextLevelDiff = levelingArray[tablistLevel]?.asDouble ?: 7_600_000.0 @@ -341,8 +341,8 @@ object SkillAPI { } private fun handleSkillPatternMultiplier(matcher: Matcher, skillType: SkillType, skillInfo: SkillInfo) { - val currentXp = matcher.group("current").formatNumber() - val maxXp = matcher.group("needed").formatNumber() + val currentXp = matcher.group("current").formatLong() + val maxXp = matcher.group("needed").formatLong() val level = getLevelExact(maxXp) val levelingArray = levelArray() val levelXp = calculateLevelXp(levelingArray, level - 1).toLong() + currentXp diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenComposterUpgradesData.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenComposterUpgradesData.kt index 138158ccb..64eac452b 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenComposterUpgradesData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenComposterUpgradesData.kt @@ -16,8 +16,7 @@ class GardenComposterUpgradesData { if (!GardenAPI.inGarden()) return if (event.inventoryName != "Composter Upgrades") return for (item in event.inventoryItems.values) { - val itemName = item.name ?: continue - ComposterUpgrade.regex.matchMatcher(itemName) { + ComposterUpgrade.regex.matchMatcher(item.name) { val name = group("name") val level = group("level")?.romanToDecimalIfNecessary() ?: 0 val composterUpgrade = ComposterUpgrade.getByName(name)!! diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt index e38e3d075..c52878003 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt @@ -13,7 +13,8 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -79,8 +80,7 @@ object GardenCropMilestonesCommunityFix { crop: CropType, wrongData: MutableList, ) { - val name = stack.name ?: return - val rawNumber = name.removeColor().replace(crop.cropName, "").trim() + val rawNumber = stack.name.removeColor().replace(crop.cropName, "").trim() val realTier = if (rawNumber == "") 0 else rawNumber.romanToDecimalIfNecessary() val lore = stack.getLore() @@ -97,7 +97,7 @@ object GardenCropMilestonesCommunityFix { ) - GardenCropMilestones.getCropsForTier(realTier, crop) // debug("guessNextMax: ${guessNextMax.addSeparators()}") val nextMax = amountPattern.matchMatcher(next) { - group("max").formatNumber() + group("max").formatLong() } ?: return // debug("nextMax real: ${nextMax.addSeparators()}") if (nextMax != guessNextMax) { @@ -108,7 +108,7 @@ object GardenCropMilestonesCommunityFix { val guessTotalMax = GardenCropMilestones.getCropsForTier(46, crop) // println("guessTotalMax: ${guessTotalMax.addSeparators()}") val totalMax = amountPattern.matchMatcher(total) { - group("max").formatNumber() + group("max").formatLong() } ?: return // println("totalMax real: ${totalMax.addSeparators()}") val totalOffBy = guessTotalMax - totalMax @@ -150,7 +150,7 @@ object GardenCropMilestonesCommunityFix { val (rawCrop, tier, amount) = split val crop = LorenzUtils.enumValueOf(rawCrop) - if (tryFix(crop, tier.toInt(), amount.formatNumber().toInt())) { + if (tryFix(crop, tier.toInt(), amount.formatInt())) { fixed++ } else { alreadyCorrect++ diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt index c15299ab3..e6c810852 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt @@ -31,7 +31,7 @@ class GardenCropUpgrades { fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (event.inventoryName != "Crop Upgrades") return event.inventoryItems.forEach { (_, item) -> - val crop = item.name?.removeColor()?.let { CropType.getByNameOrNull(it) } ?: return@forEach + val crop = CropType.getByNameOrNull(item.name.removeColor()) ?: return@forEach val level = item.getLore() .firstNotNullOfOrNull { tierPattern.matchEntire(it)?.groups?.get(1)?.value?.toIntOrNull() } ?: 0 crop.setUpgradeLevel(level) diff --git a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt index 73ca7ca17..e42bdb8af 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt @@ -19,7 +19,8 @@ import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPrice -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches import at.hannibal2.skyhanni.utils.StringUtils.removeColor @@ -99,12 +100,12 @@ object SackAPI { } private fun NEUInternalName.sackPrice(stored: String) = when (sackDisplayConfig.priceFrom) { - PriceFrom.BAZAAR -> (getPrice(true) * stored.formatNumber()).toLong() + PriceFrom.BAZAAR -> (getPrice(true) * stored.formatLong()).toLong() .let { if (it < 0) 0L else it } PriceFrom.NPC -> try { val npcPrice = getNpcPriceOrNull() ?: 0.0 - (npcPrice * stored.formatNumber()).toLong() + (npcPrice * stored.formatLong()).toLong() } catch (e: Exception) { 0L } @@ -115,7 +116,7 @@ object SackAPI { fun getSacksData(savingSacks: Boolean) { if (savingSacks) sackData = ProfileStorageData.sackProfiles?.sackContents ?: return for ((_, stack) in stackList) { - val name = stack.name ?: continue + val name = stack.name val lore = stack.getLore() val gem = SackGemstone() val rune = SackRune() @@ -135,19 +136,19 @@ object SackAPI { "Rough" -> { gem.rough = stored gem.roughPrice = internalName.sackPrice(stored) - if (savingSacks) setSackItem(internalName, stored.formatNumber()) + if (savingSacks) setSackItem(internalName, stored.formatLong()) } "Flawed" -> { gem.flawed = stored gem.flawedPrice = internalName.sackPrice(stored) - if (savingSacks) setSackItem(internalName, stored.formatNumber()) + if (savingSacks) setSackItem(internalName, stored.formatLong()) } "Fine" -> { gem.fine = stored gem.finePrice = internalName.sackPrice(stored) - if (savingSacks) setSackItem(internalName, stored.formatNumber()) + if (savingSacks) setSackItem(internalName, stored.formatLong()) } } gemstoneItem[name] = gem @@ -162,10 +163,10 @@ object SackAPI { item.stored = stored item.total = group("total") - if (savingSacks) setSackItem(item.internalName, item.stored.formatNumber()) + if (savingSacks) setSackItem(item.internalName, item.stored.formatLong()) item.price = if (isTrophySack) { val filletPerTrophy = FishingAPI.getFilletPerTrophy(stack.getInternalName()) - val filletValue = filletPerTrophy * stored.formatNumber() + val filletValue = filletPerTrophy * stored.formatLong() item.magmaFish = filletValue "MAGMA_FISH".asInternalName().sackPrice(filletValue.toString()) } else { @@ -227,7 +228,7 @@ object SackAPI { val sackChanges = ArrayList() for (match in sackChangeRegex.findAll(sackChangeText)) { - val delta = match.groups[1]!!.value.replace(",", "").toInt() + val delta = match.groups[1]!!.value.formatInt() val item = match.groups[2]!!.value val sacks = match.groups[3]!!.value.split(", ") diff --git a/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt b/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt index 78a44cda3..5a6c7c819 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt @@ -7,7 +7,7 @@ import at.hannibal2.skyhanni.events.SkillExpGainEvent import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimal import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor @@ -40,8 +40,8 @@ class SkillExperience { actionBarPattern.matchMatcher(event.actionBar) { val skill = group("skill").lowercase() - val overflow = group("overflow").formatNumber() - val neededForNextLevel = group("needed").formatNumber() + val overflow = group("overflow").formatLong() + val neededForNextLevel = group("needed").formatLong() val nextLevel = getLevelForExpExactly(neededForNextLevel) val baseExp = getExpForLevel(nextLevel - 1) val totalExp = baseExp + overflow @@ -59,7 +59,7 @@ class SkillExperience { if (event.inventoryName != "Your Skills") return for ((_, stack) in event.inventoryItems) { - val name = stack.name?.removeColor() ?: continue + val name = stack.name.removeColor() if (!name.contains(" ")) continue val lore = stack.getLore() @@ -76,8 +76,7 @@ class SkillExperience { val level = split[1].romanToDecimal() val baseExp = getExpForLevel(level) inventoryPattern.matchMatcher(line) { - val rawNumber = group("number") - val overflow = rawNumber.formatNumber() + val overflow = group("number").formatLong() val experience = baseExp + overflow skillExp[skillName] = experience } diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/FirstMinionTier.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/FirstMinionTier.kt index e6d339979..e4bae4f05 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/FirstMinionTier.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/FirstMinionTier.kt @@ -43,7 +43,7 @@ object FirstMinionTier { minionId: NEUInternalName, ) { if (recipe.getCachedIngredients().any { help.contains(it.internalItemId.asInternalName()) }) { - val name = recipe.output.itemStack.name!!.removeColor() + val name = recipe.output.itemStack.name.removeColor() val abc = name.replace(" I", " 0") minions[abc] = minionId.replace("_1", "_0") } diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt index a6f81c588..35741622a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -15,6 +15,7 @@ import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getCachedIngredients +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -222,8 +223,8 @@ class MinionCraftHelper { return } val format = LorenzUtils.formatPercentage(percentage) - val haveFormat = LorenzUtils.formatInteger(have) - val needFormat = LorenzUtils.formatInteger(needAmount) + val haveFormat = have.addSeparators() + val needFormat = needAmount.addSeparators() newDisplay.add("$itemName§8: §e$format §8(§7$haveFormat§8/§7$needFormat§8)") allDone = false } @@ -265,7 +266,7 @@ class MinionCraftHelper { if (event.inventoryName != "Crafted Minions") return for ((_, b) in event.inventoryItems) { - val name = b.name ?: continue + val name = b.name if (!name.startsWith("§e")) continue val internalName = NEUInternalName.fromItemName("$name I") .replace("MINION", "GENERATOR").replace(";", "_").replace("CAVE_SPIDER", "CAVESPIDER") diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/BingoCardReader.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/BingoCardReader.kt index c0606ad54..91759f003 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/BingoCardReader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/BingoCardReader.kt @@ -51,7 +51,7 @@ class BingoCardReader { lore.any { it.endsWith("Community Goal") } -> GoalType.COMMUNITY else -> continue } - val name = stack.name?.removeColor() ?: continue + val name = stack.name.removeColor() var index = 0 val builder = StringBuilder() for (s in lore) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt index be4a8c7a4..30dd81bd7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt @@ -22,6 +22,8 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.editCopy import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern @@ -122,9 +124,7 @@ class BingoNextStepHelper { return if (having > 0) { val needed = step.amountNeeded val percentage = LorenzUtils.formatPercentage(having.toDouble() / needed) - val havingFormat = LorenzUtils.formatInteger(having) - val neededFormat = LorenzUtils.formatInteger(needed) - " $percentage ($havingFormat/$neededFormat)" + " $percentage (${having.addSeparators()}/${needed.addSeparators()})" } else "" } } @@ -183,7 +183,7 @@ class BingoNextStepHelper { if (step is ItemsStep) { var totalCount = 0L for ((itemName, multiplier) in step.variants) { - val count = InventoryUtils.countItemsInLowerInventory { it.name?.removeColor() == itemName } + val count = InventoryUtils.countItemsInLowerInventory { it.name.removeColor() == itemName } totalCount += count * multiplier } if (step.amountHaving != totalCount) { @@ -263,7 +263,7 @@ class BingoNextStepHelper { private fun readDescription(description: String): NextStep? { collectionPattern.matchMatcher(description) { - val amount = group("amount").replace(",", "").toInt() + val amount = group("amount").formatInt() val name = group("name") return CollectionStep(name, amount) withItemIslandRequirement name diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt index bd1d58894..2e9259f0a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt @@ -18,7 +18,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addButton import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary import at.hannibal2.skyhanni.utils.NumberUtil.roundToPrecision import at.hannibal2.skyhanni.utils.NumberUtil.toRoman @@ -150,12 +150,12 @@ object BestiaryData { val progress = line.substring(line.lastIndexOf(' ') + 1) if (previousLine.contains("Families Found")) { progressPattern.matchMatcher(progress) { - familiesFound = group("current").formatNumber() - totalFamilies = group("needed").formatNumber() + familiesFound = group("current").formatLong() + totalFamilies = group("needed").formatLong() } } else if (previousLine.contains("Families Completed")) { progressPattern.matchMatcher(progress) { - familiesCompleted = group("current").formatNumber() + familiesCompleted = group("current").formatLong() } } } @@ -178,7 +178,7 @@ object BestiaryData { for ((lineIndex, line) in stack.getLore().withIndex()) { val loreLine = line.removeColor() if (loreLine.startsWith("Kills: ")) { - actualRealTotalKill = "([0-9,.]+)".toRegex().find(loreLine)?.groupValues?.get(1)?.formatNumber() + actualRealTotalKill = "([0-9,.]+)".toRegex().find(loreLine)?.groupValues?.get(1)?.formatLong() ?: 0 } if (!loreLine.startsWith(" ")) continue @@ -186,13 +186,13 @@ object BestiaryData { val progress = loreLine.substring(loreLine.lastIndexOf(' ') + 1) if (previousLine.contains("Progress to Tier")) { progressPattern.matchMatcher(progress) { - totalKillToTier = group("needed").formatNumber() - currentKillToTier = group("current").formatNumber() + totalKillToTier = group("needed").formatLong() + currentKillToTier = group("current").formatLong() } } else if (previousLine.contains("Overall Progress")) { progressPattern.matchMatcher(progress) { - totalKillToMax = group("needed").formatNumber() - currentTotalKill = group("current").formatNumber() + totalKillToMax = group("needed").formatLong() + currentTotalKill = group("current").formatLong() } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt index b87002c0e..274e64f9d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt @@ -18,7 +18,6 @@ import at.hannibal2.skyhanni.features.dungeon.DungeonAPI import at.hannibal2.skyhanni.features.slayer.blaze.HellionShield import at.hannibal2.skyhanni.features.slayer.blaze.setHellionShield import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.editCopy import at.hannibal2.skyhanni.utils.CollectionUtils.put import at.hannibal2.skyhanni.utils.ConfigUtils @@ -400,7 +399,13 @@ class DamageIndicatorManager { val thorn = checkThorn(health, maxHealth) if (thorn == null) { val floor = DungeonAPI.dungeonFloor - ChatUtils.error("problems with thorn detection! ($floor, $health/$maxHealth)") + ErrorManager.logErrorStateWithData( + "Could not detect thorn", + "checkThorn returns null", + "health" to health, + "maxHealth" to maxHealth, + "floor" to floor, + ) } return thorn } @@ -563,7 +568,16 @@ class DamageIndicatorManager { calcHealth = 0 break } else { - ChatUtils.error("unknown magma boss health sidebar format!") + ErrorManager.logErrorStateWithData( + "Unknown magma boss health sidebar format", + "Damage Indicator could not find magma boss bar data", + "line" to line, + "ScoreboardData.sidebarLinesRaw" to ScoreboardData.sidebarLinesRaw, + "calcHealth" to calcHealth, + "slimeSize" to slimeSize, + "entity" to entity, + "entityData" to entityData, + ) break } @@ -777,7 +791,11 @@ class DamageIndicatorManager { } } } else { - ChatUtils.error("Invalid/impossible thorn floor!") + ErrorManager.logErrorStateWithData( + "Thorn in wrong floor detected", + "Invalid floor for thorn", + "dungeonFloor" to DungeonAPI.dungeonFloor, + ) return null } val color = NumberUtil.percentageColor(health.toLong(), maxHealth.toLong()) diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt index d636f24e3..9c352a459 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt @@ -40,7 +40,7 @@ class DungeonFinderFeatures { if (!LorenzUtils.inSkyBlock || LorenzUtils.skyBlockArea != "Dungeon Hub") return if (!config.floorAsStackSize) return - val itemName = event.stack.name?.removeColor() ?: "" + val itemName = event.stack.name.removeColor() val invName = InventoryUtils.openInventoryName() if (invName == "Select Floor") { @@ -105,8 +105,7 @@ class DungeonFinderFeatures { if (slot.slotNumber != slot.slotIndex) continue if (slot.stack == null) continue - val itemName = slot.stack.name ?: continue - if (!itemName.endsWith(" Party")) continue + if (!slot.stack.name.endsWith(" Party")) continue if (config.markIneligibleGroups && slot.stack.getLore().any { ineligiblePattern.matches(it) }) { slot highlight LorenzColor.DARK_RED diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt index f28c4966f..3ff3fa59f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/AllBurrowsList.kt @@ -7,7 +7,6 @@ import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer import at.hannibal2.skyhanni.utils.LorenzColor -import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.RenderUtils.drawColor @@ -43,7 +42,7 @@ object AllBurrowsList { val burrowLocations = burrowLocations ?: return val list = burrowLocations.map { it.printWithAccuracy(0, ":") } OSUtils.copyToClipboard(list.joinToString(";")) - LorenzUtils.chat("Saved all ${list.size} burrow locations to clipboard.") + ChatUtils.chat("Saved all ${list.size} burrow locations to clipboard.") } fun addFromClipboard() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/halloween/BasketWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/halloween/BasketWaypoints.kt index 2d96a88b9..1eae1e8a6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/halloween/BasketWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/halloween/BasketWaypoints.kt @@ -11,7 +11,6 @@ import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled import at.hannibal2.skyhanni.utils.LocationUtils.distanceSqToPlayer import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.anyContains import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -94,9 +93,12 @@ class BasketWaypoints { return if (config.onlyClosest) closest == this else true } + // TODO use regex with the help of knowing the original lore. Will most likely need to wait until next halloween event private fun checkScoreboardHalloweenSpecific(): Boolean { - val list = ScoreboardData.sidebarLinesFormatted - return list.anyContains("Hypixel Level") && list.anyContains("Halloween") && list.anyContains("Baskets") + val a = ScoreboardData.sidebarLinesFormatted.any { it.contains("Hypixel Level") } + val b = ScoreboardData.sidebarLinesFormatted.any { it.contains("Halloween") } + val c = ScoreboardData.sidebarLinesFormatted.any { it.contains("Baskets") } + return a && b && c } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/fame/CityProjectFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/fame/CityProjectFeatures.kt index 37c92d5c0..786719391 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fame/CityProjectFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fame/CityProjectFeatures.kt @@ -13,14 +13,19 @@ import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.ItemUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.ItemUtils.itemName import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NEUItems.getItemStack +import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches import at.hannibal2.skyhanni.utils.TimeUtils @@ -100,10 +105,9 @@ class CityProjectFeatures { if (config.showMaterials) { // internal name -> amount - val materials = mutableMapOf() + val materials = mutableMapOf() for ((_, item) in event.inventoryItems) { - val itemName = item.name ?: continue - if (itemName != "§eContribute this component!") continue + if (item.name != "§eContribute this component!") continue fetchMaterials(item, materials) } @@ -111,9 +115,9 @@ class CityProjectFeatures { } if (config.showReady) { - var nextTime = Long.MAX_VALUE + var nextTime = SimpleTimeMark.farFuture() + val now = SimpleTimeMark.now() for ((_, item) in event.inventoryItems) { - val itemName = item.name ?: continue val lore = item.getLore() val completed = lore.lastOrNull()?.let { completedPattern.matches(it) } ?: false @@ -122,17 +126,17 @@ class CityProjectFeatures { contributeAgainPattern.matchMatcher(line) { val rawTime = group("time") if (rawTime.contains("Soon!")) return@matchMatcher - val duration = TimeUtils.getMillis(rawTime) - val endTime = System.currentTimeMillis() + duration + val duration = TimeUtils.getDuration(rawTime) + val endTime = now + duration if (endTime < nextTime) { nextTime = endTime } } } - if (itemName != "§eContribute this component!") continue - nextTime = System.currentTimeMillis() + if (item.name != "§eContribute this component!") continue + nextTime = now } - ProfileStorageData.playerSpecific?.nextCityProjectParticipationTime = nextTime + ProfileStorageData.playerSpecific?.nextCityProjectParticipationTime = nextTime.toMillis() } } @@ -143,7 +147,7 @@ class CityProjectFeatures { return true } - private fun buildList(materials: MutableMap) = buildList> { + private fun buildList(materials: MutableMap) = buildList> { addAsSingletonList("§7City Project Materials") if (materials.isEmpty()) { @@ -152,8 +156,8 @@ class CityProjectFeatures { } for ((internalName, amount) in materials) { - val stack = NEUItems.getItemStack(internalName) - val name = stack.name ?: continue + val stack = internalName.getItemStack() + val name = internalName.itemName val list = mutableListOf() list.add(" §7- ") list.add(stack) @@ -166,14 +170,14 @@ class CityProjectFeatures { } }) { inInventory && !NEUItems.neuHasFocus() }) - val price = NEUItems.getPrice(internalName) * amount + val price = internalName.getPrice(false) * amount val format = NumberUtil.format(price) list.add(" §7(§6$format§7)") add(list) } } - private fun fetchMaterials(item: ItemStack, materials: MutableMap) { + private fun fetchMaterials(item: ItemStack, materials: MutableMap) { var next = false val lore = item.getLore() val completed = lore.lastOrNull()?.let { completedPattern.matches(it) } ?: false @@ -188,7 +192,7 @@ class CityProjectFeatures { if (line.contains("Bits")) break val (name, amount) = ItemUtils.readItemAmount(line) ?: continue - val internalName = NEUItems.getRawInternalName(name) + val internalName = NEUInternalName.fromItemName(name) val old = materials.getOrPut(internalName) { 0 } materials[internalName] = old + amount } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index 3335f61ca..2403e430f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -12,13 +12,13 @@ import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.getFillet import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity import at.hannibal2.skyhanni.utils.BlockUtils.getBlockAt import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemCategory +import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.SimpleTimeMark -import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.getLorenzVec import net.minecraft.client.Minecraft import net.minecraft.entity.item.EntityArmorStand @@ -85,11 +85,9 @@ object FishingAPI { } private fun NEUInternalName.isFishingRod() = contains("ROD") + fun ItemStack.isFishingRod() = getItemCategoryOrNull() == ItemCategory.FISHING_ROD || getItemCategoryOrNull() == ItemCategory.FISHING_WEAPON - fun ItemStack.isBait(): Boolean { - val name = name ?: return false - return stackSize == 1 && (name.removeColor().startsWith("Obfuscated") || name.endsWith(" Bait")) - } + fun ItemStack.isBait(): Boolean = stackSize == 1 && getItemCategoryOrNull() == ItemCategory.FISHING_BAIT @SubscribeEvent fun onItemInHandChange(event: ItemInHandChangeEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt index 352b36d16..854165823 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt @@ -69,10 +69,9 @@ class FishingBaitWarnings { for (entity in EntityUtils.getEntitiesNearby(bobber.getLorenzVec(), 6.0)) { val itemStack = entity.entityItem ?: continue if (!itemStack.isBait()) continue - val name = itemStack.name ?: continue val ticksExisted = entity.ticksExisted if (ticksExisted in 6..15) { - return name + return itemStack.name } val distance = "distance: ${entity.getDistanceToEntity(bobber).addSeparators()}" diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt index e2d1b297e..28c2aa27f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt @@ -49,7 +49,7 @@ class ShowFishingItemName { val location = event.exactLocation(entityItem).add(y = 0.8) if (location.distance(LocationUtils.playerLocation()) > 15) continue val itemStack = entityItem.entityItem - var name = itemStack.name ?: continue + var name = itemStack.name // Hypixel sometimes replaces the bait item mid air with a stone if (name.removeColor() == "Stone") continue diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt index bdd085ac1..d26ec6b90 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt @@ -5,10 +5,10 @@ import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.features.fishing.FishingAPI.isFishingRod import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.LorenzVec @@ -37,8 +37,7 @@ class OdgerWaypoint { private fun isLavaFishingRod(): Boolean { val heldItem = InventoryUtils.getItemInHand() ?: return false - val isRod = heldItem.name?.contains("Rod") ?: return false - if (!isRod) return false + if (!heldItem.isFishingRod()) return false return heldItem.getLore().any { it.contains("Lava Rod") } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index 9ec66e9f8..c1df32a98 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -6,7 +6,6 @@ import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils @@ -14,11 +13,9 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.itemName import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName -import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems @@ -64,9 +61,9 @@ class AnitaMedalProfit { readItem(item, table) } catch (e: Throwable) { ErrorManager.logErrorWithData( - e, "Error in AnitaMedalProfit while reading item '${item.nameWithEnchantment}'", + e, "Error in AnitaMedalProfit while reading item '${item.itemName}'", "item" to item, - "name" to item.nameWithEnchantment, + "name" to item.itemName, "inventory name" to InventoryUtils.openInventoryName(), ) } @@ -90,7 +87,7 @@ class AnitaMedalProfit { val (name, amount) = ItemUtils.readItemAmount(itemName) ?: return - var internalName = NEUItems.getInternalNameOrNull(name) + var internalName = NEUInternalName.fromItemNameOrNull(name) if (internalName == null) { internalName = item.getInternalName() } @@ -105,7 +102,7 @@ class AnitaMedalProfit { } private fun getItemName(item: ItemStack): String? { - val name = item.name ?: return null + val name = item.name val isEnchantedBook = name.removeColor() == "Enchanted Book" return if (isEnchantedBook) { item.itemName @@ -118,7 +115,10 @@ class AnitaMedalProfit { for (rawItemName in requiredItems) { val pair = ItemUtils.readItemAmount(rawItemName) if (pair == null) { - ChatUtils.error("Could not read item '$rawItemName'") + ErrorManager.logErrorStateWithData( + "Error in Anita Medal Contest", "Could not read item amount", + "rawItemName" to rawItemName, + ) continue } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt index d69b92bb3..766bdd55d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt @@ -9,7 +9,8 @@ import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -80,16 +81,16 @@ class GardenLevelDisplay { if (event.inventoryName != "Desk") return val item = event.inventoryItems[4]!! - val currentLevel = currentLevelPattern.matchMatcher(item.name!!.removeColor()) { + val currentLevel = currentLevelPattern.matchMatcher(item.name.removeColor()) { group("currentLevel").romanToDecimalIfNecessary() } ?: return var nextLevelExp = 0L for (line in item.getLore()) { expToNextLevelPattern.matchMatcher(line) { - nextLevelExp = group("nextLevelExp").formatNumber() + nextLevelExp = group("nextLevelExp").formatLong() } overflowPattern.matchMatcher(line) { - val overflow = group("overflow").formatNumber() + val overflow = group("overflow").formatLong() GardenAPI.gardenExp = overflow update() return @@ -115,9 +116,7 @@ class GardenLevelDisplay { val overflow = gardenExp - needForLevel val needForOnlyNextLvl = needForNextLevel - needForLevel - val need = LorenzUtils.formatInteger(overflow) - val have = LorenzUtils.formatInteger(needForOnlyNextLvl) - " §7(§e$need§7/§e$have§7)" + " §7(§e${overflow.addSeparators()}§7/§e${needForOnlyNextLvl.addSeparators()}§7)" } else "" } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt index 76e1395ab..22eabf10e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt @@ -185,8 +185,7 @@ object GardenNextJacobContest { if (!config.display) return val backItem = event.inventoryItems[48] ?: return - val backName = backItem.name - if (backName != "§aGo Back") return + if (backItem.name != "§aGo Back") return val lore = backItem.getLore() if (lore.size != 1) return if (lore[0] != "§7To Calendar and Events") return @@ -227,8 +226,7 @@ object GardenNextJacobContest { val lore = item.getLore() if (!lore.any { it.contains("§6§eJacob's Farming Contest") }) continue - val name = item.name ?: continue - val day = dayPattern.matchMatcher(name) { group("day").toInt() } ?: continue + val day = dayPattern.matchMatcher(item.name) { group("day").toInt() } ?: continue val startTime = SkyBlockTime(year, month, day).asTimeMark() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt index 085095f4f..a00440667 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt @@ -2,7 +2,7 @@ package at.hannibal2.skyhanni.features.garden.composter import at.hannibal2.skyhanni.data.model.ComposterUpgrade import at.hannibal2.skyhanni.features.garden.GardenAPI -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatLong import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeUtils import kotlin.math.floor @@ -52,9 +52,9 @@ object ComposterAPI { return timePerCompost * compostRemainingAfterNextCompostFinishes } - fun getFuel() = tabListData[ComposterDisplay.DataType.FUEL]?.removeColor()?.formatNumber() ?: 0 + fun getFuel() = tabListData[ComposterDisplay.DataType.FUEL]?.removeColor()?.formatLong() ?: 0 - fun getOrganicMatter() = tabListData[ComposterDisplay.DataType.ORGANIC_MATTER]?.removeColor()?.formatNumber() ?: 0 + fun getOrganicMatter() = tabListData[ComposterDisplay.DataType.ORGANIC_MATTER]?.removeColor()?.formatLong() ?: 0 fun maxOrganicMatter(addOne: ComposterUpgrade?) = 40_000 + ComposterUpgrade.ORGANIC_MATTER_CAP.getLevel(addOne) * 20_000 diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt index c7a6b8f8b..349d20779 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt @@ -45,6 +45,8 @@ class ComposterDisplay { } } + private val BUCKET by lazy { "BUCKET".asInternalName().getItemStack() } + @SubscribeEvent fun onTabListUpdate(event: TabListUpdateEvent) { if (!(config.displayEnabled && GardenAPI.inGarden())) return diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterInventoryNumbers.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterInventoryNumbers.kt index acb62abe2..5747032cf 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterInventoryNumbers.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterInventoryNumbers.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern @@ -38,7 +39,7 @@ class ComposterInventoryNumbers { if (slotNumber == 13) { for (line in stack.getLore()) { amountPattern.matchMatcher(line) { - val total = group("amount").replace(",", "").toInt() + val total = group("amount").formatInt() event.offsetY = -2 event.offsetX = -20 event.stackTip = "§6${total.addSeparators()}" @@ -51,7 +52,7 @@ class ComposterInventoryNumbers { if (slotNumber == 46 || slotNumber == 52) { for (line in stack.getLore()) { valuePattern.matchMatcher(line) { - val having = group("having").removeColor().replace(",", "").toDouble().toInt() + val having = group("having").removeColor().formatInt() val havingFormat = NumberUtil.format(having) val total = group("total").removeColor() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt index 5a8b866e7..a34c7e8c0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt @@ -47,6 +47,7 @@ import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeUtils +import at.hannibal2.skyhanni.utils.TimeUtils.format import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -105,6 +106,8 @@ object ComposterOverlay { ChatUtils.chat("Composter test offset set to $testOffset.") } + private val COMPOST by lazy { "COMPOST".asInternalName() } + @SubscribeEvent fun onInventoryClose(event: InventoryCloseEvent) { inInventory = false @@ -143,15 +146,14 @@ object ComposterOverlay { if (!inComposterUpgrades) return update() for (upgrade in ComposterUpgrade.entries) { - event.itemStack.name?.let { - if (it.contains(upgrade.displayName)) { - maxLevel = ComposterUpgrade.regex.matchMatcher(it) { - group("level")?.romanToDecimalIfNecessary() ?: 0 - } == 25 - extraComposterUpgrade = upgrade - update() - return - } + val name = event.itemStack.name + if (name.contains(upgrade.displayName)) { + maxLevel = ComposterUpgrade.regex.matchMatcher(name) { + group("level")?.romanToDecimalIfNecessary() ?: 0 + } == 25 + extraComposterUpgrade = upgrade +