mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2026-01-03 22:26:19 +00:00
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.
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 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) {
|