Erreur lors de l'annulation d'une touche



  • Bonjour,
    Je cherche pour l'exemple ici à empêcher le joueur d'avancer si jamais il appuie sur la touche correspondante. Cependant quand la condition est réunie et que j'appuie sur le touche en question le jeu crash.

    Comment cela se fait-il ?

    Merci d'avance



  • Salut, tu crash tout simplement car tu tentes de cancel un event qui n'est pas cancelable, comme t'auras pu le voir sur cette liste:
    https://www.minecraftforgefrance.fr/forge-events.php

    La solution ici sera de set ses motions à 0 (client side), ou alors de coder ça uniquement server side avec un attribute movementSpeed mis à 0D.



  • @'Plaigon':

    Salut, tu crash tout simplement car tu tentes de cancel un event qui n'est pas cancelable, comme t'auras pu le voir sur cette liste:
    https://www.minecraftforgefrance.fr/forge-events.php

    La solution ici sera de set ses motions à 0 (client side), ou alors de coder ça uniquement server side avec un attribute movementSpeed mis à 0D.

    D'accord merci. Comment set les motions à 0 ? Parce que j'y ai pensé en voyant l'erreur comme quoi c'était pas cancellable dans les logs mais justement je sais pas comment faire…

    EDIT : J'ai fait cela :

    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onKeyEvent(InputEvent.KeyInputEvent event) {
    if (Minecraft.getMinecraft().gameSettings.keyBindForward.isPressed()) {
    if(PacketThirdPerson.Toggle == true) {
    mc.thePlayer.motionZ = 0;
    mc.thePlayer.motionY = 0;
    mc.thePlayer.motionX = 0;
    }
    }
    
    }
    

    J'ai cette erreur dans les logs : "Unexpected error"



  • Les motions (ou mouvements, en français), sont représentés par 3 variables pour chaque axe, inscrits dans la classe net.minecraft.entity.Entity. Donc si tu as une instance de ton joueur, tu pourras faire ceci:

    
    player.motionX = 0D;
    player.motionY = 0D;
    player.motionZ = 0D;
    
    


  • @'Plaigon':

    Les motions (ou mouvements, en français), sont représentés par 3 variables pour chaque axe, inscrits dans la classe net.minecraft.entity.Entity. Donc si tu as une instance de ton joueur, tu pourras faire ceci:

    
    player.motionX = 0D;
    player.motionY = 0D;
    player.motionZ = 0D;
    
    

    Ok donc j'ai fais ça comme ça :

           private Minecraft mc;
    
           @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onKeyEvent(InputEvent.KeyInputEvent event) {
    if (Minecraft.getMinecraft().gameSettings.keyBindForward.isPressed()) {
    if(PacketThirdPerson.Toggle == true) {
    mc.thePlayer.motionX = 0D;
    mc.thePlayer.motionY = 0D;
    mc.thePlayer.motionZ = 0D;
    }
    }
    
    }
    

    Et toujours la même erreur quand je presse la touche : "Unexpected error"



  • C'est quoi ça: PacketThirdPerson.Toggle ? On peut en savoir + ?
    File le crash, ça aide toujours 😉



  • @'Plaigon':

    C'est quoi ça: PacketThirdPerson.Toggle ? On peut en savoir + ?
    File le crash, ça aide toujours 😉

    Pour le PacketThirdPerson.Toggle c'est une condition que j'ai ajoutée quand le mode 3ème personne est activé chez le joueur.
    Cependant, ça n'a pas d'incidence car même si j'enlève cette ligne j'ai la même erreur.



  • Possible d'avoir ta classe HUDRender ? Et pour check ceci, nullement besoin de ton boolean, minecraft a déjà une variable pour: Minecraft.getMinecraft().gameSettings.thirdPersonView



  • @'Plaigon':

    Possible d'avoir ta classe HUDRender ? Et pour check ceci, nullement besoin de ton boolean, minecraft a déjà une variable pour: Minecraft.getMinecraft().gameSettings.thirdPersonView

    Oui je remplacerai ma variable par Minecraft.getMinecraft().gameSettings.thirdPersonView.

    En ce qui concerne ma classe il n'y a rien d'autre à l'intérieur à part le code que j'ai envoyé pour le moment



  • Le crash indique cette ligne-là:
    fr.gtalife.overlay.HUDRender.onKeyEvent(HUDRender.java:70)

    Donc il serait intéressant soit de nous la remonter, soit de nous filer l'entièreté de ta classe.



  • @'Plaigon':

    Le crash indique cette ligne-là:
    fr.gtalife.overlay.HUDRender.onKeyEvent(HUDRender.java:70)

    Donc il serait intéressant soit de nous la remonter, soit de nous filer l'entièreté de ta classe.

    Ah oui pardon.
    J'ai enlevé la variable c'est déjà ça, et la ligne 70 correspond à "mc.thePlayer.motionX = 0D;"

    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onKeyEvent(InputEvent.KeyInputEvent event) {
    if (Minecraft.getMinecraft().gameSettings.keyBindForward.isPressed()) {
    if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) {
    mc.thePlayer.motionX = 0D;
    mc.thePlayer.motionY = 0D;
    mc.thePlayer.motionZ = 0D;
    }
    }
    
    }
    


  • Sûrement car ta variable mc est null, utilise plutôt Minecraft.getMinecraft().thePlayer



  • @'Plaigon':

    Sûrement car ta variable mc est null, utilise plutôt Minecraft.getMinecraft().thePlayer

    J'ai déjà essayé, même problème



  • Bon, file ta classe entière + ton crash report le + récent, je vais tester de mon côté



  • @'Plaigon':

    Bon, file ta classe entière + ton crash report le + récent, je vais tester de mon côté

    C'est fait en MP



  • Je n'aurai pas le temps de look ce soir, tu pourrais l'envoyer ici, + de membres t'aideront ainsi 😉