From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Wed, 19 Mar 2025 15:18:58 +0100 Subject: [PATCH] Remove streams on InsideBrownianWalk This method is mainly visible when ton of villagers suddenly wants to sleep Safe optimization, no need to provide any numbers. diff --git a/net/minecraft/world/entity/ai/behavior/InsideBrownianWalk.java b/net/minecraft/world/entity/ai/behavior/InsideBrownianWalk.java index cbde74f4b6d586a5f80cdd675573441636bf682d..2324b941c7513692608b5146bc90c8e6124d2ee6 100644 --- a/net/minecraft/world/entity/ai/behavior/InsideBrownianWalk.java +++ b/net/minecraft/world/entity/ai/behavior/InsideBrownianWalk.java @@ -20,16 +20,31 @@ public class InsideBrownianWalk { return false; } else { BlockPos blockPos = mob.blockPosition(); - List list = BlockPos.betweenClosedStream(blockPos.offset(-1, -1, -1), blockPos.offset(1, 1, 1)) - .map(BlockPos::immutable) - .collect(Util.toMutableList()); + // Leaf start - Remove streams on InsideBrownianWalk + BlockPos minPos = blockPos.offset(-1, -1, -1); + BlockPos maxPos = blockPos.offset(1, 1, 1); + List list = new java.util.ArrayList<>(); + + for (int x = minPos.getX(); x <= maxPos.getX(); x++) { + for (int y = minPos.getY(); y <= maxPos.getY(); y++) { + for (int z = minPos.getZ(); z <= maxPos.getZ(); z++) { + list.add(new BlockPos(x, y, z).immutable()); + } + } + } + Collections.shuffle(list); - list.stream() - .filter(pos -> !level.canSeeSky(pos)) - .filter(pos -> level.loadedAndEntityCanStandOn(pos, mob)) - .filter(pos -> level.noCollision(mob)) - .findFirst() - .ifPresent(pos -> walkTarget.set(new WalkTarget(pos, speedModifier, 0))); + + for (BlockPos pos : list) { + if (!level.canSeeSky(pos) && + level.loadedAndEntityCanStandOn(pos, mob) && + level.noCollision(mob)) { + walkTarget.set(new WalkTarget(pos, speedModifier, 0)); + break; + } + } + // Leaf end - Remove streams on InsideBrownianWalk + return true; } }