[+] 添加控制台执行指令 /console 和修改指令注册

This commit is contained in:
Taskeren 2019-06-25 00:20:01 +08:00
parent 7af12650ea
commit a3b81d4344
4 changed files with 106 additions and 15 deletions

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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<IcqCommand>[] 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);
}
}

View File

@ -8,14 +8,32 @@ import cc.moecraft.icq.command.interfaces.IcqCommand;
import ren.taske.nativebot.core.NativeBot;
public class ClassUtils {
public static List<IcqCommand> instantiate(String...names) {
List<Class<?>> classes = Lists.<Class<?>>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<IcqCommand> instantiate(Class<IcqCommand>...classes) {
public static List<IcqCommand> instantiate(List<Class<?>> classes) {
List<IcqCommand> ret = Lists.newArrayList();
for(Class<IcqCommand> 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());