-
-
Notifications
You must be signed in to change notification settings - Fork 216
/
Copy pathGeyserFishing.kt
82 lines (69 loc) · 3.14 KB
/
GeyserFishing.kt
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
package at.hannibal2.skyhanni.features.fishing.trophy
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.IslandType
import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
import at.hannibal2.skyhanni.events.ReceiveParticleEvent
import at.hannibal2.skyhanni.features.fishing.FishingAPI
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
import at.hannibal2.skyhanni.utils.LocationUtils.distanceTo
import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayerIgnoreY
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.RenderUtils.drawFilledBoundingBoxNea
import at.hannibal2.skyhanni.utils.SpecialColor
import net.minecraft.util.AxisAlignedBB
import net.minecraft.util.EnumParticleTypes
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.awt.Color
@SkyHanniModule
object GeyserFishing {
private val config get() = SkyHanniMod.feature.fishing.trophyFishing.geyserOptions
private val geyserOffset = LorenzVec(0.1f, 0.6f, 0.1f)
private var geyser: LorenzVec? = null
private var geyserBox: AxisAlignedBB? = null
@SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true)
fun onReceiveParticle(event: ReceiveParticleEvent) {
if (!shouldProcessParticles()) return
with(event) {
if (type != EnumParticleTypes.CLOUD || count != 15 || speed != 0.05f || offset != geyserOffset) return
}
geyser = event.location
val potentialGeyser = geyser ?: return
geyserBox = AxisAlignedBB(
potentialGeyser.x - 2, 118.0 - 0.1, potentialGeyser.z - 2,
potentialGeyser.x + 2, 118.0 - 0.09, potentialGeyser.z + 2
)
if (config.hideParticles && FishingAPI.bobber != null) {
hideGeyserParticles(event)
}
}
@SubscribeEvent
fun onWorldChange(event: LorenzWorldChangeEvent) {
geyser = null
geyserBox = null
}
@SubscribeEvent
fun onRenderWorld(event: LorenzRenderWorldEvent) {
if (!config.drawBox) return
val geyserBox = geyserBox ?: return
val geyser = geyser ?: return
if (geyser.distanceToPlayerIgnoreY() > 96) return
if (!IslandType.CRIMSON_ISLE.isInIsland()) return
if (config.onlyWithRod && !FishingAPI.holdingLavaRod) return
val color = config.boxColor.toChromaColor()
event.drawFilledBoundingBoxNea(geyserBox, color)
}
private fun hideGeyserParticles(event: ReceiveParticleEvent) {
val bobber = FishingAPI.bobber ?: return
val geyser = geyser ?: return
if (bobber.distanceTo(event.location) < 3 && bobber.distanceTo(geyser) < 3) {
event.cancel()
}
}
private fun shouldProcessParticles() =
IslandType.CRIMSON_ISLE.isInIsland() && LorenzUtils.skyBlockArea == "Blazing Volcano" && (config.hideParticles || config.drawBox)
}