private TaggedClass readClassFromTag(NBTTagCompound tag, TypeTagger tagger) { TaggedClass tClass = new TaggedClass(); // not gonna load it if its the method... if (tagger.isUniqueKeyField) { SavedField unique = tClass.new SavedField(); unique.name = tagger.uniqueKey; unique.type = tagger.getTypeOfField(unique.name); unique.value = readFieldFromTag(tag, unique, tagger); tClass.uniqueKey = unique; } for (String name : tagger.savedFields) { SavedField field = tClass.new SavedField(); field.name = name; field.type = tagger.getTypeOfField(name); field.value = readFieldFromTag(tag, field, tagger); tClass.addField(field); } return tClass; }
private Object readFieldFromTag(NBTTagCompound tag, SavedField field, TypeTagger tagger) { if (field == null || field.type == null || field.value == null) { return null; } else if (field.type.equals(int.class)) { return tag.getInteger(field.name); } else if (field.type.equals(int[].class)) { return tag.getIntArray(field.name); } else if (field.type.equals(float.class)) { return tag.getFloat(field.name); } else if (field.type.equals(double.class)) { return tag.getDouble(field.name); } else if (field.type.equals(double[].class)) { NBTTagList list = tag.getTagList(field.name); double[] array = new double[list.tagCount()]; for (int i = 0; i < array.length; i++) array[i] = ((NBTTagDouble) list.tagAt(i)).data; return array; } else if (field.type.equals(boolean.class)) { return tag.getBoolean(field.name); } else if (field.type.equals(boolean[].class)) { NBTTagList list = tag.getTagList(field.name); boolean[] array = new boolean[list.tagCount()]; for (int i = 0; i < array.length; i++) array[i] = ((NBTTagByte) list.tagAt(i)).data != 0; return array; } else if (field.type.equals(String.class)) { return tag.getString(field.name); } else if (field.type.equals(String[].class)) { NBTTagList list = tag.getTagList(field.name); String[] array = new String[list.tagCount()]; for (int i = 0; i < array.length; i++) array[i] = ((NBTTagString) list.tagAt(i)).data; return array; } else if (field.type.equals(TaggedClass.class)) { NBTTagCompound compound = new NBTTagCompound(); return readClassFromTag( compound, DataStorageManager.getTaggerForType(tagger.getTypeOfField(field.name))); } else // this should never happen... return null; }