diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/garden/contest')
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 |
