From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Sat, 22 Mar 2025 12:51:28 +0100 Subject: [PATCH] Remove streams on PlayerDetector Dreeam TODO: Merge to single loop diff --git a/net/minecraft/world/level/block/entity/trialspawner/PlayerDetector.java b/net/minecraft/world/level/block/entity/trialspawner/PlayerDetector.java index 438b269e53915f7f00ff894697096157f68cdff8..6e27472deabe86e899d0227d2963d30926a3b114 100644 --- a/net/minecraft/world/level/block/entity/trialspawner/PlayerDetector.java +++ b/net/minecraft/world/level/block/entity/trialspawner/PlayerDetector.java @@ -21,28 +21,45 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; public interface PlayerDetector { - PlayerDetector NO_CREATIVE_PLAYERS = (level, entitySelector, pos, maxDistance, requireLineOfSight) -> entitySelector.getPlayers( - level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isCreative() && !player.isSpectator() - ) - .stream() - .filter(player -> !requireLineOfSight || inLineOfSight(level, pos.getCenter(), player.getEyePosition())) - .map(Entity::getUUID) - .toList(); - PlayerDetector INCLUDING_CREATIVE_PLAYERS = (level, entitySelector, pos, maxDistance, requireLineOfSight) -> entitySelector.getPlayers( - level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isSpectator() - ) - .stream() - .filter(player -> !requireLineOfSight || inLineOfSight(level, pos.getCenter(), player.getEyePosition())) - .map(Entity::getUUID) - .toList(); + // Leaf start - Remove streams on PlayerDetector + PlayerDetector NO_CREATIVE_PLAYERS = (level, entitySelector, pos, maxDistance, requireLineOfSight) -> { + List players = entitySelector.getPlayers( + level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isCreative() && !player.isSpectator() + ); + List result = new java.util.ArrayList<>(); + for (Player player : players) { + if (!requireLineOfSight || inLineOfSight(level, pos.getCenter(), player.getEyePosition())) { + result.add(player.getUUID()); + } + } + return result; + }; + + PlayerDetector INCLUDING_CREATIVE_PLAYERS = (level, entitySelector, pos, maxDistance, requireLineOfSight) -> { + List players = entitySelector.getPlayers( + level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isSpectator() + ); + List result = new java.util.ArrayList<>(); + for (Player player : players) { + if (!requireLineOfSight || inLineOfSight(level, pos.getCenter(), player.getEyePosition())) { + result.add(player.getUUID()); + } + } + return result; + }; + PlayerDetector SHEEP = (level, entitySelector, pos, maxDistance, requireLineOfSight) -> { AABB aabb = new AABB(pos).inflate(maxDistance); - return entitySelector.getEntities(level, EntityType.SHEEP, aabb, LivingEntity::isAlive) - .stream() - .filter(sheep -> !requireLineOfSight || inLineOfSight(level, pos.getCenter(), sheep.getEyePosition())) - .map(Entity::getUUID) - .toList(); + List sheep = entitySelector.getEntities(level, EntityType.SHEEP, aabb, LivingEntity::isAlive); + List result = new java.util.ArrayList<>(); + for (Entity entity : sheep) { + if (!requireLineOfSight || inLineOfSight(level, pos.getCenter(), entity.getEyePosition())) { + result.add(entity.getUUID()); + } + } + return result; }; + // Leaf end - Remove streams on PlayerDetector List detect(ServerLevel level, PlayerDetector.EntitySelector entitySelector, BlockPos pos, double maxDistance, boolean requireLineOfSight); @@ -78,14 +95,31 @@ public interface PlayerDetector { return new PlayerDetector.EntitySelector() { @Override public List getPlayers(ServerLevel level, Predicate predicate) { - return players.stream().filter(predicate).toList(); + // Leaf start - Remove streams on PlayerDetector + List result = new java.util.ArrayList<>(); + for (Player player : players) { + if (predicate.test(player)) { + result.add(player); + } + } + return result; + // Leaf end - Remove streams on PlayerDetector } @Override public List getEntities( ServerLevel level, EntityTypeTest typeTest, AABB boundingBox, Predicate predicate ) { - return players.stream().map(typeTest::tryCast).filter(Objects::nonNull).filter(predicate).toList(); + // Leaf start - Remove streams on PlayerDetector + List result = new java.util.ArrayList<>(); + for (Player player : players) { + T entity = typeTest.tryCast(player); + if (entity != null && predicate.test(entity)) { + result.add(entity); + } + } + return result; + // Leaf end - Remove streams on PlayerDetector } }; }