2018-01-22 01:19:57 +11:00
|
|
|
From e24217d3fed0b30eda505ef92872e122b87c834d 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
|
|
|
|
|
|
|
|
|
2016-09-11 14:27:07 +10:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java b/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
2017-11-17 10:24:35 +11:00
|
|
|
index 43310e8a3..961113316 100644
|
2016-09-11 14:27:07 +10:00
|
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java
|
|
|
|
@@ -5,6 +5,7 @@ import java.io.IOException;
|
|
|
|
public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
|
|
|
|
|
|
|
|
private EnumHand a;
|
|
|
|
+ public long timestamp; // Spigot
|
|
|
|
|
|
|
|
public PacketPlayInBlockPlace() {}
|
|
|
|
|
|
|
|
@@ -13,6 +14,7 @@ public class PacketPlayInBlockPlace implements Packet<PacketListenerPlayIn> {
|
|
|
|
}
|
|
|
|
|
|
|
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
|
|
|
+ this.timestamp = System.currentTimeMillis(); // Spigot
|
|
|
|
this.a = (EnumHand) packetdataserializer.a(EnumHand.class);
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayInUseItem.java b/src/main/java/net/minecraft/server/PacketPlayInUseItem.java
|
2017-11-17 10:24:35 +11:00
|
|
|
index bdcda81cc..5f45300f1 100644
|
2016-09-11 14:27:07 +10:00
|
|
|
--- a/src/main/java/net/minecraft/server/PacketPlayInUseItem.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PacketPlayInUseItem.java
|
|
|
|
@@ -10,10 +10,12 @@ public class PacketPlayInUseItem implements Packet<PacketListenerPlayIn> {
|
|
|
|
private float d;
|
|
|
|
private float e;
|
|
|
|
private float f;
|
|
|
|
+ public long timestamp;
|
|
|
|
|
|
|
|
public PacketPlayInUseItem() {}
|
|
|
|
|
|
|
|
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
|
|
|
+ this.timestamp = System.currentTimeMillis(); // Spigot
|
|
|
|
this.a = packetdataserializer.e();
|
|
|
|
this.b = (EnumDirection) packetdataserializer.a(EnumDirection.class);
|
|
|
|
this.c = (EnumHand) packetdataserializer.a(EnumHand.class);
|
2016-03-01 08:33:06 +11:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
2017-11-17 10:24:35 +11:00
|
|
|
index 0e6bdfc7e..a34654eb6 100644
|
2016-03-01 08:33:06 +11:00
|
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
2017-09-18 20:00:00 +10:00
|
|
|
@@ -905,9 +905,29 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
2016-09-11 14:27:07 +10:00
|
|
|
// CraftBukkit end
|
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
|
|
|
+
|
|
|
|
public void a(PacketPlayInUseItem packetplayinuseitem) {
|
|
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinuseitem, this, this.player.x());
|
2016-11-17 12:41:12 +11:00
|
|
|
if (this.player.isFrozen()) return; // CraftBukkit
|
2016-09-11 14:27:07 +10:00
|
|
|
+ if (!checkLimit(packetplayinuseitem.timestamp)) return; // Spigot - check limit
|
|
|
|
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
|
|
|
|
EnumHand enumhand = packetplayinuseitem.c();
|
|
|
|
ItemStack itemstack = this.player.b(enumhand);
|
2017-09-18 20:00:00 +10:00
|
|
|
@@ -938,6 +958,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
2016-03-01 08:33:06 +11:00
|
|
|
public void a(PacketPlayInBlockPlace packetplayinblockplace) {
|
|
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinblockplace, this, this.player.x());
|
2016-11-17 12:41:12 +11:00
|
|
|
if (this.player.isFrozen()) return; // CraftBukkit
|
2016-09-11 14:27:07 +10:00
|
|
|
+ if (!checkLimit(packetplayinblockplace.timestamp)) return; // Spigot - check limit
|
|
|
|
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
|
|
|
|
EnumHand enumhand = packetplayinblockplace.a();
|
2016-03-01 08:33:06 +11:00
|
|
|
ItemStack itemstack = this.player.b(enumhand);
|
|
|
|
--
|
2017-11-10 10:52:45 +11:00
|
|
|
2.14.1
|
2016-03-01 08:33:06 +11:00
|
|
|
|