2023-04-10 08:30:55 +10:00
|
|
|
From a85aab647fe04ca59a37e406227b27f815c7e83a 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
|
2023-04-10 08:30:55 +10:00
|
|
|
index 74612f5f7..afec33eef 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
|
2022-06-08 02:00:00 +10:00
|
|
|
@@ -9,6 +9,7 @@ public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
|
2016-09-11 14:27:07 +10:00
|
|
|
|
2021-06-11 15:00:00 +10:00
|
|
|
private final EnumHand hand;
|
2022-06-08 02:00:00 +10:00
|
|
|
private final int sequence;
|
2016-09-11 14:27:07 +10:00
|
|
|
+ public long timestamp; // Spigot
|
|
|
|
|
2022-06-08 02:00:00 +10:00
|
|
|
public PacketPlayInBlockPlace(EnumHand enumhand, int i) {
|
2021-06-11 15:00:00 +10:00
|
|
|
this.hand = enumhand;
|
2022-06-08 02:00:00 +10:00
|
|
|
@@ -16,6 +17,7 @@ public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
|
2021-06-11 15:00:00 +10:00
|
|
|
}
|
2016-09-11 14:27:07 +10:00
|
|
|
|
2021-06-11 15:00:00 +10:00
|
|
|
public PacketPlayInBlockPlace(PacketDataSerializer packetdataserializer) {
|
2016-09-11 14:27:07 +10:00
|
|
|
+ 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();
|
2016-09-11 14:27:07 +10:00
|
|
|
}
|
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
|
2023-04-10 08:30:55 +10:00
|
|
|
index 675909dc6..44ed8f10d 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
|
2022-06-08 02:00:00 +10:00
|
|
|
@@ -11,6 +11,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
|
2016-09-11 14:27:07 +10:00
|
|
|
|
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;
|
2022-06-08 02:00:00 +10:00
|
|
|
@@ -19,6 +20,7 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
|
2021-06-11 15:00:00 +10:00
|
|
|
}
|
2016-09-11 14:27:07 +10:00
|
|
|
|
2021-06-11 15:00:00 +10:00
|
|
|
public PacketPlayInUseItem(PacketDataSerializer packetdataserializer) {
|
2016-09-11 14:27:07 +10:00
|
|
|
+ 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
|
2023-04-10 08:30:55 +10:00
|
|
|
index 656e31084..5b52231c0 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
|
2023-04-10 08:30:55 +10:00
|
|
|
@@ -1585,10 +1585,30 @@ public class PlayerConnection implements ServerPlayerConnection, TickablePacketL
|
2019-07-20 09:00:00 +10:00
|
|
|
}
|
2016-03-01 08:33:06 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
+ // Spigot start - limit place/interactions
|
2016-09-11 14:27:07 +10:00
|
|
|
+ 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
|
2016-09-11 14:27:07 +10:00
|
|
|
+
|
2019-04-23 12:00:00 +10:00
|
|
|
@Override
|
2021-11-22 09:00:00 +11:00
|
|
|
public void handleUseItemOn(PacketPlayInUseItem packetplayinuseitem) {
|
|
|
|
PlayerConnectionUtils.ensureRunningOnSameThread(packetplayinuseitem, this, this.player.getLevel());
|
|
|
|
if (this.player.isImmobile()) return; // CraftBukkit
|
2016-09-11 14:27:07 +10:00
|
|
|
+ if (!checkLimit(packetplayinuseitem.timestamp)) return; // Spigot - check limit
|
2022-06-08 02:00:00 +10:00
|
|
|
this.player.connection.ackBlockChangesUpTo(packetplayinuseitem.getSequence());
|
2021-11-22 09:00:00 +11:00
|
|
|
WorldServer worldserver = this.player.getLevel();
|
|
|
|
EnumHand enumhand = packetplayinuseitem.getHand();
|
2023-04-10 08:30:55 +10:00
|
|
|
@@ -1642,6 +1662,7 @@ public class PlayerConnection implements ServerPlayerConnection, TickablePacketL
|
2021-11-22 09:00:00 +11:00
|
|
|
public void handleUseItem(PacketPlayInBlockPlace packetplayinblockplace) {
|
|
|
|
PlayerConnectionUtils.ensureRunningOnSameThread(packetplayinblockplace, this, this.player.getLevel());
|
|
|
|
if (this.player.isImmobile()) return; // CraftBukkit
|
2016-09-11 14:27:07 +10:00
|
|
|
+ if (!checkLimit(packetplayinblockplace.timestamp)) return; // Spigot - check limit
|
2022-06-08 02:00:00 +10:00
|
|
|
this.ackBlockChangesUpTo(packetplayinblockplace.getSequence());
|
2021-11-22 09:00:00 +11:00
|
|
|
WorldServer worldserver = this.player.getLevel();
|
|
|
|
EnumHand enumhand = packetplayinblockplace.getHand();
|
2016-03-01 08:33:06 +11:00
|
|
|
--
|
2023-04-10 08:30:55 +10:00
|
|
|
2.40.0
|
2016-03-01 08:33:06 +11:00
|
|
|
|