From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Mon, 9 Aug 2021 00:38:37 -0400 Subject: [PATCH] Optimize indirect passenger iteration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 6c3cbfa88a0d8e48fadb85dd52d2678567243ee8..c24baad4eabcb538a3b30970364632a28a80e06b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -3923,20 +3923,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } private Stream getIndirectPassengersStream() { + if (this.passengers.isEmpty()) { return Stream.of(); } // Paper - Optimize indirect passenger iteration return this.passengers.stream().flatMap(Entity::getSelfAndPassengers); } @Override public Stream getSelfAndPassengers() { + if (this.passengers.isEmpty()) { return Stream.of(this); } // Paper - Optimize indirect passenger iteration return Stream.concat(Stream.of(this), this.getIndirectPassengersStream()); } @Override public Stream getPassengersAndSelf() { + if (this.passengers.isEmpty()) { return Stream.of(this); } // Paper - Optimize indirect passenger iteration return Stream.concat(this.passengers.stream().flatMap(Entity::getPassengersAndSelf), Stream.of(this)); } public Iterable getIndirectPassengers() { + // Paper start - Optimize indirect passenger iteration + if (this.passengers.isEmpty()) { return ImmutableList.of(); } + ImmutableList.Builder indirectPassengers = ImmutableList.builder(); + for (Entity passenger : this.passengers) { + indirectPassengers.add(passenger); + indirectPassengers.addAll(passenger.getIndirectPassengers()); + } + return indirectPassengers.build(); + } + private Iterable getIndirectPassengers_old() { + // Paper end - Optimize indirect passenger iteration return () -> { return this.getIndirectPassengersStream().iterator(); }; @@ -3959,6 +3973,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper end - rewrite chunk system public boolean hasExactlyOnePlayerPassenger() { + if (this.passengers.isEmpty()) { return false; } // Paper - Optimize indirect passenger iteration return this.countPlayerPassengers() == 1; }