9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-22 08:19:26 +00:00
Files
SakuraMC/sakura-server/minecraft-patches/features/0013-Add-maxSearch-to-getEntities.patch
Samsuik 40897f76f7 Updated Upstream (Paper 1.21.9)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@7e70636 Initial 1.21.9 update (squashed)
PaperMC/Paper@0a28816 Add Server#getRespawnWorld and Server#setRespawnWorld(World)
PaperMC/Paper@b67fa6d move todos txt content into tracking issue
PaperMC/Paper@68f26a1 Drop no-longer-needed packet diffs
PaperMC/Paper@f9434d2 Use pitch when setting spawn position with Location
PaperMC/Paper@810b3c6 Deprecate the Conversation API (for removal), Metadata API, and PlayerSpawnLocationEvent (for removal)
PaperMC/Paper@1870261 Update Moonrise to 1.21.9-pre1
PaperMC/Paper@1141058 Shift feature patch #s for Moonrise being first
PaperMC/Paper@510aa9b Update 'Optimize Network Manager and add advanced packet support'
PaperMC/Paper@89cc24a Update 'Allow Saving of Oversized Chunks'
PaperMC/Paper@bcd75d8 Update EAR 2.0 patch and enable oldPaperCommit for better 3-way merges
PaperMC/Paper@6b44820 Update 'Use Velocity compression and cipher natives'
PaperMC/Paper@87f3e2f Update 'Optimize GoalSelector Goal.Flag Set operations'
PaperMC/Paper@5323486 Update 'Optimize Voxel Shape Merging'
PaperMC/Paper@5aac8b4 Update 'Handle Oversized block entities in chunks'
PaperMC/Paper@f0b3d62 Update 'optimize dirt and snow spreading' and drop 'Optimise getChunkAt calls for loaded chunks' patch to code replaced by Moonrise
PaperMC/Paper@92f822d Update 'Optimize Bit Operations by inlining', 'Remove streams from hot code'
PaperMC/Paper@98e745a Update 'Optimize Pathfinder - Remove Streams / Optimized collections'
PaperMC/Paper@49e49d0 Update 'Fix entity tracker desync when new players are added to the tracker'
PaperMC/Paper@87e0525 Update alternate redstone impls
PaperMC/Paper@35e973d Update 'Improve exact choice recipe ingredients', 'Only write chunk data to disk if it serializes without throwing'
PaperMC/Paper@181f9bb Update 'Entity load/save limit per chunk', 'Attempt to recalculate regionfile header if it is corrupt'
PaperMC/Paper@b31ca18 Update 'Incremental chunk and player saving', 'Optimise general POI access'
PaperMC/Paper@9b69cc5 Add some more Mannequin API
PaperMC/Paper@8bb12cb Fix compile
PaperMC/Paper@e3aca92 Replace ConcurrentUtil's Validate with Objects
PaperMC/Paper@9a626dd Rewrite ticket counter system
PaperMC/Paper@65250cb Drop "Optimize Collision to not load chunks"
PaperMC/Paper@55d56d9 Apply "Flush regionfiles on save configuration option"
PaperMC/Paper@920e8d3 Apply "Optimise collision checking in player move packet handling"
PaperMC/Paper@ec492d3 Apply "Improve keepalive ping system"
PaperMC/Paper@8f65947 Apply "Optimise EntityScheduler ticking"
PaperMC/Paper@086b4fd Apply "Optional per player mob spawns"
PaperMC/Paper@2f4211e Apply "Improve cancelling PreCreatureSpawnEvent with per player mob spawns"
PaperMC/Paper@b6d9557 Apply "Optimize Hoppers"
PaperMC/Paper@388e693 update generator
PaperMC/Paper@a3c89a8 add javadocs for new api
PaperMC/Paper@fcc763a Call BlockRedstoneEvent for the shelf
PaperMC/Paper@03eb18b replace requireNonNull by checkArgument and deprecate MCUtil#toLocation
PaperMC/Paper@6b7bf01 bump built-in datapack version
PaperMC/Paper@2779a53 deprecate #lanterns material tag in favour of vanilla tag
PaperMC/Paper@6f9957e Mannequin#createDefaultProfile -> Mannequin#defaultProfile
PaperMC/Paper@24874e5 Also rename Mannequin profile getter/setters for consistency
PaperMC/Paper@bc2ae10 Fix default respawn dimension being null for new worlds
PaperMC/Paper@eb42158 Use 0.0.4 release of ConcurrentUtil
PaperMC/Paper@bb01745 1.21.9-pre2
PaperMC/Paper@0249204 1.21.9-pre2 feature patches
PaperMC/Paper@9360ba4 Identifying comments for MinecraftServer
PaperMC/Paper@5d3aa53 Some diff improvements in prepare spawn task
PaperMC/Paper@22ad451 Move some stuff to ATs
PaperMC/Paper@0ea15c9 Drop no longer applicable ATs
PaperMC/Paper@cf78f2a bump api-version/datapack format and add a copper torch tag
PaperMC/Paper@60cb0df generate ClientOption enums and mark CraftBlockData impl as null marked
PaperMC/Paper@4025289 Add pre2 to api version
PaperMC/Paper@f2cb073 Set build channel to alpha
PaperMC/Paper@90b29c4 Port most of the anti-xray patch
PaperMC/Paper@4a8e88d Disable oldPaperCommit to fix CI build
PaperMC/Paper@121ac2e Port the last Anti-XRay hunk
PaperMC/Paper@f43641f Use ConcurrentUtil 0.0.5
PaperMC/Paper@1f79388 fix end portal teleportation
PaperMC/Paper@2efb400 [ci skip] Adjust spawn location event docs
PaperMC/Paper@cb9fc05 simplify overloads
PaperMC/Paper@25ecc59 Enable Anti-Xray
PaperMC/Paper@4d7185f Add AsyncPlayerSpawnLocationEvent#isNewPlayer (#13081)
PaperMC/Paper@dc474a8 Fixup vanilla code for Anti-Xray changes
PaperMC/Paper@0e23b02 Add back null check for chunkPacketBlockController
PaperMC/Paper@e6f1483 Update to 1.21.9-pre3
PaperMC/Paper@44259ea Add ResolvableProfile.SkinPatch (#13091)
PaperMC/Paper@634f51e Update to 1.21.9-pre4
PaperMC/Paper@fada3a7 Update DataConverter to 1.21.9-pre4
PaperMC/Paper@037179f Update Starlight stored version
PaperMC/Paper@6b0b29a Update publishing endpoint
PaperMC/Paper@f6fabc5 Call EntityChangeBlockEvent for copper golem statue changes (#13090)
PaperMC/Paper@1d6ee7d Update adventure
PaperMC/Paper@404e49f Update to 1.21.9-rc1
PaperMC/Paper@4055274 Fix empty SkinPatch initialization and swapped dynamic/static heuristic in ResolvableProfile build method
PaperMC/Paper@51fe7aa Fixed modern forwarding support (#13098)
PaperMC/Paper@5613a35 fix PlayerGameModeChangeEvent#cancelMessage
PaperMC/Paper@673abf4 use PlayerShieldDisableEvent#getCooldown
PaperMC/Paper@3a0dc7f Fix a couple PlayerProfile mutability issues
PaperMC/Paper@e97fb40 Remove parallel generation config option
PaperMC/Paper@c3a60b8 Use ThreadLocal for Starlight and ticket level propagator cache
PaperMC/Paper@e16b369 Resize propagator queues less aggressively
2025-09-29 01:59:24 +01:00

118 lines
7.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samsuik <kfian294ma4@gmail.com>
Date: Thu, 27 Jun 2024 17:02:32 +0100
Subject: [PATCH] Add maxSearch to getEntities
diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
index 8df264c86ab14f4e7aa9918a3341ef35ffaa5290..9d90db0c55df85ac26c91b42fb9e72baad940e8f 100644
--- a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
+++ b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
@@ -336,7 +336,14 @@ public final class ChunkEntitySlices {
public boolean getEntities(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
final int maxCount) {
- return this.allEntities.getEntitiesLimited(except, box, into, predicate, maxCount);
+ // Sakura start - add maxSearch to getEntities
+ return this.getEntities(except, box, into, predicate, maxCount, Integer.MAX_VALUE);
+ }
+
+ public boolean getEntities(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
+ final int maxCount, final int maxSearch) {
+ return this.allEntities.getEntitiesLimited(except, box, into, predicate, maxCount, maxSearch);
+ // Sakura end - add maxSearch to getEntities
}
public <T extends Entity> void getEntities(final EntityType<?> type, final AABB box, final List<? super T> into,
@@ -574,6 +581,13 @@ public final class ChunkEntitySlices {
public boolean getEntitiesLimited(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
final int maxCount) {
+ // Sakura start - add maxSearch to getEntities
+ return this.getEntitiesLimited(except, box, into, predicate, maxCount, Integer.MAX_VALUE);
+ }
+
+ public boolean getEntitiesLimited(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
+ final int maxCount, final int maxSearch) {
+ // Sakura end - add maxSearch to getEntities
if (this.count == 0) {
return false;
}
@@ -595,8 +609,14 @@ public final class ChunkEntitySlices {
final Entity[] storage = list.storage;
- for (int i = 0, len = Math.min(storage.length, list.size()); i < len; ++i) {
- final Entity entity = storage[i];
+ // Sakura start - add maxSearch to getEntities
+ final int len = Math.min(storage.length, list.size());
+ final int offset = this.slices.world.random.nextInt(len);
+ for (int i = 0; i < len; ++i) {
+ final int pos = (i + offset) % len;
+ final Entity entity = storage[pos];
+ if (i > maxSearch) break;
+ // Sakura end - add maxSearch to getEntities
if (entity == null || entity == except || !entity.getBoundingBox().intersects(box)) {
continue;
diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
index 2d24d03bbdb5ee0d862cbfff2219f58afffafe12..1bf06038d51efcc103fad23670686c30d676dc0b 100644
--- a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
+++ b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
@@ -726,6 +726,13 @@ public abstract class EntityLookup implements LevelEntityGetter<Entity> {
public void getEntities(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
final int maxCount) {
+ // Sakura start - add maxSearch to getEntities
+ this.getEntities(except, box, into, predicate, maxCount, Integer.MAX_VALUE);
+ }
+
+ public void getEntities(final Entity except, final AABB box, final List<Entity> into, final Predicate<? super Entity> predicate,
+ final int maxCount, final int maxSearch) {
+ // Sakura end - add maxSearch to getEntities
final int minChunkX = (Mth.floor(box.minX) - 2) >> 4;
final int minChunkZ = (Mth.floor(box.minZ) - 2) >> 4;
final int maxChunkX = (Mth.floor(box.maxX) + 2) >> 4;
@@ -757,7 +764,7 @@ public abstract class EntityLookup implements LevelEntityGetter<Entity> {
continue;
}
- if (chunk.getEntities(except, box, into, predicate, maxCount)) {
+ if (chunk.getEntities(except, box, into, predicate, maxCount, maxSearch)) { // Sakura - add maxSearch to getEntities
return;
}
}
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
index e807aafed0295d8db7ba0782bb1e462561e9e1ec..af39222e08bc7957ac40ea9fd6aae517e7cee45a 100644
--- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java
@@ -1728,10 +1728,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
this.getEntities(entityTypeTest, bounds, predicate, output, Integer.MAX_VALUE);
}
- // Paper start - rewrite chunk system
public <T extends Entity> void getEntities(final EntityTypeTest<Entity, T> entityTypeTest,
final AABB boundingBox, final Predicate<? super T> predicate,
final List<? super T> into, final int maxCount) {
+ // Sakura start - add maxSearch to getEntities
+ this.getEntities(entityTypeTest, boundingBox, predicate, into, maxCount, Integer.MAX_VALUE);
+ }
+
+ // Paper start - rewrite chunk system
+ public <T extends Entity> void getEntities(final EntityTypeTest<Entity, T> entityTypeTest,
+ final AABB boundingBox, final Predicate<? super T> predicate,
+ final List<? super T> into, final int maxCount, final int maxSearch) {
+ // Sakura end - add maxSearch to getEntities
Profiler.get().incrementCounter("getEntities");
if (entityTypeTest instanceof net.minecraft.world.entity.EntityType<T> byType) {
@@ -1748,7 +1756,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
if (entityTypeTest == null) {
if (maxCount != Integer.MAX_VALUE) {
- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate, maxCount);
+ ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate, maxCount, maxSearch); // Sakura - add maxSearch to getEntities
ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount);
return;
} else {