@Override public CarriagePackage GeneratePackage( CarriageEntity Carriage, Directions CarriageDirection, Directions MotionDirection) throws CarriageMotionException { CarriagePackage Package; if (Anchored) { if (MotionDirection == CarriageDirection) { throw (new CarriageMotionException( "cannot push carriage away from controller in anchored mode")); } if (MotionDirection == CarriageDirection.Opposite()) { throw (new CarriageMotionException( "cannot pull carriage into controller in anchored mode")); } Package = new CarriagePackage(this, Carriage, MotionDirection); Carriage.FillPackage(Package); if (Package.Body.contains(Package.DriveRecord)) { throw (new CarriageMotionException( "carriage is attempting to move controller while in anchored mode")); } if (Package.Body.contains(Package.DriveRecord.NextInDirection(MotionDirection.Opposite()))) { throw (new CarriageMotionException( "carriage is obstructed by controller while in anchored mode")); } } else { Package = new CarriagePackage(this, Carriage, MotionDirection); Package.AddBlock(Package.DriveRecord); if (MotionDirection != CarriageDirection) { Package.AddPotentialObstruction(Package.DriveRecord.NextInDirection(MotionDirection)); } Carriage.FillPackage(Package); } Package.Finalize(); return (Package); }