コード例 #1
0
  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;
  }
コード例 #2
0
  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;
  }