9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-26 18:39:23 +00:00
Files
Leaf/leaf-server/minecraft-patches/features/0224-Remove-streams-on-PlayerDetector.patch
Dreeam 3c25377465 Drop some unused patches
ClassInstanceMultiMap belongs to Minecraft vanilla entity storage.
And is unused, since replaced by spottedleaf's entity storage (rewrite chunk system).
However these patches might be useful for vanilla entity storage if is used.
2025-07-09 04:20:02 +08:00

111 lines
5.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taiyou06 <kaandindar21@gmail.com>
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 774d4028f0be7c388abb47f8eb97011341f50f59..81d2dfdd8bd2a8b205e4b617911c277a366f0369 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<? extends Player> players = entitySelector.getPlayers(
+ level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isCreative() && !player.isSpectator()
+ );
+ List<UUID> 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<? extends Player> players = entitySelector.getPlayers(
+ level, player -> player.blockPosition().closerThan(pos, maxDistance) && !player.isSpectator()
+ );
+ List<UUID> 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<? extends Entity> sheep = entitySelector.getEntities(level, EntityType.SHEEP, aabb, LivingEntity::isAlive);
+ List<UUID> 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<UUID> detect(ServerLevel level, PlayerDetector.EntitySelector entitySelector, BlockPos pos, double maxDistance, boolean flag);
@@ -78,14 +95,31 @@ public interface PlayerDetector {
return new PlayerDetector.EntitySelector() {
@Override
public List<Player> getPlayers(ServerLevel level, Predicate<? super Player> predicate) {
- return players.stream().filter(predicate).toList();
+ // Leaf start - Remove streams on PlayerDetector
+ List<Player> 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 <T extends Entity> List<T> getEntities(
ServerLevel level, EntityTypeTest<Entity, T> typeTest, AABB boundingBox, Predicate<? super T> predicate
) {
- return players.stream().map(typeTest::tryCast).filter(Objects::nonNull).filter(predicate).toList();
+ // Leaf start - Remove streams on PlayerDetector
+ List<T> 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
}
};
}