9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2026-01-03 22:26:19 +00:00
Files
Leaf/leaf-server/minecraft-patches/features/0145-Remove-stream-in-trial-spawner-ticking.patch
Dreeam 3c25377465 Drop some unused patches
ClassInstanceMultiMap belongs to Minecraft vanilla entity storage.
And is unused, since replaced by spottedleaf's entity storage (rewrite chunk system).
However these patches might be useful for vanilla entity storage if is used.
2025-07-09 04:20:02 +08:00

82 lines
3.8 KiB
Diff

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<Vec3> calculatePositionToSpawnSpawner(ServerLevel level, BlockPos pos, TrialSpawner spawner, TrialSpawnerStateData data) {
- List<Player> 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<Player> 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> player, Set<UUID> currentMobs, TrialSpawner spawner, BlockPos pos, ServerLevel level) {
- Stream<Entity> stream = currentMobs.stream()
- .map(level::getEntity)
- .filter(Objects::nonNull)
- .filter(entity -> entity.isAlive() && entity.distanceToSqr(pos.getCenter()) <= Mth.square(spawner.getRequiredPlayerRange()));
- List<? extends Entity> 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<Entity> 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) {