[Débutant] Problème avec les Extended Entity Properties



  • Bonjour à tous,
    J'écris que ce post car depuis quelques jours j'essaie de résoudre un problème sur mon mod concernant les Extended Entity Properties.
    Pour vous replacer dans le contexte j'essaie de créer un Mod sur le jeu php en temps réel Hordes. Pour ceux qui ne connaissent pas vous devez effectuer certaines actions qui coutent un nombre de point d'action définis pour lutter contre des zombies. Et c'est justement sur cette utilisation de points d'action que j'ai quelques problèmes :

    • Le joueur commence avec 6 point d'action (PA).
    • Lorsque le joueur commence à casser un block, un message s'affiche dans la console indiquant le nombre de PA du joueur (6 en l'occurence).
    • Lorsqu'il casse un block avec une tile entity que j'ai crée, l'event se lance et le joueur perd 1 PA.
    • Probleme : Lorsque le joueur se met à casser un autre block la console indique qu'il a toujours 6 PA.

    Je vous mets en spoil les différentes classes :

    Classe Principale :

    Classe EventHandlerCommun :

    Classe ExtendedEntityPropPA :

    Classe d'un block (ici CubeSouche)

    Classe PacketPA

    Voilà, je pense que vous avez tous les éléments, je vous remercie d'avance pour l’intérêt que vous porterez à mon post.
    Je précise que j'utilise la version 10.13.0.1180 de forge et la version 1.5.0.113 de FFMT-libs.
    Comme je l'ai indiqué dans le titre du post, je suis encore débutant, et je m'excuse d'avance car mon code est un peu (…beaucoup) "brouillon" ^^' Du coup si vous avez des conseils sur mon code en général, n'hésitez pas, je suis preneur !

    Je me tiens à votre disposition si vous avez besoin d'éléments supplémentaires.

    Encore merci d'avance,
    Myrilandel


  • Administrateurs

    EventHandlerCommun :

    ​ EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
    
    

    Ou comment casser la compatibilité serveur …
    Tu as event.getPlayer() pour avoir le joueur.

    Et je vois pas d'autre problème, mais c'est surement lui le problème puisque la tu modifie côté client ce que doit être modifié côté serveur. Après l'autre problème peut être une histoire de synchronisation client / serveur.



  • Bonjour Robin4002,

    Merci d'avoir pris de ton temps pour regarder tout ça.

    J'ai modifié la ligne en

    EntityPlayer player = event.getPlayer();
    

    Mais maintenant le jeu crash et le rapport d'erreur pointe la classe PacketPA. J'y ai rajouté une ligne de code :

    System.out.println("Enregistrement de "+props+" .");
    

    Et la console retourne "enregistrement de null"

    Ci joint les logs en spoiler :

    Encore merci de ton aide
    Myrilandel


  • Administrateurs

    Tu enregistre où ton ExtendedEntityPropPA  ?



  • Le problème viens du fait que tu n'initialise pas la variable pour le player de base. Regarde la partie Event Handler du tutoriel, tu devrais voir le soucis.

    En gros, tu sauvegarde un props qui est nul, car le joueur ne l'a pas.



  • Je ne suis pas sûr d'avoir bien compris ta question Robin, est-ce que tu pourrais m'en dire un peu plus s'il te plait ? :s

    Salut Gugu42, merci à toi aussi de bien vouloir m'aider.

    J'ai repris ton tutoriel et effectivement j'avais zappé la partie

    @SubscribeEvent
    public void onEntityConstructing(EntityConstructing event)
    {
    if (event.entity instanceof EntityPlayer
    && ExtendedEntityPropPA.get((EntityPlayer) event.entity) == null)
    
    ExtendedEntityPropPA.register((EntityPlayer) event.entity);
    }
    

    A présent le jeu ne crash plus et la console affiche bien :

    Enregistrement de com.myrilandel.hordemod.events.ExtendedEntityPropPA@64ab7aeb .
    

    Mais je retombe sur mon problème initial où le joueur retombe à son nombre de PA initial (6) lorsqu'il se met à casser un autre block 😕


  • Administrateurs

    Quand je disais enregistrer, c'est justement le code que tu as mit et qu'il te manquait, donc ça c'est bon.
    Je vois où est le problème.
    Toujours dans l'event :
    ExtendedEntityPropPA prop = new ExtendedEntityPropPA(player);
    Devrait être :
    ExtendedEntityPropPA prop = ExtendedEntityPropPA.get(player);
    Car sinon tu réinitialise le prop.



  • Punaise je me sens bête pourquoi j'ai pas vu ça plus tôt >.<

    Tout marche à merveille ! Merci beaucoup à tout les deux pour m'avoir accordé de votre temps !

    J'édit mon post en résolu.

    Encore merci pour votre aide et pour tout le boulot que vous faites,

    Myrilandel