mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-22 08:29:28 +00:00
Upstream has released updates that appear to apply and compile correctly Leaves Changes: LeavesMC/Leaves@88819fe8 Add mc-old hopper suck-in behavior (#395) LeavesMC/Leaves@7394e8dd Fix papermc repo LeavesMC/Leaves@85c7bf11 Remove cache-world-generator-sea-level (#392) LeavesMC/Leaves@00798036 init 1.21.4, and boom! LeavesMC/Leaves@91fc24da build change, but weight not work LeavesMC/Leaves@4ccdf459 just work LeavesMC/Leaves@05ee2e36 Build changes, and delete timings LeavesMC/Leaves@fcc859dc Fix API patches (#406) LeavesMC/Leaves@6a1259df 0006/0129 LeavesMC/Leaves@3e3b05df 0009/0129 LeavesMC/Leaves@c3255c4f 0011/0129 LeavesMC/Leaves@6284c7b6 0018/0129 LeavesMC/Leaves@7abdc88c 0030/0129 LeavesMC/Leaves@4d119ff9 0035/0129 LeavesMC/Leaves@60baed99 0043/0129 LeavesMC/Leaves@dc319d5b 0048/0129 LeavesMC/Leaves@73a505d5 0049/0129 LeavesMC/Leaves@016b29dd 0057/0129 LeavesMC/Leaves@c9cf5af8 0065/0129 LeavesMC/Leaves@330b79ff 0086/0129 (#408) LeavesMC/Leaves@06c1d946 0087/0129 LeavesMC/Leaves@bf4bc284 0091/0129 LeavesMC/Leaves@102a3b70 0097/0129 LeavesMC/Leaves@53b43fed 0101/0129 LeavesMC/Leaves@892f3925 102/129 LeavesMC/Leaves@08c3043a 0107/0129 LeavesMC/Leaves@48764d8e 0112/0129 LeavesMC/Leaves@8380feff 0118/0129 LeavesMC/Leaves@e51603db 0129/0129, 100% patched LeavesMC/Leaves@ef851152 fix some LeavesMC/Leaves@9b7c6e88 server work LeavesMC/Leaves@272b7dcb Protocol... (#409) LeavesMC/Leaves@7be1bc97 Make jade better LeavesMC/Leaves@5350f6ea Make action work LeavesMC/Leaves@f07c26c8 fix action jar
64 lines
3.0 KiB
Diff
64 lines
3.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
|
|
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
|
Subject: [PATCH] Remove stream in PlayerSensor
|
|
|
|
Stream operations in PlayerSensor take too much time
|
|
while ticking Villager farms, so just replace it with for loop =-=
|
|
Before: 164ms
|
|
After: 18ms
|
|
|
|
diff --git a/net/minecraft/world/entity/ai/sensing/PlayerSensor.java b/net/minecraft/world/entity/ai/sensing/PlayerSensor.java
|
|
index 6233e6b48aaa69ba9f577d0b480b1cdf2f55d16e..996c93f2b7ffd83134535f75c0ead45cc34ef13c 100644
|
|
--- a/net/minecraft/world/entity/ai/sensing/PlayerSensor.java
|
|
+++ b/net/minecraft/world/entity/ai/sensing/PlayerSensor.java
|
|
@@ -22,17 +22,40 @@ public class PlayerSensor extends Sensor<LivingEntity> {
|
|
|
|
@Override
|
|
protected void doTick(ServerLevel level, LivingEntity entity) {
|
|
- List<Player> list = level.players()
|
|
- .stream()
|
|
- .filter(EntitySelector.NO_SPECTATORS)
|
|
- .filter(serverPlayer -> entity.closerThan(serverPlayer, this.getFollowDistance(entity)))
|
|
- .sorted(Comparator.comparingDouble(entity::distanceToSqr))
|
|
- .collect(Collectors.toList());
|
|
+ // Leaf start - Remove stream in PlayerSensor
|
|
+ List<Player> list = new java.util.ArrayList<>();
|
|
+ for (Player serverPlayer : level.players()) {
|
|
+ if (!EntitySelector.NO_SPECTATORS.test(serverPlayer)) {
|
|
+ continue;
|
|
+ }
|
|
+ if (!entity.closerThan(serverPlayer, this.getFollowDistance(entity))) {
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ list.add(serverPlayer);
|
|
+ }
|
|
+ list.sort(Comparator.comparingDouble(entity::distanceToSqr));
|
|
+ // Leaf end - Remove stream in PlayerSensor
|
|
Brain<?> brain = entity.getBrain();
|
|
brain.setMemory(MemoryModuleType.NEAREST_PLAYERS, list);
|
|
- List<Player> list1 = list.stream().filter(player -> isEntityTargetable(level, entity, player)).collect(Collectors.toList());
|
|
+ // Leaf start - Remove stream in PlayerSensor
|
|
+ List<Player> list1 = new java.util.ArrayList<>();
|
|
+ for (Player player : list) {
|
|
+ if (isEntityTargetable(level, entity, player)) {
|
|
+ list1.add(player);
|
|
+ }
|
|
+ }
|
|
+ // Leaf end - Remove stream in PlayerSensor
|
|
brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_PLAYER, list1.isEmpty() ? null : list1.get(0));
|
|
- Optional<Player> optional = list1.stream().filter(player -> isEntityAttackable(level, entity, player)).findFirst();
|
|
+ // Leaf start - Remove stream in PlayerSensor
|
|
+ Optional<Player> optional = Optional.empty();
|
|
+ for (Player player : list1) {
|
|
+ if (isEntityAttackable(level, entity, player)) {
|
|
+ optional = Optional.of(player);
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ // Leaf end - Remove stream in PlayerSensor
|
|
brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_ATTACKABLE_PLAYER, optional);
|
|
}
|
|
|