From 82f1db03538817fbb1cb56a492149759d855d0a7 Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Thu, 4 Apr 2024 20:16:43 +0200 Subject: Fix: Pest Tp Delay (#1357) --- .../skyhanni/features/garden/pests/PestAPI.kt | 37 +++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) (limited to 'src/main/java/at') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt index 89404cbe0..4a1a626b8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.garden.pests import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.ScoreboardChangeEvent import at.hannibal2.skyhanni.events.TabListUpdateEvent import at.hannibal2.skyhanni.events.garden.pests.PestSpawnEvent @@ -18,9 +19,10 @@ import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LocationUtils.distanceSqToPlayer import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt 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.StringUtils.removeColor import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -31,6 +33,8 @@ object PestAPI { var scoreboardPests = 0 + var lastPestKillTime = SimpleTimeMark.farPast() + val vacuumVariants = listOf( "SKYMART_VACUUM".asInternalName(), "SKYMART_TURBO_VACUUM".asInternalName(), @@ -48,6 +52,7 @@ object PestAPI { "scoreboard.pests", " §7⏣ §[ac]The Garden §4§lൠ§7 x(?.*)" ) + /** * REGEX-TEST: §7⏣ §aPlot §7- §b22a * REGEX-TEST: §7⏣ §aThe Garden @@ -56,6 +61,7 @@ object PestAPI { "scoreboard.nopests", " §7⏣ §a(?:The Garden|Plot §7- §b.+)$" ) + /** * REGEX-TEST: §aPlot §7- §b4 §4§lൠ§7 x1 */ @@ -63,6 +69,7 @@ object PestAPI { "scoreboard.plot.pests", "\\s*(?:§.)*Plot (?:§.)*- (?:§.)*(?.+) (?:§.)*ൠ(?:§.)* x(?\\d+)" ) + /** * REGEX-TEST: §aPlot §7- §b3 */ @@ -74,6 +81,7 @@ object PestAPI { "inventory", "§4§lൠ §cThis plot has §6(?\\d) Pests?§c!" ) + /** * REGEX-TEST: Plots: §r§b4§r§f, §r§b12§r§f, §r§b13§r§f, §r§b18§r§f, §r§b20 */ @@ -82,6 +90,19 @@ object PestAPI { "\\sPlots: (?.*)" ) + /** + * REGEX-TEST: §eYou received §a7x Enchanted Potato §efor killing a §6Locust§e! + * REGEX-TEST: §eYou received §a6x Enchanted Cocoa Beans §efor killing a §6Moth§e! + */ + private val pestDeathChatPattern by patternGroup.pattern( + "chat.pestdeath", + "§eYou received §a(?[0-9]*)x (?.*) §efor killing an? §6(?.*)§e!" + ) + private val noPestsChatPattern by patternGroup.pattern( + "chat.nopests", + "§cThere are not any Pests on your Garden right now! Keep farming!" + ) + private fun fixPests() { val accurateAmount = getPlotsWithAccuratePests().sumOf { it.pests } val inaccurateAmount = getPlotsWithInaccuratePests().size @@ -177,9 +198,8 @@ object PestAPI { for (line in event.newList) { // gets the total amount of pests in the garden pestsInScoreboardPattern.matchMatcher(line) { - val newPests = group("pests").formatNumber().toInt() + val newPests = group("pests").formatInt() if (newPests != scoreboardPests) { - removePests(scoreboardPests - newPests) scoreboardPests = newPests updatePests() } @@ -220,11 +240,20 @@ object PestAPI { @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!GardenAPI.inGarden()) return - if (event.message == "§cThere are not any Pests on your Garden right now! Keep farming!") { + if (pestDeathChatPattern.matches(event.message)) { + lastPestKillTime = SimpleTimeMark.now() + removeNearestPest() + } + if (noPestsChatPattern.matches(event.message)) { resetAllPests() } } + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + lastPestKillTime = SimpleTimeMark.farPast() + } + private fun getPlotsWithAccuratePests() = GardenPlotAPI.plots.filter { it.pests > 0 && !it.isPestCountInaccurate } private fun getPlotsWithInaccuratePests() = GardenPlotAPI.plots.filter { it.pests == 0 && it.isPestCountInaccurate } -- cgit