mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2026-01-04 15:41:40 +00:00
1. Wet the drys 2. Dry the wets 3. Wet the drys 4. Dry the wets 5. Wet the drys 6. Now dust the wets
82 lines
3.8 KiB
Diff
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 3e8d0c8d8409b6ba2e2846d7d64cdcc8fc6094a4..2f8324ce552f982f6b3388d9fa5a63fb9bee625b 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, TrialSpawnerData spawnerData) {
|
|
- List<Player> list = spawnerData.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 : spawnerData.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, TrialSpawnerData spawnerData) {
|