It looks like those hullmods are uninstallable because the code checking if each hullmod is valid excludes the hullmod itself. For example, PoweredArmour.java contains the following code:
Spoiler
@Override
public boolean isApplicableToShip(ShipAPI ship) {
return
((!ship.getVariant().getHullMods().contains("PoweredArmour")) &&
(!ship.getVariant().getHullMods().contains("EnergyAbsorbers")) &&
(!ship.getVariant().getHullMods().contains("comp_armor")) &&
(!ship.getVariant().getHullMods().contains("Deflectors")));
}
I'm not sure when isApplicableToShip is called exactly, but it automatically excludes/removes the hullmod if any of the above are already on the ship. Because Powered Armour = Powered Armour, the hullmod gets kicked off the list every time it is selected. I made it installable by removing the bit of code that checks for it, which shouldn't affect anything in a bad way because the game doesn't allow hullmods to be installed twice regardless of if isApplicableToShip gets overridden. Here's an example of the change:
Spoiler
@Override
public boolean isApplicableToShip(ShipAPI ship) {
return
((!ship.getVariant().getHullMods().contains("EnergyAbsorbers")) &&
(!ship.getVariant().getHullMods().contains("comp_armor")) &&
(!ship.getVariant().getHullMods().contains("Deflectors")));
}
I tested it on an RSF battleship in the simulator and now Energy Absorbers, comp armor, and Deflectors can't be installed alongside it, as intended, but Powered Armour doesn't accidentally break itself.