Emuler un player



  • Bonjour,

    J'ai une question qui ne porte pas vraiment sur un bug spécifique mais plutôt sur comment partir sur les bonne bases (je suis tout nouveau dans le monde du modding minecraft). Je m'explique :

    Je souhaite créer un mod qui émule des joueurs de façon réaliste et pouvoir créer une AI qui les contrôle.

    • Si mon entité étends la classe EntityCreature, je n'ai pas le système d'inventaire, … à moins de le recréer manuellement.

    • Si mon entité étends à la place la classe EntityPlayer ou EntityPlayerMP, j'ai réussi à couper court à l'envoi des packets au joueurs fictifs pour éviter les bugs mais malheureusement je n'ai plus accès au moveHelper de la classe EntityLiving, ce qui m'empêche de déplacer le mob, et le modelBiped/renderBiped ne conviennent plus car il se servent de donnée propres aux mobs.

    Quelqu'un aurait-il un conseil sur le chemin à prendre ou une piste de recherche qui pourrait m'aider ?

    Merci d'avance.

    NB : Je suis également ouvert à toute proposition d'autres solution...


  • Modérateurs

    Je te conseille de partir sur une classe fille de EntityCreature pour avoir plus de choix dans la gestion de l'inventaire.

    Pour récréer le système d'inventaire, j'avais essayé ça il y a longtemps (mais sans succès ^^') et depuis, je pense avoir une idée de comment faire.
    Dans la méthode qui gère les collisions entre les entitées, vérifie si l'entitée en collision avec la tienne est une instance de EntityItem:

    • Si oui:
      Rajoute l'item dans l'inventaire et détruit l'entitée.
    • Si non:
      A toi de gérer les interactions avec les autres entitées 😉

    Tout ça est juste une idée comme ça, je sais pas si Minecraft gère les items réellement comme ça 😄

    Par contre, si tu es tout nouveau, je te conseille de mettre ce projet de côté pour le moment, la programmation d'une IA est pas facile du tout. Fais-en ce que tu veux, c'est juste mon avis !


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu cherche à créer quelque chose de très compliqué pour un début.
    Le mieux serait de faire un mob qui reprend tout le joueur,faire un extends EntityPlayer ou EntityPlayerMP est une mauvaise idée car le joueur est divisé en beaucoup de classes (EntityPlayer, EntityPlayerMP, EntityPlayerSP, AbstractClientPlayer, EntityClientPlayerMP, et l'inventaire InventoryPlayer)



  • Ok, donc je reste sur une entityCreature et je m'inspire de player pour recréer une gestion de l'inventaire alors. ^^

    Dans la méthode qui gère les collisions entre les entitées, vérifie si l'entitée en collision avec la tienne est une instance de EntityItem

    Intéressant … Je vais creuser, merci pour le tuyaux

    Par contre, si tu es tout nouveau, je te conseille de mettre ce projet de côté pour le moment, la programmation d'une IA est pas facile du tout.

    J'en suis conscient, ce n'est pas pour tout de suite. En fait il est possible que cela fasse office de travail universitaire. Pour l'instant je cherche surtout des info, trucs et astuces pour focaliser ma lecture du code du jeu et voir comment il fonctionne. D’ailleurs j'ai dévoré les tutoriels sur 2-3 jours pour établir ma base de travail … 😄

    T'en que j'y suis, est-ce que par hasard vous savez s'il existe déjà une méthode pour savoir si une entité peut voir un bloc en particulier ?


  • Modérateurs

    Pour que l'entitée puisse interpréter quel bloc est devant elle ?
    Je sais pas si il y en a une toute prête :/.
    MAIS! Regarde dans Minecraft.java (il me semble que c'est cette classe), après une longue recherche parmi les centaines de lignes de codes, tu devrais avoir un code pour obtenir le bloc/l'entitée devant elle. C'est franchement assez simple.

    Allez, puisque je suis de bonne humeur, je t'explique brièvement 😉

    Dans l'idée générale:
    Un projectile est placé aux coordonnées (x;y;z) de l'entitée (tu peux aussi ajuster un peu Y pour le mettre au niveau des yeux) et est orienté selon les variables pitch et yaw (angle sur l'axe X et angle sur l'axe Y - mais je me rappelle jamais lequel correspond à quoi :/) et est ensuite envoyé.
    Dès qu'il touche un bloc/une entitée (ou qu'il dépasse une certaine distance), il est détruit et envoie la donnée à l'entitée.

    Si tu as besoin d'aide pour les calculs, hésite pas à me demander 😉



  • Hum … simple et efficace, c'est un raytracer quoi plus ou moins ... Ok ca devrais aller...

    Pour les calcul je vais me débrouiller tkt ... Merci bien pour les info 😉


Log in to reply