Posted January 12, 20169 yr So I updated forge about 30 versions and see that now there's a different way of registering entity rendering classes. I don't quite understand it. I tried to do something like this. public class ZylrothRenderManager { public static Map<Class<? extends Entity>, Render<? extends Entity>> entityRenderMap = Maps.<Class<? extends Entity>, Render<? extends Entity>>newHashMap(); public static void init() { RenderManager rm = Minecraft.getMinecraft().getRenderManager(); float shadowSize = 0.5F; /* Animals */ entityRenderMap.put(EntityBadger.class, new RenderBadger(rm, new ModelBadger(), shadowSize)); /* Mobs */ entityRenderMap.put(EntityUnicorn.class, new RenderUnicorn(rm, new ModelUnicorn(), shadowSize)); /* Mounts */ entityRenderMap.put(MountSwiftUnicorn.class, new RenderSwiftUnicorn(rm, new ModelSwiftUnicorn(), shadowSize)); RenderingRegistry.loadEntityRenderers(rm, entityRenderMap); } } (There are a lot more entities, however I cut them out to keep the post shorter) but some entities have render as a different entity. For example the badger, renders as a unicorn. I can't see any reason for this, The init method is called during the PreInitialization phase on the client side. If anyone knows how to properly use the new registry for entity rendering, please share.
January 12, 20169 yr If you look at the implementation of RenderingRegistry.loadEntityRenderers , you'll see that it copies the renderers from RenderingRegistry#entityRenderers into the entityRenderMap argument. It's called in FMLClientHandler#finishMinecraftLoading to load mod entity renderers into the vanilla map. Use RenderingRegistry#registerEntityRenderingHandler to register an entity renderer. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
January 12, 20169 yr Author If you look at the implementation of RenderingRegistry.loadEntityRenderers , you'll see that it copies the renderers from RenderingRegistry#entityRenderers into the entityRenderMap argument. It's called in FMLClientHandler#finishMinecraftLoading to load mod entity renderers into the vanilla map. Use RenderingRegistry#registerEntityRenderingHandler to register an entity renderer. That's what I did use, however it became deprecated recently (I know I can still use it, however if it's going to be removed in 1.9 like it says, I might as well switch over to the new thing.) Apparently the new thing is the exact same method, except the second argument is an IRenderFactory. I do not have a clue as to what that may be, so if you can give an example, that would help.
January 12, 20169 yr An IRenderFactory is just a class that creates a new instance of the appropriate Render class. Instead of creating the Render instance as you register it, you create an IRenderFactory that creates the Render instance later in the load process. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
January 12, 20169 yr An IRenderFactory is just a class that creates a new instance of the appropriate Render class. Instead of creating the Render instance as you register it, you create an IRenderFactory that creates the Render instance later in the load process. I've always hated the factory method... it does have certain use cases, but I think it is way overused, such as in this case. I mean really, what was wrong with creating the new instance yourself? Now you have to create a factory instance to create your render instance, gaining what? Nothing, imo. Here's a fun read about that http://i.imgur.com/NdrFdld.png[/img]
January 12, 20169 yr Heh, I like it because I don't have to worry where I get the RenderManager from - it just gets supplied to my lambda
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.