mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 23:38:25 +01:00
603159dedf
Removes PlayerMicroMoveEvent API, the ability to disable the AsyncCatcher, and the TeleportPassengerVehicleWithPlayer patch
138 lines
No EOL
5.9 KiB
Diff
138 lines
No EOL
5.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Iceee <andrew@opticgaming.tv>
|
|
Date: Wed, 15 Jul 2015 02:41:12 -0700
|
|
Subject: [PATCH] ChunkMap caching
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -0,0 +0,0 @@ public class Chunk {
|
|
public long lightUpdateTime;
|
|
// PaperSpigot end
|
|
|
|
+ // PaperSpigot start - ChunkMap caching
|
|
+ private PacketPlayOutMapChunk.ChunkMap chunkMap;
|
|
+ private int emptySectionBits;
|
|
+
|
|
+ public PacketPlayOutMapChunk.ChunkMap getChunkMap(boolean groundUpContinuous, int primaryBitMask) {
|
|
+ if (!world.paperSpigotConfig.cacheChunkMaps || !groundUpContinuous || (primaryBitMask != 0 && primaryBitMask != '\uffff')) {
|
|
+ return PacketPlayOutMapChunk.a(this, groundUpContinuous, !world.worldProvider.o(), primaryBitMask);
|
|
+ }
|
|
+
|
|
+ if (primaryBitMask == 0) {
|
|
+ PacketPlayOutMapChunk.ChunkMap chunkMap = new PacketPlayOutMapChunk.ChunkMap();
|
|
+ chunkMap.a = new byte[0];
|
|
+ return chunkMap;
|
|
+ }
|
|
+
|
|
+ boolean isDirty = false;
|
|
+ for (int i = 0; i < sections.length; ++i) {
|
|
+ ChunkSection section = sections[i];
|
|
+ if (section == null) {
|
|
+ if ((emptySectionBits & (1 << i)) == 0) {
|
|
+ isDirty = true;
|
|
+ emptySectionBits |= (1 << i);
|
|
+ }
|
|
+ } else {
|
|
+ if ((emptySectionBits & (1 << i)) == 1) {
|
|
+ isDirty = true;
|
|
+ emptySectionBits &= ~(1 << i);
|
|
+ section.isDirty = false;
|
|
+ } else if (section.isDirty) {
|
|
+ isDirty = true;
|
|
+ section.isDirty = false;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (isDirty || chunkMap == null) {
|
|
+ chunkMap = PacketPlayOutMapChunk.a(this, true, !world.worldProvider.o(), '\uffff');
|
|
+ }
|
|
+
|
|
+ return chunkMap;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
|
|
private int neighbors = 0x1 << 12;
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkSection.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
|
|
@@ -0,0 +0,0 @@ public class ChunkSection {
|
|
private char[] blockIds;
|
|
private NibbleArray emittedLight;
|
|
private NibbleArray skyLight;
|
|
+ boolean isDirty; // PaperSpigot
|
|
|
|
public ChunkSection(int i, boolean flag) {
|
|
this.yPos = i;
|
|
@@ -0,0 +0,0 @@ public class ChunkSection {
|
|
}
|
|
|
|
this.blockIds[j << 8 | k << 4 | i] = (char) Block.d.b(iblockdata);
|
|
+ isDirty = true; // PaperSpigot
|
|
}
|
|
|
|
public Block b(int i, int j, int k) {
|
|
@@ -0,0 +0,0 @@ public class ChunkSection {
|
|
|
|
public void a(int i, int j, int k, int l) {
|
|
this.skyLight.a(i, j, k, l);
|
|
+ isDirty = true; // PaperSpigot
|
|
}
|
|
|
|
public int d(int i, int j, int k) {
|
|
@@ -0,0 +0,0 @@ public class ChunkSection {
|
|
|
|
public void b(int i, int j, int k, int l) {
|
|
this.emittedLight.a(i, j, k, l);
|
|
+ isDirty = true; // PaperSpigot
|
|
}
|
|
|
|
public int e(int i, int j, int k) {
|
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
@@ -0,0 +0,0 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
|
|
this.a = chunk.locX;
|
|
this.b = chunk.locZ;
|
|
this.d = flag;
|
|
- this.c = a(chunk, flag, !chunk.getWorld().worldProvider.o(), i);
|
|
+ this.c = chunk.getChunkMap(flag, i); // PaperSpigot
|
|
chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.locX, chunk.locZ, c.b, c.a, chunk.world);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
|
@@ -0,0 +0,0 @@ public class PacketPlayOutMapChunkBulk implements Packet<PacketListenerPlayOut>
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
Chunk chunk = (Chunk) list.get(j);
|
|
- PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = PacketPlayOutMapChunk.a(chunk, true, this.d, '\uffff');
|
|
+ PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = chunk.getChunkMap(true, '\uffff'); // PaperSpigot
|
|
|
|
this.a[j] = chunk.locX;
|
|
this.b[j] = chunk.locZ;
|
|
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
|
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
|
{
|
|
mobSpawnerTickRate = getInt( "mob-spawner-tick-rate", 1 );
|
|
}
|
|
+
|
|
+ public boolean cacheChunkMaps;
|
|
+ private void cacheChunkMaps()
|
|
+ {
|
|
+ cacheChunkMaps = getBoolean( "cache-chunk-maps", false );
|
|
+ }
|
|
}
|
|
--
|