diff --git a/Spigot-Server-Patches/0109-Optimize-isValidLocation-for-inlining.patch b/Spigot-Server-Patches/0109-Optimize-isValidLocation-for-inlining.patch new file mode 100644 index 0000000000..50f389f653 --- /dev/null +++ b/Spigot-Server-Patches/0109-Optimize-isValidLocation-for-inlining.patch @@ -0,0 +1,122 @@ +From dc62f96b9c16fe77efbb7bbaf2ac512f8f8477d3 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Tue, 22 Mar 2016 23:41:34 -0400 +Subject: [PATCH] Optimize isValidLocation for inlining + +Move test to the blockPosition class so that it can access local variables. + +Replace all calls to the new place to the unnecessary forward. + +diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java +index f0908a2..d1688e1 100644 +--- a/src/main/java/net/minecraft/server/BaseBlockPosition.java ++++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java +@@ -9,6 +9,9 @@ public class BaseBlockPosition implements Comparable { + protected int a; + protected int c; + protected int d; ++ public boolean isValidLocation() { ++ return a >= -30000000 && d >= -30000000 && a < 30000000 && d < 30000000 && c >= 0 && c < 256; ++ } + // Paper end + + public BaseBlockPosition(int i, int j, int k) { +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index d21076b..6f45d2a 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -288,8 +288,8 @@ public abstract class World implements IBlockAccess { + return this.getType(blockposition1); + } + +- private boolean isValidLocation(BlockPosition blockposition) { +- return blockposition.getX() >= -30000000 && blockposition.getZ() >= -30000000 && blockposition.getX() < 30000000 && blockposition.getZ() < 30000000 && blockposition.getY() >= 0 && blockposition.getY() < 256; ++ private static boolean isValidLocation(BlockPosition blockposition) { // Paper ++ return blockposition.isValidLocation(); // Paper + } + + public boolean isEmpty(BlockPosition blockposition) { +@@ -301,7 +301,7 @@ public abstract class World implements IBlockAccess { + } + + public boolean a(BlockPosition blockposition, boolean flag) { +- return !this.isValidLocation(blockposition) ? false : this.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4, flag); ++ return !blockposition.isValidLocation() ? false : this.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4, flag); // Paper + } + + public boolean areChunksLoaded(BlockPosition blockposition, int i) { +@@ -381,7 +381,7 @@ public abstract class World implements IBlockAccess { + return true; + } + // CraftBukkit end +- if (!this.isValidLocation(blockposition)) { ++ if (!blockposition.isValidLocation()) { // Paper + return false; + } else if (!this.isClientSide && this.worldData.getType() == WorldType.DEBUG_ALL_BLOCK_STATES) { + return false; +@@ -649,7 +649,7 @@ public abstract class World implements IBlockAccess { + // Paper start - test if meets light level, return faster + // logic copied from below + public boolean isLightLevel(BlockPosition blockposition, int level) { +- if (isValidLocation(blockposition)) { ++ if (blockposition.isValidLocation()) { + if (this.getType(blockposition).f()) { + if (this.c(blockposition.up(), false) >= level) { + return true; +@@ -762,7 +762,7 @@ public abstract class World implements IBlockAccess { + blockposition = new BlockPosition(blockposition.getX(), 0, blockposition.getZ()); + } + +- if (!this.isValidLocation(blockposition)) { ++ if (!blockposition.isValidLocation()) { // Paper + return enumskyblock.c; + } else if (!this.isLoaded(blockposition)) { + return enumskyblock.c; +@@ -774,7 +774,7 @@ public abstract class World implements IBlockAccess { + } + + public void a(EnumSkyBlock enumskyblock, BlockPosition blockposition, int i) { +- if (this.isValidLocation(blockposition)) { ++ if (blockposition.isValidLocation()) { // Paper + if (this.isLoaded(blockposition)) { + Chunk chunk = this.getChunkAtWorldCoords(blockposition); + +@@ -810,7 +810,7 @@ public abstract class World implements IBlockAccess { + // CraftBukkit end + Chunk chunk = this.getChunkIfLoaded(blockposition); + if (chunk != null) { +- return this.isValidLocation(blockposition) ? chunk.getBlockData(blockposition) : Blocks.AIR.getBlockData(); ++ return blockposition.isValidLocation() ? chunk.getBlockData(blockposition) : Blocks.AIR.getBlockData(); + } + return null; + } +@@ -828,7 +828,7 @@ public abstract class World implements IBlockAccess { + } + } + // CraftBukkit end +- if (!this.isValidLocation(blockposition)) { ++ if (!blockposition.isValidLocation()) { // Paper + return Blocks.AIR.getBlockData(); + } else { + Chunk chunk = this.getChunkAtWorldCoords(blockposition); +@@ -2045,7 +2045,7 @@ public abstract class World implements IBlockAccess { + public Map capturedTileEntities = Maps.newHashMap(); + + public TileEntity getTileEntity(BlockPosition blockposition) { +- if (!this.isValidLocation(blockposition)) { ++ if (!blockposition.isValidLocation()) { // Paper + return null; + } else { + // CraftBukkit start +@@ -2148,7 +2148,7 @@ public abstract class World implements IBlockAccess { + } + + public boolean d(BlockPosition blockposition, boolean flag) { +- if (!this.isValidLocation(blockposition)) { ++ if (!blockposition.isValidLocation()) { // Paper + return flag; + } else { + Chunk chunk = this.chunkProvider.getLoadedChunkAt(blockposition.getX() >> 4, blockposition.getZ() >> 4); +-- +2.7.4 +