aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/fishing
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/fishing')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt70
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/FishingTimer.kt9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreature.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt84
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt16
6 files changed, 178 insertions, 10 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt
new file mode 100644
index 000000000..973d7ac1e
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt
@@ -0,0 +1,7 @@
+package at.hannibal2.skyhanni.features.fishing
+
+import at.hannibal2.skyhanni.utils.InventoryUtils
+
+object FishingAPI {
+ fun hasFishingRodInHand() = InventoryUtils.itemInHandId.toString().contains("ROD")
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt
new file mode 100644
index 000000000..b91d74f26
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt
@@ -0,0 +1,70 @@
+package at.hannibal2.skyhanni.features.fishing
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.CheckRenderEntityEvent
+import at.hannibal2.skyhanni.events.GuiRenderEvent
+import at.hannibal2.skyhanni.events.LorenzTickEvent
+import at.hannibal2.skyhanni.utils.EntityUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.LorenzVec
+import at.hannibal2.skyhanni.utils.RenderUtils.renderString
+import at.hannibal2.skyhanni.utils.getLorenzVec
+import net.minecraft.client.entity.EntityPlayerSP
+import net.minecraft.entity.item.EntityArmorStand
+import net.minecraft.entity.item.EntityXPOrb
+import net.minecraft.entity.projectile.EntityFishHook
+import net.minecraftforge.event.entity.EntityJoinWorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class FishingHookDisplay {
+ private val config get() = SkyHanniMod.feature.fishing.fishingHookDisplay
+ private var bobberLocation: LorenzVec? = null
+ private var armorStand: EntityArmorStand? = null
+ private var display = ""
+
+ @SubscribeEvent
+ fun onTick(event: LorenzTickEvent) {
+ if (!isEnabled()) return
+ if (!event.repeatSeconds(1)) return
+
+ val entities = EntityUtils.getEntities<EntityFishHook>()
+ bobberLocation = entities.firstOrNull { it.angler is EntityPlayerSP }?.getLorenzVec()
+ }
+
+ @SubscribeEvent
+ fun onJoinWorld(event: EntityJoinWorldEvent) {
+ if (!isEnabled()) return
+ val entity = event.entity ?: return
+ if (entity is EntityXPOrb) return
+ val bobberLocation = bobberLocation ?: return
+
+ val distance = entity.getLorenzVec().distance(bobberLocation)
+ if (distance > 0.1) return
+ if (entity is EntityArmorStand) {
+ armorStand = entity
+ }
+ }
+
+ @SubscribeEvent
+ fun onCheckRender(event: CheckRenderEntityEvent<*>) {
+ if (!isEnabled()) return
+ if (!config.hideArmorStand) return
+
+ if (event.entity == armorStand) {
+ event.isCanceled = true
+ }
+ }
+
+ @SubscribeEvent
+ fun onRenderOverlay(event: GuiRenderEvent.GameOverlayRenderEvent) {
+ if (!isEnabled()) return
+
+ val armorStand = armorStand ?: return
+ if (armorStand.isDead) return
+ if (!armorStand.hasCustomName()) return
+
+ config.position.renderString(armorStand.name, posLabel = "Fishing Hook Display")
+ }
+
+ fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && FishingAPI.hasFishingRodInHand()
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingTimer.kt
index f5f87ee2c..fce359672 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingTimer.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingTimer.kt
@@ -65,17 +65,22 @@ class FishingTimer {
private fun countMobs() = EntityUtils.getEntities<EntityArmorStand>()
.map { entity ->
val name = entity.name
- if (SeaCreatureManager.allFishingMobNames.any { name.contains(it) }) {
+ val isSummonedSoul = name.contains("'")
+ val hasFishingMobName = SeaCreatureManager.allFishingMobNames.any { name.contains(it) }
+ if (hasFishingMobName && !isSummonedSoul) {
if (name == "Sea Emperor" || name == "Rider of the Deep") 2 else 1
} else 0
}.sum()
private fun isRightLocation(): Boolean {
+ inHollows = false
+
+ if (config.barnTimerForStranded && LorenzUtils.isStrandedProfile) return true
+
if (config.barnTimerCrystalHollows && IslandType.CRYSTAL_HOLLOWS.isInIsland()) {
inHollows = true
return true
}
- inHollows = false
if (!IslandType.THE_FARMING_ISLANDS.isInIsland()) {
return LocationUtils.playerLocation().distance(barnLocation) < 50
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreature.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreature.kt
index c2b452cbe..987a57d00 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreature.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreature.kt
@@ -8,7 +8,7 @@ data class SeaCreature(
) {
override fun toString(): String {
- return chatColor + rare() + displayName
+ return chatColor + rare() + displayName
}
private fun rare(): String {
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt
new file mode 100644
index 000000000..90e433725
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureFeatures.kt
@@ -0,0 +1,84 @@
+package at.hannibal2.skyhanni.features.fishing
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent
+import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
+import at.hannibal2.skyhanni.events.RenderEntityOutlineEvent
+import at.hannibal2.skyhanni.events.withAlpha
+import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager
+import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
+import at.hannibal2.skyhanni.utils.EntityUtils.hasMaxHealth
+import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer
+import at.hannibal2.skyhanni.utils.LorenzColor
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
+import net.minecraft.entity.Entity
+import net.minecraft.entity.EntityLivingBase
+import net.minecraft.entity.monster.EntityGuardian
+import net.minecraft.entity.monster.EntityZombie
+import net.minecraft.entity.player.EntityPlayer
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+
+class SeaCreatureFeatures {
+ private val config get() = SkyHanniMod.feature.fishing
+ private var rareSeaCreatures = listOf<EntityLivingBase>()
+
+ @SubscribeEvent
+ fun onEntityHealthUpdate(event: EntityMaxHealthUpdateEvent) {
+ if (!isEnabled()) return
+ val entity = event.entity as? EntityLivingBase ?: return
+ if (DamageIndicatorManager.isBoss(entity)) return
+
+ val maxHealth = event.maxHealth
+ for (creatureType in RareSeaCreatureType.entries) {
+ if (!creatureType.health.any { entity.hasMaxHealth(it, false, maxHealth) }) continue
+ if (!creatureType.clazz.isInstance(entity)) continue
+
+ if (creatureType.nametag.isNotBlank() && EntityPlayer::class.java.isInstance(entity) && (entity as EntityPlayer).name != creatureType.nametag) {
+ continue
+ }
+
+ rareSeaCreatures = rareSeaCreatures.editCopy { add(entity) }
+ RenderLivingEntityHelper.setEntityColor(entity, LorenzColor.RED.toColor().withAlpha(50))
+ { config.rareSeaCreatureHighlight }
+ RenderLivingEntityHelper.setNoHurtTime(entity) { config.rareSeaCreatureHighlight }
+ }
+ }
+
+ @SubscribeEvent
+ fun onWorldChange(event: LorenzWorldChangeEvent) {
+ rareSeaCreatures = emptyList()
+ }
+
+ @SubscribeEvent
+ fun onRenderEntityOutlines(event: RenderEntityOutlineEvent) {
+ if (isEnabled() && config.rareSeaCreatureHighlight && event.type === RenderEntityOutlineEvent.Type.XRAY) {
+ event.queueEntitiesToOutline(getEntityOutlineColor)
+ }
+ }
+
+ private fun isEnabled() = LorenzUtils.inSkyBlock && !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight
+
+ private val getEntityOutlineColor: (entity: Entity) -> Int? = { entity ->
+ if (EntityLivingBase::class.java.isInstance(entity) && entity in rareSeaCreatures && entity.distanceToPlayer() < 30) {
+ LorenzColor.GREEN.toColor().rgb
+ } else null
+ }
+
+ enum class RareSeaCreatureType(
+ val clazz: Class<out EntityLivingBase>,
+ val nametag: String,
+ vararg val health: Int
+ ) {
+ WATER_HYDRA(EntityZombie::class.java, "Water Hydra", 500_000, 1_500_000),
+ SEA_EMPEROR(EntityGuardian::class.java, "The Sea Emperors", 750_000, 800_000, 2_250_000, 2_400_000),
+ ZOMBIE_MINER(EntityPlayer::class.java, "", 2_000_000, 6_000_000),
+ PHANTOM_FISHERMAN(EntityPlayer::class.java, "Phantom Fisher", 1_000_000, 3_000_000),
+ GRIM_REAPER(EntityPlayer::class.java, "Grim Reaper", 3_000_000, 9_000_000),
+ YETI(EntityPlayer::class.java, "", 2_000_000, 6_000_000),
+ NUTCRACKER(EntityPlayer::class.java, "", 4_000_000, 12_000_000),
+ GREAT_WHITE_SHARK(EntityPlayer::class.java, "GWS ", 1_500_000, 4_500_000),
+ ;
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt
index 423a393f1..4a0b6080e 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt
@@ -48,13 +48,15 @@ class TrophyFishMessages {
" §7(${total.addSeparators()}. total)"
} else ""
- val component = ChatComponentText(if (config.trophyCounter) {
- "§6§lTROPHY FISH! " + when (config.trophyDesign) {
- 0 -> "§7$amount. §r$displayRarity $displayName$totalText"
- 1 -> "§bYou caught a $displayName $displayRarity§b. §7(${amount.addSeparators()})$totalText"
- else -> "§bYou caught your ${amount.addSeparators()}${amount.ordinal()} $displayRarity $displayName§b.$totalText"
- }
- } else event.message)
+ val component = ChatComponentText(
+ if (config.trophyCounter) {
+ "§6§lTROPHY FISH! " + when (config.trophyDesign) {
+ 0 -> "§7$amount. §r$displayRarity $displayName$totalText"
+ 1 -> "§bYou caught a $displayName $displayRarity§b. §7(${amount.addSeparators()})$totalText"
+ else -> "§bYou caught your ${amount.addSeparators()}${amount.ordinal()} $displayRarity $displayName§b.$totalText"
+ }
+ } else event.message
+ )
if (config.trophyFishTooltip) {
TrophyFishManager.getInfo(internalName)?.let {