Arc en 1.7.2



  • Bonjour, j'aimerais savoir comment faire un arc dans Minecraft 1.7.2 en Modding car depuis qu'on est en 1.7, ça a beaucoup changé.


  • Modérateurs

    bha regarde le code de l'arc non?



  • ça marche mais le problème est que l'animation quand on tire une flèche ne s'active pas.


  • Modérateurs



  • Merci j'y vais y jeter un coup d’œil 😛



  • J'ai regardé mais sa m'a l'air compliqué, j'vais regarder mon ancien arc de la 1.6.4 pour voir toute les différences et voir ce qui ne vas pas. Normalement ça devrait marché sauf si l'item bow a été aussi modifié dans Minecraft 1.7.2.


  • Modérateurs

    Oue espérons pour toi ^^

    Comme je ne modde pas en 1.7 je ne peut t'orienter…



  • Merci ^^

    Je vais de ce pas commencer ma nouvelle idée 😛


    Toujours le même problème 😕
    Mais merci quand même 😉


  • Moddeurs confirmés Rédacteurs Administrateurs



  • Merci Robin4002, j'vais m'inspirer de ton code pour créer un arc, je vais essayer ^^ 😛



  • Après un million d'année de recherches et d’essais j'ai trouvé la solution 😛

    Avant tout, Tu dois déjà avoir ta classe item de l'arc…
    Pour Commencez tu créer une classe, pour moi c'est BowRenderer
    ensuite tu copie/colle ca :

    package com.google.akinarutv.akimod.common.renderer;
    import org.lwjgl.opengl.GL11;
    import org.lwjgl.opengl.GL12;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.entity.EntityClientPlayerMP;
    import net.minecraft.client.renderer.ItemRenderer;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.texture.TextureManager;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.IItemRenderer;
    public class BowRenderer implements IItemRenderer {
    private Minecraft mc;
    private TextureManager texturemanager;
    
    public BowRenderer() {
    this.mc = Minecraft.getMinecraft();
    this.texturemanager = this.mc.getTextureManager();
    }
    @Override
    //HandleRenderType lets forge know if it will render the item in the requested view.
    public boolean handleRenderType(ItemStack item, ItemRenderType type) {
    //You can remove everything after "EQUIPPED" if you only want this class to render the third person item.
    return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON;
    }
    @Override
    //RenderHelpers I don't fully understand, I'd assume they are modifiers, but I've never looked into it.
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
    return false;
    }
    @Override
    //This function decides what to do in rendering an item, whether it's first or third person.
    //Credit to SanAndreasP on minecraftforge forums for this code.
    public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
    EntityClientPlayerMP entity = (EntityClientPlayerMP)data[1];
    GL11.glPopMatrix(); // prevents Forge from pre-translating the item
    if(type == ItemRenderType.EQUIPPED_FIRST_PERSON) {
    this.renderItem(entity, item, 0);
    } else {
    GL11.glPushMatrix();
    // contra-translate the item from it's standard translation
    // also apply some more scale or else the bow is tiny
    float f2 = 3F - (1F/3F);
    GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
    GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
    GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F);
    GL11.glScalef(f2, f2, f2);
    GL11.glTranslatef(-0.25F, -0.1875F, 0.1875F);
    
    // render the item as 'real' bow
    //This is pulled from RenderBiped
    float f3 = 0.625F;
    GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
    GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
    GL11.glScalef(f3, -f3, f3);
    GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
    GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
    
    this.renderItem(entity, item, 0);
    GL11.glPopMatrix();
    }
    GL11.glPushMatrix(); // prevents GL Underflow errors
    }
    
    //This actually renders an Icon to be worked with.
    //All of this code is directly pulled from ItemRenderer.class
    private void renderItem(EntityClientPlayerMP par1EntityLiving, ItemStack par2ItemStack, int par3) {
    {
    //If you for whatever reason aren't registering icons with iconRegister, I'm assuming you'll need to change the code below.
    IIcon iicon = par1EntityLiving.getItemIcon(par2ItemStack, par3);
    if (iicon == null)
    {
    GL11.glPopMatrix();
    return;
    }
    texturemanager.bindTexture(texturemanager.getResourceLocation(par2ItemStack.getItemSpriteNumber()));
    Tessellator tessellator = Tessellator.instance;
    float f = iicon.getMinU();
    float f1 = iicon.getMaxU();
    float f2 = iicon.getMinV();
    float f3 = iicon.getMaxV();
    float f4 = 0.0F;
    float f5 = 0.3F;
    GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    GL11.glTranslatef(-f4, -f5, 0.0F);
    float f6 = 1.5F;
    GL11.glScalef(f6, f6, f6);
    GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
    GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
    GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
    ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F);
    //This checks for enchantments.
    if (par2ItemStack.hasEffect(par3))
    {
    GL11.glDepthFunc(GL11.GL_EQUAL);
    GL11.glDisable(GL11.GL_LIGHTING);
    texturemanager.bindTexture(new ResourceLocation("textures/misc/enchanted_item_glint.png"));
    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);
    }
    }
    }
    
    

    Ensuite, sur ton ClientProxy tu registre ce render donc tu ajoute ça sous registerRender

    MinecraftForgeClient.registerItemRenderer(AkiItemList.diamondBow, new BowRenderer());
    

    Resultat :
    :::


    :::

    J’espère t'avoir aidez. la solution est de SanAndreasP en 1.5 et de Naoticon en sur la 1.6 , et comme c’était pas très différent de la 1.7 j'ai juste réglé deux, trois trucs.Voili Voila. 😉



  • Merci ! J'ai pas encore essayé mais sa devra sûrement marché ^^



  • Tout marche mais les textures ne sont loadés 😢


    Non, ça y est ça marche, j'avais oublier de changer certains trucs de mon arc. 😛


Log in to reply