mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-22 07:08:47 +01:00
86 lines
3.8 KiB
Diff
86 lines
3.8 KiB
Diff
From 6387a4ad1c7e96f16dc8e84eadeb9179f814c6ec Mon Sep 17 00:00:00 2001
|
|
From: md_5 <md_5@live.com.au>
|
|
Date: Tue, 11 Jun 2013 12:17:37 +1000
|
|
Subject: [PATCH] More Efficient GetCubes
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 2c5c6b0..a09de8e 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1104,28 +1104,56 @@ public abstract class World implements IBlockAccess {
|
|
IBlockData iblockdata = Blocks.STONE.getBlockData();
|
|
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
|
|
|
|
- for (int k1 = i; k1 < j; ++k1) {
|
|
- for (int l1 = i1; l1 < j1; ++l1) {
|
|
- if (this.isLoaded(blockposition_mutableblockposition.c(k1, 64, l1))) {
|
|
- for (int i2 = k - 1; i2 < l; ++i2) {
|
|
- blockposition_mutableblockposition.c(k1, i2, l1);
|
|
- if (flag && flag1) {
|
|
- entity.h(false);
|
|
- } else if (!flag && !flag1) {
|
|
- entity.h(true);
|
|
- }
|
|
-
|
|
- IBlockData iblockdata1 = iblockdata;
|
|
+ // Spigot start
|
|
+ int ystart = ( ( k - 1 ) < 0 ) ? 0 : ( k - 1 );
|
|
+ for ( int chunkx = ( i >> 4 ); chunkx <= ( ( j - 1 ) >> 4 ); chunkx++ )
|
|
+ {
|
|
+ int cx = chunkx << 4;
|
|
+ for ( int chunkz = ( i1 >> 4 ); chunkz <= ( ( j1 - 1 ) >> 4 ); chunkz++ )
|
|
+ {
|
|
+ if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
|
|
+ {
|
|
+ continue;
|
|
+ }
|
|
+ int cz = chunkz << 4;
|
|
+ Chunk chunk = this.getChunkAt( chunkx, chunkz );
|
|
+ // Compute ranges within chunk
|
|
+ int xstart = ( i < cx ) ? cx : i;
|
|
+ int xend = ( j < ( cx + 16 ) ) ? j : ( cx + 16 );
|
|
+ int zstart = ( i1 < cz ) ? cz : i1;
|
|
+ int zend = ( j1 < ( cz + 16 ) ) ? j1 : ( cz + 16 );
|
|
+ // Loop through blocks within chunk
|
|
+ for ( int x = xstart; x < xend; x++ )
|
|
+ {
|
|
+ for ( int z = zstart; z < zend; z++ )
|
|
+ {
|
|
+ for ( int y = ystart; y < l; y++ )
|
|
+ {
|
|
+ BlockPosition blockposition = new BlockPosition( x, y, z );
|
|
+
|
|
+ if (flag && flag1) {
|
|
+ entity.h(false);
|
|
+ } else if (!flag && !flag1) {
|
|
+ entity.h(true);
|
|
+ }
|
|
|
|
- if (worldborder.a((BlockPosition) blockposition_mutableblockposition) || !flag1) {
|
|
- iblockdata1 = this.getType(blockposition_mutableblockposition);
|
|
+ IBlockData block;
|
|
+ if (!this.getWorldBorder().a(blockposition) && flag1) {
|
|
+ block = Blocks.STONE.getBlockData();
|
|
+ } else
|
|
+ {
|
|
+ block = chunk.getBlockData( blockposition );
|
|
+ }
|
|
+ if ( block != null )
|
|
+ {
|
|
+ block.getBlock().a(this, blockposition, block, axisalignedbb, arraylist, entity);
|
|
+ }
|
|
}
|
|
-
|
|
- iblockdata1.getBlock().a(this, blockposition_mutableblockposition, iblockdata1, axisalignedbb, arraylist, entity);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
+ // Spigot end
|
|
|
|
double d0 = 0.25D;
|
|
List list = this.getEntities(entity, axisalignedbb.grow(d0, d0, d0));
|
|
--
|
|
2.1.4
|
|
|