minecraft-src/net/minecraft/server/level/ServerEntityGetter.java
2025-07-04 02:49:36 +03:00

81 lines
2.8 KiB
Java

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 extends LivingEntity> T getNearestEntity(
Class<? extends T> 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 extends LivingEntity> T getNearestEntity(
List<? extends T> 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<Player> getNearbyPlayers(TargetingConditions targetingConditions, LivingEntity source, AABB area) {
List<Player> 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 <T extends LivingEntity> List<T> getNearbyEntities(Class<T> entityClass, TargetingConditions targetingConditions, LivingEntity source, AABB area) {
List<T> list = this.getEntitiesOfClass(entityClass, area, livingEntityx -> true);
List<T> list2 = new ArrayList();
for (T livingEntity : list) {
if (targetingConditions.test(this.getLevel(), source, livingEntity)) {
list2.add(livingEntity);
}
}
return list2;
}
}