Waterfall/BungeeCord-Patches/0045-Add-ProxyDefineCommandsEvent.patch
Shane Freeder dc0595653d
Updated Upstream (BungeeCord)
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

BungeeCord Changes:
c92581d0 #3556: Deserialize arrays to single components
e442c3da #3546: Add string length checks to isValidName
f903c54d #3554: Bump org.apache.maven.plugins:maven-checkstyle-plugin
0d453789 #3540: Add TextComponent#fromLegacy() as an array-free alternative to #fromLegacyText()
0f5f09b6 Minecraft 23w43b support
e5c80d00 Fix code formatting
9cdb2ba3 Deprecate exposed scoreboard API
d0e5cf7c #3549: Bump io.netty:netty-bom from 4.1.99.Final to 4.1.100.Final
c8568764 Fix writing non-compound root NBT tags
2023-10-29 16:02:58 +00:00

91 lines
3.7 KiB
Diff

From 0b970cb79fd1c2ecf5eee883f54b691554543a48 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Thu, 14 Mar 2019 07:44:06 +0000
Subject: [PATCH] Add ProxyDefineCommandsEvent
provides an event to allow plugins to intercept tab completions
sent to the client
diff --git a/api/src/main/java/io/github/waterfallmc/waterfall/event/ProxyDefineCommandsEvent.java b/api/src/main/java/io/github/waterfallmc/waterfall/event/ProxyDefineCommandsEvent.java
new file mode 100644
index 00000000..1fd4fc90
--- /dev/null
+++ b/api/src/main/java/io/github/waterfallmc/waterfall/event/ProxyDefineCommandsEvent.java
@@ -0,0 +1,41 @@
+package io.github.waterfallmc.waterfall.event;
+
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.connection.Connection;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.event.TargetedEvent;
+import net.md_5.bungee.api.plugin.Command;
+import net.md_5.bungee.api.plugin.Event;
+
+import java.util.Map;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * Called when the proxy intercepts the command packet
+ * allowing for plugins to prevent commands being added
+ * to the clients which might not be wanted.
+ *
+ *
+ * <i>Plugin developers, please implement {@link Command#hasPermission(CommandSender)}
+ * properly in favor of this event.</i>
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class ProxyDefineCommandsEvent extends TargetedEvent {
+
+
+ /**
+ * The map of commands to be sent to the player
+ */
+ private final Map<String, Command> commands;
+
+ public ProxyDefineCommandsEvent(Connection sender, Connection receiver, Map<String, Command> commands) {
+ super(sender, receiver);
+ this.commands = commands;
+ }
+
+}
diff --git a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
index bc808b2c..2e427335 100644
--- a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
+++ b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java
@@ -779,9 +779,25 @@ public class DownstreamBridge extends PacketHandler
{
boolean modified = false;
- for ( Map.Entry<String, Command> command : bungee.getPluginManager().getCommands() )
+ // Waterfall start
+ Map<String, Command> commandMap = new java.util.HashMap<>();
+ for ( Map.Entry<String, Command> commandEntry : bungee.getPluginManager().getCommands() ) {
+ if ( !bungee.getDisabledCommands().contains( commandEntry.getKey() )
+ && commands.getRoot().getChild( commandEntry.getKey() ) == null
+ && commandEntry.getValue().hasPermission( this.con ) ) {
+
+ commandMap.put( commandEntry.getKey(), commandEntry.getValue() );
+ }
+ }
+
+ io.github.waterfallmc.waterfall.event.ProxyDefineCommandsEvent event = new io.github.waterfallmc.waterfall.event.ProxyDefineCommandsEvent( this.server, this.con, commandMap );
+ bungee.getPluginManager().callEvent( event );
+
+ for ( Map.Entry<String, Command> command : event.getCommands().entrySet() )
{
- if ( !bungee.getDisabledCommands().contains( command.getKey() ) && commands.getRoot().getChild( command.getKey() ) == null && command.getValue().hasPermission( con ) )
+ //noinspection ConstantConditions
+ if ( true ) // Moved up
+ // Waterfall end
{
CommandNode dummy = LiteralArgumentBuilder.literal( command.getKey() ).executes( DUMMY_COMMAND )
.then( RequiredArgumentBuilder.argument( "args", StringArgumentType.greedyString() )
--
2.42.0