aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt37
1 files changed, 33 insertions, 4 deletions
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(?<pests>.*)"
)
+
/**
* 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 (?:§.)*- (?:§.)*(?<plot>.+) (?:§.)*ൠ(?:§.)* x(?<pests>\\d+)"
)
+
/**
* REGEX-TEST: §aPlot §7- §b3
*/
@@ -74,6 +81,7 @@ object PestAPI {
"inventory",
"§4§lൠ §cThis plot has §6(?<amount>\\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: (?<plots>.*)"
)
+ /**
+ * 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(?<amount>[0-9]*)x (?<item>.*) §efor killing an? §6(?<pest>.*)§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 }