spigot/CraftBukkit-Patches/0050-Limit-block-placement-interaction-packets.patch

93 lines
4.7 KiB
Diff
Raw Normal View History

2025-03-26 03:05:00 +11:00
From cb7c1d280247b5e25689cd1db199a3666908d6dc Mon Sep 17 00:00:00 2001
2016-03-01 08:33:06 +11:00
From: Thinkofdeath <thinkofdeath@spigotmc.org>
Date: Sun, 29 Jun 2014 21:10:34 +0100
Subject: [PATCH] Limit block placement/interaction packets
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInBlockPlace.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInBlockPlace.java
2025-03-26 03:05:00 +11:00
index 774be58a0..3267f98e3 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInBlockPlace.java
+++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInBlockPlace.java
2024-06-14 01:05:00 +10:00
@@ -14,6 +14,7 @@ public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
2022-06-08 02:00:00 +10:00
private final int sequence;
2024-06-14 01:05:00 +10:00
private final float yRot;
private final float xRot;
+ public long timestamp; // Spigot
2024-06-14 01:05:00 +10:00
public PacketPlayInBlockPlace(EnumHand enumhand, int i, float f, float f1) {
2021-06-11 15:00:00 +10:00
this.hand = enumhand;
2024-06-14 01:05:00 +10:00
@@ -23,6 +24,7 @@ public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
2021-06-11 15:00:00 +10:00
}
2024-04-24 01:15:00 +10:00
private PacketPlayInBlockPlace(PacketDataSerializer packetdataserializer) {
+ this.timestamp = System.currentTimeMillis(); // Spigot
2021-11-22 09:00:00 +11:00
this.hand = (EnumHand) packetdataserializer.readEnum(EnumHand.class);
2022-06-08 02:00:00 +10:00
this.sequence = packetdataserializer.readVarInt();
2024-06-14 01:05:00 +10:00
this.yRot = packetdataserializer.readFloat();
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInUseItem.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInUseItem.java
2025-03-26 03:05:00 +11:00
index 92a182668..66ac250db 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInUseItem.java
+++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInUseItem.java
2024-04-24 01:15:00 +10:00
@@ -14,6 +14,7 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
2021-06-11 15:00:00 +10:00
private final MovingObjectPositionBlock blockHit;
private final EnumHand hand;
2022-06-08 02:00:00 +10:00
private final int sequence;
2021-06-11 15:00:00 +10:00
+ public long timestamp; // Spigot
2022-06-08 02:00:00 +10:00
public PacketPlayInUseItem(EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock, int i) {
2021-06-11 15:00:00 +10:00
this.hand = enumhand;
2024-04-24 01:15:00 +10:00
@@ -22,6 +23,7 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
2021-06-11 15:00:00 +10:00
}
2024-04-24 01:15:00 +10:00
private PacketPlayInUseItem(PacketDataSerializer packetdataserializer) {
+ this.timestamp = System.currentTimeMillis(); // Spigot
2021-11-22 09:00:00 +11:00
this.hand = (EnumHand) packetdataserializer.readEnum(EnumHand.class);
this.blockHit = packetdataserializer.readBlockHitResult();
2022-06-08 02:00:00 +10:00
this.sequence = packetdataserializer.readVarInt();
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
2025-03-26 03:05:00 +11:00
index 8ace16b40..da95cd08c 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
2025-03-26 03:05:00 +11:00
@@ -1712,10 +1712,30 @@ public class PlayerConnection extends ServerCommonPacketListenerImpl implements
2019-07-20 09:00:00 +10:00
}
2016-03-01 08:33:06 +11:00
}
+ // Spigot start - limit place/interactions
+ private int limitedPackets;
+ private long lastLimitedPacket = -1;
+
+ private boolean checkLimit(long timestamp) {
+ if (lastLimitedPacket != -1 && timestamp - lastLimitedPacket < 30 && limitedPackets++ >= 4) {
+ return false;
+ }
+
+ if (lastLimitedPacket == -1 || timestamp - lastLimitedPacket >= 30) {
+ lastLimitedPacket = timestamp;
+ limitedPackets = 0;
+ return true;
+ }
+
+ return true;
+ }
2016-03-01 08:33:06 +11:00
+ // Spigot end
+
2019-04-23 12:00:00 +10:00
@Override
2021-11-22 09:00:00 +11:00
public void handleUseItemOn(PacketPlayInUseItem packetplayinuseitem) {
2023-06-08 01:30:00 +10:00
PlayerConnectionUtils.ensureRunningOnSameThread(packetplayinuseitem, this, this.player.serverLevel());
2021-11-22 09:00:00 +11:00
if (this.player.isImmobile()) return; // CraftBukkit
+ if (!checkLimit(packetplayinuseitem.timestamp)) return; // Spigot - check limit
2024-12-04 03:20:00 +11:00
if (this.player.hasClientLoaded()) {
this.player.connection.ackBlockChangesUpTo(packetplayinuseitem.getSequence());
WorldServer worldserver = this.player.serverLevel();
2025-03-26 03:05:00 +11:00
@@ -1778,6 +1798,7 @@ public class PlayerConnection extends ServerCommonPacketListenerImpl implements
2021-11-22 09:00:00 +11:00
public void handleUseItem(PacketPlayInBlockPlace packetplayinblockplace) {
2023-06-08 01:30:00 +10:00
PlayerConnectionUtils.ensureRunningOnSameThread(packetplayinblockplace, this, this.player.serverLevel());
2021-11-22 09:00:00 +11:00
if (this.player.isImmobile()) return; // CraftBukkit
+ if (!checkLimit(packetplayinblockplace.timestamp)) return; // Spigot - check limit
2024-12-04 03:20:00 +11:00
if (this.player.hasClientLoaded()) {
this.ackBlockChangesUpTo(packetplayinblockplace.getSequence());
WorldServer worldserver = this.player.serverLevel();
2016-03-01 08:33:06 +11:00
--
2025-03-26 03:05:00 +11:00
2.49.0
2016-03-01 08:33:06 +11:00