Skip to content

Commit

Permalink
Smarter check if the player is fishing for all fishing related displays.
Browse files Browse the repository at this point in the history
  • Loading branch information
hannibal002 committed Jan 22, 2024
1 parent 187dfb1 commit 09045cb
Show file tree
Hide file tree
Showing 10 changed files with 135 additions and 85 deletions.
4 changes: 2 additions & 2 deletions src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ import at.hannibal2.skyhanni.features.fame.CityProjectFeatures
import at.hannibal2.skyhanni.features.fishing.ChumBucketHider
import at.hannibal2.skyhanni.features.fishing.FishingAPI
import at.hannibal2.skyhanni.features.fishing.FishingBaitWarnings
import at.hannibal2.skyhanni.features.fishing.FishingDetection
import at.hannibal2.skyhanni.features.fishing.FishingHookDisplay
import at.hannibal2.skyhanni.features.fishing.FishingTimer
import at.hannibal2.skyhanni.features.fishing.SeaCreatureFeatures
Expand All @@ -137,7 +138,6 @@ import at.hannibal2.skyhanni.features.fishing.SeaCreatureMessageShortener
import at.hannibal2.skyhanni.features.fishing.SharkFishCounter
import at.hannibal2.skyhanni.features.fishing.ShowFishingItemName
import at.hannibal2.skyhanni.features.fishing.ThunderSparksHighlight
import at.hannibal2.skyhanni.features.fishing.tracker.FishingProfitPlayerMoving
import at.hannibal2.skyhanni.features.fishing.tracker.FishingProfitTracker
import at.hannibal2.skyhanni.features.fishing.tracker.FishingTrackerCategoryManager
import at.hannibal2.skyhanni.features.fishing.tracker.SeaCreatureTracker
Expand Down Expand Up @@ -451,6 +451,7 @@ class SkyHanniMod {
loadModule(SackAPI)
loadModule(BingoAPI)
loadModule(FishingAPI)
loadModule(FishingDetection)
loadModule(LorenzUtils)

// features
Expand Down Expand Up @@ -632,7 +633,6 @@ class SkyHanniMod {
loadModule(FishingProfitTracker)
loadModule(FishingTrackerCategoryManager)
loadModule(SeaCreatureTracker)
loadModule(FishingProfitPlayerMoving)
loadModule(SlayerItemsOnGround())
loadModule(RestorePieceOfWizardPortalLore())
loadModule(QuickModMenuSwitch)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,6 @@ public class FishingProfitTrackerConfig {
@Expose
public Position position = new Position(20, 20, false, true);

@Expose
@ConfigOption(name = "Hide Moving", desc = "Hide the Fishing Profit Tracker while moving.")
@ConfigEditorBoolean
public boolean hideMoving = true;

@Expose
@ConfigOption(name = "Show When Pickup", desc = "Show the fishing tracker for a couple of seconds after catching something even while moving.")
@ConfigEditorBoolean
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ 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.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.NEUInternalName
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
import at.hannibal2.skyhanni.utils.getLorenzVec
import net.minecraft.client.Minecraft
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.projectile.EntityFishHook
import net.minecraft.init.Blocks
import net.minecraft.item.ItemStack
Expand Down Expand Up @@ -92,4 +95,31 @@ object FishingAPI {
return info?.getFilletValue(rarity) ?: 0
}

fun isFishing() = FishingDetection.isFishing

fun seaCreatureCount(entity: EntityArmorStand): Int {
val name = entity.name
// a dragon, will always be fought
if (name == "Reindrake") return 0

// a npc shop
if (name == "§5Frosty the Snow Blaster") return 0

if (name == "Frosty") {
val npcLocation = LorenzVec(-1.5, 76.0, 92.5)
if (entity.getLorenzVec().distance(npcLocation) < 1) {
return 0
}
}

val isSummonedSoul = name.contains("'")
val hasFishingMobName = SeaCreatureManager.allFishingMobs.keys.any { name.contains(it) }
if (!hasFishingMobName || isSummonedSoul) return 0

if (name == "Sea Emperor" || name == "Rider of the Deep") {
return 2
}
return 1
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,5 @@ class FishingBaitWarnings {
LorenzUtils.chat("You do not use any fishing baits!")
}

private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.hasFishingRodInHand() && !LorenzUtils.inKuudraFight
private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.isFishing() && !LorenzUtils.inKuudraFight
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package at.hannibal2.skyhanni.features.fishing

import at.hannibal2.skyhanni.events.FishingBobberCastEvent
import at.hannibal2.skyhanni.events.ItemInHandChangeEvent
import at.hannibal2.skyhanni.events.LorenzTickEvent
import at.hannibal2.skyhanni.features.fishing.FishingAPI.isFishingRod
import at.hannibal2.skyhanni.utils.EntityUtils
import at.hannibal2.skyhanni.utils.LocationUtils
import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import net.minecraft.entity.item.EntityArmorStand
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds

object FishingDetection {
var isFishing = false
private var holdingRod = false
private var lastRodCastLocation: LorenzVec? = null
private var lastRodCastTime = SimpleTimeMark.farPast()
private var lastInAreaTime = SimpleTimeMark.farPast()

private var lastSeaCreatureKillArea: LorenzVec? = null
private var lastSeaCreatureKillAreaTime = SimpleTimeMark.farPast()

@SubscribeEvent
fun onItemInHandChange(event: ItemInHandChangeEvent) {
// TODO correct rod type per island water/lava
holdingRod = event.newItem.isFishingRod()
}

@SubscribeEvent
fun onBobberThrow(event: FishingBobberCastEvent) {
lastRodCastLocation = LocationUtils.playerLocation()
lastRodCastTime = SimpleTimeMark.now()
}

@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
if (!LorenzUtils.inSkyBlock) return

if (inRodCastArea()) {
lastInAreaTime = SimpleTimeMark.now()
}

if (lastInAreaTime.passedSince() < 5.seconds) {
if (EntityUtils.getEntitiesNextToPlayer<EntityArmorStand>(5.0)
.filter { FishingAPI.seaCreatureCount(it) > 0 }.any()
) {
lastSeaCreatureKillArea = LocationUtils.playerLocation()
lastSeaCreatureKillAreaTime = SimpleTimeMark.now()
}
}

isFishing = testIsFishing()
}

private fun testIsFishing(): Boolean {
if (holdingRod) return true

if (inRodCastArea()) return true

if (lastRodCastTime.passedSince() < 5.seconds) return true

if (inKillArea()) return true


return false
}

private fun inRodCastArea(): Boolean {
if (lastRodCastTime.passedSince() < 2.minutes) {
lastRodCastLocation?.let {
if (it.distanceToPlayer() < 10) {
return true
}
}
}

return false
}

private fun inKillArea(): Boolean {
if (lastSeaCreatureKillAreaTime.passedSince() < 2.minutes) {
lastSeaCreatureKillArea?.let {
if (it.distanceToPlayer() < 10) {
return true
}
}
}

return false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import at.hannibal2.skyhanni.utils.SoundUtils
import at.hannibal2.skyhanni.utils.StringUtils
import at.hannibal2.skyhanni.utils.TimeUnit
import at.hannibal2.skyhanni.utils.TimeUtils
import at.hannibal2.skyhanni.utils.getLorenzVec
import net.minecraft.client.Minecraft
import net.minecraft.entity.item.EntityArmorStand
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
Expand Down Expand Up @@ -77,32 +76,7 @@ class FishingTimer {
}
}

private fun countMobs() = EntityUtils.getEntities<EntityArmorStand>().map { entity -> amount(entity) }.sum()

private fun amount(entity: EntityArmorStand): Int {
val name = entity.name
// a dragon, will always be fought
if (name == "Reindrake") return 0

// a npc shop
if (name == "§5Frosty the Snow Blaster") return 0

if (name == "Frosty") {
val npcLocation = LorenzVec(-1.5, 76.0, 92.5)
if (entity.getLorenzVec().distance(npcLocation) < 1) {
return 0
}
}

val isSummonedSoul = name.contains("'")
val hasFishingMobName = SeaCreatureManager.allFishingMobs.keys.any { name.contains(it) }
if (!hasFishingMobName || isSummonedSoul) return 0

if (name == "Sea Emperor" || name == "Rider of the Deep") {
return 2
}
return 1
}
private fun countMobs() = EntityUtils.getEntities<EntityArmorStand>().map { entity -> FishingAPI.seaCreatureCount(entity) }.sum()

private fun isRightLocation(): Boolean {
inHollows = false
Expand Down Expand Up @@ -131,6 +105,7 @@ class FishingTimer {
if (!config.enabled) return
if (!rightLocation) return
if (currentCount == 0) return
if (!FishingAPI.isFishing()) return

val duration = System.currentTimeMillis() - startTime
val barnTimerAlertTime = config.alertTime * 1_000
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class SharkFishCounter {
else -> "How???"
}

private fun isWaterFishingRod() = FishingAPI.hasFishingRodInHand() && !FishingAPI.isLavaRod()
private fun isWaterFishingRod() = FishingAPI.isFishing() && !FishingAPI.isLavaRod()

@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,7 @@ object FishingProfitTracker {

val recentPickup = config.showWhenPickup && lastCatchTime.passedSince() < 3.seconds
if (!recentPickup) {
if (!FishingAPI.hasFishingRodInHand()) return
// TODO remove hide moving chech, replace with last cast location + radius
if (FishingProfitPlayerMoving.isMoving && config.hideMoving) return
if (!FishingAPI.isFishing()) return
}

tracker.renderDisplay(config.position)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker
import at.hannibal2.skyhanni.utils.tracker.TrackerData
import com.google.gson.annotations.Expose
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.minutes

object SeaCreatureTracker {

Expand Down Expand Up @@ -147,6 +146,7 @@ object SeaCreatureTracker {
@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent) {
if (!isEnabled()) return
if (!FishingAPI.isFishing()) return

tracker.renderDisplay(config.position)
}
Expand All @@ -155,6 +155,5 @@ object SeaCreatureTracker {
tracker.resetCommand(args, "shresetseacreaturetracker")
}

private fun isEnabled() = LorenzUtils.inSkyBlock &&
FishingAPI.lastActiveFishingTime.passedSince() < 10.minutes && config.enabled
private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled
}

0 comments on commit 09045cb

Please sign in to comment.