Spawn de Mob



  • Bonjour J'ai créer un spawn de mob avec l'Event LivingDeathEvent tout fonctionne correctement voici mon code :

    public class EventRespawn
    {
    
    @SubscribeEvent
    public void respawn(LivingDeathEvent event)
    {
    if(event.entityLiving instanceof Entitytest && !event.entityLiving.worldObj.isRemote)
    {
    World world = event.entity.worldObj;
    Entitytest entity = new Entitytest(world);
    entity.setPosition(117, 201, -159);
    world.spawnEntityInWorld(entity);
    }
    }
    }
    

    Mais lorsque je tue une unité trop loin de la position de spawn rien ne ce passe.

    J'ai donc utilisé une méthode de chunk loader utile pour les bock de commande mais rien n'y fait le mob ne spawn pas 😢

    Merci de votre aide



  • Salut,
    Premièrement ton entity doit être instanciée aussi côté client, du coup il est faux de mettre un !worldObj.isRemote avant l'instance. Le check côté serveur doit uniquement être avant le spawnEntityInWorld. Ensuite si tu veux qu'elle spawn à l'endroit de la mort, il est absurde de mettre ceci entity.setPosition(117, 201, -159); sauf si tu te trouves à cet endroit bien entendu.
    Par ailleurs es-tu sûr d'avoir enregistré ta classe d'event, avec le bon BUS ? Si oui, essaie de remplacer setPosition par setLocationAndAngles, et tiens nous au courant !



  • J'ai suivi tes conseil est j'ai modifié le code comme ceci:

    public class EventRespawn
    {
    
    @SubscribeEvent
    public void respawn(LivingDeathEvent event)
    {
    if(event.entityLiving instanceof Entitytest )
    {
    World world = event.entity.worldObj;
    Entitytest entity = new Entitytest (world);
    entity.setPosition(117, 201, -159);
    entity.setLocationAndAngles(117, 201, -159, 0, 0);
    if(!event.entityLiving.worldObj.isRemote)
    {
    world.spawnEntityInWorld(entity);
    }
    }
    }
    }
    

    Donc je t'explique le fonctionnement que je recherche, je veux que au moment ou mon entitytest meurt n'importe ou dans le monde elle respawn en 117,201,-159 donc tout fonctionne quand je suis proche de cette position mais des que je m’éloigne de trop ceci ne fonctionne plus.



  • Tu as essayé dans la méthode onDeath de ta classe Entity, ou/et dans setDead, si cela ne marche pas ?



  • Je ne pense pas que changer la méthode va faire apparaître mon mob car elle fonctionne quand je suis prêt de la position.

    je pense que le problème vient du fait que la partie du monde ou j'essaye de spawn l’entité n'est pas chargé.

    Mais un chunk loader ne change rien alors je ne comprend pas.



  • Quel code utlises-tu pour charger le chunk ?



  • Je n'utilise pas mon propre mod, pour charger le chunk.

    Mais je veux bien essayer mais je n'ai aucune idée de par ou commencer XD


  • Administrateurs

    @'Plaigon':

    Premièrement ton entity doit être instanciée aussi côté client, du coup il est faux de mettre un !worldObj.isRemote avant l'instance. Le check côté serveur doit uniquement être avant le spawnEntityInWorld.

    Non. Ça ne sert absolument à rien d'instancier une entité si elle n'est pas spawn. Inutile d'instancier l'entité sur les deux site. La fonction spawnEntityInWorld envoie un paquet au client avec les données de l'entité, il créé une instance puis la spawn.

    En faisant ce que tu proposes tu vas avoir deux instances sur le client, dont une qui ne sera jamais utilisé (donc nettoyé par le GC). Bref, ça pourri juste la mémoire du client de faire ainsi.

    Pour le problème, plutôt que charger le chunk pour spawn l'entité et le décharger, autant mettre l'entité directement dans la sauvegarde de la map si le chunk n'est pas chargé.



  • @'robin4002':

    Pour le problème, plutôt que charger le chunk pour spawn l'entité et le décharger, autant mettre l'entité directement dans la sauvegarde de la map si le chunk n'est pas chargé.

    D'accord cette solution me parait viable mais je ne voie pas du tout comment faire