Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import com.lambda.util.math.minus
import com.lambda.util.math.plus
import com.lambda.util.player.SlotUtils.hotbarStacks
import com.lambda.util.world.fastEntitySearch
import com.lambda.util.world.toFastVec
import net.minecraft.block.Blocks
import net.minecraft.entity.Entity
import net.minecraft.entity.LivingEntity
Expand Down Expand Up @@ -356,7 +357,7 @@ object CrystalAura : Module(
// Exclude blocks blocked by entities
val crystalBox = pos.crystalBox

val entitiesNearby = fastEntitySearch<Entity>(3.5, pos)
val entitiesNearby = fastEntitySearch<Entity>(3.5, pos.toFastVec())
val crystals = entitiesNearby.filterIsInstance<EndCrystalEntity>()
val otherEntities = entitiesNearby - crystals + player

Expand Down
14 changes: 14 additions & 0 deletions src/main/kotlin/com/lambda/util/math/Vectors.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.lambda.util.math.MathUtils.floorToInt
import com.lambda.util.math.MathUtils.sq
import net.minecraft.entity.Entity
import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.Box
import net.minecraft.util.math.ChunkPos
import net.minecraft.util.math.Direction
import net.minecraft.util.math.EightWayDirection
Expand Down Expand Up @@ -202,6 +203,19 @@ infix fun Entity.distSq(other: Vec3d): Double = pos distSq other
infix fun Entity.distSq(other: Vec3i): Int = blockPos distSq other
infix fun Entity.distSq(other: Entity): Double = squaredDistanceTo(other)

/**
* Returns the distance squared to the closest side of a [Box]
*/
fun Vec3d.distanceToSide(box: Box, epsilon: Double = 1e-7): Double {
val closestX = x.coerceIn(box.minX - epsilon, box.maxX + epsilon)
val closestY = y.coerceIn(box.minY - epsilon, box.maxY + epsilon)
val closestZ = z.coerceIn(box.minZ - epsilon, box.maxZ + epsilon)
val dx = x - closestX
val dy = y - closestY
val dz = z - closestZ
return dx * dx + dy * dy + dz * dz
}

val UP = Vec3d(0.0, 1.0, 0.0)
val DOWN = Vec3d(0.0, -1.0, 0.0)
val CENTER = Vec3d(0.5, 0.5, 0.5)
4 changes: 2 additions & 2 deletions src/main/kotlin/com/lambda/util/world/WorldDsl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,9 @@ inline fun <reified T : Entity> SafeContext.entitySearch(
@EntityMarker
inline fun <reified T : Entity> SafeContext.fastEntitySearch(
range: Double,
pos: BlockPos = player.blockPos,
pos: FastVector = player.pos.toFastVec(),
noinline filter: (T) -> Boolean = { true },
) = internalGetFastEntities<T>(pos.toFastVec(), range, filter = filter)
) = internalGetFastEntities<T>(pos, range, filter = filter)

@DslMarker
annotation class FluidMarker
Expand Down
5 changes: 2 additions & 3 deletions src/main/kotlin/com/lambda/util/world/WorldUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package com.lambda.util.world
import com.lambda.context.SafeContext
import com.lambda.util.extension.getBlockState
import com.lambda.util.extension.getFluidState
import com.lambda.util.math.distanceToSide
import com.lambda.util.world.WorldUtils.internalGetEntities
import com.lambda.util.world.WorldUtils.internalGetFastEntities
import net.minecraft.block.BlockState
Expand All @@ -29,9 +30,7 @@ import net.minecraft.fluid.Fluid
import net.minecraft.fluid.FluidState
import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.ChunkSectionPos
import kotlin.collections.asSequence
import kotlin.math.ceil
import kotlin.sequences.filter

object WorldUtils {
fun SafeContext.isLoaded(pos: BlockPos) =
Expand Down Expand Up @@ -69,7 +68,7 @@ object WorldUtils {
?.filterIsInstance<T>()
?.filter {
it != player &&
pos distSq it.pos <= distance * distance &&
pos.toVec3d().distanceToSide(it.boundingBox) <= distance * distance &&
filter(it)
} ?: emptySequence()
)
Expand Down