package net.minecraft.server.level; import java.util.ArrayList; import java.util.List; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.targeting.TargetingConditions; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.EntityGetter; import net.minecraft.world.phys.AABB; import org.jetbrains.annotations.Nullable; public interface ServerEntityGetter extends EntityGetter { ServerLevel getLevel(); @Nullable default Player getNearestPlayer(TargetingConditions targetingConditions, LivingEntity source) { return this.getNearestEntity(this.players(), targetingConditions, source, source.getX(), source.getY(), source.getZ()); } @Nullable default Player getNearestPlayer(TargetingConditions targetingConditions, LivingEntity source, double x, double y, double z) { return this.getNearestEntity(this.players(), targetingConditions, source, x, y, z); } @Nullable default Player getNearestPlayer(TargetingConditions targetingConditions, double x, double y, double z) { return this.getNearestEntity(this.players(), targetingConditions, null, x, y, z); } @Nullable default T getNearestEntity( Class entityClass, TargetingConditions targetingConditions, @Nullable LivingEntity source, double x, double y, double z, AABB area ) { return this.getNearestEntity(this.getEntitiesOfClass(entityClass, area, livingEntity -> true), targetingConditions, source, x, y, z); } @Nullable default T getNearestEntity( List entities, TargetingConditions targetingConditions, @Nullable LivingEntity source, double x, double y, double z ) { double d = -1.0; T livingEntity = null; for (T livingEntity2 : entities) { if (targetingConditions.test(this.getLevel(), source, livingEntity2)) { double e = livingEntity2.distanceToSqr(x, y, z); if (d == -1.0 || e < d) { d = e; livingEntity = livingEntity2; } } } return livingEntity; } default List getNearbyPlayers(TargetingConditions targetingConditions, LivingEntity source, AABB area) { List list = new ArrayList(); for (Player player : this.players()) { if (area.contains(player.getX(), player.getY(), player.getZ()) && targetingConditions.test(this.getLevel(), source, player)) { list.add(player); } } return list; } default List getNearbyEntities(Class entityClass, TargetingConditions targetingConditions, LivingEntity source, AABB area) { List list = this.getEntitiesOfClass(entityClass, area, livingEntityx -> true); List list2 = new ArrayList(); for (T livingEntity : list) { if (targetingConditions.test(this.getLevel(), source, livingEntity)) { list2.add(livingEntity); } } return list2; } }