public static void onDone(Player player) {
		// get the various meta datas
		String mlText = "";
		for(MetadataValue val: player.getMetadata("mleText")) {
			mlText = val.asString();
			break;
		}
		MultilineChatHandler mlOnDone = null;
		for(MetadataValue val: player.getMetadata("mleOnDone")) {
			// see if it's ours
			Class<?>[] interfaces = val.value().getClass().getInterfaces();
			boolean isOurs = false;
			for(Class<?> face: interfaces) {
				//MCNSAEssentials.debug("onDone interface: " + face.getName());
				if(face.equals(MultilineChatHandler.class)) {
					isOurs = true;
					break;
				}
			}
			if(!isOurs) {
				// nope
				return;
			}
			
			mlOnDone = (MultilineChatHandler)val.value();
			break;
		}
		Object[] mlArgs = null;
		for(MetadataValue val: player.getMetadata("mleArgs")) {
			mlArgs = (Object[])val.value();
			break;
		}
		
		// and call it
		try {
			mlOnDone.onChatComplete(player, mlText.trim(), mlArgs);
		}
		catch(EssentialsCommandException e) {
			ColourHandler.sendMessage(player, "&c" + e.getMessage());
		}
		finally {
			// destroy all the meta datas
			player.removeMetadata("mleEnabled", MCNSAEssentials.getInstance());
			player.removeMetadata("mleOnDone", MCNSAEssentials.getInstance());
			player.removeMetadata("mleText", MCNSAEssentials.getInstance());
			player.removeMetadata("mleArgs", MCNSAEssentials.getInstance());
		}
	}