blob: 71ac8b3216528a0f455e5bd6b255efcfd4844fb7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package at.hannibal2.skyhanni.features.garden
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.TitleUtils
import at.hannibal2.skyhanni.events.GardenToolChangeEvent
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.TabListUpdateEvent
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.isRancherSign
import at.hannibal2.skyhanni.utils.RenderUtils.renderString
import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.renderables.Renderable
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiEditSign
import net.minecraftforge.client.event.GuiOpenEvent
import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.seconds
class GardenOptimalSpeed {
private val config get() = SkyHanniMod.feature.garden
private val configCustomSpeed get() = config.optimalSpeedCustom
private var currentSpeed = 100
private var optimalSpeed = -1
private val currentSpeedPattern = " Speed: §r§f✦(?<speed>.*)".toPattern()
private var lastWarnTime = 0L
private var cropInHand: CropType? = null
private var rancherOverlayList: List<List<Any?>> = emptyList()
@SubscribeEvent
fun onTabListUpdate(event: TabListUpdateEvent) {
for (line in event.tabList) {
currentSpeedPattern.matchMatcher(line) {
currentSpeed = group("speed").toInt()
}
}
}
@SubscribeEvent
fun onGuiOpen(event: GuiOpenEvent) {
rancherOverlayList = CropType.entries.map { crop ->
listOf(crop.icon, Renderable.link("${crop.cropName} - ${crop.getOptimalSpeed()}") {
LorenzUtils.setTextIntoSign("${crop.getOptimalSpeed()}")
})
}
}
@SubscribeEvent
fun onGuiRender(event: DrawScreenEvent.Post) {
if (!isRancherOverlayEnabled()) return
val gui = event.gui
if (gui !is GuiEditSign) return
if (!gui.isRancherSign()) return
config.optimalSpeedSignPosition.renderStringsAndItems(
rancherOverlayList,
posLabel = "Optimal Speed Rancher Overlay"
)
}
@SubscribeEvent
fun onGardenToolChange(event: GardenToolChangeEvent) {
cropInHand = event.crop
if (isEnabled()) {
optimalSpeed = cropInHand.let { it?.getOptimalSpeed() ?: -1 }
}
}
private fun CropType.getOptimalSpeed() = when (this) {
CropType.WHEAT -> configCustomSpeed.wheat
CropType.CARROT -> configCustomSpeed.carrot
CropType.POTATO -> configCustomSpeed.potato
CropType.NETHER_WART -> configCustomSpeed.netherWart
CropType.PUMPKIN -> configCustomSpeed.pumpkin
CropType.MELON -> configCustomSpeed.melon
CropType.COCOA_BEANS -> configCustomSpeed.cocoaBeans
CropType.SUGAR_CANE -> configCustomSpeed.sugarCane
CropType.CACTUS -> configCustomSpeed.cactus
CropType.MUSHROOM -> configCustomSpeed.mushroom
}
@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent.GameOverlayRenderEvent) {
if (!isEnabled()) return
if (optimalSpeed == -1) return
val text = "Optimal Speed: §f$optimalSpeed"
if (optimalSpeed != currentSpeed) {
config.optimalSpeedPos.renderString("§c$text", posLabel = "Garden Optimal Speed")
warn()
} else {
config.optimalSpeedPos.renderString("§a$text", posLabel = "Garden Optimal Speed")
}
}
private fun warn() {
if (!config.optimalSpeedWarning) return
if (!Minecraft.getMinecraft().thePlayer.onGround) return
if (GardenAPI.onBarnPlot) return
if (System.currentTimeMillis() < lastWarnTime + 20_000) return
lastWarnTime = System.currentTimeMillis()
TitleUtils.sendTitle("§cWrong speed!", 3.seconds)
cropInHand?.let {
LorenzUtils.chat("§e[SkyHanni] Wrong speed for ${it.cropName}: §f$currentSpeed §e(§f$optimalSpeed §eis optimal)")
}
}
private fun isRancherOverlayEnabled() = GardenAPI.inGarden() && config.optimalSpeedSignEnabled
private fun isEnabled() = GardenAPI.inGarden() && config.optimalSpeedEnabled
}
|