aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/garden
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2024-02-16 21:21:43 +1100
committerGitHub <noreply@github.com>2024-02-16 11:21:43 +0100
commitf91973d60948d449cc45a4add901e6fe43aebd62 (patch)
tree4c8c77ec4a9585a821651a034ebe5bed3308a6af /src/main/java/at/hannibal2/skyhanni/features/garden
parent26fe548fa9a5cfe29b130a0a5585278df3429ee9 (diff)
downloadskyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.tar.gz
skyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.tar.bz2
skyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.zip
Moved many regex patterns in the repo and code cleanup. #871
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/garden')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt247
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneFix.kt13
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt22
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt23
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotAPI.kt11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenWarpCommands.kt8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterInventoryNumbers.kt14
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt25
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt10
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt54
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt142
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenInventoryNumbers.kt8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestFinder.kt14
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestSpawn.kt17
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt38
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt30
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt10
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/NPCVisitorFix.kt6
25 files changed, 464 insertions, 265 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
index 5b066b142..46cd544a1 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
@@ -29,23 +29,69 @@ import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFarmingForDummie
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHoeCounter
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.math.floor
import kotlin.math.log10
import kotlin.time.Duration.Companion.seconds
-class FarmingFortuneDisplay {
-
- private val tabFortuneUniversalPattern = " Farming Fortune: §r§6☘(?<fortune>\\d+)".toPattern()
- private val tabFortuneCropPattern =
- " (?<crop>Wheat|Carrot|Potato|Pumpkin|Sugar Cane|Melon|Cactus|Cocoa Beans|Mushroom|Nether Wart) Fortune: §r§6☘(?<fortune>\\d+)".toPattern()
+object FarmingFortuneDisplay {
+ private val config get() = GardenAPI.config.farmingFortunes
+
+ private val patternGroup = RepoPattern.group("garden.fortunedisplay")
+ private val universalTabFortunePattern by patternGroup.pattern(
+ "tablist.universal",
+ " Farming Fortune: §r§6☘(?<fortune>\\d+)"
+ )
+ private val cropSpecificTabFortunePattern by patternGroup.pattern(
+ "tablist.cropspecific",
+ " (?<crop>Wheat|Carrot|Potato|Pumpkin|Sugar Cane|Melon|Cactus|Cocoa Beans|Mushroom|Nether Wart) Fortune: §r§6☘(?<fortune>\\d+)"
+ )
+ private val collectionPattern by patternGroup.pattern(
+ "collection",
+ "§7You have §6\\+(?<ff>\\d{1,3})☘ .*"
+ )
+ private val tooltipFortunePattern by patternGroup.pattern(
+ "tooltip",
+ "^§7Farming Fortune: §a\\+([\\d.]+)(?: §2\\(\\+\\d\\))?(?: §9\\(\\+(\\d+)\\))?\$"
+ )
+ private val armorAbilityPattern by patternGroup.pattern(
+ "armorability",
+ "Tiered Bonus: .* [(](?<pieces>.*)/4[)]"
+ )
+ private val lotusAbilityPattern by patternGroup.pattern(
+ "lotusability",
+ "§7Piece Bonus: §6+(?<bonus>.*)☘"
+ )
+ // todo make pattern work on Melon and Cropie armor
+ private val armorAbilityFortunePattern by patternGroup.pattern(
+ "armorabilityfortune",
+ "§7.*§7Grants §6(?<bonus>.*)☘.*"
+ )
private var display = emptyList<List<Any>>()
private var accessoryProgressDisplay = ""
private var lastToolSwitch = SimpleTimeMark.farPast()
+ private val latestFF: MutableMap<CropType, Double>? get() = GardenAPI.storage?.latestTrueFarmingFortune
+
+ private var currentCrop: CropType? = null
+
+ private var tabFortuneUniversal: Double = 0.0
+ private var tabFortuneCrop: Double = 0.0
+ private val upgradeFortune: Double? get() = currentCrop?.getUpgradeLevel()?.let { it * 5.0 }
+ private val accessoryFortune: Double?
+ get() = currentCrop?.let {
+ CropAccessoryData.cropAccessory?.getFortune(it)
+ }
+
+ var displayedFortune = 0.0
+ var reforgeFortune = 0.0
+ var itemBaseFortune = 0.0
+ var greenThumbFortune = 0.0
+
@SubscribeEvent
fun onPreProfileSwitch(event: PreProfileSwitchEvent) {
display = emptyList()
@@ -56,10 +102,10 @@ class FarmingFortuneDisplay {
fun onTabListUpdate(event: TabListUpdateEvent) {
if (!GardenAPI.inGarden()) return
event.tabList.firstNotNullOfOrNull {
- tabFortuneUniversalPattern.matchMatcher(it) {
+ universalTabFortunePattern.matchMatcher(it) {
tabFortuneUniversal = group("fortune").toDouble()
}
- tabFortuneCropPattern.matchMatcher(it) {
+ cropSpecificTabFortunePattern.matchMatcher(it) {
currentCrop = CropType.getByName(group("crop"))
tabFortuneCrop = group("fortune").toDouble()
}
@@ -170,131 +216,102 @@ class FarmingFortuneDisplay {
else -> 75
}
- companion object {
-
- private val config get() = GardenAPI.config.farmingFortunes
- private val latestFF: MutableMap<CropType, Double>? get() = GardenAPI.storage?.latestTrueFarmingFortune
-
- private var currentCrop: CropType? = null
+ fun getToolFortune(tool: ItemStack?): Double = getToolFortune(tool?.getInternalName())
+ fun getToolFortune(internalName: NEUInternalName?): Double {
+ if (internalName == null) return 0.0
+ if (internalName.equals("THEORETICAL_HOE")) {
+ return 0.0
+ }
+ return if (internalName.startsWith("THEORETICAL_HOE")) {
+ listOf(10.0, 25.0, 50.0)[internalName.asString().last().digitToInt() - 1]
+ } else when (internalName.asString()) {
+ "FUNGI_CUTTER" -> 30.0
+ "COCO_CHOPPER" -> 20.0
+ else -> 0.0
+ }
+ }
- private var tabFortuneUniversal: Double = 0.0
- private var tabFortuneCrop: Double = 0.0
- private val upgradeFortune: Double? get() = currentCrop?.getUpgradeLevel()?.let { it * 5.0 }
- private val accessoryFortune: Double?
- get() = currentCrop?.let {
- CropAccessoryData.cropAccessory?.getFortune(it)
- }
+ fun getTurboCropFortune(tool: ItemStack?, cropType: CropType?): Double {
+ val crop = cropType ?: return 0.0
+ return tool?.getEnchantments()?.get(crop.getTurboCrop())?.let { it * 5.0 } ?: 0.0
+ }
- private val collectionPattern = "§7You have §6\\+(?<ff>\\d{1,3})☘ .*".toPattern()
- private val tooltipFortunePattern =
- "^§7Farming Fortune: §a\\+([\\d.]+)(?: §2\\(\\+\\d\\))?(?: §9\\(\\+(\\d+)\\))?$".toRegex()
- private val armorAbilityPattern = "Tiered Bonus: .* [(](?<pieces>.*)/4[)]".toPattern()
-
- var displayedFortune = 0.0
- var reforgeFortune = 0.0
- var itemBaseFortune = 0.0
- var greenThumbFortune = 0.0
-
- fun getToolFortune(tool: ItemStack?): Double = getToolFortune(tool?.getInternalName())
- fun getToolFortune(internalName: NEUInternalName?): Double {
- if (internalName == null) return 0.0
- if (internalName.equals("THEORETICAL_HOE")) {
- return 0.0
- }
- return if (internalName.startsWith("THEORETICAL_HOE")) {
- listOf(10.0, 25.0, 50.0)[internalName.asString().last().digitToInt() - 1]
- } else when (internalName.asString()) {
- "FUNGI_CUTTER" -> 30.0
- "COCO_CHOPPER" -> 20.0
- else -> 0.0
- }
- }
+ fun getCollectionFortune(tool: ItemStack?): Double {
+ val string = tool?.getLore()?.nextAfter("§6Collection Analysis", 3) ?: return 0.0
+ return collectionPattern.matchMatcher(string) { group("ff").toDoubleOrNull() } ?: 0.0
+ }
- fun getTurboCropFortune(tool: ItemStack?, cropType: CropType?): Double {
- val crop = cropType ?: return 0.0
- return tool?.getEnchantments()?.get(crop.getTurboCrop())?.let { it * 5.0 } ?: 0.0
- }
+ fun getCounterFortune(tool: ItemStack?): Double {
+ val counter = tool?.getHoeCounter() ?: return 0.0
+ val digits = floor(log10(counter.toDouble()))
+ return (16 * digits - 48).coerceAtLeast(0.0)
+ }
- fun getCollectionFortune(tool: ItemStack?): Double {
- val string = tool?.getLore()?.nextAfter("§6Collection Analysis", 3) ?: return 0.0
- return collectionPattern.matchMatcher(string) { group("ff").toDoubleOrNull() } ?: 0.0
- }
+ fun getDedicationFortune(tool: ItemStack?, cropType: CropType?): Double {
+ if (cropType == null) return 0.0
+ val dedicationLevel = tool?.getEnchantments()?.get("dedication") ?: 0
+ val dedicationMultiplier = listOf(0.0, 0.5, 0.75, 1.0, 2.0)[dedicationLevel]
+ val cropMilestone = GardenCropMilestones.getTierForCropCount(
+ cropType.getCounter(), cropType
+ )
+ return dedicationMultiplier * cropMilestone
+ }
- fun getCounterFortune(tool: ItemStack?): Double {
- val counter = tool?.getHoeCounter() ?: return 0.0
- val digits = floor(log10(counter.toDouble()))
- return (16 * digits - 48).coerceAtLeast(0.0)
- }
+ fun getSunderFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("sunder") ?: 0) * 12.5
+ fun getHarvestingFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("harvesting") ?: 0) * 12.5
+ fun getCultivatingFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("cultivating") ?: 0) * 2.0
- fun getDedicationFortune(tool: ItemStack?, cropType: CropType?): Double {
- if (cropType == null) return 0.0
- val dedicationLevel = tool?.getEnchantments()?.get("dedication") ?: 0
- val dedicationMultiplier = listOf(0.0, 0.5, 0.75, 1.0, 2.0)[dedicationLevel]
- val cropMilestone = GardenCropMilestones.getTierForCropCount(
- cropType.getCounter(), cropType
- )
- return dedicationMultiplier * cropMilestone
- }
+ fun getAbilityFortune(item: ItemStack?) = item?.let {
+ getAbilityFortune(it.getInternalName(), it.getLore())
+ } ?: 0.0
- fun getSunderFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("sunder") ?: 0) * 12.5
- fun getHarvestingFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("harvesting") ?: 0) * 12.5
- fun getCultivatingFortune(tool: ItemStack?) = (tool?.getEnchantments()?.get("cultivating") ?: 0) * 2.0
-
- fun getAbilityFortune(item: ItemStack?) = item?.let {
- getAbilityFortune(it.getInternalName(), it.getLore())
- } ?: 0.0
-
- fun getAbilityFortune(internalName: NEUInternalName, lore: List<String>): Double {
- val lotusAbilityPattern = "§7Piece Bonus: §6+(?<bonus>.*)☘".toPattern()
- // todo make it work on Melon and Cropie armor
- val armorAbilityFortune = "§7.*§7Grants §6(?<bonus>.*)☘.*".toPattern()
- var pieces = 0
-
- lore.forEach { line ->
- if (internalName.contains("LOTUS")) {
- lotusAbilityPattern.matchMatcher(line) {
- return group("bonus").toDouble()
- }
- }
- armorAbilityPattern.matchMatcher(line.removeColor()) {
- pieces = group("pieces").toInt()
- }
+ fun getAbilityFortune(internalName: NEUInternalName, lore: List<String>): Double {
+ var pieces = 0
- armorAbilityFortune.matchMatcher(line) {
- return if (pieces < 2) 0.0 else group("bonus").toDouble() / pieces
+ lore.forEach { line ->
+ if (internalName.contains("LOTUS")) {
+ lotusAbilityPattern.matchMatcher(line) {
+ return group("bonus").toDouble()
}
}
+ armorAbilityPattern.matchMatcher(line.removeColor()) {
+ pieces = group("pieces").toInt()
+ }
- return 0.0
+ armorAbilityFortunePattern.matchMatcher(line) {
+ return if (pieces < 2) 0.0 else group("bonus").toDouble() / pieces
+ }
}
- fun loadFortuneLineData(tool: ItemStack?, enchantmentFortune: Double) {
- displayedFortune = 0.0
- reforgeFortune = 0.0
- itemBaseFortune = 0.0
- greenThumbFortune = 0.0
- for (line in tool?.getLore()!!) {
- val match = tooltipFortunePattern.matchEntire(line)?.groups ?: continue
-
- displayedFortune = match[1]!!.value.toDouble()
- reforgeFortune = match[2]?.value?.toDouble() ?: 0.0
-
- itemBaseFortune = if (tool.getInternalName().contains("LOTUS")) {
- 5.0
- } else {
- val dummiesFF = (tool.getFarmingForDummiesCount() ?: 0) * 1.0
- displayedFortune - reforgeFortune - enchantmentFortune - dummiesFF
- }
- greenThumbFortune = if (tool.getInternalName().contains("LOTUS")) {
- displayedFortune - reforgeFortune - itemBaseFortune
- } else 0.0
+ return 0.0
+ }
+
+ fun loadFortuneLineData(tool: ItemStack?, enchantmentFortune: Double) {
+ displayedFortune = 0.0
+ reforgeFortune = 0.0
+ itemBaseFortune = 0.0
+ greenThumbFortune = 0.0
+ for (line in tool?.getLore()!!) {
+ tooltipFortunePattern.matchMatcher(line) {
+ displayedFortune = group(1)!!.toDouble()
+ reforgeFortune = group(2)?.toDouble() ?: 0.0
+ } ?: continue
+
+ itemBaseFortune = if (tool.getInternalName().contains("LOTUS")) {
+ 5.0
+ } else {
+ val dummiesFF = (tool.getFarmingForDummiesCount() ?: 0) * 1.0
+ displayedFortune - reforgeFortune - enchantmentFortune - dummiesFF
}
+ greenThumbFortune = if (tool.getInternalName().contains("LOTUS")) {
+ displayedFortune - reforgeFortune - itemBaseFortune
+ } else 0.0
}
+ }
- fun getCurrentFarmingFortune() = tabFortuneUniversal + tabFortuneCrop
+ fun getCurrentFarmingFortune() = tabFortuneUniversal + tabFortuneCrop
- fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this)
- }
+ fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this)
@SubscribeEvent
fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneFix.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneFix.kt
index 838b3f6ce..bba86c595 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneFix.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneFix.kt
@@ -11,12 +11,19 @@ import at.hannibal2.skyhanni.utils.ChatUtils
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class GardenCropMilestoneFix {
-
- private val tabListPattern = " Milestone: §r§a(?<crop>.*) (?<tier>.*): §r§3(?<percentage>.*)%".toPattern()
- private val levelUpPattern = " {2}§r§b§lGARDEN MILESTONE §3(?<crop>.*) §8.*➜§3(?<tier>.*)".toPattern()
+ private val patternGroup = RepoPattern.group("garden.cropmilestone.fix")
+ private val tabListPattern by patternGroup.pattern(
+ "tablist",
+ " Milestone: §r§a(?<crop>.*) (?<tier>.*): §r§3(?<percentage>.*)%"
+ )
+ private val levelUpPattern by patternGroup.pattern(
+ "levelup",
+ " {2}§r§b§lGARDEN MILESTONE §3(?<crop>.*) §8.*➜§3(?<tier>.*)"
+ )
private val tabListCropProgress = mutableMapOf<CropType, Long>()
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 21fb1a78a..d69b92bb3 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenLevelDisplay.kt
@@ -21,21 +21,27 @@ import kotlin.time.Duration.Companion.milliseconds
class GardenLevelDisplay {
private val config get() = GardenAPI.config.gardenLevels
- private val expToNextLevelPattern by RepoPattern.pattern(
- "garden.level.inventory.nextxp",
+
+ private val patternGroup = RepoPattern.group("garden.level")
+ private val expToNextLevelPattern by patternGroup.pattern(
+ "inventory.nextxp",
".* §e(?<nextLevelExp>.*)§6/.*"
)
- private val overflowPattern by RepoPattern.pattern("garden.level.inventory.overflow", ".*§r §6(?<overflow>.*)")
- private val currentLevelPattern by RepoPattern.pattern(
- "garden.level.inventory.currentlevel",
+ private val overflowPattern by patternGroup.pattern(
+ "inventory.overflow",
+ ".*§r §6(?<overflow>.*)"
+ )
+ private val currentLevelPattern by patternGroup.pattern(
+ "inventory.currentlevel",
"Garden Level (?<currentLevel>.*)"
)
- private var display = ""
- private val visitorRewardPattern by RepoPattern.pattern(
- "garden.level.chat.increase",
+ private val visitorRewardPattern by patternGroup.pattern(
+ "chat.increase",
" {4}§r§8\\+§r§2(?<exp>.*) §r§7Garden Experience"
)
+ private var display = ""
+
@SubscribeEvent
fun onProfileJoin(event: ProfileJoinEvent) {
update()
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 22c6cb7fc..2ad7d11fd 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
@@ -27,6 +27,7 @@ import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
import at.hannibal2.skyhanni.utils.TabListData
import at.hannibal2.skyhanni.utils.TimeUtils.format
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import com.google.gson.Gson
import io.github.moulberry.notenoughupdates.util.SkyBlockTime
import kotlinx.coroutines.Dispatchers
@@ -54,9 +55,19 @@ object GardenNextJacobContest {
var contests = mutableMapOf<SimpleTimeMark, FarmingContest>()
private var inCalendar = false
- private val patternDay = "§aDay (?<day>.*)".toPattern()
- private val patternMonth = "(?<month>.*), Year (?<year>.*)".toPattern()
- private val patternCrop = "§(e○|6☘) §7(?<crop>.*)".toPattern()
+ private val patternGroup = RepoPattern.group("garden.nextcontest")
+ private val dayPattern by patternGroup.pattern(
+ "day",
+ "§aDay (?<day>.*)"
+ )
+ private val monthPattern by patternGroup.pattern(
+ "month",
+ "(?<month>.*), Year (?<year>.*)"
+ )
+ private val cropPattern by patternGroup.pattern(
+ "crop",
+ "§(e○|6☘) §7(?<crop>.*)"
+ )
private val closeToNewYear = "§7Close to new SB year!"
private const val maxContestsPerYear = 124
@@ -140,7 +151,7 @@ object GardenNextJacobContest {
inCalendar = true
- patternMonth.matchMatcher(event.inventoryName) {
+ monthPattern.matchMatcher(event.inventoryName) {
val month = LorenzUtils.getSBMonthByName(group("month"))
val year = group("year").toInt()
@@ -175,13 +186,13 @@ object GardenNextJacobContest {
if (!lore.any { it.contains("§6§eJacob's Farming Contest") }) continue
val name = item.name ?: continue
- val day = patternDay.matchMatcher(name) { group("day").toInt() } ?: continue
+ val day = dayPattern.matchMatcher(name) { group("day").toInt() } ?: continue
val startTime = SkyBlockTime(year, month, day).asTimeMark()
val crops = mutableListOf<CropType>()
for (line in lore) {
- patternCrop.matchMatcher(line) { crops.add(CropType.getByName(group("crop"))) }
+ cropPattern.matchMatcher(line) { crops.add(CropType.getByName(group("crop"))) }
}
contests[startTime] = FarmingContest(startTime + contestDuration, crops)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt
index 56d3fe17d..3f1021bcb 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenOptimalSpeed.kt
@@ -15,6 +15,7 @@ import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.renderables.Renderable
import io.github.moulberry.moulconfig.observer.Property
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiEditSign
import net.minecraftforge.client.event.GuiOpenEvent
@@ -26,6 +27,12 @@ import kotlin.time.Duration.Companion.seconds
class GardenOptimalSpeed {
private val config get() = GardenAPI.config.optimalSpeeds
+
+ private val currentSpeedPattern by RepoPattern.pattern(
+ "garden.optimalspeed.currentspeed",
+ " Speed: §r§f✦(?<speed>.*)"
+ )
+
private val configCustomSpeed get() = config.customSpeed
private var sneakingTime = 0.seconds
private val sneaking get() = Minecraft.getMinecraft().thePlayer.isSneaking
@@ -37,7 +44,6 @@ class GardenOptimalSpeed {
_currentSpeed = value
}
private var optimalSpeed = -1
- private val currentSpeedPattern = " Speed: §r§f✦(?<speed>.*)".toPattern()
private var lastWarnTime = 0L
private var cropInHand: CropType? = null
private var rancherOverlayList: List<List<Any?>> = emptyList()
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotAPI.kt
index f1edf26e9..58a56c400 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotAPI.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotAPI.kt
@@ -23,10 +23,13 @@ import kotlin.time.Duration.Companion.minutes
object GardenPlotAPI {
- private val plotNamePattern by RepoPattern.pattern("garden.plot.name", "§.Plot §7- §b(?<name>.*)")
-
- private val plotSprayedPattern by RepoPattern.pattern(
- "garden.plot.spray.target",
+ private val patternGroup = RepoPattern.group("garden.plot")
+ private val plotNamePattern by patternGroup.pattern(
+ "name",
+ "§.Plot §7- §b(?<name>.*)"
+ )
+ private val plotSprayedPattern by patternGroup.pattern(
+ "spray.target",
"§a§lSPRAYONATOR! §r§7You sprayed §r§aPlot §r§7- §r§b(?<plot>.*) §r§7with §r§a(?<spray>.*)§r§7!"
)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenWarpCommands.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenWarpCommands.kt
index 563258b95..fc30e3651 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenWarpCommands.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenWarpCommands.kt
@@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.NEUItems
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.client.Minecraft
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.seconds
@@ -16,8 +17,11 @@ class GardenWarpCommands {
private val config get() = GardenAPI.config.gardenCommands
- // TODO repo
- private val tpPlotPattern = "/tp (?<plot>.*)".toPattern()
+ private val tpPlotPattern by RepoPattern.pattern(
+ "garden.warpcommand.tpplot",
+ "/tp (?<plot>.*)"
+ )
+
private var lastWarpTime = SimpleTimeMark.farPast()
@SubscribeEvent
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
index 56568f017..70dbcb1e8 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
@@ -3,7 +3,7 @@ package at.hannibal2.skyhanni.features.garden
import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
import at.hannibal2.skyhanni.config.features.garden.TooltipTweaksConfig.CropTooltipFortuneEntry
import at.hannibal2.skyhanni.events.LorenzToolTipEvent
-import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.Companion.getAbilityFortune
+import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.getAbilityFortune
import at.hannibal2.skyhanni.features.garden.GardenAPI.getCropType
import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI
import at.hannibal2.skyhanni.utils.ConfigUtils
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 f883f5de1..acb62abe2 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
@@ -8,12 +8,20 @@ import at.hannibal2.skyhanni.utils.NumberUtil
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class ComposterInventoryNumbers {
- private val valuePattern = ".* §e(?<having>.*)§6/(?<total>.*)".toPattern()
- private val compostsPattern = "§7§7Compost Available: §a(?<amount>.*)".toPattern()
+ private val patternGroup = RepoPattern.group("garden.composter.inventory.numbers")
+ private val valuePattern by patternGroup.pattern(
+ "value",
+ ".* §e(?<having>.*)§6/(?<total>.*)"
+ )
+ private val amountPattern by patternGroup.pattern(
+ "amount",
+ "§7§7Compost Available: §a(?<amount>.*)"
+ )
@SubscribeEvent
fun onRenderItemTip(event: RenderInventoryItemTipEvent) {
@@ -29,7 +37,7 @@ class ComposterInventoryNumbers {
// Composts Available
if (slotNumber == 13) {
for (line in stack.getLore()) {
- compostsPattern.matchMatcher(line) {
+ amountPattern.matchMatcher(line) {
val total = group("amount").replace(",", "").toInt()
event.offsetY = -2
event.offsetX = -20
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt
index 9ee04d3fc..eb091668a 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt
@@ -1,5 +1,7 @@
package at.hannibal2.skyhanni.features.garden.contest
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
+
enum class ContestBracket(val color: String) {
DIAMOND("b"),
PLATINUM("3"),
@@ -9,5 +11,8 @@ enum class ContestBracket(val color: String) {
;
val displayName = "§$color§l$name"
- val pattern = "$displayName §7\\(§bTop \\d{1,2}%§7\\): §6(?<amount>.*)".toPattern()
+ val bracketPattern by RepoPattern.pattern(
+ "garden.farming.contest.bracket" + this.name.lowercase(),
+ "$displayName §7\\(§bTop \\d{1,2}%§7\\): §6(?<amount>.*)"
+ )
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt
index b70fc9934..727c86ef0 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt
@@ -15,6 +15,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import io.github.moulberry.notenoughupdates.util.SkyBlockTime
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@@ -22,16 +23,30 @@ import kotlin.time.Duration.Companion.minutes
object FarmingContestAPI {
- private val timePattern = "§a(?<month>.*) (?<day>.*)(?:rd|st|nd|th), Year (?<year>.*)".toPattern()
+ private val patternGroup = RepoPattern.group("garden.farming.contest")
+ private val timePattern by patternGroup.pattern(
+ "time",
+ "§a(?<month>.*) (?<day>.*)(?:rd|st|nd|th), Year (?<year>.*)"
+ )
+ private val cropPattern by patternGroup.pattern(
+ "crop",
+ "§8(?<crop>.*) Contest"
+ )
+ private val sidebarCropPattern by patternGroup.pattern(
+ "sidebarcrop",
+ "(?:§e○|§6☘) §f(?<crop>.*) §a.*"
+ )
+
private val contests = mutableMapOf<Long, FarmingContest>()
- private val cropPattern = "§8(?<crop>.*) Contest".toPattern()
var inContest = false
var contestCrop: CropType? = null
private var startTime = SimpleTimeMark.farPast()
- private val sidebarCropPattern = "(?:§e○|§6☘) §f(?<crop>.*) §a.*".toPattern()
-
var inInventory = false
+ init {
+ ContestBracket.entries.forEach { it.bracketPattern }
+ }
+
@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
if (event.repeatSeconds(1)) {
@@ -116,7 +131,7 @@ object FarmingContestAPI {
val brackets = buildMap {
for (bracket in ContestBracket.entries) {
val amount = lore.firstNotNullOfOrNull {
- bracket.pattern.matchMatcher(it) {
+ bracket.bracketPattern.matchMatcher(it) {
group("amount").replace(",", "").toInt()
}
} ?: continue
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt
index 8b8150cc8..da38c318b 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt
@@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.InventoryCloseEvent
import at.hannibal2.skyhanni.events.RenderItemTooltipEvent
import at.hannibal2.skyhanni.features.garden.CropType
-import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.Companion.getLatestTrueFarmingFortune
+import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.getLatestTrueFarmingFortune
import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.farming.GardenCropSpeed.getLatestBlocksPerSecond
import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt
index 7f6a91c33..c493bd6ca 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt
@@ -3,7 +3,7 @@ package at.hannibal2.skyhanni.features.garden.contest
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.InventoryUpdatedEvent
import at.hannibal2.skyhanni.features.garden.CropType
-import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.Companion.getLatestTrueFarmingFortune
+import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay.getLatestTrueFarmingFortune
import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.farming.GardenCropSpeed.getLatestBlocksPerSecond
import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt
index 7e91764dd..f4e48b626 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt
@@ -19,6 +19,7 @@ import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker
import at.hannibal2.skyhanni.utils.tracker.TrackerData
import com.google.gson.JsonObject
@@ -28,10 +29,15 @@ import kotlin.time.Duration.Companion.seconds
object ArmorDropTracker {
- private var hasArmor = false
- private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern()
private val config get() = GardenAPI.config.farmingArmorDrop
+ private val armorPattern by RepoPattern.pattern(
+ "garden.armordrops.armor",
+ "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)"
+ )
+
+ private var hasArmor = false
+
private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker })
{ drawDisplay(it) }
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt
index 000772cbc..592705bb7 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt
@@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker
import at.hannibal2.skyhanni.utils.tracker.TrackerData
import com.google.gson.annotations.Expose
@@ -36,24 +37,41 @@ object DicerRngDropTracker {
var drops: MutableMap<CropType, MutableMap<DropRarity, Int>> = mutableMapOf()
}
- // TODO USE SH-REPO
- private val melonUncommonDropPattern =
- "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toPattern()
- private val melonRareDropPattern =
- "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toPattern()
- private val melonCrazyRareDropPattern =
- "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§[a|9]Enchanted Melon(?: Block)?§r§e!".toPattern()
- private val melonRngesusDropPattern =
- "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§9(\\d+)x §r§9Enchanted Melon Block§r§e!".toPattern()
-
- private val pumpkinUncommonDropPattern =
- "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toPattern()
- private val pumpkinRareDropPattern =
- "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toPattern()
- private val pumpkinCrazyRareDropPattern =
- "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toPattern()
- private val pumpkinRngesusDropPattern =
- "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§(aEnchanted|9Polished) Pumpkin§r§e!".toPattern()
+ private val melonPatternGroup = RepoPattern.group("garden.dicer.melon")
+ private val melonUncommonDropPattern by melonPatternGroup.pattern(
+ "uncommon",
+ "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!"
+ )
+ private val melonRareDropPattern by melonPatternGroup.pattern(
+ "rare",
+ "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!"
+ )
+ private val melonCrazyRareDropPattern by melonPatternGroup.pattern(
+ "crazyrare",
+ "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§[a|9]Enchanted Melon(?: Block)?§r§e!"
+ )
+ private val melonRngesusDropPattern by melonPatternGroup.pattern(
+ "rngesus",
+ "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§9(\\d+)x §r§9Enchanted Melon Block§r§e!"
+ )
+
+ private val pumpkinPatternGroup = RepoPattern.group("garden.dicer.pumpkin")
+ private val pumpkinUncommonDropPattern by pumpkinPatternGroup.pattern(
+ "uncommon",
+ "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!"
+ )
+ private val pumpkinRareDropPattern by pumpkinPatternGroup.pattern(
+ "rare",
+ "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!"
+ )
+ private val pumpkinCrazyRareDropPattern by pumpkinPatternGroup.pattern(
+ "crazyrare",
+ "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!"
+ )
+ private val pumpkinRngesusDropPattern by pumpkinPatternGroup.pattern(
+ "rngesus",
+ "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§(aEnchanted|9Polished) Pumpkin§r§e!"
+ )
init {
itemDrops.add(ItemDrop(CropType.MELON, DropRarity.UNCOMMON, melonUncommonDropPattern))
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt
index 89cac9417..c9e872d1d 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt
@@ -27,23 +27,44 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.math.round
import kotlin.time.Duration.Companion.days
-class CaptureFarmingGear {
-
+object CaptureFarmingGear {
private val farmingItems get() = GardenAPI.storage?.fortune?.farmingItems
private val outdatedItems get() = GardenAPI.storage?.fortune?.outdatedItems
- // TODO USE SH-REPO
- private val farmingLevelUpPattern = "SKILL LEVEL UP Farming .*➜(?<level>.*)".toPattern()
- private val fortuneUpgradePattern = "You claimed the Garden Farming Fortune (?<level>.*) upgrade!".toPattern()
- private val anitaBuffPattern = "You tiered up the Extra Farming Drops upgrade to [+](?<level>.*)%!".toPattern()
- private val anitaMenuPattern = "§7You have: §6\\+(?<level>.*)☘ Farming Fortune".toPattern()
-
- private val lotusUpgradePattern = "Lotus (?<piece>.*) upgraded to [+].*☘!".toPattern()
- private val petLevelUpPattern = "Your (?<pet>.*) leveled up to level .*!".toPattern()
-
- private val cakePattern = "(?:Big )?Yum! You (?:gain|refresh) [+]5☘ Farming Fortune for 48 hours!".toPattern()
-
private val patternGroup = RepoPattern.group("garden.fortuneguide.capture")
+ private val farmingLevelUpPattern by patternGroup.pattern(
+ "farminglevel",
+ "SKILL LEVEL UP Farming .*➜(?<level>.*)"
+ )
+ private val fortuneUpgradePattern by patternGroup.pattern(
+ "fortuneupgrade",
+ "You claimed the Garden Farming Fortune (?<level>.*) upgrade!"
+ )
+ private val anitaBuffPattern by patternGroup.pattern(
+ "anitabuff",
+ "You tiered up the Extra Farming Drops upgrade to [+](?<level>.*)%!"
+ )
+ private val anitaMenuPattern by patternGroup.pattern(
+ "anitamenu",
+ "§7You have: §6\\+(?<level>.*)☘ Farming Fortune"
+ )
+ private val lotusUpgradePattern by patternGroup.pattern(
+ "lotusupgrade",
+ "Lotus (?<piece>.*) upgraded to [+].*☘!"
+ )
+ private val petLevelUpPattern by patternGroup.pattern(
+ "petlevelup",
+ "Your (?<pet>.*) leveled up to level .*!"
+ )
+ private val cakePattern by patternGroup.pattern(
+ "cake",
+ "(?:Big )?Yum! You (?:gain|refresh) [+]5☘ Farming Fortune for 48 hours!"
+ )
+ private val strengthPattern by patternGroup.pattern(
+ "strength",
+ " Strength: §r§c❁(?<strength>.*)"
+ )
+
private val tierPattern by patternGroup.pattern(
"uniquevisitors.tier",
"§7Progress to Tier (?<nextTier>\\w+):.*"
@@ -53,69 +74,64 @@ class CaptureFarmingGear {
".* §e(?<having>.*)§6/(?<total>.*)"
)
- companion object {
-
- private val strengthPattern = " Strength: §r§c❁(?<strength>.*)".toPattern()
- private val farmingSets = arrayListOf(
- "FERMENTO", "SQUASH", "CROPIE", "MELON", "FARM",
- "RANCHERS", "FARMER", "RABBIT"
- )
- private val farmingItems get() = GardenAPI.storage?.fortune?.farmingItems
+ private val farmingSets = arrayListOf(
+ "FERMENTO", "SQUASH", "CROPIE", "MELON", "FARM",
+ "RANCHERS", "FARMER", "RABBIT"
+ )
- fun captureFarmingGear() {
- val farmingItems = farmingItems ?: return
- val itemStack = InventoryUtils.getItemInHand() ?: return
+ fun captureFarmingGear() {
+ val farmingItems = farmingItems ?: return
+ val itemStack = InventoryUtils.getItemInHand() ?: return
- val currentCrop = itemStack.getCropType()
+ val currentCrop = itemStack.getCropType()
- if (currentCrop == null) {
- // todo better fall back items
- // todo Daedalus axe
- } else {
- for (item in FarmingItems.entries) {
- if (item.name == currentCrop.name) {
- farmingItems[item] = itemStack
- }
+ if (currentCrop == null) {
+ //todo better fall back items
+ //todo Daedalus axe
+ } else {
+ for (item in FarmingItems.entries) {
+ if (item.name == currentCrop.name) {
+ farmingItems[item] = itemStack
}
}
- for (armor in InventoryUtils.getArmor()) {
- if (armor == null) continue
- val split = armor.getInternalName().asString().split("_")
- if (split.first() in farmingSets) {
- for (item in FarmingItems.entries) {
- if (item.name == split.last()) {
- farmingItems[item] = armor
- }
+ }
+ for (armor in InventoryUtils.getArmor()) {
+ if (armor == null) continue
+ val split = armor.getInternalName().asString().split("_")
+ if (split.first() in farmingSets) {
+ for (item in FarmingItems.entries) {
+ if (item.name == split.last()) {
+ farmingItems[item] = armor
}
}
}
- for (line in TabListData.getTabList()) {
- strengthPattern.matchMatcher(line) {
- GardenAPI.storage?.fortune?.farmingStrength = group("strength").toInt()
- }
+ }
+ for (line in TabListData.getTabList()) {
+ strengthPattern.matchMatcher(line) {
+ GardenAPI.storage?.fortune?.farmingStrength = group("strength").toInt()
}
}
+ }
- fun reverseCarrotFortune() {
- val storage = GardenAPI.storage?.fortune ?: return
- storage.carrotFortune = !storage.carrotFortune
- ChatUtils.chat("Toggled exportable carrot fortune to: ${storage.carrotFortune}")
- }
+ fun reverseCarrotFortune() {
+ val storage = GardenAPI.storage?.fortune ?: return
+ storage.carrotFortune = !storage.carrotFortune
+ ChatUtils.chat("Toggled exportable carrot fortune to: ${storage.carrotFortune}")
+ }
- fun reversePumpkinFortune() {
- val storage = GardenAPI.storage?.fortune ?: return
- storage.pumpkinFortune = !storage.pumpkinFortune
- ChatUtils.chat("Toggled expired pumpkin fortune to: ${storage.pumpkinFortune}")
- }
+ fun reversePumpkinFortune() {
+ val storage = GardenAPI.storage?.fortune ?: return
+ storage.pumpkinFortune = !storage.pumpkinFortune
+ ChatUtils.chat("Toggled expired pumpkin fortune to: ${storage.pumpkinFortune}")
+ }
- private fun getUniqueVisitorsForTier(tier: Int): Int {
- return when {
- tier == 0 -> 0
- tier == 1 -> 1
- tier == 2 -> 5
- tier >= 3 -> 10 * (tier - 2)
- else -> throw IllegalStateException("Unexpected unique visitors tier: $tier")
- }
+ private fun getUniqueVisitorsForTier(tier: Int): Int {
+ return when {
+ tier == 0 -> 0
+ tier == 1 -> 1
+ tier == 2 -> 5
+ tier >= 3 -> 10 * (tier - 2)
+ else -> throw IllegalStateException("Unexpected unique visitors tier: $tier")
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt
index c9271231c..1ebc5be3b 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt
@@ -14,11 +14,18 @@ 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.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class AnitaExtraFarmingFortune {
private val config get() = GardenAPI.config.anitaShop
+
+ private val realAmountPattern by RepoPattern.pattern(
+ "garden.inventory.anita.extrafortune.realamount",
+ "§5§o§aJacob's Ticket §8x(?<realAmount>.*)"
+ )
+
private var levelPrice = mapOf<Int, Price>()
@SubscribeEvent
@@ -34,7 +41,7 @@ class AnitaExtraFarmingFortune {
var contributionFactor = 1.0
val baseAmount = levelPrice[anitaUpgrade + 1]?.jacob_tickets ?: return
for (line in event.toolTip) {
- "§5§o§aJacob's Ticket §8x(?<realAmount>.*)".toPattern().matchMatcher(line) {
+ realAmountPattern.matchMatcher(line) {
val realAmount = group("realAmount").formatNumber().toDouble()
contributionFactor = realAmount / baseAmount
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenInventoryNumbers.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenInventoryNumbers.kt
index b87b7bf33..98e2ffb41 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenInventoryNumbers.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenInventoryNumbers.kt
@@ -11,13 +11,17 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class GardenInventoryNumbers {
private val config get() = GardenAPI.config.number
- private var patternUpgradeTier = "§7Current Tier: §[ea](?<tier>.*)§7/§a.*".toPattern()
+ private val upgradeTierPattern by RepoPattern.pattern(
+ "garden.inventory.numbers.upgradetier",
+ "§7Current Tier: §[ea](?<tier>.*)§7/§a.*"
+ )
@SubscribeEvent
fun onRenderItemTip(event: RenderItemTipEvent) {
@@ -36,7 +40,7 @@ class GardenInventoryNumbers {
if (!config.cropUpgrades) return
event.stack.getLore()
- .map { patternUpgradeTier.matcher(it) }
+ .map { upgradeTierPattern.matcher(it) }
.filter { it.matches() }
.map { it.group("tier") }
.forEach { event.stackTip = "" + it }
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt
index b304dd43e..81d01f2dd 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt
@@ -17,12 +17,17 @@ import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull
import at.hannibal2.skyhanni.utils.NumberUtil
import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class SkyMartCopperPrice {
- private val copperPattern = "§c(?<amount>.*) Copper".toPattern()
+ private val copperPattern by RepoPattern.pattern(
+ "garden.inventory.skymart.copper",
+ "§c(?<amount>.*) Copper"
+ )
+
private var display = emptyList<List<Any>>()
private val config get() = GardenAPI.config.skyMart
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestFinder.kt
index c46b73f01..976dc7ad7 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestFinder.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestFinder.kt
@@ -30,6 +30,7 @@ import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.StringUtils
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.renderables.Renderable
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.client.Minecraft
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@@ -39,8 +40,15 @@ class PestFinder {
private val config get() = PestAPI.config.pestFinder
- // TODO repo pattern
- private val pestsInScoreboardPattern = " §7⏣ §[ac]The Garden §4§lൠ§7 x(?<pests>.*)".toPattern()
+ private val patternGroup = RepoPattern.group("garden.pests.finder")
+ private val pestsInScoreboardPattern by patternGroup.pattern(
+ "scoreboard",
+ " §7⏣ §[ac]The Garden §4§lൠ§7 x(?<pests>.*)"
+ )
+ private val pestInventoryPattern by patternGroup.pattern(
+ "inventory",
+ "§4§lൠ §cThis plot has §6(?<amount>\\d) Pests?§c!"
+ )
private var display = emptyList<Renderable>()
private var lastTimeVacuumHold = SimpleTimeMark.farPast()
@@ -63,8 +71,6 @@ class PestFinder {
if (!isEnabled()) return
if (event.inventoryName != "Configure Plots") return
- val pestInventoryPattern = "§4§lൠ §cThis plot has §6(?<amount>\\d) Pests?§c!".toPattern()
-
for (plot in GardenPlotAPI.plots) {
plot.pests = 0
val item = event.inventoryItems[plot.inventorySlot] ?: continue
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestSpawn.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestSpawn.kt
index bc1ae651c..8a4fd511b 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestSpawn.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestSpawn.kt
@@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.utils.ConfigUtils
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.StringUtils
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.seconds
@@ -18,9 +19,15 @@ class PestSpawn {
private val config get() = PestAPI.config.pestSpawn
- private val patternOnePest = "§6§l.*! §7A §6Pest §7has appeared in §aPlot §7- §b(?<plot>.*)§7!".toPattern()
- private val patternMultiplePests =
- "§6§l.*! §6(?<amount>\\d) Pests §7have spawned in §aPlot §7- §b(?<plot>.*)§7!".toPattern()
+ private val patternGroup = RepoPattern.group("garden.pests.spawn")
+ private val onePestPattern by patternGroup.pattern(
+ "one",
+ "§6§l.*! §7A §6Pest §7has appeared in §aPlot §7- §b(?<plot>.*)§7!"
+ )
+ private val multiplePestSpawn by patternGroup.pattern(
+ "multiple",
+ "§6§l.*! §6(?<amount>\\d) Pests §7have spawned in §aPlot §7- §b(?<plot>.*)§7!"
+ )
@SubscribeEvent
fun onChat(event: LorenzChatEvent) {
@@ -28,11 +35,11 @@ class PestSpawn {
var blocked = false
- patternOnePest.matchMatcher(event.message) {
+ onePestPattern.matchMatcher(event.message) {
pestSpawn(1, group("plot"))
blocked = true
}
- patternMultiplePests.matchMatcher(event.message) {
+ multiplePestSpawn.matchMatcher(event.message) {
pestSpawn(group("amount").toInt(), group("plot"))
blocked = true
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt
index d8042272e..c34fcf433 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt
@@ -22,6 +22,7 @@ import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber
import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
object GardenVisitorDropStatistics {
@@ -36,13 +37,36 @@ object GardenVisitorDropStatistics {
var lastAccept = 0L
- private val acceptPattern = "OFFER ACCEPTED with (?<visitor>.*) [(](?<rarity>.*)[)]".toPattern()
- private val copperPattern = "[+](?<amount>.*) Copper".toPattern()
- private val gardenExpPattern = "[+](?<amount>.*) Garden Experience".toPattern()
- private val farmingExpPattern = "[+](?<amount>.*) Farming XP".toPattern()
- private val bitsPattern = "[+](?<amount>.*) Bits".toPattern()
- private val mithrilPowderPattern = "[+](?<amount>.*) Mithril Powder".toPattern()
- private val gemstonePowderPattern = "[+](?<amount>.*) Gemstone Powder".toPattern()
+ private val patternGroup = RepoPattern.group("garden.visitor.droptracker")
+ private val acceptPattern by patternGroup.pattern(
+ "accept",
+ "OFFER ACCEPTED with (?<visitor>.*) [(](?<rarity>.*)[)]"
+ )
+ private val copperPattern by patternGroup.pattern(
+ "copper",
+ "[+](?<amount>.*) Copper"
+ )
+ private val gardenExpPattern by patternGroup.pattern(
+ "gardenexp",
+ "[+](?<amount>.*) Garden Experience"
+ )
+ private val farmingExpPattern by patternGroup.pattern(
+ "farmingexp",
+ "[+](?<amount>.*) Farming XP"
+ )
+ private val bitsPattern by patternGroup.pattern(
+ "bits",
+ "[+](?<amount>.*) Bits"
+ )
+ private val mithrilPowderPattern by patternGroup.pattern(
+ "powder.mithril",
+ "[+](?<amount>.*) Mithril Powder"
+ )
+ private val gemstonePowderPattern by patternGroup.pattern(
+ "powder.gemstone",
+ "[+](?<amount>.*) Gemstone Powder"
+ )
+
private var rewardsCount = mapOf<VisitorReward, Int>()
private fun formatDisplay(map: List<List<Any>>): List<List<Any>> {
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt
index 1672857ff..d32b8e75d 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt
@@ -73,12 +73,26 @@ private val config get() = VisitorAPI.config
class GardenVisitorFeatures {
private var display = emptyList<List<Any>>()
- private val newVisitorArrivedMessage = ".* §r§ehas arrived on your §r§bGarden§r§e!".toPattern()
- private val copperPattern = " §8\\+§c(?<amount>.*) Copper".toPattern()
- private val gardenExperiencePattern = " §8\\+§2(?<amount>.*) §7Garden Experience".toPattern()
- private val visitorChatMessagePattern = "§e\\[NPC] (§.)?(?<name>.*)§f: §r.*".toPattern()
- private val partialAcceptedPattern by RepoPattern.pattern(
- "garden.visitor.partialaccepted",
+
+ private val patternGroup = RepoPattern.group("garden.visitor")
+ private val visitorArrivePattern by patternGroup.pattern(
+ "visitorarrive",
+ ".* §r§ehas arrived on your §r§bGarden§r§e!"
+ )
+ private val copperPattern by patternGroup.pattern(
+ "copper",
+ " §8\\+§c(?<amount>.*) Copper"
+ )
+ private val gardenExperiencePattern by patternGroup.pattern(
+ "gardenexperience",
+ " §8\\+§2(?<amount>.*) §7Garden Experience"
+ )
+ private val visitorChatMessagePattern by patternGroup.pattern(
+ "visitorchat",
+ "§e\\[NPC] (§.)?(?<name>.*)§f: §r.*"
+ )
+ private val partialAcceptedPattern by patternGroup.pattern(
+ "partialaccepted",
"§aYou gave some of the required items!"
)
@@ -456,8 +470,8 @@ class GardenVisitorFeatures {
}
@SubscribeEvent
- fun onChat(event: LorenzChatEvent) {
- if (config.hypixelArrivedMessage && newVisitorArrivedMessage.matcher(event.message).matches()) {
+ fun onChatMessage(event: LorenzChatEvent) {
+ if (config.hypixelArrivedMessage && visitorArrivePattern.matcher(event.message).matches()) {
event.blockedReason = "new_visitor_arrived"
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt
index 6518a2bd7..6d82115a6 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt
@@ -18,6 +18,7 @@ import at.hannibal2.skyhanni.utils.StringUtils.removeColor
import at.hannibal2.skyhanni.utils.TabListData
import at.hannibal2.skyhanni.utils.TimeUtils
import at.hannibal2.skyhanni.utils.TimeUtils.format
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.concurrent.fixedRateTimer
import kotlin.time.Duration
@@ -30,7 +31,12 @@ import kotlin.time.toDuration
class GardenVisitorTimer {
private val config get() = GardenAPI.config.visitors.timer
- private val pattern = "§b§lVisitors: §r§f\\((?<time>.*)\\)".toPattern()
+
+ private val timePattern by RepoPattern.pattern(
+ "garden.visitor.timer.time",
+ "§b§lVisitors: §r§f\\((?<time>.*)\\)"
+ )
+
private var display = ""
private var lastMillis = 0.seconds
private var sixthVisitorArrivalTime = SimpleTimeMark.farPast()
@@ -99,7 +105,7 @@ class GardenVisitorTimer {
return
}
- pattern.matchMatcher(line) {
+ timePattern.matchMatcher(line) {
val rawTime = group("time").removeColor()
if (lastTimerValue != rawTime) {
lastTimerUpdate = SimpleTimeMark.now()
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/NPCVisitorFix.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/NPCVisitorFix.kt
index 19edd0d28..ba4a5c80e 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/NPCVisitorFix.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/NPCVisitorFix.kt
@@ -27,7 +27,11 @@ object NPCVisitorFix {
private val storage get() = ProfileStorageData.profileSpecific?.garden
private val staticVisitors = listOf("Jacob", "Anita")
- private val barnSkinChangePattern by RepoPattern.pattern("garden.barn.skin.change", "§aChanging Barn skin to §r.*")
+
+ private val barnSkinChangePattern by RepoPattern.pattern(
+ "garden.barn.skin.change",
+ "§aChanging Barn skin to §r.*"
+ )
@SubscribeEvent
fun onInventoryOpen(event: InventoryOpenEvent) {