Одинаковые куски кода в разных классах допустимо или нубство?
Дело даже не нубстве. А в практической составляющей. Лучше один код исправить, чем два. Но на самом деле это не так страшно, как забыть исправить второй код, если исправил первый.. Поэтому, чем меньше исправлений, тем лучше - меньше головной боли, меньше потенциальных ошибок. Грабли могут сильно ударить по голове, не в этот раз, так в следующий. Лучше иметь хорошие привычки.
Рекомендую "Рефакторинг" Мартина Фаулера почитать, там много примеров на эту тему.
Как раз убрать дубли - это рефакторинг.
Сильно рекомендую почитать "Паттерны проектирования" (O'relly Эрик и Элизабет Фриман), очень много подобных вопросов исчезнет сразу и писать будет намного проще.
Для Вашей ситуации предусмотрены абстрактные классы. К примеру:public abstract class MyClass{
//Ваши общие методы реализованны тут
// Подсчет тока по каждому двигателю
    private float getCurrent(int engine){
        float phasesA = calculatePhaseForEngine(0, MassCurrentsPhases, engine);
        float phasesB = calculatePhaseForEngine(1, MassCurrentsPhases, engine);
        float phasesC = calculatePhaseForEngine(2, MassCurrentsPhases, engine);

        return (phasesA + phasesB + phasesC) / 3;
    }
    // Подсчетываем ток по выбраному двигателю
    private static float calculatePhaseForEngine(int i, float[] MassCurrentsPhases, int currentEng) {
        return MassCurrentsPhases[3 * currentEng + i];
    }
public abstract void doSomething(); //Такие методы наследники будут обязаны реализовать
}
Дальше наследуетесь от абстрактного класса и реализуете методы которые отличаются логикой.  Кода становится меньше, читается и понимается лучше и накосячить уже сложнее т.к. общие методы гарантировано у всех одинаковые.