package landmaster.landcraft.util;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

import java.lang.annotation.*;

@Retention(RUNTIME)
@Target({ TYPE, METHOD })
@Repeatable(OptionalM.List.class)
public @interface OptionalM {
	String[] modids();
	String[] stripped() default {}; // unused for method
	
	@Retention(RUNTIME)
	@Target({ TYPE, METHOD })
	public static @interface List {
		OptionalM[] value();
	}
}

@@ -166,16 +166,123 @@
 ion.*;%0A%0A
+/**%0A * Annotates a class to strip certain interfaces from, or a method to strip.%0A * @author Landmaster%0A */%0A
 @Retenti
@@ -388,82 +388,615 @@
  %7B%0A%09
-String%5B%5D modids();%0A%09String%5B%5D stripped() default %7B%7D; // unused for method%0A%09
+/**%0A%09 * If any of these mods are loaded, then the interfaces/method remain(s).%0A%09 * @return The modids such that if any are loaded, then the interfaces/method are not removed.%0A%09 */%0A%09String%5B%5D modids();%0A%09/**%0A%09 * If %7B@link OptionalM%7D is annotated on a class, then these interfaces are stripped%0A%09 * from the class if none of the mods in %7B@link #modids()%7D are loaded. This field is%0A%09 * silently ignored if annotated on a method.%0A%09 * @return The interfaces to strip.%0A%09 */%0A%09String%5B%5D stripped() default %7B%7D; // unused for method%0A%09%0A%09/**%0A%09 * Containing annotation type for %7B@link OptionalM%7D.%0A%09 * @author Landmaster%0A%09 */
 %0A%09@R

Improve documentation