public final void leaveFamily(final MapleFamilyCharacter mgc, final boolean skipLeader) {
        bDirty = true;
        if (mgc.getId() == leaderid && !skipLeader) {
            //disband
            leadername = null; //to disband family completely
            World.Family.disbandFamily(id);
        } else {
            //we also have to update anyone below us

            if (mgc.getJunior1() > 0) {
                MapleFamilyCharacter j = getMFC(mgc.getJunior1());
                if (j != null) {
                    j.setSeniorId(0);
                    splitFamily(j.getId(), j); //junior1 makes his own family
                }
            }
            if (mgc.getJunior2() > 0) {
                MapleFamilyCharacter j = getMFC(mgc.getJunior2());
                if (j != null) {
                    j.setSeniorId(0);
                    splitFamily(j.getId(), j); //junior1 makes his own family
                }
            }
            if (mgc.getSeniorId() > 0) {
                MapleFamilyCharacter mfc = getMFC(mgc.getSeniorId());
                if (mfc != null) {
                    if (mfc.getJunior1() == mgc.getId()) {
                        mfc.setJunior1(0);
                    } else {
                        mfc.setJunior2(0);
                    }
                }
            }
            List<Integer> dummy = new ArrayList<>();
            dummy.add(mgc.getId());
            broadcast(null, -1, FCOp.DISBAND, dummy);
            resetPedigree(); //ex but eh
        }
        members.remove(mgc.getId());
        bDirty = true;
    }