summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-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
17 files changed, 1047 insertions, 1184 deletions
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/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt
@@ -2,528 +2,95 @@ package at.hannibal2.skyhanni.features.garden.fortuneguide
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.features.garden.CropType
-import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.CropPage
import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.OverviewPage
import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.UpgradePage
-import at.hannibal2.skyhanni.utils.ChatUtils
-import at.hannibal2.skyhanni.utils.GuiRenderUtils
-import at.hannibal2.skyhanni.utils.ItemUtils.name
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.OSUtils
-import at.hannibal2.skyhanni.utils.SoundUtils
+import at.hannibal2.skyhanni.utils.guide.GuideGUI
+import at.hannibal2.skyhanni.utils.guide.GuideTab
+import at.hannibal2.skyhanni.utils.renderables.Renderable
import net.minecraft.client.Minecraft
-import net.minecraft.client.gui.GuiScreen
-import net.minecraft.client.renderer.GlStateManager
import net.minecraft.init.Blocks
import net.minecraft.init.Items
import net.minecraft.item.ItemStack
-import org.lwjgl.input.Mouse
-import java.io.IOException
-open class FFGuideGUI : GuiScreen() {
- companion object {
-
- private var firefoxTrials = 0
-
- fun open() {
- if (LorenzUtils.isAprilFoolsDay) {
- when (firefoxTrials) {
- 0 -> {
- ChatUtils.chat("Are you looking for the FF browser?", prefix = false)
- }
-
- 1 -> {
- ChatUtils.chat("Quickly, download Firefox! NOW!", prefix = false)
- OSUtils.openBrowser("https://www.mozilla.org/en-US/firefox/new/")
- }
-
- 2 -> {
- ChatUtils.chat("Have you tried Firefix from Mozilla already?", prefix = false)
- }
-
- 10 -> {
- ChatUtils.chat("Firefox is simply the best!", prefix = false)
- }
-
- 20 -> {
- ChatUtils.chat(
- "What do you mean with \"farming fortune\"? This is a web browser!",
- prefix = false
- )
- }
-
- 30 -> {
- ChatUtils.chat("What are you still doing here? get Firefox!", prefix = false)
- }
-
- else -> {
- CaptureFarmingGear.captureFarmingGear()
- SkyHanniMod.screenToOpen = FFGuideGUI()
- }
- }
- firefoxTrials++
- } else {
- CaptureFarmingGear.captureFarmingGear()
- SkyHanniMod.screenToOpen = FFGuideGUI()
- }
- }
-
- val pages = mutableMapOf<FortuneGuidePage, FFGuidePage>()
-
- var guiLeft = 0
- var guiTop = 0
- var screenHeight = 0
-
- const val sizeX = 360
- const val sizeY = 180
+class FFGuideGUI : GuideGUI<FFGuideGUI.FortuneGuidePage>(FortuneGuidePage.OVERVIEW) {
- var selectedPage = FortuneGuidePage.OVERVIEW
- var currentCrop: CropType? = null
+ override val sizeX = 360
+ override val sizeY = 180
- // todo set this to what they have equip
- var currentPet = FarmingItems.ELEPHANT
- var currentArmor = 0
- var currentEquipment = 0
-
- var mouseX = 0
- var mouseY = 0
- var lastMouseScroll = 0
- var noMouseScrollFrames = 0
- var lastClickedHeight = 0
-
- var tooltipToDisplay = mutableListOf<String>()
+ companion object {
fun isInGui() = Minecraft.getMinecraft().currentScreen is FFGuideGUI
- fun FarmingItems.getItem(): ItemStack {
- val fortune = GardenAPI.storage?.fortune ?: return getFallbackItem(this)
-
- val farmingItems = fortune.farmingItems
- farmingItems[this]?.let { return it }
-
- val fallbackItem = getFallbackItem(this)
- farmingItems[this] = fallbackItem
- return fallbackItem
+ fun open() {
+ CaptureFarmingGear.captureFarmingGear()
+ SkyHanniMod.screenToOpen = FFGuideGUI()
}
- private val fallbackItems = mutableMapOf<FarmingItems, ItemStack>()
-
- fun getFallbackItem(item: FarmingItems) = fallbackItems.getOrPut(item) {
- val name = "§cNo saved ${item.name.lowercase().replace("_", " ")}"
- ItemStack(Blocks.barrier).setStackDisplayName(name)
+ fun updateDisplay() {
+ with(Minecraft.getMinecraft().currentScreen) {
+ if (this !is FFGuideGUI) return
+ this.refreshPage()
+ }
}
-
- fun isFallbackItem(item: ItemStack) = item.name.startsWith("§cNo saved ")
}
+ /** Value for which crop page is active */
+ private var currentCrop: CropType? = null
+
init {
FFStats.loadFFData()
FortuneUpgrades.generateGenericUpgrades()
- pages[FortuneGuidePage.OVERVIEW] = OverviewPage()
- pages[FortuneGuidePage.CROP] = CropPage()
- pages[FortuneGuidePage.UPGRADES] = UpgradePage()
+ FarmingItems.setDefaultPet()
- if (currentCrop != null) {
- for (item in FarmingItems.entries) {
- if (item.name == currentCrop?.name) {
- FFStats.getCropStats(currentCrop!!, item.getItem())
+ pageList = mapOf(
+ FortuneGuidePage.OVERVIEW to OverviewPage(sizeX, sizeY),
+ FortuneGuidePage.CROP to CropPage({ currentCrop!! }, sizeX, sizeY),
+ FortuneGuidePage.UPGRADES to UpgradePage({ currentCrop }, sizeX, sizeY - 2),
+ )
+ verticalTabs = listOf(
+ vTab(ItemStack(Items.gold_ingot), Renderable.string("§eBreakdown")) {
+ currentPage = if (currentCrop == null) FortuneGuidePage.OVERVIEW else FortuneGuidePage.CROP
+ },
+ vTab(ItemStack(Items.map), Renderable.string("§eUpgrades")) {
+ currentPage = FortuneGuidePage.UPGRADES
+ })
+ horizontalTabs = buildList {
+ add(
+ hTab(ItemStack(Blocks.grass), Renderable.string("§eOverview")) {
+ currentCrop = null
+
+ it.pageSwitchHorizontal()
}
- }
- }
- }
-
- override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) {
- super.drawScreen(unusedX, unusedY, partialTicks)
- drawDefaultBackground()
- screenHeight = height
- guiLeft = (width - sizeX) / 2
- guiTop = (height - sizeY) / 2
-
- mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth
- mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1
-
- GlStateManager.pushMatrix()
- drawRect(guiLeft, guiTop, guiLeft + sizeX, guiTop + sizeY, 0x50000000)
- renderTabs()
-
- if (selectedPage == FortuneGuidePage.UPGRADES) {
- //
- } else {
- GuiRenderUtils.drawStringCentered("§7SkyHanni", guiLeft + 325, guiTop + 170)
- if (currentCrop == null) {
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.HELMET.getItem(), guiLeft + 142, guiTop + 5, mouseX, mouseY,
- if (currentArmor == 1) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.CHESTPLATE.getItem(), guiLeft + 162, guiTop + 5, mouseX, mouseY,
- if (currentArmor == 2) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.LEGGINGS.getItem(), guiLeft + 182, guiTop + 5, mouseX, mouseY,
- if (currentArmor == 3) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.BOOTS.getItem(), guiLeft + 202, guiTop + 5, mouseX, mouseY,
- if (currentArmor == 4) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
+ )
+ for (crop in CropType.entries) {
+ add(
+ hTab(crop.icon, Renderable.string("§e${crop.cropName}")) {
+ currentCrop = crop
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.NECKLACE.getItem(), guiLeft + 262, guiTop + 5, mouseX, mouseY,
- if (currentEquipment == 1) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.CLOAK.getItem(), guiLeft + 282, guiTop + 5, mouseX, mouseY,
- if (currentEquipment == 2) 0xFFB3FFB3.toInt() else 0xFF43464B.toInt()
- )
- GuiRenderUtils.renderItemAndTip(
- tooltipToDisplay,
- FarmingItems.BELT.