1.6.4 Animations arc



  • Bonjour,
    J'ai créé un nouvel arc. Jusque là, tout va bien.
    Les seuls problèmes sont les suivantes:

    • Lorsqu'on vise avec ce nouvel arc, il n'y a pas de zoom (fov).
    • Le rendu lorsqu'on tire avec l'arc ne se fait pas.

    En Vanilla, je sais qu'il faut ajouter notre item dans le RenderPlayer.java, mais sous Forge, je ne sais pas comment faire.
    Voici la class de mon arc: ```java
    package monMod;

    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.enchantment.Enchantment;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityArrow;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.Icon;
    import net.minecraft.world.World;

    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.entity.player.ArrowLooseEvent;
    import net.minecraftforge.event.entity.player.ArrowNockEvent;

    public class ItemBowEmerald extends Item
    {

    private static String[] bowpullname = new String[] {"bow_pull_emerald_0", "bow_pull_emerald_1", "bow_pull_emerald_2"};
    @SideOnly(Side.CLIENT)
    private Icon[] iconbuffer;

    public ItemBowEmerald(int par1)
    {
    super(par1);
    this.maxStackSize = 1;
    this.setMaxDamage(384);
    this.setCreativeTab(CreativeTabs.tabCombat);
    this.setFull3D();
    }

    /**

    • called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
      */
      public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4)
      {
      int j = this.getMaxItemUseDuration(par1ItemStack) - par4;

    ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
    MinecraftForge.EVENT_BUS.post(event);
    if (event.isCanceled())
    {
    return;
    }
    j = event.charge;

    boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;

    if (flag || par3EntityPlayer.inventory.hasItem(Item.arrow.itemID))
    {
    float f = (float)j / 20.0F;
    f = (f * f + f * 2.0F) / 3.0F;

    if ((double)f < 0.1D)
    {
    return;
    }

    if (f > 1.0F)
    {
    f = 1.0F;
    }

    EntityArrow entityarrow = new EntityArrow(par2World, par3EntityPlayer, f * 2.0F);
    entityarrow.setDamage(3.8D);

    if (f == 1.0F)
    {
    entityarrow.setIsCritical(true);
    }

    int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);

    if (k > 0)
    {
    entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    }

    int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);

    if (l > 0)
    {
    entityarrow.setKnockbackStrength(l);
    }

    if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0)
    {
    entityarrow.setFire(100);
    }

    par1ItemStack.damageItem(1, par3EntityPlayer);
    par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

    if (flag)
    {
    entityarrow.canBePickedUp = 2;
    }
    else
    {
    par3EntityPlayer.inventory.consumeInventoryItem(Item.arrow.itemID);
    }

    if (!par2World.isRemote)
    {
    par2World.spawnEntityInWorld(entityarrow);
    }
    }
    }

    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
    return par1ItemStack;
    }

    /**

    • How long it takes to use or consume an item
      */
      public int getMaxItemUseDuration(ItemStack par1ItemStack)
      {
      return 72000;
      }

    /**

    • returns the action that specifies what animation to play when the items is being used
      */
      public EnumAction getItemUseAction(ItemStack par1ItemStack)
      {
      this.setFull3D();
      return EnumAction.bow;
      }

    /**

    • Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
      */
      public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
      {
      ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
      MinecraftForge.EVENT_BUS.post(event);
      if (event.isCanceled())
      {
      return event.result;
      }

    if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Item.arrow.itemID))
    {
    par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
    }

    return par1ItemStack;
    }

    /**

    • Return the enchantability factor of the item, most of the time is based on material.
      */
      public int getItemEnchantability()
      {
      return 1;
      }

    @SideOnly(Side.CLIENT)

    public void registerIcons(IconRegister iconregister)
    {
    iconbuffer = new Icon[bowpullname.length];
    for(int i = 0; i < bowpullname.length; i++)
    {
    iconbuffer* = iconregister.registerIcon("rm:" + bowpullname*);
    }
    itemIcon = iconregister.registerIcon("rm:bowEmerald");
    }

    public Icon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
    {
    if(usingItem != null && usingItem.getItem().itemID == ZexxionMod.bowEmerald.itemID)
    {
    int k = usingItem.getMaxItemUseDuration() - useRemaining;
    if(k >= 18)
    return iconbuffer[2];
    if(k > 13)
    return iconbuffer[1];
    if(k > 0)
    return iconbuffer[0];
    }
    return getIconIndex(stack);
    }

    @SideOnly(Side.CLIENT)

    /**

    • used to cycle through icons based on their used duration, i.e. for the bow
      */
      public Icon getItemIconForUseDuration(int par1)
      {
      return this.iconbuffer[par1];
      }
      }
    
    Voici un screen d'un arc normal: ![](http://coolcraft.fr/images/arc1.png)
    Voici un screen de mon arc: ![](http://coolcraft.fr/images/arc2.png)
    
    J'ai bien ajouté le this.setFull3D();
    
    Je vous remercie d'avance.
    (Désolé pour toutes les demandes d'aides que je fais ^^')


  • Essaye d'extends ton item ItemBow.



  • Ca ne marche pas :s


  • Moddeurs confirmés Rédacteurs Administrateurs

    Étrange, normalement le fait d'hériter de ItemBow devrait corriger le problème vu que dans les fonctions de mc il test si l'item est d'instance ItemBow.
    Sinon il faudrait utiliser l'event de rendu de joueur.



  • Non il est si l'item est item.bow non ?

    else if (itemstack1.itemID == Item.bow.itemID)
    {
    f11 = 0.625F;
    GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
    GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
    GL11.glScalef(f11, -f11, f11);
    GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
    GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
    }
    

  • Moddeurs confirmés Rédacteurs Administrateurs

    Je vais regarder.
    Sinon, enlève le setFull3D ici, il sert à rien comme tu l'as déjà dans le constructeur :

    public EnumAction getItemUseAction(ItemStack par1ItemStack)
    {
    return EnumAction.bow;
    }
    


  • D'accord merci



  • Petit up


  • Moddeurs confirmés Rédacteurs Administrateurs

    http://www.minecraftforgefrance.fr/showthread.php?tid=556&pid=6186#pid6186
    Voila mes recherches pour modifier le rendu en jeu.


Log in to reply