aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/garden/contest
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/garden/contest')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt157
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt41
2 files changed, 135 insertions, 63 deletions
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 7b0f01015..cf304c0db 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
@@ -35,64 +35,7 @@ class JacobContestTimeNeeded {
val sorted = mutableMapOf<CropType, Double>()
val map = mutableMapOf<CropType, Renderable>()
for (crop in CropType.entries) {
- val speed = crop.getSpeed()
- if (speed == null) {
- sorted[crop] = Double.MAX_VALUE
- map[crop] = Renderable.hoverTips(
- "§9${crop.cropName} §cNo speed data!",
- listOf("§cFarm ${crop.cropName} to show data!")
- )
- continue
- }
-
- val averages = FarmingContestAPI.calculateAverages(crop).second
- if (averages.isEmpty()) {
- sorted[crop] = Double.MAX_VALUE - 2
- map[crop] = Renderable.hoverTips(
- "§9${crop.cropName} §cNo contest data!",
- listOf(
- "§cOpen more pages or participate",
- "§cin a ${crop.cropName} Contest to show data!"
- )
- )
- continue
- }
- var showLine = ""
- val brackets = mutableListOf<String>()
- for ((bracket, amount) in averages) {
- val timeInMinutes = amount.toDouble() / speed / 60
- val formatDuration = TimeUtils.formatDuration((timeInMinutes * 60 * 1000).toLong())
- val color = if (timeInMinutes < 20) "§b" else "§c"
- val line: String
- var bracketText = "${bracket.displayName} $color$formatDuration"
- if (timeInMinutes < 20) {
- line = "§9${crop.cropName} §b$formatDuration"
- } else {
- line =
- "§9${crop.cropName} §cNo ${currentBracket.displayName} §cMedal!"
- val cropFF = crop.getLatestTrueFarmingFortune() ?: 0.0
- val blocksPerSecond = crop.getLatestBlocksPerSecond() ?: 20.0
- val cropsPerSecond = amount.toDouble() / blocksPerSecond / 60
- val ffNeeded = cropsPerSecond * 100 / 20 / crop.baseDrops
- val missing = (ffNeeded - cropFF).toInt()
- bracketText += " §7(${missing.addSeparators()} more FF needed!)"
- }
- brackets.add(bracketText)
- if (bracket == currentBracket) {
- sorted[crop] = timeInMinutes
- showLine = line
- }
- }
- map[crop] = Renderable.hoverTips(showLine, buildList {
- add("§7Time Needed for §9${crop.cropName} Medals§7:")
- addAll(brackets)
- add("")
- val latestFF = crop.getLatestTrueFarmingFortune() ?: 0.0
- add("§7Latest FF: §e${(latestFF).addSeparators()}")
- val bps = crop.getLatestBlocksPerSecond()?.round(1) ?: 0
- add("§7Blocks/Second: §e${bps.addSeparators()}")
-
- })
+ testCrop(crop, sorted, map)
}
this.display = buildList {
@@ -115,6 +58,104 @@ class JacobContestTimeNeeded {
}
}
+ private fun testCrop(
+ crop: CropType,
+ sorted: MutableMap<CropType, Double>,
+ map: MutableMap<CropType, Renderable>
+ ) {
+ val speed = crop.getSpeed()
+ if (speed == null) {
+ sorted[crop] = Double.MAX_VALUE
+ map[crop] = Renderable.hoverTips(
+ "§9${crop.cropName} §cNo speed data!",
+ listOf("§cFarm ${crop.cropName} to show data!")
+ )
+ return
+ }
+
+ val averages = FarmingContestAPI.calculateAverages(crop).second
+ if (averages.isEmpty()) {
+ sorted[crop] = Double.MAX_VALUE - 2
+ map[crop] = Renderable.hoverTips(
+ "§9${crop.cropName} §cNo contest data!",
+ listOf(
+ "§cOpen more pages or participate",
+ "§cin a ${crop.cropName} Contest to show data!"
+ )
+ )
+ return
+ }
+
+ renderCrop(speed, crop, averages, sorted, map)
+ }
+
+ private fun renderCrop(
+ speed: Int,
+ crop: CropType,
+ averages: Map<ContestBracket, Int>,
+ sorted: MutableMap<CropType, Double>,
+ map: MutableMap<CropType, Renderable>
+ ) {
+ var lowBPSWarning = listOf<String>()
+ val rawSpeed = speed.toDouble()
+ val speedForFormular = crop.getLatestBlocksPerSecond()?.let {
+ if (it < 15) {
+ val v = rawSpeed / it
+ (v * 19.9).toInt()
+ } else speed
+ } ?: speed
+ var showLine = ""
+ val brackets = mutableListOf<String>()
+ for ((bracket, amount) in averages) {
+ val timeInMinutes = amount.toDouble() / speedForFormular / 60
+ val formatDuration = TimeUtils.formatDuration((timeInMinutes * 60 * 1000).toLong())
+ val color = if (timeInMinutes < 20) "§b" else "§c"
+ var marking = ""
+ var bracketText = "${bracket.displayName} $color$formatDuration"
+ var blocksPerSecond = crop.getLatestBlocksPerSecond()
+ if (blocksPerSecond == null) {
+ marking += "§0§l !" //hoping this never shows
+ blocksPerSecond = 19.9
+ lowBPSWarning = listOf("§cYour Blocks/second is too low,", "§cshowing 19.9 Blocks/second instead!")
+ } else {
+ if (blocksPerSecond < 15.0) {
+ marking += "§4§l !"
+ blocksPerSecond = 19.9
+ lowBPSWarning =
+ listOf("§cYour Blocks/second is too low,", "§cshowing 19.9 Blocks/second instead!")
+ } else {
+ marking += " "
+ lowBPSWarning = listOf("§aYour Blocks/second is good :)")
+ }
+ }
+ val line = if (timeInMinutes < 20) {
+ "§9${crop.cropName} §b$formatDuration" + marking
+ } else {
+ val cropFF = crop.getLatestTrueFarmingFortune() ?: 0.0
+ val cropsPerSecond = amount.toDouble() / blocksPerSecond / 60
+ val ffNeeded = cropsPerSecond * 100 / 20 / crop.baseDrops
+ val missing = (ffNeeded - cropFF).toInt()
+ bracketText += " §7(${missing.addSeparators()} more FF needed!)"
+ "§9${crop.cropName} §cNo ${currentBracket.displayName} §cMedal!" + marking
+ }
+ brackets.add(bracketText)
+ if (bracket == currentBracket) {
+ sorted[crop] = timeInMinutes
+ showLine = line
+ }
+ }
+ map[crop] = Renderable.hoverTips(showLine, buildList {
+ add("§7Time Needed for §9${crop.cropName} Medals§7:")
+ addAll(brackets)
+ add("")
+ val latestFF = crop.getLatestTrueFarmingFortune() ?: 0.0
+ add("§7Latest FF: §e${(latestFF).addSeparators()}")
+ val bps = crop.getLatestBlocksPerSecond()?.round(1) ?: 0
+ add("§7Blocks/Second: §e${bps.addSeparators()}")
+ addAll(lowBPSWarning)
+ })
+ }
+
@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent.ChestBackgroundRenderEvent) {
if (!isEnabled()) return
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt
index 61bd56198..29333d205 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt
@@ -1,15 +1,13 @@
package at.hannibal2.skyhanni.features.garden.contest
import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.events.GuiContainerEvent
-import at.hannibal2.skyhanni.events.InventoryCloseEvent
-import at.hannibal2.skyhanni.events.InventoryUpdatedEvent
-import at.hannibal2.skyhanni.events.LorenzToolTipEvent
+import at.hannibal2.skyhanni.events.*
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzColor
import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.RenderUtils.drawSlotText
import at.hannibal2.skyhanni.utils.RenderUtils.highlight
import net.minecraft.client.gui.inventory.GuiChest
import net.minecraft.inventory.ContainerChest
@@ -18,7 +16,6 @@ import java.text.SimpleDateFormat
import java.util.*
class JacobFarmingContestsInventory {
-
private val duplicateSlots = mutableListOf<Int>()
private val realTime = mutableMapOf<Int, String>()
@@ -28,6 +25,7 @@ class JacobFarmingContestsInventory {
// Render the contests a tick delayed to feel smoother
private var hideEverything = true
+ private val contestEarnedPattern = "§7You earned a §(?<medalColour>.*)§l.* §7medal!".toPattern()
@SubscribeEvent
fun onInventoryClose(event: InventoryCloseEvent) {
@@ -142,4 +140,37 @@ class JacobFarmingContestsInventory {
}
}
}
+
+ @SubscribeEvent
+ fun onRenderItemOverlayPost(event: GuiRenderItemEvent.RenderOverlayEvent.GuiRenderItemPost) {
+ if (!LorenzUtils.inSkyBlock) return
+ if (!config.jacobFarmingContestMedalIcon) return
+ if (!InventoryUtils.openInventoryName().contains("Your Contests")) return
+
+ val stack = event.stack ?: return
+ var finneganContest = false
+
+ for (line in stack.getLore()) {
+ if (line.contains("Contest boosted by Finnegan!")) finneganContest = true
+
+ val matcher = contestEarnedPattern.matcher(line)
+ if (matcher.matches()) {
+ val medalEarned = ContestBracket.entries.find { it.color == matcher.group("medalColour") } ?: return
+
+ var stackTip = "§${medalEarned.color}✦"
+ var x = event.x + 9
+ var y = event.y + 1
+ var scale = .7f
+
+ if (finneganContest && config.jacobFarmingContestFinneganIcon) {
+ stackTip = "§${medalEarned.color}▲"
+ x = event.x + 5
+ y = event.y - 2
+ scale = 1.3f
+ }
+
+ event.drawSlotText(x, y, stackTip, scale)
+ }
+ }
+ }
} \ No newline at end of file