public List<WatchableObject> convert(List<WatchableObject> list) {
        Iterator<WatchableObject> itel = list.iterator();
        List<WatchableObject> newList = new ArrayList<WatchableObject>();
        List<Integer> sentValues = new ArrayList<Integer>();
        boolean sendAllCustom = false;
        while (itel.hasNext()) {
            WatchableObject watch = itel.next();
            sentValues.add(watch.a());
            // Its sending the air metadata. This is the least commonly sent metadata which all entitys still share.
            // I send my custom values if I see this!
            if (watch.a() == 1)
                sendAllCustom = true;
            if (entityValues.containsKey(watch.a())) {
                if (entityValues.get(watch.a()) == null)
                    continue;
                boolean doD = watch.d();
                Object value = entityValues.get(watch.a());
                watch = new WatchableObject(classTypes.get(value.getClass()), watch.a(), value);
                if (!doD)
                    watch.a(false);
            }
            newList.add(watch);
        }
        if (sendAllCustom) {
            // Its sending the entire meta data. Better add the custom meta
            for (int value : entityValues.keySet()) {
                if (sentValues.contains(value))
                    continue;
                Object obj = entityValues.get(value);
                if (obj == null)
                    continue;
                WatchableObject watch = new WatchableObject(classTypes.get(obj.getClass()), value, obj);
                newList.add(watch);
            }
        }
        return newList;
    }