Skip to content

Commit

Permalink
Do not perform neighbour updates when using debug stick (Fixes #2134)
Browse files Browse the repository at this point in the history
CB blindly drops any update flags when recording block modifications,
this causes the debug stick to blindly update neighbouring blocks on usage
in order to control this, we will special case this item, however, this
ideally should be fixed by recording the actual update flags used,
but will induce ABI breaks...

This patch also maintains the behavior of the BlockPlaceEvent, this
behavior will NOT be guaranteed in the future, however.
  • Loading branch information
electronicboy committed Dec 22, 2020
1 parent a709247 commit 7ef05fb
Show file tree
Hide file tree
Showing 18 changed files with 111 additions and 41 deletions.
17 changes: 15 additions & 2 deletions Spigot-Server-Patches/0004-MC-Utils.patch
Expand Up @@ -2411,7 +2411,7 @@ index 1b2f415e3ed7f6dca12d13cd098cb4ec3af54020..64e8088d394ddcda59d0209883b778ab
@Override
public BlockPosition immutableCopy() {
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 22281e509e65bf179c041b33238f217fb7c856ad..157eccc8e45566db527c7d46d3b3d235c802c8f7 100644
index 225e8fef6741d9bdbc8ac86cd17e54ddbf04a9e8..4e1e7cb088f1b5d07ace5025c486f2ee67667511 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -26,7 +26,7 @@ public class Chunk implements IChunkAccess {
Expand Down Expand Up @@ -3109,7 +3109,7 @@ index 1e7f5d77700a1ed98c5f50ea82fb57b5e556496a..09ac187ba8ff52f6fa1f0d5d00a13851
// CraftBukkit start - fire event
setGoalTarget(entityliving, EntityTargetEvent.TargetReason.UNKNOWN, true);
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index b1edfd6f33a6eecbe47a2a2a4f5be844400eb283..fea94330301a7859cd7ab9af7a9cd3f6d2d8e79a 100644
index ce8d11eb47c1bf1d73eee69ba0f94d7a63cc5518..c6d3b5c8b14808e10a64d6bf1ef971f8bcdbd48f 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -138,6 +138,7 @@ public abstract class EntityLiving extends Entity {
Expand Down Expand Up @@ -3907,6 +3907,19 @@ index 90223deae3376fd6828eddf3831dab96650afef2..63c4dbd327beb7b6ab42eb44650d68ac
if (packet.a()) {
throw new SkipEncodeException(throwable);
} else {
diff --git a/src/main/java/net/minecraft/server/PacketPlayInBEdit.java b/src/main/java/net/minecraft/server/PacketPlayInBEdit.java
index d7252b044288aadb1d235dd968038ee5c13cf701..185ba3789739d06bcb58979519e1f8ff8439be9f 100644
--- a/src/main/java/net/minecraft/server/PacketPlayInBEdit.java
+++ b/src/main/java/net/minecraft/server/PacketPlayInBEdit.java
@@ -4,7 +4,7 @@ import java.io.IOException;

public class PacketPlayInBEdit implements Packet<PacketListenerPlayIn> {

- private ItemStack a;
+ private ItemStack a; public ItemStack getBook() { return a; } // Paper - OBFHELPER
private boolean b;
private int c;

diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
index 8bdda63a2807635e8780481244251f6e35c13627..36a7e41cc5036345929ebf4d2fa160a8c16c2c0a 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
Expand Down
16 changes: 13 additions & 3 deletions Spigot-Server-Patches/0311-Book-Size-Limits.patch
Expand Up @@ -22,7 +22,7 @@ index ba7fdf482ef8536074fcc3867d7fc142fcfe8ce8..2aca8cc2be963b2b015e52cdec6b3843
+ }
}
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index cc141f02d5a2b1a5c50e5583d3537d5883762db1..8a322537f8418627d7fc6db2f1411bf5ca252dcc 100644
index cc141f02d5a2b1a5c50e5583d3537d5883762db1..4673efa3f540a6dc2c01a2a601a7c06ee791e8b4 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -20,6 +20,7 @@ import java.util.function.Consumer;
Expand All @@ -33,21 +33,31 @@ index cc141f02d5a2b1a5c50e5583d3537d5883762db1..8a322537f8418627d7fc6db2f1411bf5
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -850,6 +851,42 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -850,6 +851,52 @@ public class PlayerConnection implements PacketListenerPlayIn {

@Override
public void a(PacketPlayInBEdit packetplayinbedit) {
+ // Paper start
+ ItemStack testStack = packetplayinbedit.b(); // TODO(Proximyst): Add obfhelper here
+ ItemStack testStack = packetplayinbedit.getBook();
+ if (!server.isPrimaryThread() && !testStack.isEmpty() && testStack.getTag() != null) {
+ NBTTagList pageList = testStack.getTag().getList("pages", 8);
+ if (pageList.size() > 50) {

This comment has been minimized.

Copy link
@Brokkonaut

Brokkonaut Dec 23, 2020

Contributor

Books can have 100 pages in minecraft.

+ PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with too many pages");
+ minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!"));
+ return;
+ }
+ long byteTotal = 0;
+ int maxBookPageSize = com.destroystokyo.paper.PaperConfig.maxBookPageSize;
+ double multiplier = Math.max(0.3D, Math.min(1D, com.destroystokyo.paper.PaperConfig.maxBookTotalSizeMultiplier));
+ long byteAllowed = maxBookPageSize;
+ for (int i = 0; i < pageList.size(); ++i) {
+ String testString = pageList.getString(i);
+ int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length;
+ if (byteLength > 256 * 4) {
+ PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with with a page too large!");
+ minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!"));
+ return;
+ }
+ byteTotal += byteLength;
+ int length = testString.length();
+ int multibytes = 0;
Expand Down
4 changes: 2 additions & 2 deletions Spigot-Server-Patches/0325-Fix-sign-edit-memory-leak.patch
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Fix sign edit memory leak
when a player edits a sign, a reference to their Entity is never cleand up.

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 8a322537f8418627d7fc6db2f1411bf5ca252dcc..237f4d381d9d81a1b13845ab3b594f7d99d2d94b 100644
index 4673efa3f540a6dc2c01a2a601a7c06ee791e8b4..d5397f670f3908a39b2a398ab59f7743c48bef47 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2682,7 +2682,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2692,7 +2692,7 @@ public class PlayerConnection implements PacketListenerPlayIn {

TileEntitySign tileentitysign = (TileEntitySign) tileentity;

Expand Down
Expand Up @@ -22,7 +22,7 @@ it only impacts data sent from the client.
Set -DPaper.maxSignLength=XX to change limit or -1 to disable

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 237f4d381d9d81a1b13845ab3b594f7d99d2d94b..05e5566bb42525b729dad9c31d6b1c3e4cfab6d0 100644
index d5397f670f3908a39b2a398ab59f7743c48bef47..af80dcddc4f65acc916b5b12bb7f9fb2effd3b90 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -108,6 +108,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
Expand All @@ -33,7 +33,7 @@ index 237f4d381d9d81a1b13845ab3b594f7d99d2d94b..05e5566bb42525b729dad9c31d6b1c3e
private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit

public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) {
@@ -2696,7 +2697,17 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2706,7 +2707,17 @@ public class PlayerConnection implements PacketListenerPlayIn {
String[] lines = new String[4];

for (int i = 0; i < list.size(); ++i) {
Expand Down
Expand Up @@ -22,10 +22,10 @@ index 216445778ce8432fe2506cd7ac4312f43f42ba33..e9bc1d22825850a1f1ef3267428c1984
this.f.accept(packet);
if (this.tracker instanceof EntityPlayer) {
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 05e5566bb42525b729dad9c31d6b1c3e4cfab6d0..88d6dbfe6a64ad6e2f5916ca3e87cc2ac5f30227 100644
index af80dcddc4f65acc916b5b12bb7f9fb2effd3b90..755c5778e0258878daa7ede1b26877e75d97a5ce 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2129,7 +2129,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2139,7 +2139,14 @@ public class PlayerConnection implements PacketListenerPlayIn {

if (event.isCancelled() || this.player.inventory.getItemInHand() == null || this.player.inventory.getItemInHand().getItem() != origItem) {
// Refresh the current entity metadata
Expand Down
Expand Up @@ -8,10 +8,10 @@ ticket level 33 (yes getChunkIfLoaded will actually perform a chunk
load in that case).

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index e4d47589d2368c373f920066309b4c5a757906c5..ea6476aec59eec50323b0927b6261ebd077926be 100644
index 7f2a09f940902190fcf7045aab27fa3474eafd14..4dd57152cb0d09b2df08be68ab111623724d52fc 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1084,7 +1084,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1094,7 +1094,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
speed = player.abilities.walkSpeed * 10f;
}
// Paper start - Prevent moving into unloaded chunks
Expand Down
Expand Up @@ -7,7 +7,7 @@ Fixes an AssertionError when setting the player's item in hand to null or a new
Fixes GH-2718

diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 1685478f333a387d270ec4533319b9a62076a9ef..44793c443bd8c357832daa5c65cc2230ef031dc2 100644
index dbd212fc2f0c95ab1dcc4b6be86f0f87ac726fa7..37e3efa1fed858f735166a5c0cb97f886b2bbb4e 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -2055,6 +2055,7 @@ public abstract class EntityLiving extends Entity {
Expand All @@ -19,10 +19,10 @@ index 1685478f333a387d270ec4533319b9a62076a9ef..44793c443bd8c357832daa5c65cc2230
if (enumhand == EnumHand.MAIN_HAND) {
return this.getEquipment(EnumItemSlot.MAINHAND);
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index ea6476aec59eec50323b0927b6261ebd077926be..ec14c63fb20737aa9aab22d596bb4045a9a9c867 100644
index 4dd57152cb0d09b2df08be68ab111623724d52fc..a6b83cb349386ff1fb6f3267f0d610bf31df3f16 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1547,6 +1547,10 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1557,6 +1557,10 @@ public class PlayerConnection implements PacketListenerPlayIn {
this.player.getBukkitEntity().updateInventory(); // SPIGOT-2524
return;
}
Expand Down
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent teleporting dead entities


diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index ec14c63fb20737aa9aab22d596bb4045a9a9c867..8b464d2c05c636bd1412a9b68c9dcb484620da94 100644
index a6b83cb349386ff1fb6f3267f0d610bf31df3f16..e61efeccd4d9fc8ff55c2c914158e5982222ba74 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1309,6 +1309,10 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1319,6 +1319,10 @@ public class PlayerConnection implements PacketListenerPlayIn {
}

private void internalTeleport(double d0, double d1, double d2, float f, float f1, Set<PacketPlayOutPosition.EnumPlayerTeleportFlags> set) {
Expand Down
Expand Up @@ -1146,10 +1146,10 @@ index fba7c9b5724114eab35a3d24febdee3cd3e30aa0..b6ae589548bdc75052f4986069b3374c
}

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 2c1fbea9c9d46f7e9e79324eb97c9871c5be5a87..57de31e07cf0986b64a1650dd28f9fee846a66aa 100644
index 2978f2e1b136f61e1519ce3aac2f679f650d2258..e76c01a33bfcee1a9d312247b8d08026055204c8 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1369,6 +1369,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1379,6 +1379,7 @@ public class PlayerConnection implements PacketListenerPlayIn {

this.A = this.e;
this.player.setLocation(d0, d1, d2, f, f1);
Expand Down
Expand Up @@ -14,10 +14,10 @@ behaviour, we need to move all of this dangerous logic outside
of the move call and into an appropriate place in the tick method.

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 57de31e07cf0986b64a1650dd28f9fee846a66aa..73e95ca9cb7f83970ff096084a646dd4dcf23db7 100644
index e76c01a33bfcee1a9d312247b8d08026055204c8..45379bf4903ca8044145504207acd59c221b7f26 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1166,6 +1166,11 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1176,6 +1176,11 @@ public class PlayerConnection implements PacketListenerPlayIn {

this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9));
this.player.setOnGround(packetplayinflying.b()); // CraftBukkit - SPIGOT-5810, SPIGOT-5835: reset by this.player.move
Expand Down
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Add and implement PlayerRecipeBookClickEvent


diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 73e95ca9cb7f83970ff096084a646dd4dcf23db7..c33707d55c80341eaacd6c6a7526444ee5b2cc0a 100644
index 45379bf4903ca8044145504207acd59c221b7f26..c9b834c38f8d7b21d0a7a0d04762f66d41b0c39d 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2602,9 +2602,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2612,9 +2612,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
PlayerConnectionUtils.ensureMainThread(packetplayinautorecipe, this, this.player.getWorldServer());
this.player.resetIdleTimer();
if (!this.player.isSpectator() && this.player.activeContainer.windowId == packetplayinautorecipe.b() && this.player.activeContainer.c(this.player) && this.player.activeContainer instanceof ContainerRecipeBook) {
Expand Down
Expand Up @@ -63,10 +63,10 @@ index 450c04c5a1153ea9d11d005f3be623bbf8b26ce6..157f8f5e5255312b916aef200810ad38
}

diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index b1156e31ec45b7515734a440f07331cf731c3ab6..aa7b907cee743640e30e25c95f3bbca49ec57e1e 100644
index 5240af35fcec03f350596cecc74a4230f257e7b4..9b54d690e09f719a18ba321a0c927bb31c71bf01 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2872,7 +2872,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2882,7 +2882,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
public void a(PacketPlayInDifficultyChange packetplayindifficultychange) {
PlayerConnectionUtils.ensureMainThread(packetplayindifficultychange, this, this.player.getWorldServer());
if (this.player.k(2) || this.isExemptPlayer()) {
Expand Down
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Move range check for block placing up


diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index aa7b907cee743640e30e25c95f3bbca49ec57e1e..da172db2ccda64a7160282440d5548bd7e7eda80 100644
index 9b54d690e09f719a18ba321a0c927bb31c71bf01..f19fd40cdc1e758ebefb85201358e314428bd8c6 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1502,15 +1502,19 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -1512,15 +1512,19 @@ public class PlayerConnection implements PacketListenerPlayIn {
BlockPosition blockposition = movingobjectpositionblock.getBlockPosition();
EnumDirection enumdirection = movingobjectpositionblock.getDirection();

Expand Down
8 changes: 4 additions & 4 deletions Spigot-Server-Patches/0547-Brand-support.patch
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Brand support


diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index da172db2ccda64a7160282440d5548bd7e7eda80..8a4a7888089a10416fc0cf88007b7a958e903a4c 100644
index f19fd40cdc1e758ebefb85201358e314428bd8c6..444355e81bd7f5d07e3ef5f4b9d91d1bf11428ef 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -5,6 +5,7 @@ import com.google.common.primitives.Doubles;
Expand All @@ -25,7 +25,7 @@ index da172db2ccda64a7160282440d5548bd7e7eda80..8a4a7888089a10416fc0cf88007b7a95
public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) {
this.minecraftServer = minecraftserver;
this.networkManager = networkmanager;
@@ -2831,6 +2834,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2841,6 +2844,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
private static final MinecraftKey CUSTOM_REGISTER = new MinecraftKey("register");
private static final MinecraftKey CUSTOM_UNREGISTER = new MinecraftKey("unregister");

Expand All @@ -34,7 +34,7 @@ index da172db2ccda64a7160282440d5548bd7e7eda80..8a4a7888089a10416fc0cf88007b7a95
@Override
public void a(PacketPlayInCustomPayload packetplayincustompayload) {
PlayerConnectionUtils.ensureMainThread(packetplayincustompayload, this, this.player.getWorldServer());
@@ -2858,6 +2863,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2868,6 +2873,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
try {
byte[] data = new byte[packetplayincustompayload.data.readableBytes()];
packetplayincustompayload.data.readBytes(data);
Expand All @@ -51,7 +51,7 @@ index da172db2ccda64a7160282440d5548bd7e7eda80..8a4a7888089a10416fc0cf88007b7a95
server.getMessenger().dispatchIncomingMessage(player.getBukkitEntity(), packetplayincustompayload.tag.toString(), data);
} catch (Exception ex) {
PlayerConnection.LOGGER.error("Couldn\'t dispatch custom payload", ex);
@@ -2867,6 +2882,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
@@ -2877,6 +2892,12 @@ public class PlayerConnection implements PacketListenerPlayIn {

}

Expand Down

0 comments on commit 7ef05fb

Please sign in to comment.