Plex-FAWE/worldedit-core/src/main/java/com/sk89q/worldedit/command/MethodCommands.java
Jesse Boyd a629d15c74
Copy paste/merge FAWE classes to this WorldEdit fork
- so certain people can look at the diff and complain about my sloppy code :(

Signed-off-by: Jesse Boyd <jessepaleg@gmail.com>
2018-08-13 00:03:07 +10:00

100 lines
3.5 KiB
Java

package com.sk89q.worldedit.command;
import com.boydti.fawe.config.Commands;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandLocals;
import com.sk89q.minecraft.util.commands.CommandPermissions;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.util.command.CommandCallable;
import com.sk89q.worldedit.util.command.Dispatcher;
import java.lang.reflect.Method;
import java.util.concurrent.ConcurrentHashMap;
import static com.google.common.base.Preconditions.checkNotNull;
public class MethodCommands {
public final WorldEdit worldEdit;
private ConcurrentHashMap<Method, CommandCallable> callables;
private Dispatcher dispatcher;
public MethodCommands(WorldEdit worldEdit) {
checkNotNull(worldEdit);
this.worldEdit = worldEdit;
callables = new ConcurrentHashMap<>();
}
@Deprecated
public MethodCommands() {
this(WorldEdit.getInstance());
}
public void register(Method method, CommandCallable callable, Dispatcher dispatcher) {
this.dispatcher = dispatcher;
this.callables.put(method, callable);
}
public CommandCallable getCallable() {
try {
StackTraceElement[] stack = new Exception().getStackTrace();
for (StackTraceElement elem : stack) {
Class<?> clazz = Class.forName(elem.getClassName());
for (Method method : clazz.getMethods()) {
if (method.getName().equals(elem.getMethodName())) {
Command command = method.getAnnotation(Command.class);
if (command != null) return callables.get(method);
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
return dispatcher;
}
public Command getCommand() {
try {
StackTraceElement[] stack = new Exception().getStackTrace();
for (StackTraceElement elem : stack) {
Class<?> clazz = Class.forName(elem.getClassName());
for (Method method : clazz.getMethods()) {
if (method.getName().equals(elem.getMethodName())) {
Command command = method.getAnnotation(Command.class);
if (command != null) return Commands.translate(clazz, command);
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public String getArguments(CommandContext context) {
if (context == null) return null;
CommandLocals locals = context.getLocals();
if (locals != null) {
return (String) locals.get("arguments");
}
return null;
}
public String[] getPermissions() {
try {
StackTraceElement[] stack = new Exception().getStackTrace();
for (StackTraceElement elem : stack) {
Class<?> clazz = Class.forName(elem.getClassName());
for (Method method : clazz.getMethods()) {
if (method.getName().equals(elem.getMethodName())) {
CommandPermissions perm = method.getAnnotation(CommandPermissions.class);
if (perm != null) return perm.value();
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
return new String[0];
}
}