### Question:
NativeSoftBodyUtil { public static FloatBuffer mapVertexData(IntBuffer indexMap, FloatBuffer inputBuffer, int numFloatsPerVertex) { Validate.nonNull(indexMap, "index map"); Validate.positive(numFloatsPerVertex, "number of floats per vertex"); int numFloats = inputBuffer.limit(); assert (numFloats % numFloatsPerVertex == 0) : numFloats; int numVertices = numFloats / numFloatsPerVertex; FloatBuffer result = BufferUtils.createFloatBuffer(numFloats); int lastNewVIndex = -1; for (int oldVIndex = 0; oldVIndex < numVertices; ++oldVIndex) { int newVIndex = indexMap.get(oldVIndex); for (int i = 0; i < numFloatsPerVertex; ++i) { int oldFloatIndex = numFloatsPerVertex * oldVIndex + i; float x = inputBuffer.get(oldFloatIndex); int newFloatIndex = numFloatsPerVertex * newVIndex + i; result.put(newFloatIndex, x); } if (newVIndex > lastNewVIndex) { lastNewVIndex = newVIndex; } } int newLimit = numFloatsPerVertex * (lastNewVIndex + 1); result.limit(newLimit); return result; } private  NativeSoftBodyUtil(); static void appendFromLineMesh(Mesh mesh, PhysicsSoftBody softBody); static void appendFromNativeMesh(IndexedMesh mesh,
            PhysicsSoftBody softBody); static void appendFromTriMesh(Mesh mesh, PhysicsSoftBody softBody); static void appendTetras(PhysicsSoftBody softBody); static IntBuffer generateIndexMap(FloatBuffer positionBuffer); static IndexBuffer mapIndices(IntBuffer indexMap,
            IndexBuffer inputBuffer, IndexBuffer reuseBuffer); static FloatBuffer mapVertexData(IntBuffer indexMap,
            FloatBuffer inputBuffer, int numFloatsPerVertex); static void updateClusterMesh(PhysicsSoftBody body, Mesh store,
            boolean meshInLocalSpace); static void updateMesh(PhysicsSoftBody body,
            IntBuffer vertexToNodeMap, Mesh store, boolean meshInLocalSpace,
            boolean updateNormals, Transform physicsToMesh); static void updatePinMesh(PhysicsSoftBody body, Mesh store,
            boolean meshInLocalSpace); final static Logger logger; }### Answer:
@Test public void testMapVertexData() { FloatBuffer jmePositions = FloatBuffer.wrap( new float[]{ 1f, 0f, 0f, 2f, 0f, 0f, 1f, 0f, 0f, 4f, 0f, 0f, 5f, 0f, 0f, 5f, 0f, 0f, }); IntBuffer jme2bulletIndexMap = IntBuffer.wrap( new int[]{0, 1, 0, 2, 3, 3} ); FloatBuffer bulletPositions = NativeSoftBodyUtil.mapVertexData( jme2bulletIndexMap, jmePositions, 3); verifyIndexMap(jmePositions, jme2bulletIndexMap, bulletPositions); jme2bulletIndexMap = NativeSoftBodyUtil.generateIndexMap(jmePositions); bulletPositions = NativeSoftBodyUtil.mapVertexData(jme2bulletIndexMap, jmePositions, 3); verifyIndexMap(jmePositions, jme2bulletIndexMap, bulletPositions); }