Posted August 19, 201312 yr If I was to render a mob as a different mob, and I only had a reference to the entity I want to render as, how would I go about doing this?
August 19, 201312 yr I am not sure what you mean, but you could change a mobs name and texture whenever something changes. For example i have a slime that changes colour and name when it size changes. I am the creator of the Soul Forest Mod : http://www.planetminecraft.com/mod/151-soul-forest-10-ores-vines-dimension-mobs-and-more/
August 19, 201312 yr Author If you've ever played old thaumcraft, you'll remember how the corruption could take over mobs like sheep, cows, zombies, etc. I want to do something like that.
August 19, 201312 yr the class "RenderManager" has a hashmap with all entities and their respective render class /** A map of entity classes and the associated renderer. */ public Map entityRenderMap = new HashMap(); /** The static instance of RenderManager. */ public static RenderManager instance = new RenderManager(); private RenderManager() { this.entityRenderMap.put(EntityCaveSpider.class, new RenderCaveSpider()); (some of the code was removed btw) maybe you could just get that render manager and manually override the class you want to render differently ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author ok, here's the code I have so far, but it keeps on rendering with the default renderer. anyone know why? https://github.com/Cortex-Modders/CodeLyokoMod/blob/master/matt/lyoko/render/mobs/RenderXanafiedMob.java https://github.com/Cortex-Modders/CodeLyokoMod/blob/master/matt/lyoko/entities/mobs/EntityXanafiedMob.java
August 19, 201312 yr yeah what i mean was: when the world is corrupted: get a reference to that hashmap (using reflection) then renderMap.put(EntityClass, infectedRenderer) how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr Author I'm still a little confused. I want this to work for all mobs (vanilla or not), so that would require lots of if-else statements if I used that way.
August 19, 201312 yr oh... well you could use the RenderLivingEvent then, cancel the ones that are infected and manually render the infected version how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 19, 201312 yr If you're wanting to just replace the mob with a different one entirely, I'd suggest looking at the code that turns zombie villagers back into regular ones.
August 19, 201312 yr Author If you're wanting to just replace the mob with a different one entirely, I'd suggest looking at the code that turns zombie villagers back into regular ones. I already got that stuff done. I just need to get the rendering side done. oh... well you could use the RenderLivingEvent then, cancel the ones that are infected and manually render the infected version I'll try that.
August 20, 201312 yr Hmm... Cancel the renderer... Maybe give it the new renderer? I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes. I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there
August 20, 201312 yr Author but how? this is what I have for the rendering code so far. @ForgeSubscribe public void onLivingRender(RenderLivingEvent.Pre event) { if(event.entity instanceof EntityXanafiedMob) { EntityXanafiedMob xana = (EntityXanafiedMob) event.entity; if(xana.infectedMob != null) { event.setCanceled(true); } } }
August 20, 201312 yr Author any idea on how I can give it a new renderer once I cancel the default renderer?
August 20, 201312 yr every mob renderer extends render right? well in the constructor of the class which deals with the infected mobs make a hashmap of <Class, Render> then once you get to the point where you know your mob is infected, use the hashmap to get the corresponding Render object and call doRender pseudo code: class someClass{ HashMap<Class, Render> renderMap someClass(){ renderMap.put(EntityXanafiedZombie.class, new RenderXanafiedZombie()); renderMap.put(EntityXanafiedSkeleton.class, new RenderXanafiedSkeleton()); renderMap.put(EntityXanafiedSilverfish.class, new RenderXanafiedSilverfish()); } @ForgeSubscribe handleLivingRender(RenderLivingEvent){ condition condition morecondition Render r = renderMap.get(xanafiedMob.getClass());//get class will return the true class of the object r.doRender(*args*); } } how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 20, 201312 yr Author here's my code for the event handler. it still doesn't work. @ForgeSubscribe public void onLivingRender(RenderLivingEvent.Pre event) { if(event.entity instanceof EntityXanafiedMob) { EntityXanafiedMob xana = (EntityXanafiedMob) event.entity; if(xana.infectedMob != null) { event.setCanceled(true); Render r = RenderManager.instance.getEntityClassRenderObject(xana.infectedMob.getClass()); r.doRender(xana.infectedMob, xana.posX, xana.posY, xana.posZ, xana.rotationYaw, 0.0F); } } }
August 22, 201312 yr if(event.entity instanceof EntityXanafiedMob) Is EntityXanafiedMob a living entity with a renderer ? if(xana.infectedMob != null) Where do you set the infectedMob field ? Render r = RenderManager.instance.getEntityClassRenderObject(xana.infectedMob.getClass()); r.doRender(xana.infectedMob, xana.posX, xana.posY, xana.posZ, xana.rotationYaw, 0.0F); You are using the infectedMob renderer to render the infectedMob field at the position of xana entity. Is that what you want ?
August 27, 201312 yr I got a different way to render 3d armors currently working which is a little bit hard but really nice Thanks to hydroflame First of all dont ever use techne for your 3d . You dont want your player to be a fat cube guy when you wore it it happens a lot . 2nd learn what is wavefront objects . 3rd look at the forge wiki about the tutorial on wavefront objects I promise you this is the best im working on it right now
August 27, 201312 yr Author I just want to use a different renderer based on a variable. I'm not doing armor.
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.