diff --git a/BungeeCord-Patches/0049-Add-ProxyDefineCommandsEvent.patch b/BungeeCord-Patches/0049-Add-ProxyDefineCommandsEvent.patch new file mode 100644 index 0000000..3b47d1d --- /dev/null +++ b/BungeeCord-Patches/0049-Add-ProxyDefineCommandsEvent.patch @@ -0,0 +1,101 @@ +From c6f4a177aeb85a63c485e4e12a56f2c3c2e9fc4a Mon Sep 17 00:00:00 2001 +From: Shane Freeder +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. ++ * ++ * ++ * Plugin developers, please implement {@link Command#hasPermission(CommandSender)} ++ * properly in favor of this event. ++ */ ++@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 commands; ++ ++ public ProxyDefineCommandsEvent(Connection sender, Connection receiver, Map 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 c1dc6489..7698b871 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 +@@ -14,7 +14,10 @@ import com.mojang.brigadier.suggestion.SuggestionProvider; + import com.mojang.brigadier.suggestion.Suggestions; + import com.mojang.brigadier.tree.LiteralCommandNode; + import java.io.DataInput; ++import java.util.HashMap; // Waterfall + 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; +@@ -625,9 +628,25 @@ public class DownstreamBridge extends PacketHandler + { + boolean modified = false; + +- for ( Map.Entry command : bungee.getPluginManager().getCommands() ) ++ // Waterfall start ++ Map commandMap = new HashMap<>(); ++ for ( Map.Entry 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 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.21.0 +