package com.alecgorge.minecraft.jsonapi.dynamic; import java.util.HashMap; import org.json.simpleForBukkit.JSONArray; public class Argument { private Class<?> type; private String desc; private Object value = null; private static HashMap<String, Class<?>> mapping = new HashMap<String, Class<?>>(); static { mapping.put("int", int.class); mapping.put("String[]", String[].class); mapping.put("double", double.class); mapping.put("boolean", boolean.class); mapping.put("float", float.class); mapping.put("String", String.class); mapping.put("Integer", Integer.class); mapping.put("Float", Float.class); mapping.put("Double", Double.class); mapping.put("Boolean", Boolean.class); mapping.put("Player", org.bukkit.entity.Player.class); mapping.put("Server", org.bukkit.Server.class); mapping.put("World", org.bukkit.World.class); mapping.put("World[]", org.bukkit.World[].class); mapping.put("Player[]", org.bukkit.entity.Player[].class); mapping.put("Plugin", org.bukkit.plugin.Plugin.class); mapping.put("Plugin[]", org.bukkit.plugin.Plugin[].class); mapping.put("OfflinePlayer", org.bukkit.OfflinePlayer.class); mapping.put("OfflinePlayer[]", org.bukkit.OfflinePlayer[].class); mapping.put("Object[]", Object[].class); } public Argument(JSONArray a) { if(a.size() > 2) { type = getClassFromName((String)a.get(1)); desc = (String)a.get(2); } else { type = getClassFromName((String)a.get(0)); desc = (String)a.get(1); } if(a.size() == 4) { setValue(a.get(3)); } } public Argument(Class<?> a, String desc) { type = a; this.desc = desc; } public Class<?> getType() { return type; } public void setValue (Object o) { value = o; } public Object getValue () { return value; } public String getDesc () { return desc; } public static Class<?> getClassFromName(String name) { // auto translate from some of the defaults Class<?> ret = mapping.get(name); if(ret != null) { return ret; } ret = void.class; try { ret = Class.forName(name); } catch (ClassNotFoundException e) { try { ret = Class.forName("java.lang."+name); } catch (ClassNotFoundException e1) { try { ret = Class.forName("org.bukkit."+name); } catch (Exception e2) { try { ret = Class.forName("org.bukkit.entity."+name); } catch (Exception e3) { try { ret = Class.forName("net.milkbowl.vault.economy."+name); } catch (ClassNotFoundException e4) { } } } } } return ret; } }