Async mod #1
@ -7,7 +7,14 @@ import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Command {
|
||||
public @interface Command
|
||||
{
|
||||
enum AsyncType
|
||||
{
|
||||
NEVER, ALWAYS;
|
||||
}
|
||||
|
||||
String hook();
|
||||
|
||||
AsyncType async() default AsyncType.NEVER;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
//@noformat
|
||||
package com.nemez.cmdmgr;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
@ -100,6 +101,10 @@ public class CommandManager {
|
||||
public static String noPermissionFormatting = "&c";
|
||||
public static String notAllowedFormatting = "&c";
|
||||
|
||||
/* List of all commands that can be invoked async */
|
||||
public static ArrayList<Executable> asyncExecutables = new ArrayList<Executable>();
|
||||
/* */
|
||||
|
||||
/**
|
||||
* Registers a command from a String of source code
|
||||
*
|
||||
@ -626,4 +631,4 @@ public class CommandManager {
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}//@format
|
||||
|
@ -0,0 +1,39 @@
|
||||
package com.nemez.cmdmgr.util;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.nemez.cmdmgr.component.ICommandComponent;
|
||||
|
||||
public class AsyncExecutableDefinition extends ExecutableDefinition
|
||||
{
|
||||
public AsyncExecutableDefinition(ArrayList<ICommandComponent> cmd, ArrayList<Integer> paramLinks, String perm,
|
||||
Method method, Object methodContainer, Type type)
|
||||
{
|
||||
super(cmd, paramLinks, perm, method, methodContainer, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean invoke(Object[] args, CommandSender sender, JavaPlugin plugin)
|
||||
{
|
||||
Thread t = new Thread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
invokeFromThread(args, sender, plugin);
|
||||
}
|
||||
});
|
||||
t.setDaemon(true);
|
||||
t.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
private final void invokeFromThread(Object[] args, CommandSender sender, JavaPlugin plugin)
|
||||
{
|
||||
super.invoke(args, sender, plugin);
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
//@noformat
|
||||
package com.nemez.cmdmgr.util;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
@ -14,6 +15,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.nemez.cmdmgr.Command;
|
||||
import com.nemez.cmdmgr.Command.AsyncType;
|
||||
import com.nemez.cmdmgr.CommandManager;
|
||||
import com.nemez.cmdmgr.component.BooleanComponent;
|
||||
import com.nemez.cmdmgr.component.ByteComponent;
|
||||
@ -263,8 +265,15 @@ public class Executable extends org.bukkit.command.Command {
|
||||
if (etype == null) {
|
||||
etype = Type.BOTH;
|
||||
}
|
||||
ExecutableDefinition def = new ExecutableDefinition(command, links, permission, target, methodContainer, etype);
|
||||
ExecutableDefinition def;
|
||||
AsyncType type = target.getAnnotation(Command.class).async();
|
||||
if (type == AsyncType.ALWAYS)
|
||||
def = new AsyncExecutableDefinition(command, links, permission, target, methodContainer, etype);
|
||||
else
|
||||
def = new ExecutableDefinition(command, links, permission, target, methodContainer, etype);
|
||||
commands.add(def);
|
||||
if (def instanceof AsyncExecutableDefinition)
|
||||
CommandManager.asyncExecutables.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -426,3 +435,4 @@ public class Executable extends org.bukkit.command.Command {
|
||||
}
|
||||
}
|
||||
}
|
||||
//@format
|
||||
|
Reference in New Issue
Block a user