From a3b81d4344347ffb4973453fb612efd6014ee6de Mon Sep 17 00:00:00 2001 From: Taskeren Date: Tue, 25 Jun 2019 00:20:01 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E6=B7=BB=E5=8A=A0=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=8F=B0=E6=89=A7=E8=A1=8C=E6=8C=87=E4=BB=A4=20/console=20?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E6=94=B9=E6=8C=87=E4=BB=A4=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ren/taske/nativebot/MinecraftPlugin.java | 4 ++ .../nativebot/bot/command/CommandConsole.java | 59 +++++++++++++++++++ .../ren/taske/nativebot/core/NativeBot.java | 30 ++++++---- .../ren/taske/nativebot/util/ClassUtils.java | 28 +++++++-- 4 files changed, 106 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ren/taske/nativebot/bot/command/CommandConsole.java diff --git a/src/main/java/ren/taske/nativebot/MinecraftPlugin.java b/src/main/java/ren/taske/nativebot/MinecraftPlugin.java index bfbb8aa..8e96a06 100644 --- a/src/main/java/ren/taske/nativebot/MinecraftPlugin.java +++ b/src/main/java/ren/taske/nativebot/MinecraftPlugin.java @@ -22,6 +22,8 @@ public class MinecraftPlugin extends JavaPlugin { @Override public void onEnable() { + nativebotJavaPlugin = this; + nativebot.onEnable(); getCommand("qq").setExecutor(cmdqq); @@ -49,4 +51,6 @@ public class MinecraftPlugin extends JavaPlugin { chatting.onMinecraftMessage(evt); } + public static JavaPlugin nativebotJavaPlugin; + } diff --git a/src/main/java/ren/taske/nativebot/bot/command/CommandConsole.java b/src/main/java/ren/taske/nativebot/bot/command/CommandConsole.java new file mode 100644 index 0000000..67460b8 --- /dev/null +++ b/src/main/java/ren/taske/nativebot/bot/command/CommandConsole.java @@ -0,0 +1,59 @@ +package ren.taske.nativebot.bot.command; + +import java.util.ArrayList; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; + +import cc.moecraft.icq.event.events.message.EventMessage; +import cc.moecraft.icq.user.User; +import ren.taske.nativebot.MinecraftPlugin; +import ren.taske.nativebot.commons.Reference; + +public class CommandConsole extends CommandBase { + + public CommandConsole() { + super("console", Reference.NODE_OP, "$"); + } + + @Override + public String execute(EventMessage evt, User user, long userid, String command, ArrayList args) { + String message = ""; + String cmd = merge(args); + Boolean flag = callSyncDispatch(Bukkit.getServer().getConsoleSender(), cmd); + if(flag == null) { + return "Exception!"; + } + if(flag) { + message = "Done!"; + } else { + message = "Fail!"; + } + return message; + } + + public static String merge(ArrayList strs) { + String ret = ""; + for(String str : strs) { + ret += str + " "; + } + return ret.trim(); + } + + public static Boolean callSyncDispatch(CommandSender sender, String command) { + try { + return Bukkit.getScheduler().callSyncMethod(MinecraftPlugin.nativebotJavaPlugin, new Callable() { + @Override + public Boolean call() throws Exception { + return Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), command); + } + }).get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + return null; + } + } + +} diff --git a/src/main/java/ren/taske/nativebot/core/NativeBot.java b/src/main/java/ren/taske/nativebot/core/NativeBot.java index 2478090..f8590b2 100644 --- a/src/main/java/ren/taske/nativebot/core/NativeBot.java +++ b/src/main/java/ren/taske/nativebot/core/NativeBot.java @@ -4,22 +4,18 @@ import java.util.logging.Logger; import org.bukkit.plugin.java.JavaPlugin; -import cc.moecraft.icq.command.interfaces.IcqCommand; import ren.taske.nativebot.bot.Bot; -import ren.taske.nativebot.bot.command.CommandAbout; -import ren.taske.nativebot.bot.command.CommandOperator; -import ren.taske.nativebot.bot.command.CommandPermission; import ren.taske.nativebot.util.ClassUtils; public class NativeBot { protected static Logger logger; - @SuppressWarnings("unchecked") - private static final Class[] COMMAND_CLASSES = new Class[] { - CommandAbout.class, - CommandOperator.class, - CommandPermission.class + private static final String[] COMMANDS = new String[] { + "CommandAbout", + "CommandOperator", + "CommandPermission", + "CommandConsole" }; protected final JavaPlugin plugin; @@ -42,7 +38,7 @@ public class NativeBot { } public void onEnable() { - bot.register(ClassUtils.instantiate(COMMAND_CLASSES)); + bot.register(ClassUtils.instantiate(COMMANDS)); bot.start(); for(String cmd : bot.getCommands()) logger.info("[C] "+cmd); } @@ -56,4 +52,18 @@ public class NativeBot { } } + public static void bigWarning(String str, Object...format) { + logger.warning("***********************************************"); + logger.warning(String.format(str, format)); + logger.warning("***********************************************"); + } + + public static void bigWarning(String[] strs, Object...format) { + String s = ""; + for(String str : strs) { + s += str + "\n"; + } + bigWarning(s, format); + } + } diff --git a/src/main/java/ren/taske/nativebot/util/ClassUtils.java b/src/main/java/ren/taske/nativebot/util/ClassUtils.java index 22b16bc..5dbbcb3 100644 --- a/src/main/java/ren/taske/nativebot/util/ClassUtils.java +++ b/src/main/java/ren/taske/nativebot/util/ClassUtils.java @@ -8,14 +8,32 @@ import cc.moecraft.icq.command.interfaces.IcqCommand; import ren.taske.nativebot.core.NativeBot; public class ClassUtils { + + public static List instantiate(String...names) { + List> classes = Lists.>newArrayList(); + for(String name : names) { + Class cls; + try { + cls = Class.forName("ren.taske.nativebot.bot.command."+name); + classes.add(cls); + } catch (Exception e) { + NativeBot.logger().warning("Unable to load "+name); + } + } + return instantiate(classes); + } - @SuppressWarnings("unchecked") - public static List instantiate(Class...classes) { + public static List instantiate(List> classes) { List ret = Lists.newArrayList(); - for(Class clazz : classes) { + for(Class clazz : classes) { try { - IcqCommand cmd = clazz.newInstance(); - ret.add(cmd); + Object obj = clazz.newInstance(); + if(obj instanceof IcqCommand) { + IcqCommand cmd = (IcqCommand) obj; + ret.add(cmd); + } else { + NativeBot.logger().warning(String.format("%s is NOT a IcqCommand", clazz.getName())); + } } catch(Exception e) { NativeBot.logger().warning("Error when loading IcqCommand "+clazz.getName()); NativeBot.logger().warning(e.getMessage());