summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorThunderblade73 <85900443+Thunderblade73@users.noreply.github.com>2024-06-05 15:39:55 +0200
committerGitHub <noreply@github.com>2024-06-05 15:39:55 +0200
commit5a04ad230cc4fb94884b34f795124d3b65af07ea (patch)
treecace8dcaad1c989be42a52bff4a6da233642279f /src/main/java
parenteb4ab6eaafa17581df58a53fb4111fa96933d230 (diff)
downloadskyhanni-5a04ad230cc4fb94884b34f795124d3b65af07ea.tar.gz
skyhanni-5a04ad230cc4fb94884b34f795124d3b65af07ea.tar.bz2
skyhanni-5a04ad230cc4fb94884b34f795124d3b65af07ea.zip
Improvement: Refactor of /ff for Improved Modularity and Code Reusability (#873)
Co-authored-by: Cal <cwolfson58@gmail.com>
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt25
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt169
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CarrolynTable.kt58
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt535
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFInfos.kt153
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt242
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FarmingItems.kt186
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FarmingReforges.kt1
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt81
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrade.kt10
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt24
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/CropPage.kt122
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt430
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt185
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/CollectionUtils.kt43
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt176
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuideGUI.kt121
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuidePage.kt15
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuideRenderablePage.kt23
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuideScrollPage.kt31
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTab.kt67
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTablePage.kt33
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt117
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/renderables/RenderableUtils.kt11
31 files changed, 1553 insertions, 1350 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt
index 4f5f0aa50..fdedfdbab 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt
+++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt
@@ -12,7 +12,7 @@ import com.google.gson.JsonPrimitive
object ConfigUpdaterMigrator {
val logger = LorenzLogger("ConfigMigration")
- const val CONFIG_VERSION = 47
+ const val CONFIG_VERSION = 48
fun JsonElement.at(chain: List<String>, init: Boolean): JsonElement? {
if (chain.isEmpty()) return this
if (this !is JsonObject) return null
diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
index bd6cc8efe..89980d349 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
+++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
@@ -371,17 +371,11 @@ object Commands {
"Disables/enables the rendering of all skyhanni guis."
) { SkyHanniDebugsAndTests.toggleRender() }
registerCommand(
- "shcarrot",
- "Toggles receiving the 12 fortune from carrots"
- ) { CaptureFarmingGear.reverseCarrotFortune() }
- registerCommand(
- "shpumpkin",
- "Toggles receiving the 12 fortune from pumpkins"
- ) { CaptureFarmingGear.reversePumpkinFortune() }
- registerCommand(
- "shcocoabeans",
- "Toggles receiving the 12 fortune from cocoa beans"
- ) { CaptureFarmingGear.reverseCocoaBeansFortune() }
+ "shcarrolyn",
+ "Toggels if the specified crops effect is active from carrolyn"
+ ) {
+ CaptureFarmingGear.handelCarrolyn(it)
+ }
registerCommand(
"shrepostatus",
"Shows the status of all the mods constants"
diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
index d88ccb315..cbdc90978 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java
@@ -373,13 +373,7 @@ public class ProfileSpecificStorage {
public long cakeExpiring = -1L;
@Expose
- public boolean carrotFortune = false;
-
- @Expose
- public boolean pumpkinFortune = false;
-
- @Expose
- public boolean cocoaBeansFortune = false;
+ public Map<CropType, Boolean> carrolyn = new HashMap<>();
@Expose
public Map<FarmingItems, ItemStack> farmingItems = new HashMap<>();
diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt
index 49bde5993..87130298c 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.commands.tabcomplete
import at.hannibal2.skyhanni.events.TabCompletionEvent
import at.hannibal2.skyhanni.features.commands.PartyCommands
import at.hannibal2.skyhanni.features.commands.ViewRecipeCommand
+import at.hannibal2.skyhanni.features.garden.fortuneguide.CarrolynTable
import at.hannibal2.skyhanni.features.misc.CollectionTracker
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@@ -28,6 +29,7 @@ object TabComplete {
CollectionTracker.handleTabComplete(command)?.let { return it }
PartyCommands.customTabComplete(command)?.let { return it }
ViewRecipeCommand.customTabComplete(command)?.let { return it }
+ CarrolynTable.customTabComplete(command)?.let { return it }
return null
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
index b7480f259..3a661161e 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
@@ -1,5 +1,6 @@
package at.hannibal2.skyhanni.features.garden
+import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems
import net.minecraft.block.state.IBlockState
import net.minecraft.init.Blocks
import net.minecraft.init.Items
@@ -13,48 +14,49 @@ enum class CropType(
val baseDrops: Double,
iconSupplier: () -> ItemStack,
val simpleName: String,
+ val farmingItem: FarmingItems,
val replenish: Boolean = false,
) {
WHEAT(
"Wheat", "THEORETICAL_HOE_WHEAT", "CROPIE", 1.0,
- { ItemStack(Items.wheat) }, "wheat"
+ { ItemStack(Items.wheat) }, "wheat", FarmingItems.WHEAT
),
CARROT(
"Carrot", "THEORETICAL_HOE_CARROT", "CROPIE", 3.0,
- { ItemStack(Items.carrot) }, "carrot", replenish = true
+ { ItemStack(Items.carrot) }, "carrot", FarmingItems.CARROT, replenish = true
),
POTATO(
"Potato", "THEORETICAL_HOE_POTATO", "CROPIE", 3.0,
- { ItemStack(Items.potato) }, "potato", replenish = true
+ { ItemStack(Items.potato) }, "potato", FarmingItems.POTATO, replenish = true
),
NETHER_WART(
"Nether Wart", "THEORETICAL_HOE_WARTS", "FERMENTO", 2.5,
- { ItemStack(Items.nether_wart) }, "wart", replenish = true
+ { ItemStack(Items.nether_wart) }, "wart", FarmingItems.NETHER_WART, replenish = true
),
PUMPKIN(
"Pumpkin", "PUMPKIN_DICER", "SQUASH", 1.0,
- { ItemStack(Blocks.pumpkin) }, "pumpkin"
+ { ItemStack(Blocks.pumpkin) }, "pumpkin", FarmingItems.PUMPKIN
),
MELON(
"Melon", "MELON_DICER", "SQUASH", 5.0,
- { ItemStack(Items.melon) }, "melon"
+ { ItemStack(Items.melon) }, "melon", FarmingItems.MELON
),
COCOA_BEANS(
"Cocoa Beans", "COCO_CHOPPER", "SQUASH", 3.0,
- { ItemStack(Items.dye, 1, EnumDyeColor.BROWN.dyeDamage) }, "cocoa", replenish = true
+ { ItemStack(Items.dye, 1, EnumDyeColor.BROWN.dyeDamage) }, "cocoa", FarmingItems.COCOA_BEANS, replenish = true
),
SUGAR_CANE(
"Sugar Cane", "THEORETICAL_HOE_CANE", "FERMENTO", 2.0,
- { ItemStack(Items.reeds) }, "cane"
+ { ItemStack(Items.reeds) }, "cane", FarmingItems.SUGAR_CANE
),
CACTUS(
"Cactus", "CACTUS_KNIFE", "FERMENTO", 2.0,
- { ItemStack(Blocks.cactus) }, "cactus"
+ { ItemStack(Blocks.cactus) }, "cactus", FarmingItems.CACTUS
),
MUSHROOM(
"Mushroom", "FUNGI_CUTTER", "FERMENTO", 1.0,
- { ItemStack(Blocks.red_mushroom_block) }, "mushroom"
+ { ItemStack(Blocks.red_mushroom_block) }, "mushroom", FarmingItems.MUSHROOM
),
;
@@ -64,6 +66,9 @@ enum class CropType(
override fun toString(): String = cropName
+ val patternKeyName = name.lowercase().replace('_', '.')
+ val niceName = name.lowercase().replace('_', ' ')
+
companion object {
fun getByNameOrNull(itemName: String): CropType? {
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 0d75c9325..41ea1aa71 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
@@ -345,7 +345,8 @@ object FarmingFortuneDisplay {
// TODO code cleanup (after ff rework)
- for (line in tool?.getLore()!!) {
+ val lore = tool?.getLore() ?: return
+ for (line in lore) {
tooltipFortunePattern.matchMatcher(line) {
displayedFortune = group("display")?.toDouble() ?: 0.0
reforgeFortune = groupOrNull("reforge")?.toDouble() ?: 0.0
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt
index 6f8523c34..0aac3e747 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt
@@ -192,8 +192,9 @@ class FarmingWeightDisplay {
list.add(
Renderable.clickAndHover(
"§6Farming Weight§7: $weight$leaderboard",
- listOf("§eClick to open your Farming Profile."),
- onClick = { openWebsite(LorenzUtils.getPlayerName()) }
+ listOf("§eClick to open your Farming Profile."), onClick = {
+ openWebsite(LorenzUtils.getPlayerName())
+ }
)
)
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 55e756780..158d1309e 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
@@ -1,17 +1,21 @@
package at.hannibal2.skyhanni.features.garden.fortuneguide
+import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage
import at.hannibal2.skyhanni.data.PetAPI
import at.hannibal2.skyhanni.data.ProfileStorageData
import at.hannibal2.skyhanni.events.GardenToolChangeEvent
import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.features.garden.CropType
import at.hannibal2.skyhanni.features.garden.FarmingFortuneDisplay
import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.GardenAPI.getCropType
import at.hannibal2.skyhanni.utils.ChatUtils
import at.hannibal2.skyhanni.utils.InventoryUtils
+import at.hannibal2.skyhanni.utils.ItemCategory
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
+import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull
import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.LorenzUtils
@@ -29,7 +33,6 @@ import kotlin.math.round
import kotlin.time.Duration.Companion.days
object CaptureFarmingGear {
- private val farmingItems get() = GardenAPI.storage?.fortune?.farmingItems
private val outdatedItems get() = GardenAPI.storage?.fortune?.outdatedItems
private val patternGroup = RepoPattern.group("garden.fortuneguide.capture")
@@ -80,9 +83,24 @@ object CaptureFarmingGear {
"RANCHERS", "FARMER", "RABBIT"
)
+ init {
+ CarrolynTable.entries.forEach {
+ it.completeMessagePattern
+ it.thxMessagePattern
+ }
+ }
+
// TODO upadte armor on equpment/wardeobe update as well
fun captureFarmingGear() {
- val farmingItems = farmingItems ?: return
+ for (armor in InventoryUtils.getArmor()) {
+ if (armor == null) continue
+ val split = armor.getInternalName().asString().split("_")
+ if (split.first() in farmingSets) {
+ val category = armor.getItemCategoryOrNull() ?: continue
+ FarmingItems.getFromItemCategoryOne(category)?.setItem(armor)
+ }
+ }
+
val itemStack = InventoryUtils.getItemInHand() ?: return
val currentCrop = itemStack.getCropType()
@@ -91,22 +109,7 @@ object CaptureFarmingGear {
//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
- }
- }
- }
+ currentCrop.farmingItem.setItem(itemStack)
}
TabListData.getTabList().matchFirst(strengthPattern) {
@@ -114,22 +117,13 @@ object CaptureFarmingGear {
}
}
- 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 reverseCocoaBeansFortune() {
- val storage = GardenAPI.storage?.fortune ?: return
- storage.cocoaBeansFortune = !storage.cocoaBeansFortune
- ChatUtils.chat("Toggled supreme chocolate bar fortune to: ${storage.cocoaBeansFortune}")
+ fun handelCarrolyn(input: Array<String>) {
+ val string = input.joinToString("_").uppercase()
+ val crop = CropType.entries.firstOrNull { it.name == string }
+ ?: ChatUtils.userError("Invalid Argument, no crop with the name: $string").run { return }
+ val carrolyn = CarrolynTable.getByCrop(crop)
+ ?: ChatUtils.userError("Invalid Argument, crop is not valid").run { return }
+ carrolyn.setVisibleActive(!carrolyn.get())
}
private fun getUniqueVisitorsForTier(tier: Int): Int {
@@ -151,15 +145,14 @@ object CaptureFarmingGear {
fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
if (!LorenzUtils.inSkyBlock) return
val storage = GardenAPI.storage?.fortune ?: return
- val farmingItems = farmingItems ?: return
val outdatedItems = outdatedItems ?: return
val items = event.inventoryItems
if (PetAPI.isPetMenu(event.inventoryName)) {
- pets(farmingItems, items, outdatedItems)
+ pets(items, outdatedItems)
return
}
when (event.inventoryName) {
- "Your Equipment and Stats" -> equipmentAndStats(items, farmingItems, outdatedItems)
+ "Your Equipment and Stats" -> equipmentAndStats(items, outdatedItems)
"Your Skills" -> skills(items, storage)
"Community Shop" -> communityShop(items)
"Configure Plots" -> configurePlots(items, storage)
@@ -248,69 +241,54 @@ object CaptureFarmingGear {
}
private fun pets(
- farmingItems: MutableMap<FarmingItems, ItemStack>,
items: Map<Int, ItemStack>,
outdatedItems: MutableMap<FarmingItems, Boolean>,
) {
// If they've 2 of same pet, one will be overwritten
- // optimize
-
- for (pet in listOf(
- FarmingItems.ELEPHANT,
- FarmingItems.MOOSHROOM_COW,
- FarmingItems.RABBIT,
- FarmingItems.BEE
- )) {
- if (farmingItems[pet] == null) {
- farmingItems[pet] = FFGuideGUI.getFallbackItem(pet)
- }
- }
// setting to current saved level -1 to stop later pages saving low rarity pets
- var highestElephantRarity = (farmingItems[FarmingItems.ELEPHANT]?.getItemRarityOrNull()?.id ?: -1) - 1
- var highestMooshroomRarity = (farmingItems[FarmingItems.MOOSHROOM_COW]?.getItemRarityOrNull()?.id ?: -1) - 1
- var highestRabbitRarity = (farmingItems[FarmingItems.RABBIT]?.getItemRarityOrNull()?.id ?: -1) - 1
- var highestBeeRarity = (farmingItems[FarmingItems.BEE]?.getItemRarityOrNull()?.id ?: -1) - 1
+ var highestElephantRarity = (FarmingItems.ELEPHANT.getItemOrNull()?.getItemRarityOrNull()?.id ?: -1) - 1
+ var highestMooshroomRarity = (FarmingItems.MOOSHROOM_COW.getItemOrNull()?.getItemRarityOrNull()?.id ?: -1) - 1
+ var highestRabbitRarity = (FarmingItems.RABBIT.getItemOrNull()?.getItemRarityOrNull()?.id ?: -1) - 1
+ var highestBeeRarity = (FarmingItems.BEE.getItemOrNull()?.getItemRarityOrNull()?.id ?: -1) - 1
for ((_, item) in items) {
- val split = item.getInternalName().asString().split(";")
- if (split.first() == "ELEPHANT" && split.last().toInt() > highestElephantRarity) {
- farmingItems[FarmingItems.ELEPHANT] = item
+ if (item.getItemCategoryOrNull() != ItemCategory.PET) continue
+ val (name, rarity) = item.getInternalName().asString().split(";")
+ if (name == "ELEPHANT" && rarity.toInt() > highestElephantRarity) {
+ FarmingItems.ELEPHANT.setItem(item)
outdatedItems[FarmingItems.ELEPHANT] = false
- highestElephantRarity = split.last().toInt()
+ highestElephantRarity = rarity.toInt()
}
- if (split.first() == "MOOSHROOM_COW" && split.last().toInt() > highestMooshroomRarity) {
- farmingItems[FarmingItems.MOOSHROOM_COW] = item
+ if (name == "MOOSHROOM_COW" && rarity.toInt() > highestMooshroomRarity) {
+ FarmingItems.MOOSHROOM_COW.setItem(item)
outdatedItems[FarmingItems.MOOSHROOM_COW] = false
- highestMooshroomRarity = split.last().toInt()
+ highestMooshroomRarity = rarity.toInt()
}
- if (split.first() == "RABBIT" && split.last().toInt() > highestRabbitRarity) {
- farmingItems[FarmingItems.RABBIT] = item
+ if (name == "RABBIT" && rarity.toInt() > highestRabbitRarity) {
+ FarmingItems.RABBIT.setItem(item)
outdatedItems[FarmingItems.RABBIT] = false
- highestRabbitRarity = split.last().toInt()
+ highestRabbitRarity = rarity.toInt()
}
- if (split.first() == "BEE" && split.last().toInt() > highestBeeRarity) {
- farmingItems[FarmingItems.BEE] = item
+ if (name == "BEE" && rarity.toInt() > highestBeeRarity) {
+ FarmingItems.BEE.setItem(item)
outdatedItems[FarmingItems.BEE] = false
- highestBeeRarity = split.last().toInt()
+ highestBeeRarity = rarity.toInt()
}
}
}
private fun equipmentAndStats(
items: Map<Int, ItemStack>,
- farmingItems: MutableMap<FarmingItems, ItemStack>,
outdatedItems: MutableMap<FarmingItems, Boolean>,
) {
for ((_, slot) in items) {
val split = slot.getInternalName().asString().split("_")
+ val category = slot.getItemCategoryOrNull() ?: continue
if (split.first() == "LOTUS") {
- for (item in FarmingItems.entries) {
- if (item.name == split.last()) {
- farmingItems[item] = slot
- outdatedItems[item] = false
- }
- }
+ val item = FarmingItems.getFromItemCategoryOne(category) ?: continue
+ item.setItem(slot)
+ outdatedItems[item] = false
FarmingFortuneDisplay.loadFortuneLineData(slot, 0.0)
val enchantments = slot.getEnchantments() ?: emptyMap()
val greenThumbLvl = (enchantments["green_thumb"] ?: continue)
@@ -328,12 +306,15 @@ object CaptureFarmingGear {
val msg = event.message.removeColor().trim()
fortuneUpgradePattern.matchMatcher(msg) {
ProfileStorageData.playerSpecific?.gardenCommunityUpgrade = group("level").romanToDecimal()
+ return
}
farmingLevelUpPattern.matchMatcher(msg) {
storage.farmingLevel = group("level").romanToDecimalIfNecessary()
+ return
}
anitaBuffPattern.matchMatcher(msg) {
storage.anitaUpgrade = group("level").toInt() / 4
+ return
}
lotusUpgradePattern.matchMatcher(msg) {
val piece = group("piece").uppercase()
@@ -342,6 +323,7 @@ object CaptureFarmingGear {
outdatedItems[item] = true
}
}
+ return
}
petLevelUpPattern.matchMatcher(msg) {
val pet = group("pet").uppercase().replace("✦", "").trim().replace(" ", "_")
@@ -350,30 +332,29 @@ object CaptureFarmingGear {
outdatedItems[item] = true
}
}
+ return
}
cakePattern.matchMatcher(msg) {
storage.cakeExpiring = System.currentTimeMillis() + 2.days.inWholeMilliseconds
+ return
}
- if (msg == "CARROTS EXPORTATION COMPLETE!") {
- storage.carrotFortune = true
- }
- if (msg == "PUMPKINS EXPORTATION COMPLETE!") {
- storage.pumpkinFortune = true
- }
- if (msg == "CHOCOLATE BARS EXPORTATION COMPLETE!") {
- storage.cocoaBeansFortune = true
- }
- if (msg == "[NPC] Carrolyn: Thank you for the carrots.") {
- storage.carrotFortune = true
- ChatUtils.chat("§aYou have already given Carrolyn enough Exportable Carrots.")
- }
- if (msg == "[NPC] Carrolyn: Thank you for the pumpkins.") {
- storage.pumpkinFortune = true
- ChatUtils.chat("§aYou have already given Carrolyn enough Expired Pumpkins.")
- }
- if (msg == "[NPC] Carrolyn: Thank you for the chocolate.") {
- storage.cocoaBeansFortune = true
- ChatUtils.chat("§aYou have already given Carrolyn enough Supreme Chocolate Bars.")
+ CarrolynTable.entries.forEach {
+ it.completeMessagePattern.matchMatcher(msg) {
+ it.set(true)
+ return
+ }
+ it.thxMessagePattern.matchMatcher(msg) {
+ it.set(true)
+ ChatUtils.chat(it.thxResponse)
+ return
+ }
}
}
+
+ @SubscribeEvent
+ fun onConfigUpdaterMigratorConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
+ event.move(48, "#profile.garden.fortune.carrotFortune", "#profile.garden.fortune.carrolyn.CARROT")
+ event.move(48, "#profile.garden.fortune.pumpkinFortune", "#profile.garden.fortune.carrolyn.PUMPKIN")
+ event.move(48, "#profile.garden.fortune.cocoaBeansFortune", "#profile.garden.fortune.carrolyn.COCOA_BEANS")
+ }
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CarrolynTable.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CarrolynTable.kt
new file mode 100644
index 000000000..b7163768b
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CarrolynTable.kt
@@ -0,0 +1,58 @@
+package at.hannibal2.skyhanni.features.garden.fortuneguide
+
+import at.hannibal2.skyhanni.features.garden.CropType
+import at.hannibal2.skyhanni.features.garden.GardenAPI
+import at.hannibal2.skyhanni.utils.ChatUtils
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
+
+enum class CarrolynTable(val crop: CropType, val label: String, completeMessage: String, thxMessage: String) {
+ EXPORTABLE_CARROTS(
+ CropType.CARROT,
+ "Exportable Carrots",
+ "CARROTS EXPORTATION COMPLETE!",
+ "[NPC] Carrolyn: Thank you for the carrots."
+ ),
+ EXPIRED_PUMPKIN(
+ CropType.PUMPKIN,
+ "Expired Pumpkin",
+ "PUMPKINS EXPORTATION COMPLETE!",
+ "[NPC] Carrolyn: Thank you for the pumpkins."
+ ),
+ SUPREME_CHOCOLATE_BAR(
+ CropType.COCOA_BEANS,
+ "Supreme Chocolate Bar",
+ "CHOCOLATE BARS EXPORTATION COMPLETE!",
+ "[NPC] Carrolyn: Thank you for the chocolate."
+ ),
+ ;
+
+ val completeMessagePattern by RepoPattern.pattern(
+ "garden.ff.carrolyn.complete.${crop.patternKeyName}", completeMessage
+ )
+ val thxMessagePattern by RepoPattern.pattern(
+ "garden.ff.carrolyn.thx.${crop.patternKeyName}", thxMessage
+ )
+
+ val thxResponse = "§aYou have already given Carrolyn enough $label."
+
+ fun get() = GardenAPI.storage?.fortune?.carrolyn?.get(crop) ?: false
+ fun set(value: Boolean) = GardenAPI.storage?.fortune?.carrolyn?.set(crop, value)
+
+ fun setVisibleActive(value: Boolean) {
+ set(value)
+ ChatUtils.chat("Toggled $label fortune to: ${get()}")
+ }
+
+ companion object {
+ fun getByCrop(crop: CropType?) = if (crop == null) null else entries.firstOrNull { it.crop == crop }
+
+ fun isCarrolynCrop(crop: CropType): Boolean = CarrolynTable.getByCrop(crop) != null
+ fun customTabComplete(command: String): List<String>? {
+ if (command == "shcarrolyn") {
+ return entries.map { it.crop.name }
+ }
+
+ return null
+ }
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt
index 0cafabd1c..ff81cae6d 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt
+++ b/