Marteau qui repousse les entités



  • Salut,

    j'aimerai faire un Marteau qui repousse les entités dans un rayon de 3 blocs autour de l'endroit ou le joueur fait un click droit au sol.
    J'ai donc créé mon item ainsi que ma fonction onItemRightClick mais je ne sais pas quoi mettre dans celle-ci.

    Pouvez vous m'aider ?



  • Salut,
    Plutôt onItemUse, ensuite AxisAlignedBB, et pour finir un appel de EntityLivingBase#knockback sur toutes les entités environnantes 😉



  • J'ai fait ça à partir d'un autre code :

    
    @Override
    public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World world, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_)
    {
    AxisAlignedBB axisalignedbb = this.boundingBox.expand(4.0D, 2.0D, 4.0D);
    List list1 = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb);
    if(list1 != null && !list1.isEmpty())
    {
    Iterator iterator = list1.iterator();
    
    while(iterator.hasNext())
    {
    EntityLivingBase entitylivingbase = (EntityLivingBase)iterator.next();
    entitylivingbase.knockBack(p_70653_1_, p_70653_2_, p_70653_3_, p_70653_5_);
    }
    }
    return false;
    }
    
    

    Mais j'ai encore deux problèmes :

    • this.boundingBox n'existe pas pour les items
    • Je ne connais pas les arguments pour la fonction knockback()


  • Les items n'ont pas de boîte de collision, tu ne savais pas ??
    Les arguments, l'entité attaquant, les dégâts du coup en int, et pour les deux derniers double, voici vite fait une petite explication trouvée sur internet:

    [font=Helvetica, Arial,The doubles d and d1 are basically just used the calculate the ratio between x and z axis movement proportional to the direction you hit it from. Notice the part where both x and z motion are reduced. You can just change the f1 value which multiples the value that is being subtracted from both motions. Smaller f1 = bigger movement. You can also change the y if you want.]



  • Je le sais, je ne savais pas quoi mettre.
    J'ai donc modifié et fait ceci :

    
    @Override
    public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World world, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_)
    {
    AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox(-2d, 0d, -2d, 2d, 2d, 2d);
    
    List list1 = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb);
    if(list1 != null && !list1.isEmpty())
    {
    Iterator iterator = list1.iterator();
    
    while(iterator.hasNext())
    {
    EntityLivingBase entitylivingbase = (EntityLivingBase)iterator.next();
    entitylivingbase.knockBack(Minecraft.getMinecraft().thePlayer, 0, 1d, 1d);
    }
    return true;
    }
    return false;
    }
    
    

    Mais Mr.Mouton ne bouge pas d'un poil 😕


  • Administrateurs

    this.boundingBox.expand(4.0D, 2.0D, 4.0D);
    ->
    p_77648_2_.boundingBox.expand(4.0D, 2.0D, 4.0D);

    Le mieux serait de renommer l'argument p_77648_2_ en player pour une question de clarté du code.



  • Merci beaucoup robin !