From e3df62af7e08a6a41137f06ba7c12ce0f19bb044 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 9 Feb 2019 00:23:20 +0100 Subject: [PATCH] Supporting any sender for the commands --- .../buttondevteam/core/PlayerListener.java | 3 ++- .../java/buttondevteam/lib/chat/Command2.java | 11 +++++----- .../buttondevteam/lib/chat/Command2MC.java | 9 ++++----- .../lib/chat/Command2MCSender.java | 20 +++++++++++++++++++ .../lib/chat/Command2Sender.java | 7 +++++++ .../buttondevteam/lib/chat/ICommand2.java | 4 ++-- 6 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MCSender.java create mode 100644 ButtonCore/src/main/java/buttondevteam/lib/chat/Command2Sender.java diff --git a/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java b/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java index 073cb87..d151e51 100755 --- a/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java +++ b/ButtonCore/src/main/java/buttondevteam/core/PlayerListener.java @@ -4,6 +4,7 @@ import buttondevteam.lib.TBMCCommandPreprocessEvent; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.architecture.ButtonPlugin; +import buttondevteam.lib.chat.Command2MCSender; import buttondevteam.lib.player.TBMCPlayerBase; import lombok.val; import org.bukkit.Bukkit; @@ -64,7 +65,7 @@ public class PlayerListener implements Listener { public void onTBMCPreprocess(TBMCCommandPreprocessEvent event) { if (event.isCancelled()) return; try { - event.setCancelled(ButtonPlugin.getCommand2MC().handleCommand(event.getSender(), event.getMessage())); + event.setCancelled(ButtonPlugin.getCommand2MC().handleCommand(new Command2MCSender(event.getSender()), event.getMessage())); } catch (Exception e) { TBMCCoreAPI.SendException("Command processing failed for sender '" + event.getSender() + "' and message '" + event.getMessage() + "'", e); } diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java index 899fdbb..ba6d8c5 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java @@ -24,7 +24,7 @@ import java.util.stream.Collectors; * The method name is the subcommand, use underlines (_) to add further subcommands. * The args may be null if the conversion failed and it's optional. */ -public abstract class Command2 { +public abstract class Command2 { protected Command2() { } @@ -80,9 +80,9 @@ public abstract class Command2 { map.put(cl, new ParamConverter<>(converter, errormsg)); } - public abstract boolean handleCommand(CommandSender sender, String commandLine) throws Exception; + public abstract boolean handleCommand(TP sender, String commandLine) throws Exception; - protected boolean handleCommand(CommandSender sender, String commandline, + protected boolean handleCommand(TP sender, String commandline, HashMap> subcommands, HashMap, ParamConverter> paramConverters) throws Exception { for (int i = commandline.length(); i != -1; i = commandline.lastIndexOf(' ', i - 1)) { @@ -107,7 +107,8 @@ public abstract class Command2 { if (sendertype.isAssignableFrom(sender.getClass())) params.add(sender); //The command either expects a CommandSender or it is a Player, or some other expected type else if (ChromaGamerBase.class.isAssignableFrom(sendertype) - && (cg = ChromaGamerBase.getFromSender(sender)) != null + && sender instanceof Command2MCSender + && (cg = ChromaGamerBase.getFromSender(((Command2MCSender) sender).getSender())) != null && cg.getClass() == sendertype) //The command expects a user of our system params.add(cg); else { @@ -224,5 +225,5 @@ public abstract class Command2 { return ht; } - public abstract boolean hasPermission(CommandSender sender, TC command); + public abstract boolean hasPermission(TP sender, TC command); } //TODO: Test support of Player instead of CommandSender diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MC.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MC.java index 10d3035..9e7e004 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MC.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MC.java @@ -1,17 +1,16 @@ package buttondevteam.lib.chat; import buttondevteam.core.MainPlugin; -import org.bukkit.command.CommandSender; import java.util.HashMap; import java.util.function.Function; -public class Command2MC extends Command2 { +public class Command2MC extends Command2 { private HashMap> subcommands = new HashMap<>(); private HashMap, ParamConverter> paramConverters = new HashMap<>(); @Override - public boolean handleCommand(CommandSender sender, String commandLine) throws Exception { + public boolean handleCommand(Command2MCSender sender, String commandLine) throws Exception { return handleCommand(sender, commandLine, subcommands, paramConverters); } @@ -21,8 +20,8 @@ public class Command2MC extends Command2 { } @Override - public boolean hasPermission(CommandSender sender, ICommand2MC command) { - return MainPlugin.permission.has(sender, "thorpe.command." + command.getCommandPath().replace(' ', '.')); + public boolean hasPermission(Command2MCSender sender, ICommand2MC command) { + return MainPlugin.permission.has(sender.getSender(), "thorpe.command." + command.getCommandPath().replace(' ', '.')); } /** diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MCSender.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MCSender.java new file mode 100644 index 0000000..059d953 --- /dev/null +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2MCSender.java @@ -0,0 +1,20 @@ +package buttondevteam.lib.chat; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.bukkit.command.CommandSender; + +@RequiredArgsConstructor +public class Command2MCSender implements Command2Sender { + private @Getter final CommandSender sender; + + @Override + public void sendMessage(String message) { + sender.sendMessage(message); + } + + @Override + public void sendMessage(String[] message) { + sender.sendMessage(message); + } +} diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2Sender.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2Sender.java new file mode 100644 index 0000000..ebb2b66 --- /dev/null +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2Sender.java @@ -0,0 +1,7 @@ +package buttondevteam.lib.chat; + +public interface Command2Sender { //We don't need the 'extras' of CommandSender on Discord + void sendMessage(String message); + + void sendMessage(String[] message); +} diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java index b0da534..6ee2264 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java @@ -31,9 +31,9 @@ public abstract class ICommand2 { private final String path; @Getter - private final Command2 manager; //TIL that if I use a raw type on a variable then none of the type args will work (including what's defined on a method, not on the type) + private final Command2 manager; //TIL that if I use a raw type on a variable then none of the type args will work (including what's defined on a method, not on the type) - public ICommand2(Command2 manager) { + public ICommand2(Command2 manager) { path = getcmdpath(); this.manager = manager; }