06db5d08b0
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 44cfe143 SPIGOT-6249: Add Missing Effect Constants CraftBukkit Changes: 14928261 SPIGOT-6249: Add Missing Effect Constants 332335e1 SPIGOT-6731: "Nag author" message in CraftServer lists one author only 6cd975d0 SPIGOT-5732, SPIGOT-6387: Overhaul Hanging entities
60 Zeilen
3.7 KiB
Diff
60 Zeilen
3.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Sat, 12 Dec 2020 23:45:28 +0000
|
|
Subject: [PATCH] Limit recipe packets
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
index 4747eb55decd797c7872028997f4e22d15c5a661..ff337f7f5317f30b65e1b40c11c1783421f1a89d 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
@@ -352,6 +352,13 @@ public class PaperConfig {
|
|
tabSpamLimit = getInt("settings.spam-limiter.tab-spam-limit", tabSpamLimit);
|
|
}
|
|
|
|
+ public static int autoRecipeIncrement = 1;
|
|
+ public static int autoRecipeLimit = 20;
|
|
+ private static void autoRecipieLimiters() {
|
|
+ autoRecipeIncrement = getInt("settings.spam-limiter.recipe-spam-increment", autoRecipeIncrement);
|
|
+ autoRecipeLimit = getInt("settings.spam-limiter.recipe-spam-limit", autoRecipeLimit);
|
|
+ }
|
|
+
|
|
public static boolean velocitySupport;
|
|
public static boolean velocityOnlineMode;
|
|
public static byte[] velocitySecretKey;
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 19f2751ed35ea7157b5f4b8c30b3328710967be6..cda4fba2003fc35021b0cece9ade9cf8e3fce422 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -231,6 +231,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
// CraftBukkit start - multithreaded fields
|
|
private AtomicInteger chatSpamTickCount = new AtomicInteger();
|
|
private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits
|
|
+ private final java.util.concurrent.atomic.AtomicInteger recipeSpamPackets = new java.util.concurrent.atomic.AtomicInteger(); // Paper - auto recipe limit
|
|
// CraftBukkit end
|
|
private int dropSpamTickCount;
|
|
private double firstGoodX;
|
|
@@ -376,6 +377,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
// CraftBukkit start
|
|
for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ;
|
|
if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable
|
|
+ if (recipeSpamPackets.get() > 0) recipeSpamPackets.getAndDecrement(); // Paper
|
|
/* Use thread-safe field access instead
|
|
if (this.chatSpamTickCount > 0) {
|
|
--this.chatSpamTickCount;
|
|
@@ -2792,6 +2794,14 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
|
|
@Override
|
|
public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) {
|
|
+ // Paper start
|
|
+ if (!org.bukkit.Bukkit.isPrimaryThread()) {
|
|
+ if (recipeSpamPackets.addAndGet(com.destroystokyo.paper.PaperConfig.autoRecipeIncrement) > com.destroystokyo.paper.PaperConfig.autoRecipeLimit) {
|
|
+ server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", new Object[0]))); // Paper
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
|
|
this.player.resetLastActionTime();
|
|
if (!this.player.isSpectator() && this.player.containerMenu.containerId == packet.getContainerId() && this.player.containerMenu instanceof RecipeBookMenu) {
|