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

92 lines
4.3 KiB
Diff
Raw Normal View History

From 91a7141377b383a6041b33309f182caa5e9dbd9f 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
2021-06-11 15:00:00 +10:00
index 74d017780..744acec92 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
2021-06-11 15:00:00 +10:00
@@ -8,12 +8,14 @@ import net.minecraft.world.EnumHand;
public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
2021-06-11 15:00:00 +10:00
private final EnumHand hand;
+ public long timestamp; // Spigot
2021-06-11 15:00:00 +10:00
public PacketPlayInBlockPlace(EnumHand enumhand) {
this.hand = enumhand;
}
2021-06-11 15:00:00 +10:00
public PacketPlayInBlockPlace(PacketDataSerializer packetdataserializer) {
+ this.timestamp = System.currentTimeMillis(); // Spigot
2021-06-11 15:00:00 +10:00
this.hand = (EnumHand) packetdataserializer.a(EnumHand.class);
}
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
2021-06-11 15:00:00 +10:00
index 4f066103b..591bf4878 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
2021-06-11 15:00:00 +10:00
@@ -10,6 +10,7 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
2019-04-23 12:00:00 +10:00
2021-06-11 15:00:00 +10:00
private final MovingObjectPositionBlock blockHit;
private final EnumHand hand;
+ public long timestamp; // Spigot
2021-06-11 15:00:00 +10:00
public PacketPlayInUseItem(EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) {
this.hand = enumhand;
@@ -17,6 +18,7 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
}
2021-06-11 15:00:00 +10:00
public PacketPlayInUseItem(PacketDataSerializer packetdataserializer) {
+ this.timestamp = System.currentTimeMillis(); // Spigot
2021-06-11 15:00:00 +10:00
this.hand = (EnumHand) packetdataserializer.a(EnumHand.class);
this.blockHit = packetdataserializer.s();
2019-04-23 12:00:00 +10:00
}
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
2021-07-07 00:00:00 +10:00
index 66b38c00a..92ea0a044 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
2021-07-07 00:00:00 +10:00
@@ -1480,10 +1480,30 @@ public class PlayerConnection implements ServerPlayerConnection, PacketListenerP
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
public void a(PacketPlayInUseItem packetplayinuseitem) {
2018-07-15 10:00:00 +10:00
PlayerConnectionUtils.ensureMainThread(packetplayinuseitem, this, this.player.getWorldServer());
2016-11-17 12:41:12 +11:00
if (this.player.isFrozen()) return; // CraftBukkit
+ if (!checkLimit(packetplayinuseitem.timestamp)) return; // Spigot - check limit
2020-06-25 10:00:00 +10:00
WorldServer worldserver = this.player.getWorldServer();
2019-04-23 12:00:00 +10:00
EnumHand enumhand = packetplayinuseitem.b();
ItemStack itemstack = this.player.b(enumhand);
2021-07-07 00:00:00 +10:00
@@ -1528,6 +1548,7 @@ public class PlayerConnection implements ServerPlayerConnection, PacketListenerP
2016-03-01 08:33:06 +11:00
public void a(PacketPlayInBlockPlace packetplayinblockplace) {
2018-07-15 10:00:00 +10:00
PlayerConnectionUtils.ensureMainThread(packetplayinblockplace, this, this.player.getWorldServer());
2016-11-17 12:41:12 +11:00
if (this.player.isFrozen()) return; // CraftBukkit
+ if (!checkLimit(packetplayinblockplace.timestamp)) return; // Spigot - check limit
2020-06-25 10:00:00 +10:00
WorldServer worldserver = this.player.getWorldServer();
2018-07-15 10:00:00 +10:00
EnumHand enumhand = packetplayinblockplace.b();
2016-03-01 08:33:06 +11:00
ItemStack itemstack = this.player.b(enumhand);
--
2.25.1
2016-03-01 08:33:06 +11:00