From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sat, 5 Oct 2024 15:39:15 -0400 Subject: [PATCH] Remove stream in trial spawner ticking diff --git a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java index 3e3380dfe8fde979f0d843813583d6f07efb96c4..f4b092e3c81f692aa4632e116960e71eb084bdc8 100644 --- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java +++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java @@ -173,17 +173,21 @@ public enum TrialSpawnerState implements StringRepresentable { } private static Optional calculatePositionToSpawnSpawner(ServerLevel level, BlockPos pos, TrialSpawner spawner, TrialSpawnerStateData data) { - List list = data.detectedPlayers - .stream() - .map(level::getPlayerByUUID) - .filter(Objects::nonNull) - .filter( - player -> !player.isCreative() - && !player.isSpectator() - && player.isAlive() - && player.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange()) - ) - .toList(); + // Leaf start - Remove stream in trial spawner ticking + List list = new java.util.ArrayList<>(); + + for (UUID uuid : data.detectedPlayers) { + Player player = level.getPlayerByUUID(uuid); + + if (player != null + && !player.isCreative() + && !player.isSpectator() + && player.isAlive() + && player.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange())) { + list.add(player); + } + } + // Leaf end - Remove stream in trial spawner ticking if (list.isEmpty()) { return Optional.empty(); } else { @@ -203,16 +207,29 @@ public enum TrialSpawnerState implements StringRepresentable { @Nullable private static Entity selectEntityToSpawnItemAbove(List player, Set currentMobs, TrialSpawner spawner, BlockPos pos, ServerLevel level) { - Stream stream = currentMobs.stream() - .map(level::getEntity) - .filter(Objects::nonNull) - .filter(entity -> entity.isAlive() && entity.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange())); - List list = level.random.nextBoolean() ? stream.toList() : player; - if (list.isEmpty()) { - return null; + // Leaf start - Remove stream in trial spawner ticking + if (level.random.nextBoolean()) { + List list = new java.util.ArrayList<>(); + for (UUID uuid : currentMobs) { + Entity entity = level.getEntity(uuid); + if (entity != null && entity.isAlive() && entity.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange())) { + list.add(entity); + } + } + + if (list.isEmpty()) { + return null; + } else { + return list.size() == 1 ? list.getFirst() : Util.getRandom(list, level.random); + } } else { - return list.size() == 1 ? list.getFirst() : Util.getRandom(list, level.random); + if (player.isEmpty()) { + return null; + } else { + return player.size() == 1 ? player.getFirst() : Util.getRandom(player, level.random); + } } + // Leaf end - Remove stream in trial spawner ticking } private boolean timeToSpawnItemSpawner(ServerLevel level, TrialSpawnerStateData data) {