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/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java index 005aea8a747e9cbbc352b8b57c64b84ec71ad321..f687af7374e62ed0d004e12283fbc9008cf15e28 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java +++ b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java @@ -173,17 +173,22 @@ public enum TrialSpawnerState implements StringRepresentable { } private static Optional calculatePositionToSpawnSpawner(ServerLevel world, BlockPos pos, TrialSpawner logic, TrialSpawnerData data) { - List list = data.detectedPlayers - .stream() - .map(world::getPlayerByUUID) - .filter(Objects::nonNull) - .filter( - player -> !player.isCreative() - && !player.isSpectator() - && player.isAlive() - && player.distanceToSqr(pos.getCenter()) <= (double)Mth.square(logic.getRequiredPlayerRange()) - ) - .toList(); + // Leaf start - Remove stream in trial spawner ticking + List list = new java.util.ArrayList<>(); + + for (UUID uuid : data.detectedPlayers) { + Player player = world.getPlayerByUUID(uuid); + + if (player != null + && !player.isCreative() + && !player.isSpectator() + && player.isAlive() + && player.distanceToSqr(pos.getCenter()) <= (double) Mth.square(logic.getRequiredPlayerRange())) { + list.add(player); + } + } + // Leaf end - Remove stream in trial spawner ticking + if (list.isEmpty()) { return Optional.empty(); } else { @@ -203,16 +208,29 @@ public enum TrialSpawnerState implements StringRepresentable { @Nullable private static Entity selectEntityToSpawnItemAbove(List players, Set entityUuids, TrialSpawner logic, BlockPos pos, ServerLevel world) { - Stream stream = entityUuids.stream() - .map(world::getEntity) - .filter(Objects::nonNull) - .filter(entity -> entity.isAlive() && entity.distanceToSqr(pos.getCenter()) <= (double)Mth.square(logic.getRequiredPlayerRange())); - List list = world.random.nextBoolean() ? stream.toList() : players; - if (list.isEmpty()) { - return null; + // Leaf start - Remove stream in trial spawner ticking + if (world.random.nextBoolean()) { + List list = new java.util.ArrayList<>(); + for (UUID uuid : entityUuids) { + Entity entity = world.getEntity(uuid); + if (entity != null && entity.isAlive() && entity.distanceToSqr(pos.getCenter()) <= (double) Mth.square(logic.getRequiredPlayerRange())) { + list.add(entity); + } + } + + if (list.isEmpty()) { + return null; + } else { + return list.size() == 1 ? list.getFirst() : Util.getRandom(list, world.random); + } } else { - return list.size() == 1 ? list.getFirst() : Util.getRandom(list, world.random); + if (players.isEmpty()) { + return null; + } else { + return players.size() == 1 ? players.getFirst() : Util.getRandom(players, world.random); + } } + // Leaf end - Remove stream in trial spawner ticking } private boolean timeToSpawnItemSpawner(ServerLevel world, TrialSpawnerData data) {