Java 类net.minecraftforge.fml.common.FMLModContainer 实例源码

项目:Pulsar    文件:PulseManager.java   
/**
 * Helper to attach a given object to the mod container event bus.
 *
 * @param obj Object to register.
 */
private void attachToContainerEventBus(Object obj) {
    ModContainer cnt =  Loader.instance().activeModContainer();
    log.debug("Attaching [" + obj + "] to event bus for container [" + cnt + "]");
    try {
        FMLModContainer mc = (FMLModContainer)cnt;
        Field ebf = mc.getClass().getDeclaredField("eventBus");

        boolean access = ebf.isAccessible();
        ebf.setAccessible(true);
        EventBus eb = (EventBus)ebf.get(mc);
        ebf.setAccessible(access);

        eb.register(obj);
    } catch (NoSuchFieldException nsfe) {
        throw new RuntimeException("Pulsar >> Incompatible FML mod container (missing eventBus field) - wrong Forge version?");
    } catch (IllegalAccessException iae) {
        throw new RuntimeException("Pulsar >> Security Manager blocked access to eventBus on mod container. Cannot continue.");
    } catch (ClassCastException cce) {
        throw new RuntimeException("Pulsar >> Something in the mod container had the wrong type? " + cce.getMessage());
    }
}
项目:CustomWorldGen    文件:FMLPreInitializationEvent.java   
/**
 * Get a version.properties file as a {@link Properties} object from the mod file.
 * This can be used to load build-type information
 * such as a unique version number from a properties file shipped as part of the distributable.
 * @return A properties object if one exists, else null
 */
public Properties getVersionProperties()
{
    if (this.modContainer instanceof FMLModContainer)
    {
        return ((FMLModContainer)this.modContainer).searchForVersionProperties();
    }

    return null;
}
项目:InfinityLib    文件:ModEventHandlerHack.java   
@SuppressWarnings("unchecked")
private static void addModEventHandlerMethods(FMLModContainer modContainer) {
    ListMultimap<Class<? extends FMLEvent>, Method> methodMap = getModEventMap(modContainer);
    for(Method method : METHODS) {
        Class<? extends FMLEvent> paramClass = (Class<? extends FMLEvent>) method.getParameterTypes()[0];
        methodMap.put(paramClass, method);
    }
}
项目:InfinityLib    文件:ModEventHandlerHack.java   
@SuppressWarnings("unchecked")
private static ListMultimap<Class<? extends FMLEvent>, Method> getModEventMap(FMLModContainer modContainer) {
    try {
         return (ListMultimap<Class<? extends FMLEvent>, Method>) FIELD.get(modContainer);
    } catch(Exception e) {
        e.printStackTrace();
        //Should not ever happen
        throw new RuntimeException("CAUGHT ERROR WHEN TRYING TO RETRIEVE FMLMODCONTAINER EVENT METHODS MAP");
    }
}
项目:InfinityLib    文件:ModEventHandlerHack.java   
private static Field getField() {
    Field[] fields = FMLModContainer.class.getDeclaredFields();
    for(Field field : fields) {
        if(field.getType() == ListMultimap.class) {
            field.setAccessible(true);
            return field;
        }
    }
    //Should not ever happen
    throw new RuntimeException("COULD NOT RETRIEVE FMLMODCONTAINER EVENT METHODS FIELD");
}
项目:InfinityLib    文件:ModEventHandlerHack.java   
public static void doHack(InfinityMod instance) {
    Loader.instance().getModList().stream()
            .filter(modContainer -> modContainer instanceof FMLModContainer)
            .filter(modContainer -> modContainer.getModId().equals(instance.getModId()))
            .forEach(modContainer -> addModEventHandlerMethods((FMLModContainer) modContainer));
}