Waterfall/BungeeCord-Patches/0048-Add-ProxyDefineCommandsEvent.patch
Shane Freeder 337ca7f887
Updated Upstream (BungeeCord)
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:
70038c91 Revert "#2714: Remove unnecessary throws in ServerConnector"
39ef20b2 #2716: Don't attempt to send kick packet during handshake phase
74a6aa32 #2714: Remove unnecessary throws in ServerConnector
c7984070 Misc dependency update
2019-12-05 11:53:03 +00:00

110 lines
4.4 KiB
Diff

From db8ebffad5c5672869f7f1401e525683b4e30f40 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 fba84905..1f8a2439 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
@@ -12,14 +12,17 @@ import com.mojang.brigadier.context.StringRange;
import com.mojang.brigadier.suggestion.Suggestion;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.tree.LiteralCommandNode;
-import java.util.Objects; // Waterfall
+
+import io.github.waterfallmc.waterfall.event.ProxyDefineCommandsEvent; // Waterfall
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;
import java.io.DataInput;
import java.util.ArrayList;
+import java.util.HashMap; // Waterfall
import java.util.List;
import java.util.Map;
+import java.util.Objects; // Waterfall
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.ServerConnection;
import net.md_5.bungee.UserConnection;
@@ -623,9 +626,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 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() );
+ }
+ }
+
+ ProxyDefineCommandsEvent event = new 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
{
LiteralCommandNode dummy = LiteralArgumentBuilder.literal( command.getKey() )
.then( RequiredArgumentBuilder.argument( "args", StringArgumentType.greedyString() )
--
2.24.0