Add maxSearchRadius parameter to WorldScanner

This commit is contained in:
Brady 2018-09-20 14:14:59 -05:00
parent 0575e2d667
commit 1c2e47c39a
No known key found for this signature in database
GPG Key ID: 73A788379A197567

View File

@ -39,9 +39,10 @@ public enum WorldScanner implements Helper {
* @param max The maximum number of blocks to scan before cutoff * @param max The maximum number of blocks to scan before cutoff
* @param yLevelThreshold If a block is found within this Y level, the current result will be * @param yLevelThreshold If a block is found within this Y level, the current result will be
* returned, if the value is negative, then this condition doesn't apply. * returned, if the value is negative, then this condition doesn't apply.
* @param maxSearchRadius The maximum chunk search radius
* @return The matching block positions * @return The matching block positions
*/ */
public List<BlockPos> scanLoadedChunks(List<Block> blocks, int max, int yLevelThreshold) { public List<BlockPos> scanLoadedChunks(List<Block> blocks, int max, int yLevelThreshold, int maxSearchRadius) {
if (blocks.contains(null)) { if (blocks.contains(null)) {
throw new IllegalStateException("Invalid block name should have been caught earlier: " + blocks.toString()); throw new IllegalStateException("Invalid block name should have been caught earlier: " + blocks.toString());
} }
@ -51,6 +52,7 @@ public enum WorldScanner implements Helper {
} }
ChunkProviderClient chunkProvider = world().getChunkProvider(); ChunkProviderClient chunkProvider = world().getChunkProvider();
int maxSearchRadiusSq = maxSearchRadius * maxSearchRadius;
int playerChunkX = playerFeet().getX() >> 4; int playerChunkX = playerFeet().getX() >> 4;
int playerChunkZ = playerFeet().getZ() >> 4; int playerChunkZ = playerFeet().getZ() >> 4;
int playerY = playerFeet().getY(); int playerY = playerFeet().getY();
@ -105,7 +107,7 @@ public enum WorldScanner implements Helper {
} }
if ((allUnloaded && foundChunks) if ((allUnloaded && foundChunks)
|| res.size() >= max || res.size() >= max
|| (searchRadiusSq > 26 || (searchRadiusSq > 1 && foundWithinY)) || (searchRadiusSq > maxSearchRadiusSq || (searchRadiusSq > 1 && foundWithinY))
) { ) {
return res; return res;
} }