3 import java.lang.reflect.InvocationHandler;
4 import java.lang.reflect.Method;
5 import java.lang.reflect.Proxy;
7 import java.util.logging.Logger;
13 import com.google.common.collect.ImmutableMap;
16 private static interface MethodHandler {
17 Object handle(
TestServer server, Object[] args);
20 private static final Map<Method, MethodHandler> methods;
24 ImmutableMap.Builder<Method, MethodHandler> methodMap = ImmutableMap.builder();
26 Server.class.getMethod(
"isPrimaryThread"),
28 public Object handle(
TestServer server, Object[] args) {
29 return Thread.currentThread().equals(server.creatingThread);
34 Server.class.getMethod(
"getPluginManager"),
36 public Object handle(
TestServer server, Object[] args) {
37 return server.pluginManager;
42 Server.class.getMethod(
"getLogger"),
45 public Object handle(
TestServer server, Object[] args) {
51 Server.class.getMethod(
"getName"),
53 public Object handle(
TestServer server, Object[] args) {
59 Server.class.getMethod(
"getVersion"),
61 public Object handle(
TestServer server, Object[] args) {
62 return "Version_" +
TestServer.class.getPackage().getImplementationVersion();
67 Server.class.getMethod(
"getBukkitVersion"),
69 public Object handle(
TestServer server, Object[] args) {
70 return "BukkitVersion_" +
TestServer.class.getPackage().getImplementationVersion();
74 methods = methodMap.build();
77 Server instance = Proxy.getProxyClass(
Server.class.getClassLoader(),
Server.class).asSubclass(
Server.class).getConstructor(InvocationHandler.class).newInstance(server);
80 }
catch (Throwable t) {
85 private Thread creatingThread = Thread.currentThread();
89 public static Server getInstance() {
93 public Object invoke(Object proxy, Method method, Object[] args) {
94 MethodHandler handler = methods.get(method);
95 if (handler != null) {
96 return handler.handle(
this, args);
98 throw new UnsupportedOperationException(String.valueOf(method));
static Server getServer()
static void setServer(Server server)