mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-30 20:21:51 +01:00
e4d10a6d67
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: 122289ff Add FaceAttachable interface to handle Grindstone facing in common with Switches a6db750e SPIGOT-5647: ZombieVillager entity should have getVillagerType() CraftBukkit Changes:bbe3d58e
SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException3075579f
Add FaceAttachable interface to handle Grindstone facing in common with Switches95bd4238
SPIGOT-5647: ZombieVillager entity should have getVillagerType()4d975ac3
SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current
90 lines
3.8 KiB
Diff
90 lines
3.8 KiB
Diff
From 9e4aa7107314e194495592ea74715008dd3b7fb4 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sat, 2 Mar 2019 14:55:01 -0500
|
|
Subject: [PATCH] Handle Excessive Signs in Chunks creating too large of
|
|
packets
|
|
|
|
Also adds a limit to stop sending Sign data to client after 500
|
|
signs per chunk to limit client lag.
|
|
|
|
Use -DPaper.excessiveSignsLimit=500 to configure that limit, or -1
|
|
to disable the limit and let your players be abused.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
index b1dededc15..e156804f7a 100644
|
|
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
|
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
@@ -212,6 +212,15 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
});
|
|
}
|
|
|
|
+ // Paper start
|
|
+ java.util.List<Packet> extraPackets = packet.getExtraPackets();
|
|
+ if (extraPackets != null && !extraPackets.isEmpty()) {
|
|
+ for (Packet extraPacket : extraPackets) {
|
|
+ this.dispatchPacket(extraPacket, genericfuturelistener);
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
}
|
|
|
|
private void sendPacketQueue() { this.o(); } // Paper - OBFHELPER
|
|
diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java
|
|
index 2d8e6a2f4a..8d0965a053 100644
|
|
--- a/src/main/java/net/minecraft/server/Packet.java
|
|
+++ b/src/main/java/net/minecraft/server/Packet.java
|
|
@@ -11,6 +11,7 @@ public interface Packet<T extends PacketListener> {
|
|
void a(T t0);
|
|
|
|
// Paper start
|
|
+ default java.util.List<Packet> getExtraPackets() { return null; }
|
|
default boolean packetTooLarge(NetworkManager manager) {
|
|
return false;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
index a0b87f89df..47710067a6 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
|
@@ -23,6 +23,15 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
|
|
|
|
public PacketPlayOutMapChunk() {}
|
|
|
|
+ // Paper start
|
|
+ private final java.util.List<Packet> extraPackets = new java.util.ArrayList<>();
|
|
+ private static final int SKIP_EXCESSIVE_SIGNS_LIMIT = Integer.getInteger("Paper.excessiveSignsLimit", 500);
|
|
+
|
|
+ @Override
|
|
+ public java.util.List<Packet> getExtraPackets() {
|
|
+ return extraPackets;
|
|
+ }
|
|
+ // Paper end
|
|
public PacketPlayOutMapChunk(Chunk chunk, int i) {
|
|
ChunkCoordIntPair chunkcoordintpair = chunk.getPos();
|
|
|
|
@@ -49,6 +58,7 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
|
|
this.c = this.a(new PacketDataSerializer(this.j()), chunk, i);
|
|
this.g = Lists.newArrayList();
|
|
iterator = chunk.getTileEntities().entrySet().iterator();
|
|
+ int totalSigns = 0; // Paper
|
|
|
|
while (iterator.hasNext()) {
|
|
entry = (Entry) iterator.next();
|
|
@@ -57,6 +67,14 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
|
|
int j = blockposition.getY() >> 4;
|
|
|
|
if (this.f() || (i & 1 << j) != 0) {
|
|
+ // Paper start - send signs separately
|
|
+ if (tileentity instanceof TileEntitySign) {
|
|
+ if (SKIP_EXCESSIVE_SIGNS_LIMIT < 0 || ++totalSigns < SKIP_EXCESSIVE_SIGNS_LIMIT) {
|
|
+ this.extraPackets.add(tileentity.getUpdatePacket());
|
|
+ }
|
|
+ continue;
|
|
+ }
|
|
+ // Paper end
|
|
NBTTagCompound nbttagcompound = tileentity.b();
|
|
if (tileentity instanceof TileEntitySkull) { TileEntitySkull.sanitizeTileEntityUUID(nbttagcompound); } // Paper
|
|
|
|
--
|
|
2.25.1
|
|
|