From 26932504f9788b14c23ef2ed2180971a58e4de68 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 20 Feb 2024 20:52:13 +0100 Subject: Fixed adding drops to Fishing Profit Tracker while not actually fishing. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +- .../skyhanni/features/fishing/FishingAPI.kt | 16 ++-- .../skyhanni/features/fishing/FishingDetection.kt | 97 ---------------------- .../features/fishing/FishingHookDisplay.kt | 2 +- .../features/fishing/IsFishingDetection.kt | 86 +++++++++++++++++++ .../fishing/tracker/FishingProfitTracker.kt | 1 + 6 files changed, 101 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/FishingDetection.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/IsFishingDetection.kt (limited to 'src/main/java/at') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index e95f05d5d..c51e29d03 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -134,9 +134,9 @@ 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.IsFishingDetection import at.hannibal2.skyhanni.features.fishing.SeaCreatureFeatures import at.hannibal2.skyhanni.features.fishing.SeaCreatureManager import at.hannibal2.skyhanni.features.fishing.SeaCreatureMessageShortener @@ -472,7 +472,7 @@ class SkyHanniMod { loadModule(SackAPI) loadModule(BingoAPI) loadModule(FishingAPI) - loadModule(FishingDetection) + loadModule(IsFishingDetection) loadModule(LorenzUtils) loadModule(NEUItems) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index a3d3a1cb7..e3ac0c219 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.events.FishingBobberCastEvent +import at.hannibal2.skyhanni.events.ItemInHandChangeEvent import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.getFilletValue import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity @@ -27,10 +28,11 @@ object FishingAPI { private val waterBlocks = listOf(Blocks.water, Blocks.flowing_water) var lastCastTime = SimpleTimeMark.farPast() + var holdingRod = false @SubscribeEvent fun onJoinWorld(event: EntityJoinWorldEvent) { - if (!LorenzUtils.inSkyBlock || !hasFishingRodInHand()) return + if (!LorenzUtils.inSkyBlock || !holdingRod) return val entity = event.entity ?: return if (entity !is EntityFishHook) return if (entity.angler != Minecraft.getMinecraft().thePlayer) return @@ -39,15 +41,19 @@ object FishingAPI { FishingBobberCastEvent(entity).postAndCatch() } - fun hasFishingRodInHand() = InventoryUtils.itemInHandId.isFishingRod() - - fun NEUInternalName.isFishingRod() = contains("ROD") + private fun NEUInternalName.isFishingRod() = contains("ROD") fun ItemStack.isBait(): Boolean { val name = name ?: return false return stackSize == 1 && (name.removeColor().startsWith("Obfuscated") || name.endsWith(" Bait")) } + @SubscribeEvent + fun onItemInHandChange(event: ItemInHandChangeEvent) { + // TODO correct rod type per island water/lava + holdingRod = event.newItem.isFishingRod() + } + fun isLavaRod() = InventoryUtils.getItemInHand()?.getLore()?.any { it.contains("Lava Rod") } ?: false fun getAllowedBlocks() = if (isLavaRod()) lavaBlocks else waterBlocks @@ -62,7 +68,7 @@ object FishingAPI { return info?.getFilletValue(rarity) ?: 0 } - fun isFishing() = FishingDetection.isFishing + fun isFishing(checkRodInHand: Boolean = true) = IsFishingDetection.isFishing || (checkRodInHand && holdingRod) fun seaCreatureCount(entity: EntityArmorStand): Int { val name = entity.name diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingDetection.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingDetection.kt deleted file mode 100644 index bbd029100..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingDetection.kt +++ /dev/null @@ -1,97 +0,0 @@ -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(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 - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt index 73fe5e23a..671ae0841 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt @@ -86,5 +86,5 @@ class FishingHookDisplay { return pattern.matcher(name).matches() } - fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && FishingAPI.hasFishingRodInHand() + fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && FishingAPI.holdingRod } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/IsFishingDetection.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/IsFishingDetection.kt new file mode 100644 index 000000000..1e3d73f5a --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/IsFishingDetection.kt @@ -0,0 +1,86 @@ +package at.hannibal2.skyhanni.features.fishing + +import at.hannibal2.skyhanni.events.FishingBobberCastEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +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 IsFishingDetection { + + var isFishing = 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 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(5.0) + .filter { FishingAPI.seaCreatureCount(it) > 0 }.any() + ) { + lastSeaCreatureKillArea = LocationUtils.playerLocation() + lastSeaCreatureKillAreaTime = SimpleTimeMark.now() + } + } + + isFishing = testIsFishing() + } + + private fun testIsFishing(): Boolean { + 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 + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt index 1c5e6f7b6..6b7e7cea9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt @@ -221,6 +221,7 @@ object FishingProfitTracker { } private fun maybeAddItem(internalName: NEUInternalName, amount: Int) { + if (!FishingAPI.isFishing(checkRodInHand = false)) return if (!isAllowedItem(internalName)) { ChatUtils.debug("Ignored non-fishing item pickup: $internalName'") return -- cgit