geforkt von Mirrors/Paper
ce270e1412
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: b2f1908c SPIGOT-5783: Add helpful info to UnknownDependencyException e4f46260 SPIGOT-2623: Add EntityEquipment methods to get/set ItemStacks by slot. 529a9a69 SPIGOT-5751: Clarify behaviour of block drop-related API methods CraftBukkit Changes:8ea9b138
Remove outdated build delay.ffc2b251
Revert "#675: Fix redirected CommandNodes sometimes not being properly redirected"cb701f6b
#675: Fix redirected CommandNodes sometimes not being properly redirectedc9d7c16b
SPIGOT-2623: Add EntityEquipment methods to get/set ItemStacks by slot.fad2494a
#673: Fix Craftworld#isChunkLoaded8637ec00
SPIGOT-5751: Made breakNaturally and getDrops returns the correct item if no argument is given Spigot Changes: a99063f7 Rebuild patches Fixes #3602
243 Zeilen
10 KiB
Diff
243 Zeilen
10 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 4 Jun 2020 02:24:49 -0400
|
|
Subject: [PATCH] Optimize Bit Operations by inlining
|
|
|
|
Inline bit operations and reduce instruction count to make these hot
|
|
operations faster
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
index 3bf17ccdaef21322b787db538d569e0bc614ef22..4c64798fbc50f4d8b08502ba865c5fde5c968e62 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
@@ -75,38 +75,34 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
|
|
return dynamicops.createIntList(IntStream.of(new int[]{this.getX(), this.getY(), this.getZ()}));
|
|
}
|
|
|
|
+ public static long getAdjacent(int baseX, int baseY, int baseZ, EnumDirection enumdirection) { return asLong(baseX + enumdirection.getAdjacentX(), baseY + enumdirection.getAdjacentY(), baseZ + enumdirection.getAdjacentZ()); } // Paper
|
|
public static long a(long i, EnumDirection enumdirection) {
|
|
return a(i, enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ());
|
|
}
|
|
|
|
public static long a(long i, int j, int k, int l) {
|
|
- return a(b(i) + j, c(i) + k, d(i) + l);
|
|
+ return a((int) (i >> 38) + j, (int) ((i << 52) >> 52) + k, (int) ((i << 26) >> 38) + l); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int b(long i) {
|
|
- return (int) (i << 64 - BlockPosition.k - BlockPosition.c >> 64 - BlockPosition.c);
|
|
+ return (int) (i >> 38); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(long i) {
|
|
- return (int) (i << 64 - BlockPosition.f >> 64 - BlockPosition.f);
|
|
+ return (int) ((i << 52) >> 52); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int d(long i) {
|
|
- return (int) (i << 64 - BlockPosition.j - BlockPosition.d >> 64 - BlockPosition.d);
|
|
+ return (int) ((i << 26) >> 38); // Paper - simplify/inline
|
|
}
|
|
|
|
public static BlockPosition fromLong(long i) {
|
|
- return new BlockPosition(b(i), c(i), d(i));
|
|
+ return new BlockPosition((int) (i >> 38), (int) ((i << 52) >> 52), (int) ((i << 26) >> 38)); // Paper - simplify/inline
|
|
}
|
|
|
|
public static long asLong(int x, int y, int z) { return a(x, y, z); } // Paper - OBFHELPER
|
|
public static long a(int i, int j, int k) {
|
|
- long l = 0L;
|
|
-
|
|
- l |= ((long) i & BlockPosition.g) << BlockPosition.k;
|
|
- l |= ((long) j & BlockPosition.h) << 0;
|
|
- l |= ((long) k & BlockPosition.i) << BlockPosition.j;
|
|
- return l;
|
|
+ return (((long) i & (long) 67108863) << 38) | (((long) j & (long) 4095)) | (((long) k & (long) 67108863) << 12); // Paper - inline constants and simplify
|
|
}
|
|
|
|
public static long f(long i) {
|
|
diff --git a/src/main/java/net/minecraft/server/SectionPosition.java b/src/main/java/net/minecraft/server/SectionPosition.java
|
|
index ca3f63f5e5e4e926de562b4bfbbf72ad8a6b943f..22bc96f97d22e0748110982e4b1ff85002f924b5 100644
|
|
--- a/src/main/java/net/minecraft/server/SectionPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/SectionPosition.java
|
|
@@ -16,7 +16,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static SectionPosition a(BlockPosition blockposition) {
|
|
- return new SectionPosition(a(blockposition.getX()), a(blockposition.getY()), a(blockposition.getZ()));
|
|
+ return new SectionPosition(blockposition.getX() >> 4, blockposition.getY() >> 4, blockposition.getZ() >> 4); // Paper
|
|
}
|
|
|
|
public static SectionPosition a(ChunkCoordIntPair chunkcoordintpair, int i) {
|
|
@@ -28,15 +28,23 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static SectionPosition a(long i) {
|
|
- return new SectionPosition(b(i), c(i), d(i));
|
|
+ return new SectionPosition((int) (i >> 42), (int) (i << 44 >> 44), (int) (i << 22 >> 42)); // Paper
|
|
}
|
|
|
|
public static long a(long i, EnumDirection enumdirection) {
|
|
return a(i, enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static long getAdjacentFromBlockPos(int x, int y, int z, EnumDirection enumdirection) {
|
|
+ return (((long) ((x >> 4) + enumdirection.getAdjacentX()) & 4194303L) << 42) | (((long) ((y >> 4) + enumdirection.getAdjacentY()) & 1048575L)) | (((long) ((z >> 4) + enumdirection.getAdjacentZ()) & 4194303L) << 20);
|
|
+ }
|
|
+ public static long getAdjacentFromSectionPos(int x, int y, int z, EnumDirection enumdirection) {
|
|
+ return (((long) (x + enumdirection.getAdjacentX()) & 4194303L) << 42) | (((long) ((y) + enumdirection.getAdjacentY()) & 1048575L)) | (((long) (z + enumdirection.getAdjacentZ()) & 4194303L) << 20);
|
|
+ }
|
|
+ // Paper end
|
|
public static long a(long i, int j, int k, int l) {
|
|
- return b(b(i) + j, c(i) + k, d(i) + l);
|
|
+ return (((long) ((int) (i >> 42) + j) & 4194303L) << 42) | (((long) ((int) (i << 44 >> 44) + k) & 1048575L)) | (((long) ((int) (i << 22 >> 42) + l) & 4194303L) << 20); // Simplify to reduce instruction count
|
|
}
|
|
|
|
public static int a(int i) {
|
|
@@ -48,11 +56,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static short b(BlockPosition blockposition) {
|
|
- int i = b(blockposition.getX());
|
|
- int j = b(blockposition.getY());
|
|
- int k = b(blockposition.getZ());
|
|
-
|
|
- return (short) (i << 8 | k << 4 | j);
|
|
+ return (short) ((blockposition.x & 15) << 8 | (blockposition.z & 15) << 4 | blockposition.y & 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(int i) {
|
|
@@ -60,7 +64,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static int b(long i) {
|
|
- return (int) (i << 0 >> 42);
|
|
+ return (int) (i >> 42); // Paper
|
|
}
|
|
|
|
public static int c(long i) {
|
|
@@ -71,44 +75,46 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return (int) (i << 22 >> 42);
|
|
}
|
|
|
|
- public int a() {
|
|
- return this.getX();
|
|
+ public final int a() { // Paper
|
|
+ return x; // Paper
|
|
}
|
|
|
|
- public int b() {
|
|
- return this.getY();
|
|
+ public final int b() { // Paper
|
|
+ return y; // Paper
|
|
}
|
|
|
|
- public int c() {
|
|
- return this.getZ();
|
|
+ public final int c() { // Paper
|
|
+ return z; // Paper
|
|
}
|
|
|
|
- public int d() {
|
|
- return this.a() << 4;
|
|
+ public final int d() { // Paper
|
|
+ return x << 4; // Paper
|
|
}
|
|
|
|
- public int e() {
|
|
- return this.b() << 4;
|
|
+ public final int e() { // Paper
|
|
+ return y << 4; // Paper
|
|
}
|
|
|
|
- public int f() {
|
|
- return this.c() << 4;
|
|
+ public final int f() { // Paper
|
|
+ return z << 4; // Paper
|
|
}
|
|
|
|
- public int g() {
|
|
- return (this.a() << 4) + 15;
|
|
+ public final int g() { // Paper
|
|
+ return (x << 4) + 15; // Paper
|
|
}
|
|
|
|
- public int h() {
|
|
- return (this.b() << 4) + 15;
|
|
+ public final int h() { // Paper
|
|
+ return (y << 4) + 15; // Paper
|
|
}
|
|
|
|
- public int r() {
|
|
- return (this.c() << 4) + 15;
|
|
+ public final int r() { // Paper
|
|
+ return (z << 4) + 15; // Paper
|
|
}
|
|
|
|
+ public static long blockToSection(long i) { return e(i); } // Paper - OBFHELPER
|
|
public static long e(long i) {
|
|
- return b(a(BlockPosition.b(i)), a(BlockPosition.c(i)), a(BlockPosition.d(i)));
|
|
+ // b(a(BlockPosition.b(i)), a(BlockPosition.c(i)), a(BlockPosition.d(i)));
|
|
+ return (((long) (int) (i >> 42) & 4194303L) << 42) | (((long) (int) ((i << 52) >> 56) & 1048575L)) | (((long) (int) ((i << 26) >> 42) & 4194303L) << 20); // Simplify to reduce instruction count
|
|
}
|
|
|
|
public static long f(long i) {
|
|
@@ -116,7 +122,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public BlockPosition s() {
|
|
- return new BlockPosition(c(this.a()), c(this.b()), c(this.c()));
|
|
+ return new BlockPosition(x << 4, y << 4, z << 4); // Paper
|
|
}
|
|
|
|
public BlockPosition t() {
|
|
@@ -129,36 +135,30 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return new ChunkCoordIntPair(this.a(), this.c());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static long blockPosAsSectionLong(int i, int j, int k) {
|
|
+ return (((long) (i >> 4) & 4194303L) << 42) | (((long) (j >> 4) & 1048575L)) | (((long) (k >> 4) & 4194303L) << 20);
|
|
+ }
|
|
+ // Paper end
|
|
+ public static long asLong(int i, int j, int k) { return b(i, j, k); } // Paper - OBFHELPER
|
|
public static long b(int i, int j, int k) {
|
|
- long l = 0L;
|
|
-
|
|
- l |= ((long) i & 4194303L) << 42;
|
|
- l |= ((long) j & 1048575L) << 0;
|
|
- l |= ((long) k & 4194303L) << 20;
|
|
- return l;
|
|
+ return (((long) i & 4194303L) << 42) | (((long) j & 1048575L)) | (((long) k & 4194303L) << 20); // Paper - Simplify to reduce instruction count
|
|
}
|
|
|
|
public long v() {
|
|
- return b(this.a(), this.b(), this.c());
|
|
+ return (((long) x & 4194303L) << 42) | (((long) y & 1048575L)) | (((long) z & 4194303L) << 20); // Paper - Simplify to reduce instruction count
|
|
}
|
|
|
|
public Stream<BlockPosition> w() {
|
|
- return BlockPosition.a(this.d(), this.e(), this.f(), this.g(), this.h(), this.r());
|
|
+ return BlockPosition.a(x << 4, y << 4, z << 4, (x << 4) + 15, (y << 4) + 15, (z << 4) + 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> a(SectionPosition sectionposition, int i) {
|
|
- int j = sectionposition.a();
|
|
- int k = sectionposition.b();
|
|
- int l = sectionposition.c();
|
|
-
|
|
- return a(j - i, k - i, l - i, j + i, k + i, l + i);
|
|
+ return a(sectionposition.x - i, sectionposition.y - i, sectionposition.z - i, sectionposition.x + i, sectionposition.y + i, sectionposition.z + i); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> b(ChunkCoordIntPair chunkcoordintpair, int i) {
|
|
- int j = chunkcoordintpair.x;
|
|
- int k = chunkcoordintpair.z;
|
|
-
|
|
- return a(j - i, 0, k - i, j + i, 15, k + i);
|
|
+ return a(chunkcoordintpair.x - i, 0, chunkcoordintpair.z - i, chunkcoordintpair.x + i, 15, chunkcoordintpair.z + i); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> a(final int i, final int j, final int k, final int l, final int i1, final int j1) {
|