Lance



  • Hello,je voudrais faire une lance,pas une lance de lancer 😛
    du coup j'ai chercher dans le code source et sur d'autre mod.. j'ai rien trouvé ou alors les fonction ne marchaient pas…
    Bref je voudrais que ma lance touche 1 bloc plus loins que les items normal.
    Merci d'avance 😄


  • Rédacteurs

    Tu veux dire que tu pourrai taper de plus loin ?



  • Exactement, taper une entité plus loin que la normal…J'ai regardé le src de Balkons qui a une lance,a part une fonction que j'ai essayé qui marche pas,je vois pas comment il a fait....
    lien du github https://github.com/Ckathode/balkons-weaponmod/tree/master/src/main/java/ckathode/weaponmod/item


  • Correcteurs

    Si tu parles du extended reach, ça vient de son interface IExtendedReachItem



  • oui justement il y a une fonction qui j'ai essayer,elle ne marche pas


  • Rédacteurs

    Il fait tout là dedans, à chaque tick il vérifie si swingProgressInt == 1 (sûrement le mouvement du bras lorsque l'on frappe et 1 doit désigner la fin du mouvement) après il vérifie si le joueur à un item dans sa main qui implémente IExtendedReachItem et dans ce cas il récupère l'entité visé jusqu'à un maximum de "getExtendedReach" blocs devant le joueurs et il l'attaque si elle est pas nul (l'entité et en fait une MovingObjectPosition mais bon)
    https://github.com/Ckathode/balkons-weaponmod/blob/cda820ed2a5e2a3682f3846f3d89283803415141/src/main/java/ckathode/weaponmod/WMClientEventHandler.java



  • Je pense qu'il y a plus simple :

        protected MovingObjectPosition getMovingObjectPositionFromPlayer(World worldIn, EntityPlayer playerIn, boolean useLiquids)
        {
            float f = playerIn.prevRotationPitch + (playerIn.rotationPitch - playerIn.prevRotationPitch);
            float f1 = playerIn.prevRotationYaw + (playerIn.rotationYaw - playerIn.prevRotationYaw);
            double d0 = playerIn.prevPosX + (playerIn.posX - playerIn.prevPosX);
            double d1 = playerIn.prevPosY + (playerIn.posY - playerIn.prevPosY) + (double)playerIn.getEyeHeight();
            double d2 = playerIn.prevPosZ + (playerIn.posZ - playerIn.prevPosZ);
            Vec3 vec3 = new Vec3(d0, d1, d2);
            float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI);
            float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI);
            float f4 = -MathHelper.cos(-f * 0.017453292F);
            float f5 = MathHelper.sin(-f * 0.017453292F);
            float f6 = f3 * f4;
            float f7 = f2 * f4;
            double d3 = 5.0D;
            if (playerIn instanceof net.minecraft.entity.player.EntityPlayerMP)
            {
                d3 = ((net.minecraft.entity.player.EntityPlayerMP)playerIn).theItemInWorldManager.getBlockReachDistance();
            }
            Vec3 vec31 = vec3.addVector((double)f6 * d3, (double)f5 * d3, (double)f7 * d3);
            return worldIn.rayTraceBlocks(vec3, vec31, useLiquids, !useLiquids, false);
        }
    

    Cette fonction est dans la classe Item et d'après ce que j'ai compris, d3 est ce que tu cherches, tu n'as plus qu'à Override la fonction et changer d3.



  • @AymericRed –> non ça marche pas D::

    je vais essayer de faire comme dans l'autre mod...



  • Oui essaye plutôt comme ça, parce qu'en fait c'est juste pour les blocs et c'est autre chose pour les entitées (qui n'est pas modifiable) 🙂



  • Ouais non j'ai essayer et ça n'a pas marcher…. hmm je vois pas d'où ça peut venir(c'est surtout ça le probleme quand on utilise le code d'une autre personne lel)

    Enfin Bref..je crois que je vais plutot abandonnée pour ce coté la.



  • Crées ton raycast entity, dans la méthode onUpdate de ton item, tu check si l'entity observée par le joueur n'est pas null et si [font=Ubuntu, sans-serifswingProgressInt == 1 (j'ai pas vérifié si ça indiquait vraiment les moments où le joueur frappait ou pas). Sinon à la place de swingProgressInt == 1, tu peux te placer dans l'event MouseEvent et vérifier quand le clic gauche est appuyé. Si toutes ces conditions sont réunies, tu vérifies les coords de l'entity en question et celles du joueur de manière a calculer la distance qui vous sépare. Ainsi tu pourras ou pas lui infliger des dégâts via la méthode attackEntityFrom =)]



  • Ou sinon une autre méthode, plus simple, tu remplace le PlayerControllerMP de Minecraft et tu modifie la valeur de la fonction getBlockReachDistance en fonction de l'item (testé et ça marche très bien)


  • Administrateurs

    C'est peut-être même possible via réflexion. Plus simple que remplacer une classe et plus propre.



  • Oui pas faux mais comme j'ai pas trop de connaissances là dedans… 🙂



  • Occupe toi déjà de la dessiner dans l'event, ensuite on verra pour le reste.


  • Rédacteurs

    Tu parles de la main là ?! Mdr 😛 C'est pas le même sujet



  • Oups, je suis vraiment paumé moi ^^'


Log in to reply