@Override
    public void cloneFields(Cloner cloner, Object original) {
        super.cloneFields(cloner, original);

        // If this is a grouped node and if our group node is
        // also cloned then we'll grab its reference.
        if (groupNode != null) {
            if (cloner.isCloned(groupNode)) {
                // Then resolve the reference
                this.groupNode = cloner.clone(groupNode);
            } else {
                // We are on our own now
                this.groupNode = null;
                this.startIndex = -1;
            }

            // The above is based on the fact that if we were
            // cloning the hierarchy that contained the parent
            // group then it would have been shallow cloned before
            // this child.  Can't really be otherwise.
        }

        this.cachedWorldMat = cloner.clone(cachedWorldMat);

        // See if we are doing a shallow clone or a deep mesh clone
        boolean shallowClone = (cloner.getCloneFunction(Mesh.class) instanceof IdentityCloneFunction);

        // See if we clone the mesh using the special animation
        // semi-deep cloning
        if (shallowClone && mesh != null && mesh.getBuffer(Type.BindPosePosition) != null) {
            // Then we need to clone the mesh a little deeper
            this.mesh = mesh.cloneForAnim();
        } else {
            // Do whatever the cloner wants to do about it
            this.mesh = cloner.clone(mesh);
        }

        this.material = cloner.clone(material);
    }
Called internally by com.jme3.util.clone.Cloner.  Do not call directly.
jme3-core/src/main/java/com/jme3/scene/Geometry.java