Résolu IItemRender
-
Voila dans mon mod se trouve un système de tiers pour les épées et donc dans la texture ont voit la tiers. Donc pour que les adversaires ne sachent pas qu’elle est le tiers de l’épée j’ai voulu mettre un autre rendu mais la texture ne s’affiche pas :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { protected modelewilitesword model; protected static ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); public EwiliteSwordLvloneTechneRender() { model = new modelewilitesword(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { switch(type) { case EQUIPPED_FIRST_PERSON: { GL11.glPushMatrix(); GL11.glRotatef(1F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(1.0F, 2.0F, 1.5F); Minecraft.getMinecraft().renderEngine.bindTexture(texture); model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); } default: break; } } }
public class modelewilitesword extends ModelBase { public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); } }
et le proxy :
public class clientproxy extends commonproxy { public void registerRender() { RenderingRegistry.registerEntityRenderingHandler(EntityObsidianBoat.class, new RenderObsidianBoat()); MinecraftForgeClient.registerItemRenderer(ewifaction.ewiliteswordlvlone, new EwiliteSwordLvloneTechneRender()); } }
Mais le problème est qu’un f5 la main apparaît vide
Merci d’avance pour votre aide, bonne soirée/journée. -
Dans handleRenderType tu as mis true pour EQUIPPED mais dans renderItem tu as mis EQUIPPED_FIRST_PERSON.
Du-coup il appel seulement la fonction renderItem pour le cas EQUIPPED mais il n’y a rien dans ce cas, donc tu n’obtiens aucun rendu. -
je penser donc que se code devrait fonctionner mais le rendu est toujours vide :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { protected modelewilitesword model; protected static ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); public EwiliteSwordLvloneTechneRender() { model = new modelewilitesword(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { switch(type) { case EQUIPPED: { GL11.glPushMatrix(); GL11.glRotatef(1F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(1.0F, 2.0F, 1.5F); Minecraft.getMinecraft().renderEngine.bindTexture(texture); model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); } default: break; } } }
-
Personne ne sait pourquoi mon rendu est vide ? ( désolé tu double poste )
-
Tu peux envoyer la classe de ton modèle ?
-
Oui la voici :
public class modelewilitesword extends ModelBase { public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); } }
-
Ton modèle est complètement vide, c’est pour ça que rien ne se rend.
-
Que dois je mettre dans mon render pour qu’il ne soit plus vide ?
-
Si tu veux le rendu normal d’un item, c’est ça qu’il te faut : https://www.minecraftforgefrance.fr/showthread.php?tid=556&pid=6186#pid6186
(sans le
GL11.glScalef(2F, 2F, 2F);
ni le glTranslatef et les rotates avant la fonction
this.renderItem(living, item, renderPass);
si tu veux l’avoir avec une taille normal). -
voila se que j’ai fait :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { protected modelewilitesword model; protected static ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); public EwiliteSwordLvloneTechneRender() { model = new modelewilitesword(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { switch(type) { case EQUIPPED: { EntityLivingBase living = (EntityLivingBase)data[1]; int renderPass = item.getItem().requiresMultipleRenderPasses() ? 1 : 0; this.renderItem(living, item, renderPass); GL11.glPopMatrix(); break; } default: break; } } private void renderItem(EntityLivingBase living, ItemStack item, int renderPass) { TextureManager texturemanager = FMLClientHandler.instance().getClient().getTextureManager(); GL11.glPushMatrix(); IIcon icon = living.getItemIcon(item, renderPass); if(icon == null) { GL11.glPopMatrix(); return; } Tessellator tessellator = Tessellator.instance; float f = ((IIcon) icon).getMinU(); float f1 = ((IIcon) icon).getMaxU(); float f2 = ((IIcon) icon).getMinV(); float f3 = ((IIcon) icon).getMaxV(); float f4 = 0.0F; float f5 = 0.3F; float f6 = 1.5F; ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); if(item.hasEffect(renderPass)) { texturemanager.bindTexture(texture); } } }
j’ai bien un rendu mais il s’agit du rendu de base de mon épée pas le nouveau savez-vous pourquoi ?
-
Peut être parce que tu ne comprends pas ton code et que tu bind la texture après le rendu au lieu de le faire avant ^^
-
En effet je ne comprend pas vraiment ce code ,j’ai beau chercher, je ne trouve pas comment modifier le code pour corriger le problème.
-
voila se que j’ai réussi à faire :
public class EwiliteSwordLvloneTechneRender implements IItemRenderer { private static final ResourceLocation texture = new ResourceLocation(ewifaction.MODID, "textures/items/t.png"); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { switch(type) { case EQUIPPED: return true; default: return false; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return false; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object… data) { switch(type) { case EQUIPPED: { EntityLivingBase living = (EntityLivingBase)data[1]; int renderPass = item.getItem().requiresMultipleRenderPasses() ? 1 : 0; GL11.glPushMatrix(); this.renderItem(living, item, renderPass); GL11.glPopMatrix(); break; } default: break; } } public void renderItem(EntityLivingBase living, ItemStack stack, int pass) { TextureManager texturemanager = FMLClientHandler.instance().getClient().getTextureManager(); GL11.glPushMatrix(); IIcon icon = living.getItemIcon(stack, pass); if(icon == null) { GL11.glPopMatrix(); return; } texturemanager.bindTexture(texture); Tessellator tessellator = Tessellator.instance; float f = icon.getMinU(); float f1 = icon.getMaxU(); float f2 = icon.getMinV(); float f3 = icon.getMaxV(); float f4 = 0.0F; float f5 = 0.3F; GL11.glEnable(GL12.GL_RESCALE_NORMAL); float f6 = 1.5F; ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F); if(stack.hasEffect(pass)) { GL11.glDepthFunc(GL11.GL_EQUAL); GL11.glDisable(GL11.GL_LIGHTING); texturemanager.bindTexture(texture); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); float f7 = 0.76F; GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glPushMatrix(); float f8 = 0.125F; GL11.glScalef(f8, f8, f8); float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; GL11.glTranslatef(f9, 0.0F, 0.0F); GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glScalef(f8, f8, f8); f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; GL11.glTranslatef(-f9, 0.0F, 0.0F); GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F); GL11.glPopMatrix(); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDepthFunc(GL11.GL_LEQUAL); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } }
Quand je met un chemin de texture invalide j’obtient un carré noir comme prévue mais quand je met un chemin valide le rendu deviens vide.