[+] 添加控制台执行指令 /console 和修改指令注册
This commit is contained in:
		@@ -22,6 +22,8 @@ public class MinecraftPlugin extends JavaPlugin {
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void onEnable() {
 | 
						public void onEnable() {
 | 
				
			||||||
 | 
							nativebotJavaPlugin = this;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		nativebot.onEnable();
 | 
							nativebot.onEnable();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		getCommand("qq").setExecutor(cmdqq);
 | 
							getCommand("qq").setExecutor(cmdqq);
 | 
				
			||||||
@@ -49,4 +51,6 @@ public class MinecraftPlugin extends JavaPlugin {
 | 
				
			|||||||
		chatting.onMinecraftMessage(evt);
 | 
							chatting.onMinecraftMessage(evt);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						public static JavaPlugin nativebotJavaPlugin;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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<String> 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<String> 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<Boolean>() {
 | 
				
			||||||
 | 
									@Override
 | 
				
			||||||
 | 
									public Boolean call() throws Exception {
 | 
				
			||||||
 | 
										return Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), command);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}).get();
 | 
				
			||||||
 | 
							} catch (InterruptedException | ExecutionException e) {
 | 
				
			||||||
 | 
								e.printStackTrace();
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,22 +4,18 @@ import java.util.logging.Logger;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cc.moecraft.icq.command.interfaces.IcqCommand;
 | 
					 | 
				
			||||||
import ren.taske.nativebot.bot.Bot;
 | 
					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;
 | 
					import ren.taske.nativebot.util.ClassUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class NativeBot {
 | 
					public class NativeBot {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected static Logger logger;
 | 
						protected static Logger logger;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						private static final String[] COMMANDS = new String[] {
 | 
				
			||||||
	private static final Class<IcqCommand>[] COMMAND_CLASSES = new Class[] {
 | 
								"CommandAbout",
 | 
				
			||||||
		CommandAbout.class,
 | 
								"CommandOperator",
 | 
				
			||||||
		CommandOperator.class,
 | 
								"CommandPermission",
 | 
				
			||||||
		CommandPermission.class
 | 
								"CommandConsole"
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected final JavaPlugin plugin;
 | 
						protected final JavaPlugin plugin;
 | 
				
			||||||
@@ -42,7 +38,7 @@ public class NativeBot {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public void onEnable() {
 | 
						public void onEnable() {
 | 
				
			||||||
		bot.register(ClassUtils.instantiate(COMMAND_CLASSES));
 | 
							bot.register(ClassUtils.instantiate(COMMANDS));
 | 
				
			||||||
		bot.start();
 | 
							bot.start();
 | 
				
			||||||
		for(String cmd : bot.getCommands()) logger.info("[C] "+cmd);
 | 
							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);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,13 +9,31 @@ import ren.taske.nativebot.core.NativeBot;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class ClassUtils {
 | 
					public class ClassUtils {
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						public static List<IcqCommand> instantiate(String...names) {
 | 
				
			||||||
	public static List<IcqCommand> instantiate(Class<IcqCommand>...classes) {
 | 
							List<Class<?>> classes = Lists.<Class<?>>newArrayList();
 | 
				
			||||||
		List<IcqCommand> ret = Lists.newArrayList();
 | 
							for(String name : names) {
 | 
				
			||||||
		for(Class<IcqCommand> clazz : classes) {
 | 
								 Class<?> cls;
 | 
				
			||||||
			 try {
 | 
								 try {
 | 
				
			||||||
				IcqCommand cmd = clazz.newInstance();
 | 
									 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);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static List<IcqCommand> instantiate(List<Class<?>> classes) {
 | 
				
			||||||
 | 
							List<IcqCommand> ret = Lists.newArrayList();
 | 
				
			||||||
 | 
							for(Class<?> clazz : classes) {
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
									Object obj = clazz.newInstance();
 | 
				
			||||||
 | 
									if(obj instanceof IcqCommand) {
 | 
				
			||||||
 | 
										IcqCommand cmd = (IcqCommand) obj;
 | 
				
			||||||
					ret.add(cmd); 
 | 
										ret.add(cmd); 
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										NativeBot.logger().warning(String.format("%s is NOT a IcqCommand", clazz.getName()));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			} catch(Exception e) {
 | 
								} catch(Exception e) {
 | 
				
			||||||
				NativeBot.logger().warning("Error when loading IcqCommand "+clazz.getName());
 | 
									NativeBot.logger().warning("Error when loading IcqCommand "+clazz.getName());
 | 
				
			||||||
				NativeBot.logger().warning(e.getMessage());
 | 
									NativeBot.logger().warning(e.getMessage());
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user