private Object read( DataInput objBuffer, Type propertyType, boolean array, UnrealPackageReadOnly.ExportEntry arrayInner, String structName, UnrealPackageReadOnly up) throws IOException { switch (propertyType) { case NONE: return null; case BYTE: return objBuffer.readUnsignedByte(); case INT: return objBuffer.readInt(); case BOOL: return array; case FLOAT: return objBuffer.readFloat(); case OBJECT: return objBuffer.readCompactInt(); case NAME: return objBuffer.readCompactInt(); case ARRAY: int arraySize = objBuffer.readCompactInt(); List<Object> arrayList = new ArrayList<>(arraySize); String a = arrayInner.getObjectClass().getObjectName().getName(); Property f = unrealClassLoader.getProperty(arrayInner.getObjectFullName()); array = false; arrayInner = null; structName = null; propertyType = Type.valueOf(a.replace("Property", "").toUpperCase()); if (propertyType == Type.STRUCT) { StructProperty structProperty = (StructProperty) f; structName = structProperty.getStructType().getObjectFullName(); } if (propertyType == Type.ARRAY) { array = true; ArrayProperty arrayProperty = (ArrayProperty) f; arrayInner = (UnrealPackageReadOnly.ExportEntry) arrayProperty.getInner(); } for (int i = 0; i < arraySize; i++) { arrayList.add(read(objBuffer, propertyType, array, arrayInner, structName, up)); } return arrayList; case STRUCT: return readStruct(objBuffer, structName, up); /*case VECTOR: return readStruct(objBuffer, "Vector", up); case ROTATOR: return readStruct(objBuffer, "Rotator", up);*/ case STR: return objBuffer.readLine(); default: throw new IllegalStateException("Unk type(" + structName + "): " + propertyType); } }