summaryrefslogtreecommitdiff
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.farmi