package de.tobiyas.racesandclasses.util.traitutil; import org.bukkit.event.Event; import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.configuration.TraitEventsUsed; import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait; public class TraitBypassCheck { /** * Checks if the class is on the bypass list. * * @param traitClass to check. * @param eventClass to check. * * @return true if it is. */ public static boolean hasBypass(Class<? extends Trait> traitClass, Class<? extends Event> eventClass){ try{ Class<?> toInspect = traitClass; while(toInspect != Object.class){ try{ TraitEventsUsed used = toInspect.getMethod("generalInit").getAnnotation(TraitEventsUsed.class); if(used == null || used.bypassClasses().length == 0) continue; for(Class<? extends Event> clazz : used.bypassClasses()){ if(clazz == eventClass) return true; } }catch(Throwable exp){ continue; }finally{ if(toInspect.getSuperclass() == Object.class|| toInspect.getSuperclass() == null) return false; toInspect = toInspect.getSuperclass(); } } return false; }catch(Throwable exp){ return false; } } }