// Path: gcodeparser/src/main/java/com/rvantwisk/gcodeparser/gcodes/ActivePlane.java
// public enum ActivePlane implements ModalGroups {
//     G17(GCodeGroups.ActivePlane),
//     G18(GCodeGroups.ActivePlane),
//     G19(GCodeGroups.ActivePlane);
// 
//     final GCodeGroups group;
// 
//     ActivePlane(GCodeGroups group) {
//         this.group = group;
//     }
// 
//     public boolean isInGroup(final GCodeGroups group) {
//         return this.group == group;
//     }
// 
// }


import com.rvantwisk.gcodeparser.gcodes.ActivePlane;
import com.rvantwisk.gcodeparser.gcodes.MotionMode;
import com.rvantwisk.gcodeparser.gcodes.Units;
import java.util.Set;
    public double getOY() {
        return machineStatus.getMachineOffsets().get(MachineStatus.Axis.Y).doubleValue();
    }

    public double getOZ() {
        return machineStatus.getMachineOffsets().get(MachineStatus.Axis.Z).doubleValue();
    }

    public MotionMode getMotionMode() {
        return getModalValue(MotionMode.class);
    }
    public Units getActiveUnit() {
        return getModalValue(Units.class);
    }

    public double getFeedrate() {
        return machineStatus.getModalVars().get("F").doubleValue();
    }

    private <T extends Enum<T>> T getModalValue(Class<T> enumClass) {
        Set<String> stat = machineStatus.getModals();
        for (T value : enumClass.getEnumConstants()) {
            if (stat.contains(value.toString())) {
                return value;
            }
        }
        return null;
    }

    public ActivePlane getActivePlane() {
// Path: gcodeparser/src/main/java/com/rvantwisk/gcodeparser/gcodes/ActivePlane.java
// public enum ActivePlane implements ModalGroups {
//     G17(GCodeGroups.ActivePlane),
//     G18(GCodeGroups.ActivePlane),
//     G19(GCodeGroups.ActivePlane);
// 
//     final GCodeGroups group;
// 
//     ActivePlane(GCodeGroups group) {
//         this.group = group;
//     }
// 
//     public boolean isInGroup(final GCodeGroups group) {
//         return this.group == group;
//     }
// 
// }


// Path: gcodeparser/src/main/java/com/rvantwisk/gcodeparser/MachineStatusHelper.java
import com.rvantwisk.gcodeparser.gcodes.ActivePlane;
import com.rvantwisk.gcodeparser.gcodes.MotionMode;
import com.rvantwisk.gcodeparser.gcodes.Units;
import java.util.Set;

    public double getOY() {
        return machineStatus.getMachineOffsets().get(MachineStatus.Axis.Y).doubleValue();
    }

    public double getOZ() {
        return machineStatus.getMachineOffsets().get(MachineStatus.Axis.Z).doubleValue();
    }

    public MotionMode getMotionMode() {
        return getModalValue(MotionMode.class);
    }
    public Units getActiveUnit() {
        return getModalValue(Units.class);
    }

    public double getFeedrate() {
        return machineStatus.getModalVars().get("F").doubleValue();
    }

    private <T extends Enum<T>> T getModalValue(Class<T> enumClass) {
        Set<String> stat = machineStatus.getModals();
        for (T value : enumClass.getEnumConstants()) {
            if (stat.contains(value.toString())) {
                return value;
            }
        }
        return null;
    }

    public ActivePlane getActivePlane() {
        return getModalValue(ActivePlane.class);