Faire un stick qui bouge le joueur



  • Bonnnjour/Bonnnsoir !

    Juste pour commencer, OUIII je suis encore en 1.7.10 pour TESTER des choses, alors pas de commentaires au sujet de ma version de minecraft toute pourrite x)

    Alors voilà, j'ai essayé de créer un item qui ''onItemRightClick'' fait BOUGER le joueur, c'est à dire qu'il le fait sauter de quelques blocks et avancer en même temps pour faire une belle parabole. Le problème est que j'ai essayé toutes les combinaisons de player.motionX/Y/Z, player.move, etc. Rien ne marche et je ne comprend pas trop… Alors voilà.

    Je vous donne la classe de mon item (sachant que ma classe principale déclare mon item comme un item normal).

    package fr.breakfight.fatalymod.items;
    
    import com.sun.xml.internal.stream.Entity;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class StickDeJump extends Item{
    
    public StickDeJump(){
    this.setMaxDamage(10);
    this.maxStackSize = 1;
    }
    
        @Override
        public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player)
        {
            if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT 
            {
            player.moveEntity(10, 20, 0);
            player.motionX = 10;
            }
            itemStack.damageItem(1, player); //Ici, nous enlevons 1 de durabilité a l'item
            return itemStack;
        }
    
    }
    
    

    Je voulais aussi savoir, si c'est possible de mettre un jumpNoFall quand le joueur aura fini sa chute avec le stick. 
    Merci beaucoup ! 😄



  • Mmh, je ne suis pas certain de pouvoir t'aider, mais j'avoue qu'il y a quelque chose qui me dérange.
    Déjà, quand tu dis que ça ne fonctionne pas, ça veut dire que quand tu fais clic droit il ne se passe rien, où que ça ne bouge pas comme tu le souhaites ? C'est complètement différent, et les sources du problèmes également.

    Pour le jumpNoFall, je n'en sais rien, mais tu pourrais vérifier que lorsque ton joueur prend des dégâts, ça ne soit pas à cause du stick, justement. Par exemple, tu as un bool que tu mets sur true quand tu fais clic droit, et quand ton joueur prend des dégâts, si ça vient de la chute, tu le mets sur false et annule les dégâts. Après faut penser qu'il est possible, selon la map, qu'il ne prenne pas de dégâts, ou que ça prenne plus de temps que prévu, …

    C'est tout ce que je peux te proposer, je ne suis pas très doué pour ça, mais c'est une piste à explorer, certes naïve, mais qui peut fonctionner.


  • Administrateurs

    Le déplacement du joueur c'est géré côté client et le serveur est notifié des déplacements, donc il faudrait retirer le !world.isRemote.



  • Et pour retirer les dégâts de chute, tu peux set la variable fallDistance à 0, peu avant la chute.



  • Quelqu'un ayant lu mon tutoriel !!! :-3 <fête> 
    Sinon je suis d'accord avec robin, les mouvements ce font côté serveur. Et le fall, tu peu peut-être rajouter pendant 3 secondes l'effet résistance au joueur, comme ça pas de dégâts  :s</fête>



  • Pas de dégât sûrement, mais très certainement l'animation de la prise de dommage (effet sur l'écran, son, barre des coeurs qui bouge, etc..), du coup pas très esthétique. Non, la seule solution est d'utiliser la variable fallDistance.



  • Ouais j'y avais pas pensé pour la propreté des choses, je suis entièrement d'accord avec toi ! Pour la fallDistance



  • Déjà, merci à vous 4 de vos réponses ! Je vais essayer quelques petits trucs selon vos conseils et je vous dis si ça marche ! Merci beaucoup :d



  • Alors, as tu réussi ?



  • Oui ! J'ai seulement enlevé le if(!world.isRemote)…
    Parcontre, je ne sais pas si ce serait possible de faire bouger le joueur en direction d'ou il regarde, c'est à dire qu'il jump(ça c'est correct), mais aussi avancer, soit se fait propulser de genre une dizaine de block vers là ou il regarde. Le player.motionX ne marche pas, puisque forcément il le fait bouger en direction des X +, donc pas forcément ou le joueur regarde...

    Pour le player.fallDistance = 0, ça ne marche pas 😕

    Voilàààà



  • Où as-tu mis le fallDistance ?



  • J'ai essayé de le mettre à la même place que le player.motion, soit sans le if(!world.isRemote) et j,ai essayé de le mettre dans la balise du if…



  • Sinon tu peux utiliser l'event LivingFallEvent et le cancel si le joueur vient de sauter avec ton item.



  • Effectivement + facile d'utiliser l'event.
    Car pour le fallDIstance, il faudrait être dans une méthode tickée, et appelé au moment de la chute, or le onItemRightClick n'est pas le bon endroit.