Reduced visibility of injectors to allow for obfuscation. In a mixin environment, the processor can only obfuscate members that are not publically accessible. By reducing the visibility, we are allowing Mixin to obfuscate these members, reducing the risk of conflict with other members injected by third-party mixins.
Reduced visibility of mixin classes to discourage accidental references. This is common practice for mixins, simply for the fact that it makes these classes inaccessible at source level to other code in the workspace, preventing accidental references to mixin classes (which cannot be referenced at runtime). Applying the abstract modifier helps further as an indicator that these classes are not intended for use by anything other than the Mixin annotation processor.
Extended hierarchy of mixin classes to include superclasses of the target, allowing for stricter matching at runtime, and the use of superclass methods
You can learn more about Mixin hierarchy here: https://github.com/SpongePowered/Mixin/wiki/Introduction-to-Mixins---Understanding-Mixin-Architecture And the application process here: https://github.com/SpongePowered/Mixin/wiki/Flippin'-Mixins,-how-do-they-work%3F#3321-creating-the-applicator-and-pre-processing-mixins