diff options
| author | Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> | 2024-10-18 18:38:27 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-18 18:38:27 +0200 |
| commit | df28fc40ec48a7d9779d1a48932f47fff2d7b8d5 (patch) | |
| tree | 87dbbfa61cf2a22925c65fe9194d3e3d050379ee | |
| parent | 5dae3470346d675764f8443af96dc2c8433d8e39 (diff) | |
| download | SkyHanni-df28fc40ec48a7d9779d1a48932f47fff2d7b8d5.tar.gz SkyHanni-df28fc40ec48a7d9779d1a48932f47fff2d7b8d5.tar.bz2 SkyHanni-df28fc40ec48a7d9779d1a48932f47fff2d7b8d5.zip | |
Fix: Fel Highlight in Edge Case (#2746)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
5 files changed, 12 insertions, 7 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt index 765ad8a16..a486f9799 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/mob/Mob.kt @@ -110,7 +110,7 @@ class Mob( fun isInRender() = baseEntity.distanceToPlayer() < MobData.ENTITY_RENDER_RANGE_IN_BLOCKS - fun canBeSeen() = baseEntity.canBeSeen() + fun canBeSeen(viewDistance: Number = 150) = baseEntity.canBeSeen(viewDistance) fun isInvisible() = baseEntity !is EntityZombie && baseEntity.isInvisible && baseEntity.inventory.isNullOrEmpty() @@ -131,9 +131,9 @@ class Mob( private fun internalHighlight() { highlightColor?.let { color -> - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(baseEntity, color.rgb) { true } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime(baseEntity, color.rgb) { !this.isInvisible() } extraEntities.forEach { - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(it, color.rgb) { true } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime(it, color.rgb) { !this.isInvisible() } } } } @@ -242,4 +242,5 @@ class Mob( // TODO add max distance fun lineToPlayer(color: Color, lineWidth: Int = 2, depth: Boolean = true) = LineToMobHandler.register(this, color, lineWidth, depth) + fun distanceToPlayer(): Double = baseEntity.distanceToPlayer() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMobManager.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMobManager.kt index 46450a564..d3f85c166 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMobManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMobManager.kt @@ -83,7 +83,7 @@ object DungeonMobManager { fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!fel.highlight.get()) return if (fel.line) { - felOnTheGround.filter { it.canBeSeen() }.forEach { + felOnTheGround.filter { it.canBeSeen(30) }.forEach { event.draw3DLine( it.baseEntity.getLorenzVec().add(y = 0.15), event.exactPlayerEyeLocation(), diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt index f50d4cb45..443c4ff97 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt @@ -74,6 +74,10 @@ object CopyNearbyEntitiesCommand { val ridingEntity = entity.ridingEntity resultList.add("ridingEntity: $ridingEntity") + if(entity.isInvisible) { + resultList.add("Invisible: true") + } + if (entity is EntityLivingBase) { resultList.add("EntityLivingBase:") val baseMaxHealth = entity.baseMaxHealth diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt index c5eb95fc8..d9153f565 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt @@ -191,7 +191,7 @@ object EntityUtils { if (Minecraft.getMinecraft().isCallingFromMinecraftThread) it else it.toMutableList() }?.asSequence()?.filterNotNull() ?: emptySequence() - fun Entity.canBeSeen(radius: Double = 150.0) = getLorenzVec().up(0.5).canBeSeen(radius) + fun Entity.canBeSeen(viewDistance: Number = 150.0) = getLorenzVec().up(0.5).canBeSeen(viewDistance) fun getEntityByID(entityId: Int) = Minecraft.getMinecraft()?.thePlayer?.entityWorld?.getEntityByID(entityId) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt index d2394624c..9937708aa 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt @@ -42,11 +42,11 @@ object LocationUtils { fun AxisAlignedBB.isPlayerInside() = isInside(playerLocation()) - fun LorenzVec.canBeSeen(radius: Double = 150.0, offset: Double? = null): Boolean { + fun LorenzVec.canBeSeen(viewDistance: Number = 150.0, offset: Double? = null): Boolean { val a = playerEyeLocation() val b = this val noBlocks = canSee(a, b, offset) - val notTooFar = a.distance(b) < radius + val notTooFar = a.distance(b) < viewDistance.toDouble() val inFov = true // TODO add Frustum "Frustum().isBoundingBoxInFrustum(entity.entityBoundingBox)" return noBlocks && notTooFar && inFov } |
