diff --git a/patches/api/0010-Add-ExecuteCommandEvent.patch b/patches/api/0010-Add-ExecuteCommandEvent.patch new file mode 100644 index 000000000..4f887a359 --- /dev/null +++ b/patches/api/0010-Add-ExecuteCommandEvent.patch @@ -0,0 +1,127 @@ +From 0daba673f890f25f7e57e46700e3c03dcbb613e4 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 31 May 2019 00:08:28 -0500 +Subject: [PATCH] Add ExecuteCommandEvent + +--- + .../purpur/event/ExecuteCommandEvent.java | 87 +++++++++++++++++++ + .../org/bukkit/command/SimpleCommandMap.java | 9 ++ + 2 files changed, 96 insertions(+) + create mode 100644 src/main/java/net/pl3x/purpur/event/ExecuteCommandEvent.java + +diff --git a/src/main/java/net/pl3x/purpur/event/ExecuteCommandEvent.java b/src/main/java/net/pl3x/purpur/event/ExecuteCommandEvent.java +new file mode 100644 +index 00000000..013a8712 +--- /dev/null ++++ b/src/main/java/net/pl3x/purpur/event/ExecuteCommandEvent.java +@@ -0,0 +1,87 @@ ++package net.pl3x.purpur.event; ++ ++import org.apache.commons.lang.Validate; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * This event is called whenever someone runs a command ++ */ ++public class ExecuteCommandEvent extends Event implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancel = false; ++ private CommandSender sender; ++ private Command command; ++ ++ public ExecuteCommandEvent(@NotNull CommandSender sender, @NotNull Command command) { ++ this.sender = sender; ++ this.command = command; ++ } ++ ++ /** ++ * Gets the command that the player is attempting to execute. ++ * ++ * @return Command the player is attempting to execute ++ */ ++ @NotNull ++ public Command getCommand() { ++ return command; ++ } ++ ++ /** ++ * Sets the command that the player will execute. ++ * ++ * @param command New command that the player will execute ++ * @throws IllegalArgumentException if command is null or empty ++ */ ++ public void setCommand(@NotNull Command command) throws IllegalArgumentException { ++ Validate.notNull(command, "Command cannot be null"); ++ this.command = command; ++ } ++ ++ /** ++ * Gets the sender that this command will be executed as. ++ * ++ * @return Sender this command will be executed as ++ */ ++ @NotNull ++ public CommandSender getSender() { ++ return sender; ++ } ++ ++ /** ++ * Sets the sender that this command will be executed as. ++ * ++ * @param sender New sender which this event will execute as ++ * @throws IllegalArgumentException if the sender provided is null ++ */ ++ public void setSender(@NotNull final CommandSender sender) throws IllegalArgumentException { ++ Validate.notNull(sender, "Sender cannot be null"); ++ this.sender = sender; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancel; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancel = cancel; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} +diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java +index 460fda05..b87c30a3 100644 +--- a/src/main/java/org/bukkit/command/SimpleCommandMap.java ++++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java +@@ -147,6 +147,15 @@ public class SimpleCommandMap implements CommandMap { + return false; + } + ++ // Purpur start ++ net.pl3x.purpur.event.ExecuteCommandEvent event = new net.pl3x.purpur.event.ExecuteCommandEvent(sender, target); ++ if (!event.callEvent()) { ++ return true; // cancelled ++ } ++ sender = event.getSender(); ++ target = event.getCommand(); ++ // Purpur end ++ + // Paper start - Plugins do weird things to workaround normal registration + if (target.timings == null) { + target.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, target); +-- +2.20.1 +