9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2026-01-06 15:51:31 +00:00
Files
Leaf/leaf-server/minecraft-patches/features/0224-Remove-streams-on-PlayerDetector.patch
Dreeam 3b9d8feb03 Updated Upstream (Paper/Purpur/Leaves)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@a5f2f614 Fix offhand item desync on cancelling interact events (#12828)
PaperMC/Paper@10318775 [ci/skip] Update mache for codebook 1.0.15 (#12887)

Purpur Changes:
PurpurMC/Purpur@c4e5604c Updated Upstream (Paper)
PurpurMC/Purpur@c130b18e Updated Upstream (Paper)
PurpurMC/Purpur@60bdf1c7 Final Paper Upstream
PurpurMC/Purpur@a39c4cb0 Updated Upstream (Paper)
PurpurMC/Purpur@ea7b18ab Updated Upstream (Paper)
PurpurMC/Purpur@0f82c210 Updated Upstream (Paper)
PurpurMC/Purpur@8de15d66 this is important for the build to not fail..
PurpurMC/Purpur@5053eb0c use a different method for dropping lapis, closes #1692

Leaves Changes:
LeavesMC/Leaves@df8397c7 Fix bot invulnerable
LeavesMC/Leaves@e1c21d3f Movable Budding Amethyst bind carpet rule (#561)
LeavesMC/Leaves@550dba49 Configurable item damage check and good shear behavior (#559)
LeavesMC/Leaves@cb64df44 Old Throwable Projectile tick order (#520)
LeavesMC/Leaves@b5793e80 Fix bot infinity desync (#584)
LeavesMC/Leaves@c5ecbe85 1.21.7/8 (#587)
LeavesMC/Leaves@5497dfb4 Fix CI
LeavesMC/Leaves@2f8255bd Fix LitematicaEasyPlaceProtocol
LeavesMC/Leaves@a416f476 Fix bot use actions (#606) (#605)
LeavesMC/Leaves@bfde470a fix: revert Configurable-collision-behavior patch (#607)
LeavesMC/Leaves@aaa2323d Fix Syncmatica file name
2025-07-24 20:18:23 +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 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<? 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 requireLineOfSight);
@@ -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
}
};
}