Waterfall/BungeeCord-Patches/0018-Add-basic-support-for-configurable-tab-complete-thro.patch
_tomcraft 85c0a35f0b
Updated Upstream (BungeeCord) (#695)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

BungeeCord Changes:
6613aaea Add test fix for library classes being visible to non-dependent plugins
53ce6b93 #3200: Fix protocol for 21w40a
d8e29384 #2466: Use switch in "BungeeCord" plugin message handling
5cf869df #3198: Remove terminally deprecated SecurityManager
f26f7d88 Add optional 1.18 (21w40a) snapshot protocol support
2021-10-09 10:43:12 +01:00

112 lines
4.0 KiB
Diff

From 78af2898f522c9819132e8fac9bed8d067a61b01 Mon Sep 17 00:00:00 2001
From: Johannes Donath <johannesd@torchmind.com>
Date: Sat, 4 Jul 2015 06:31:33 +0200
Subject: [PATCH] Add basic support for configurable tab-complete throttling
diff --git a/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java b/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
index 6495e7f2..b6845bc4 100644
--- a/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
+++ b/api/src/main/java/net/md_5/bungee/api/ProxyConfig.java
@@ -130,4 +130,21 @@ public interface ProxyConfig
// Waterfall Options
//
+ // Throttling options
+
+ /**
+ * How often tab-complete packets can be sent.
+ * <br>
+ * Values in milliseconds.
+ *
+ * @return how often tab-complete packets can be sent in milliseconds
+ */
+ int getTabThrottle();
+
+ /**
+ * Should we disable the tab completion limit for 1.13+ clients
+ *
+ * @return should we disable the tab completion limit for 1.13+ clients
+ */
+ boolean isDisableModernTabLimiter();
}
diff --git a/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java b/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
index 741ebfde..91743f01 100644
--- a/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
+++ b/proxy/src/main/java/io/github/waterfallmc/waterfall/conf/WaterfallConfiguration.java
@@ -7,11 +7,37 @@ import java.io.File;
public class WaterfallConfiguration extends Configuration {
+ /*
+ * Throttling options
+ * Helps prevent players from overloading the servers behind us
+ */
+
+ /**
+ * How often players are allowed to send tab throttle.
+ * Value in milliseconds.
+ * <p/>
+ * Default is one packet per second.
+ */
+ private int tabThrottle = 1000;
+ private boolean disableModernTabLimiter = true;
+
@Override
public void load() {
super.load();
YamlConfig config = new YamlConfig(new File("waterfall.yml"));
config.load(false); // Load, but no permissions
+ // Throttling options
+ tabThrottle = config.getInt("throttling.tab_complete", tabThrottle);
+ disableModernTabLimiter = config.getBoolean("disable_modern_tab_limiter", disableModernTabLimiter);
}
+ @Override
+ public int getTabThrottle() {
+ return tabThrottle;
+ }
+
+ @Override
+ public boolean isDisableModernTabLimiter() {
+ return disableModernTabLimiter;
+ }
}
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/UpstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/UpstreamBridge.java
index 41101a6e..4ed24626 100644
--- a/proxy/src/main/java/net/md_5/bungee/connection/UpstreamBridge.java
+++ b/proxy/src/main/java/net/md_5/bungee/connection/UpstreamBridge.java
@@ -40,6 +40,8 @@ public class UpstreamBridge extends PacketHandler
private final ProxyServer bungee;
private final UserConnection con;
+ private long lastTabCompletion = -1;
+
public UpstreamBridge(ProxyServer bungee, UserConnection con)
{
this.bungee = bungee;
@@ -170,6 +172,20 @@ public class UpstreamBridge extends PacketHandler
@Override
public void handle(TabCompleteRequest tabComplete) throws Exception
{
+ // Waterfall start - tab limiter
+ if ( bungee.getConfig().getTabThrottle() > 0 &&
+ ( con.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_13
+ && !bungee.getConfig().isDisableModernTabLimiter()))
+ {
+ long now = System.currentTimeMillis();
+ if ( lastTabCompletion > 0 && (now - lastTabCompletion) <= bungee.getConfig().getTabThrottle() )
+ {
+ throw CancelSendSignal.INSTANCE;
+ }
+ lastTabCompletion = now;
+ }
+
+ // Waterfall end - tab limiter
List<String> suggestions = new ArrayList<>();
if ( tabComplete.getCursor().startsWith( "/" ) )
--
2.30.1 (Apple Git-130)