Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 85 additions & 107 deletions src/main/java/net/minecraft/server/World.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ public abstract class World implements IBlockAccess {
private ArrayList L;
private boolean M;
int[] I;

public int mhvari;
public int mhvarj;
public int mhvark;
public int mhvarl;
public int mhvari1;
public int mhvarj1;

public BiomeBase getBiome(int i, int j) {
if (this.isLoaded(i, 0, j)) {
Expand Down Expand Up @@ -114,6 +121,23 @@ public CraftWorld getWorld() {
public CraftServer getServer() {
return (CraftServer) Bukkit.getServer();
}

public boolean inBounds(int a, int b) {
if(a >= -30000000 && b >= -30000000 && a < 30000000 && b < 30000000) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be way simpler to just return(a >= -30000000 && b >= -30000000 && a < 30000000 && b < 30000000) rather than have a whole if/else statement here.

return true;
} else {
return false;
}
}

public void generateMHValues(AxisAlignedBB axisalignedbb) {
mhvari = MathHelper.floor(axisalignedbb.a);
mhvarj = MathHelper.floor(axisalignedbb.d + 1.0D);
mhvark = MathHelper.floor(axisalignedbb.b);
mhvarl = MathHelper.floor(axisalignedbb.e + 1.0D);
mhvari1 = MathHelper.floor(axisalignedbb.c);
mhvarj1 = MathHelper.floor(axisalignedbb.f + 1.0D);
}

// Changed signature - added gen and env
public World(IDataManager idatamanager, String s, WorldSettings worldsettings, WorldProvider worldprovider, MethodProfiler methodprofiler, ChunkGenerator gen, org.bukkit.World.Environment env) {
Expand Down Expand Up @@ -199,7 +223,7 @@ public Block b(int i, int j) {
}

public Block getType(int i, int j, int k) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000 && j >= 0 && j < 256) {
if (inBounds(i, k) && j >= 0 && j < 256) {
Chunk chunk = null;

try {
Expand Down Expand Up @@ -276,10 +300,8 @@ public Chunk getChunkAt(int i, int j) {
}

public boolean setTypeAndData(int i, int j, int k, Block block, int l, int i1) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return false;
} else if (j >= 256) {
if (inBounds(i, k)) {
if (j < 0 || j >= 256) {
return false;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
Expand Down Expand Up @@ -315,10 +337,8 @@ public boolean setTypeAndData(int i, int j, int k, Block block, int l, int i1) {
}

public int getData(int i, int j, int k) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return 0;
} else if (j >= 256) {
if (inBounds(i, k)) {
if (j < 0 || j >= 256) {
return 0;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
Expand All @@ -333,10 +353,8 @@ public int getData(int i, int j, int k) {
}

public boolean setData(int i, int j, int k, int l, int i1) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return false;
} else if (j >= 256) {
if (inBounds(i, k)) {
if (j < 0 || j >= 256) {
return false;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
Expand Down Expand Up @@ -527,7 +545,7 @@ public int getLightLevel(int i, int j, int k) {
}

public int b(int i, int j, int k, boolean flag) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (inBounds(i, k)) {
if (flag && this.getType(i, j, k).n()) {
int l = this.b(i, j + 1, k, false);
int i1 = this.b(i + 1, j, k, false);
Expand Down Expand Up @@ -571,7 +589,7 @@ public int b(int i, int j, int k, boolean flag) {
}

public int getHighestBlockYAt(int i, int j) {
if (i >= -30000000 && j >= -30000000 && i < 30000000 && j < 30000000) {
if (inBounds(i, j)) {
if (!this.isChunkLoaded(i >> 4, j >> 4)) {
return 0;
} else {
Expand All @@ -585,7 +603,7 @@ public int getHighestBlockYAt(int i, int j) {
}

public int g(int i, int j) {
if (i >= -30000000 && j >= -30000000 && i < 30000000 && j < 30000000) {
if (inBounds(i, j)) {
if (!this.isChunkLoaded(i >> 4, j >> 4)) {
return 0;
} else {
Expand All @@ -607,7 +625,7 @@ public int b(EnumSkyBlock enumskyblock, int i, int j, int k) {
j = 255;
}

if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (inBounds(i, k)) {
int l = i >> 4;
int i1 = k >> 4;

Expand All @@ -624,7 +642,7 @@ public int b(EnumSkyBlock enumskyblock, int i, int j, int k) {
}

public void b(EnumSkyBlock enumskyblock, int i, int j, int k, int l) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (inBounds(i, k)) {
if (j >= 0) {
if (j < 256) {
if (this.isChunkLoaded(i >> 4, k >> 4)) {
Expand Down Expand Up @@ -990,20 +1008,15 @@ public void addIWorldAccess(IWorldAccess iworldaccess) {

public List getCubes(Entity entity, AxisAlignedBB axisalignedbb) {
this.L.clear();
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = i1; l1 < j1; ++l1) {
generateMHValues(axisalignedbb);

for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvari1; l1 < mhvarj1; ++l1) {
if (this.isLoaded(k1, 64, l1)) {
for (int i2 = k - 1; i2 < l; ++i2) {
for (int i2 = mhvark - 1; i2 < mhvarl; ++i2) {
Block block;

if (k1 >= -30000000 && k1 < 30000000 && l1 >= -30000000 && l1 < 30000000) {
if (inBounds(k1, l1)) {
block = this.getType(k1, i2, l1);
} else {
block = Blocks.STONE;
Expand Down Expand Up @@ -1036,20 +1049,15 @@ public List getCubes(Entity entity, AxisAlignedBB axisalignedbb) {

public List a(AxisAlignedBB axisalignedbb) {
this.L.clear();
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = i1; l1 < j1; ++l1) {
generateMHValues(axisalignedbb);

for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvari1; l1 < mhvarj1; ++l1) {
if (this.isLoaded(k1, 64, l1)) {
for (int i2 = k - 1; i2 < l; ++i2) {
for (int i2 = mhvark - 1; i2 < mhvarl; ++i2) {
Block block;

if (k1 >= -30000000 && k1 < 30000000 && l1 >= -30000000 && l1 < 30000000) {
if (inBounds(k1, l1)) {
block = this.getType(k1, i2, l1);
} else {
block = Blocks.BEDROCK;
Expand Down Expand Up @@ -1415,28 +1423,23 @@ public boolean a(AxisAlignedBB axisalignedbb, Entity entity) {
}

public boolean c(AxisAlignedBB axisalignedbb) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);
generateMHValues(axisalignedbb);

if (axisalignedbb.a < 0.0D) {
--i;
--mhvari;
}

if (axisalignedbb.b < 0.0D) {
--k;
--mhvark;
}

if (axisalignedbb.c < 0.0D) {
--i1;
--mhvari1;
}

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
Block block = this.getType(k1, l1, i2);

if (block.getMaterial() != Material.AIR) {
Expand All @@ -1450,28 +1453,23 @@ public boolean c(AxisAlignedBB axisalignedbb) {
}

public boolean containsLiquid(AxisAlignedBB axisalignedbb) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);
generateMHValues(axisalignedbb);

if (axisalignedbb.a < 0.0D) {
--i;
--mhvari;
}

if (axisalignedbb.b < 0.0D) {
--k;
--mhvark;
}

if (axisalignedbb.c < 0.0D) {
--i1;
--mhvari1;
}

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
Block block = this.getType(k1, l1, i2);

if (block.getMaterial().isLiquid()) {
Expand All @@ -1485,17 +1483,12 @@ public boolean containsLiquid(AxisAlignedBB axisalignedbb) {
}

public boolean e(AxisAlignedBB axisalignedbb) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

if (this.b(i, k, i1, j, l, j1)) {
for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
generateMHValues(axisalignedbb);

if (this.b(mhvari, mhvark, mhvari1, mhvarj, mhvarl, mhvarj1)) {
for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
Block block = this.getType(k1, l1, i2);

if (block == Blocks.FIRE || block == Blocks.LAVA || block == Blocks.STATIONARY_LAVA) {
Expand All @@ -1510,22 +1503,17 @@ public boolean e(AxisAlignedBB axisalignedbb) {
}

public boolean a(AxisAlignedBB axisalignedbb, Material material, Entity entity) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

if (!this.b(i, k, i1, j, l, j1)) {
generateMHValues(axisalignedbb);

if (!this.b(mhvari, mhvark, mhvari1, mhvarj, mhvarl, mhvarj1)) {
return false;
} else {
boolean flag = false;
Vec3D vec3d = Vec3D.a(0.0D, 0.0D, 0.0D);

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
Block block = this.getType(k1, l1, i2);

if (block.getMaterial() == material) {
Expand Down Expand Up @@ -1554,16 +1542,11 @@ public boolean a(AxisAlignedBB axisalignedbb, Material material, Entity entity)
}

public boolean a(AxisAlignedBB axisalignedbb, Material material) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
generateMHValues(axisalignedbb);

for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
if (this.getType(k1, l1, i2).getMaterial() == material) {
return true;
}
Expand All @@ -1575,16 +1558,11 @@ public boolean a(AxisAlignedBB axisalignedbb, Material material) {
}

public boolean b(AxisAlignedBB axisalignedbb, Material material) {
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
int l = MathHelper.floor(axisalignedbb.e + 1.0D);
int i1 = MathHelper.floor(axisalignedbb.c);
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);

for (int k1 = i; k1 < j; ++k1) {
for (int l1 = k; l1 < l; ++l1) {
for (int i2 = i1; i2 < j1; ++i2) {
generateMHValues(axisalignedbb);

for (int k1 = mhvari; k1 < mhvarj; ++k1) {
for (int l1 = mhvark; l1 < mhvarl; ++l1) {
for (int i2 = mhvari1; i2 < mhvarj1; ++i2) {
Block block = this.getType(k1, l1, i2);

if (block.getMaterial() == material) {
Expand Down Expand Up @@ -1793,7 +1771,7 @@ public static boolean a(IBlockAccess iblockaccess, int i, int j, int k) {
}

public boolean c(int i, int j, int k, boolean flag) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (inBounds(i, k)) {
Chunk chunk = this.chunkProvider.getOrCreateChunk(i >> 4, k >> 4);

if (chunk != null && !chunk.isEmpty()) {
Expand Down
Loading