wider get local entities range, some things depend on it

This commit is contained in:
Player Name 2026-07-22 14:24:46 +02:00
parent f797ea1b37
commit 642dc4b162

View file

@ -415,13 +415,12 @@ object RegionManager {
* @param location the location.
* @param distance the distance.
* @param maximum the maximum number of entities to return.
* @param ignore an entity to exclude (may be null).
* @return the list.
*/
inline fun<reified T: Entity> getLocalEntities(location: Location, distance: Int, maximum: Int, ignore: Entity?): List<T> {
inline fun<reified T: Entity> getLocalEntities(location: Location, distance: Int, maximum: Int): List<T> {
val entities: MutableList<T> = ArrayList(20)
for (cx in (location.absChunkX - 2)..(location.absChunkX + 2)) {
for (cy in (location.absChunkY - 2)..(location.absChunkY + 2)) {
for (cx in (location.absChunkX - 8)..(location.absChunkX + 8)) {
for (cy in (location.absChunkY - 8)..(location.absChunkY + 8)) {
val chunk = Location(cx shl 3, cy shl 3, location.z).chunk
if (T::class.java.isAssignableFrom(Player::class.java)) {
entities.addAll(chunk.players as Collection<T>)
@ -432,20 +431,20 @@ object RegionManager {
}
}
val b = ZoneBorders(location.x - distance, location.y - distance, location.x + distance, location.y + distance)
var filtered = entities.filter { it != ignore && b.insideBorder(it.location.x, it.location.y) }
var filtered = entities.filter { b.insideBorder(it.location.x, it.location.y) }
if (maximum > 0 && filtered.size > maximum) {
filtered = filtered.slice(0 until maximum)
}
return filtered
}
@JvmStatic fun getLocalEntities(location: Location, distance: Int): List<Entity> = getLocalEntities<Entity>(location, distance, 0, null)
@JvmStatic fun getLocalPlayers(location: Location, distance: Int): List<Player> = getLocalEntities<Player>(location, distance, 0, null)
@JvmStatic fun getLocalNPCs(location: Location, distance: Int): List<NPC> = getLocalEntities<NPC>(location, distance, 0, null)
@JvmStatic fun getLocalPlayers(location: Location): List<Player> = getLocalEntities<Player>(location, MapDistance.RENDERING.distance, 0, null)
@JvmStatic fun getLocalNPCs(location: Location): List<NPC> = getLocalEntities<NPC>(location, MapDistance.RENDERING.distance, 0, null)
@JvmStatic fun getSurroundingPlayers(player: Entity, maximum: Int): List<Player> = getLocalEntities<Player>(player.location, 1, maximum, null)
@JvmStatic fun getSurroundingNPCs(npc: Entity, maximum: Int): List<NPC> = getLocalEntities<NPC>(npc.location, 1, maximum, null)
@JvmStatic fun getLocalPlayersBoundingBox(location: Location, maximum: Int): List<Player> = getLocalEntities<Player>(location, 1, maximum, null)
@JvmStatic fun getLocalEntities(location: Location, distance: Int): List<Entity> = getLocalEntities<Entity>(location, distance, 0)
@JvmStatic fun getLocalPlayers(location: Location, distance: Int): List<Player> = getLocalEntities<Player>(location, distance, 0)
@JvmStatic fun getLocalNPCs(location: Location, distance: Int): List<NPC> = getLocalEntities<NPC>(location, distance, 0)
@JvmStatic fun getLocalPlayers(location: Location): List<Player> = getLocalEntities<Player>(location, MapDistance.RENDERING.distance, 0)
@JvmStatic fun getLocalNPCs(location: Location): List<NPC> = getLocalEntities<NPC>(location, MapDistance.RENDERING.distance, 0)
@JvmStatic fun getSurroundingPlayers(player: Entity, maximum: Int): List<Player> = getLocalEntities<Player>(player.location, 1, maximum)
@JvmStatic fun getSurroundingNPCs(npc: Entity, maximum: Int): List<NPC> = getLocalEntities<NPC>(npc.location, 1, maximum)
@JvmStatic fun getLocalPlayersBoundingBox(location: Location, maximum: Int): List<Player> = getLocalEntities<Player>(location, 1, maximum)
/**
* Gets a random teleport location in the radius around the given location.