package cn.academy.ability.api.context;
import cn.lambdalib.annoreg.core.AnnotationData;
import cn.lambdalib.annoreg.core.LoadStage;
import cn.lambdalib.annoreg.core.RegistryType;
import cn.lambdalib.annoreg.core.RegistryTypeDecl;
import com.google.common.base.Throwables;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.lang.reflect.Constructor;
@SideOnly(Side.CLIENT)
@RegistryTypeDecl
public class ClientContextRegistry extends RegistryType {
public ClientContextRegistry() {
super(RegClientContext.class, "RegClientContext");
setLoadStage(LoadStage.INIT);
}
@SuppressWarnings("unchecked")
@Override
public boolean registerClass(AnnotationData data) throws Exception {
for (Constructor ctor : data.getTheClass().getDeclaredConstructors()) {
if (ctor.getParameterCount() == 1 &&
Context.class.isAssignableFrom(ctor.getParameterTypes()[0])) {
ctor.setAccessible(true);
Context.clientTypes.put(((RegClientContext) data.anno).value(), ctx -> {
try {
return (ClientContext) ctor.newInstance(ctx);
} catch (Exception ex) {
throw Throwables.propagate(ex);
}
});
return true;
}
}
throw new IllegalArgumentException("No appropriate constructor found for " + data.getTheClass());
}
}