diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestTimeNeeded.kt | 182 |
1 files changed, 100 insertions, 82 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 2cfde32ba..0c669e802 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,88 +35,7 @@ class JacobContestTimeNeeded { val sorted = mutableMapOf<CropType, Double>() val map = mutableMapOf<CropType, Renderable>() for (crop in CropType.entries) { - var lowBPSWarning = listOf<String>() - 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 - } - - 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) - }) + testCrop(crop, sorted, map) } this.display = buildList { @@ -139,6 +58,105 @@ 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> + ) { + val lowBPSWarning = listOf<String>() + var lowBPSWarning1 = lowBPSWarning + 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 + lowBPSWarning1 = listOf("§cYour Blocks/second is too low,", "§cshowing 19.9 Blocks/second instead!") + } else { + if (blocksPerSecond < 15.0) { + marking += "§4§l !" + blocksPerSecond = 19.9 + lowBPSWarning1 = + listOf("§cYour Blocks/second is too low,", "§cshowing 19.9 Blocks/second instead!") + } else { + marking += " " + lowBPSWarning1 = 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(lowBPSWarning1) + }) + } + @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.ChestBackgroundRenderEvent) { if (!isEnabled()) return |