Example usage for net.minecraftforge.fml.client.registry IRenderFactory IRenderFactory

List of usage examples for net.minecraftforge.fml.client.registry IRenderFactory IRenderFactory

Introduction

In this page you can find the example usage for net.minecraftforge.fml.client.registry IRenderFactory IRenderFactory.

Prototype

IRenderFactory

Source Link

Usage

From source file:com.gmail.socraticphoenix.forge.randore.proxy.RandoresClientProxy.java

License:Open Source License

@Override
@SideOnly(Side.CLIENT)// w w  w  .  j  a va  2s. com
public void preInit(FMLPreInitializationEvent ev) throws IOException, IllegalAccessException {
    FlexibleTextureRegistry.setTextureSeed(Randores.getInstance().getPreviousSeed());
    Logger logger = Randores.getInstance().getLogger();
    logger.info("Randores is running client-side.");
    Configuration configuration = Randores.getInstance().getConfiguration();
    configuration.load();
    logger.info("Loading languages...");
    for (String langFile : RandoresResourceManager
            .getLines(Minecraft.getMinecraft().getResourceManager().getResource(LANG_DICT).getInputStream())) {
        ResourceLocation location = new ResourceLocation("randores:resources/lang/" + langFile + ".lang");
        IResource resource = RandoresClientSideRegistry.getResource(location);
        List<String> lines = RandoresResourceManager.getLines(resource.getInputStream());
        String lang = RandoresResourceManager.getFileName(resource.getResourceLocation()).replace(".lang", "");
        for (String line : lines) {
            if (line.contains("=")) {
                String[] pieces = line.split("=", 2);
                RandoresTranslations.register(lang, pieces[0], pieces[1]);
            }
        }
    }
    logger.info("Loaded languages.");
    logger.info("Hacking resource packs...");
    List<Field> candidates = new ArrayList<Field>();
    for (Field field : Minecraft.class.getDeclaredFields()) {
        if (field.getType() == List.class && field.getGenericType() instanceof ParameterizedType) {
            ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
            if (parameterizedType.getActualTypeArguments().length == 1
                    && parameterizedType.getActualTypeArguments()[0] == IResourcePack.class) {
                candidates.add(field);
            }
        }
    }
    logger.info("Number of candidates: " + candidates.size());
    if (candidates.size() == 1) {
        Field field = candidates.get(0);
        boolean accessible = field.isAccessible();
        field.setAccessible(true);
        try {
            List<IResourcePack> packs = (List<IResourcePack>) field.get(Minecraft.getMinecraft());
            packs.add(new RandoresLazyResourcePack());
            packs.add(new RandoresArmorResourcePack());
            logger.info("Successfully added packs to list, refreshing list");
            Minecraft.getMinecraft().refreshResources();
            logger.info("Successfully hacked default resource packs.");
        } catch (IllegalAccessException e) {
            throw e;
        } finally {
            field.setAccessible(accessible);
        }
    } else {
        throw new IllegalStateException("Fatal error, expected 1 candidate, but found " + candidates.size());
    }
    logger.info("Registering entity renders...");
    RenderingRegistry.registerEntityRenderingHandler(RandoresArrow.class, new IRenderFactory<RandoresArrow>() {
        @Override
        public Render<? super RandoresArrow> createRenderFor(RenderManager manager) {
            return new RenderTippedArrow(manager);
        }
    });
    logger.info("Finished registering entity renders.");
}