1.6.4 Immobiliser un mob et quelques autres demandes.



  • Bonjour à tous,
    ma requête est des plus simple, je suppose cependant que sa réponse ne l'est moins:

    I)Immobiliser un mob? (Résolu :D)

    J'aimerai créer un mob, ressemblant à un creeper, jusque la rien de bien folichon, cependant je souhaiterai que ce mob ne puisse bouger, mais également et c'est la que je nécessite votre aide, qu'il ne puisse être poussé, projeté, ou tout autre moyen existant de le faire bouger. Quels fonctions pourrais je utiliser?

    II)Agrandir une épée en main (Résolu: Page 3)

    Je suis bien conscient qu'un post ayant le même objectif a précédemment était posté, cependant, il apparait qu'il n'y est aucune suite à cette demandes, or je suis moi aussi à la recherche d'une solution à ce problème car mon épée ressemble plus à un couteau qu'a une épée ^^'

    III)Un Bateau qui aille sur la lave (Résolu: si interesser par la solution voir page 2, la réponse de Robin)

    J'ai eu danjs l'idée de faire un bateau qui aille sur la lave, faire que le bateau ne se détruise pas, qu'il flotte, cela n'est pas bien compliqué, faire que le joueur ne prenne pas de dégats, j'ai pensé à lui mettre un effet résistance au feu quand il est dans le beateau, mais y aurait il un autre moyen qui permettrait que le joueur ne prenne pas feu, du tout, et que lorsqu'il descende les flammes ne restent pas sur lui quelques temps, le tuant?

    IV)Un Boss qui spawn naturellement?

    Mon Idée suivante, consiste à ajouter dans ma nouvelle dimension, des donjons, sous forme de structures en schematic. J'aimerai y implanter un boss, cependant, si je fais une commande tel que /butcher, ce boss va disparaitre, comment remédier à cela? Pour compléter cette idée je voudrais que par exemple, ce boss, si il est tué, respawn après un certains temps, par lui même, (et lorsqu'il respawn, regénère, l'intégralité de la structure, si possible). Je n'ai strictement aucune idée quant à comment faire cela.

    Edit: J'en ai oublié un :3
    V)En plus de cela, j'ai ajouté un mob, je voudrais qu'il spawn très rarement, or même en méttant la chance de spawn au minimum il spawn relativement souvent et par groupe de 3 ou 4 par fois, y aurait il une autre solution, pour le rarifier encore plus?

    VI)En codant ce matin j'ai eu un autre soucis, je cherche à faire que dès que mon mob soit tapé il fasse spawn 2 creeper autour de lui, je ne trouve pas de fonction me permettant de faire cela.
    (Résolu: Gràce à l'event conçu à cet effet)

    Merci de votre aide, en cas d'imprecision, n'hésiter pas à me demander
    cordialement
    Moi même.



  • J'ai déjà travaillé sur le faite qu'on ne puisse pas pousser un mob, il suffit de de mettre en commentaire :

    this.moveEntityWithHeading(this.moveStrafing, this.moveForward);
    

    dans la méthode public void onLivingUpdate()



  • Je test immédiatement! merci d'une réponse si rapide! 🙂

    Hum, j'ai ajouté cela dans ma fonction mais cela ne fonctionne pas 😕



  • Mets sa vitesse de déplacement a 0 ?



  • en mettant sa vitesse à zéro, cela ne suffira pas pour l'empecher de bouger face à une épée knockback non?



  • Voici la mienne. Par contre j'extend directement d'EntityCreature, je ne sais plus si cela peut jouer (j'ai fais ça il a quelque mois maintenant).

    public void onLivingUpdate()
    {
    if (this.jumpTicks > 0)
    {
    –this.jumpTicks;
    }
    
    if (this.newPosRotationIncrements > 0)
    {
    double d0 = this.posX + (this.newPosX - this.posX) / (double)this.newPosRotationIncrements;
    double d1 = this.posY + (this.newPosY - this.posY) / (double)this.newPosRotationIncrements;
    double d2 = this.posZ + (this.newPosZ - this.posZ) / (double)this.newPosRotationIncrements;
    double d3 = MathHelper.wrapAngleTo180_double(this.newRotationYaw - (double)this.rotationYaw);
    this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.newPosRotationIncrements);
    this.rotationPitch = (float)((double)this.rotationPitch + (this.newRotationPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements);
    --this.newPosRotationIncrements;
    this.setPosition(d0, d1, d2);
    this.setRotation(this.rotationYaw, this.rotationPitch);
    }
    else if (!this.isClientWorld())
    {
    this.motionX *= 0.98D;
    this.motionY *= 0.98D;
    this.motionZ *= 0.98D;
    }
    
    if (Math.abs(this.motionX) < 0.005D)
    {
    this.motionX = 0.0D;
    }
    
    if (Math.abs(this.motionY) < 0.005D)
    {
    this.motionY = 0.0D;
    }
    
    if (Math.abs(this.motionZ) < 0.005D)
    {
    this.motionZ = 0.0D;
    }
    
    this.worldObj.theProfiler.startSection("ai");
    
    if (this.isMovementBlocked())
    {
    this.isJumping = false;
    this.moveStrafing = 0.0F;
    this.moveForward = 0.0F;
    this.randomYawVelocity = 0.0F;
    }
    else if (this.isClientWorld())
    {
    if (this.isAIEnabled())
    {
    this.worldObj.theProfiler.startSection("newAi");
    this.updateAITasks();
    this.worldObj.theProfiler.endSection();
    }
    else
    {
    this.worldObj.theProfiler.startSection("oldAi");
    this.updateEntityActionState();
    this.worldObj.theProfiler.endSection();
    this.rotationYawHead = this.rotationYaw;
    }
    }
    
    this.worldObj.theProfiler.endSection();
    this.worldObj.theProfiler.startSection("jump");
    
    if (this.isJumping)
    {
    if (!this.isInWater() && !this.handleLavaMovement())
    {
    if (this.onGround && this.jumpTicks == 0)
    {
    this.jump();
    this.jumpTicks = 10;
    }
    }
    else
    {
    this.motionY += 0.03999999910593033D;
    }
    }
    else
    {
    this.jumpTicks = 0;
    }
    
    this.worldObj.theProfiler.endSection();
    this.worldObj.theProfiler.startSection("travel");
    this.moveStrafing *= 0.98F;
    this.moveForward *= 0.98F;
    this.randomYawVelocity *= 0.9F;
    //this.moveEntityWithHeading(this.moveStrafing, this.moveForward);
    this.worldObj.theProfiler.endSection();
    this.worldObj.theProfiler.startSection("push");
    
    if (!this.worldObj.isRemote)
    {
    this.collideWithNearbyEntities();
    }
    
    this.worldObj.theProfiler.endSection();
    }
    


  • bah j'ai voulu par exemple faire le test sur un golem de fer, or il n'y a pas ce bout de code à mettre en commentaire 😕



  • Pour ta V demande, une idée stupide :
    tu désactive le spawn du mob, et a chaque tick tu mets une chance sur 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 qu'il apparaisse ? Avec une variable



  • Cela m'empécherai de le faire spawn n'importe où dans les environs non?



  • Après quelque recherche pour me rafraichir la mémoire, c'est le

    super.onUpdate();
    

    dans public void onUpdate(); qui ma faire remonter de fichier en fichier jusqu'à EntityLivingBase qui un moment appelle

    this.onLivingUpdate();
    

    et c'est là que ma méthode apparait.

    Normalement mettre ma méthode directement dans le fichier de ton mob devrais fonctionner si les extends remonte jusqu'à EntityLivingBase



  • par contre, oui il pourrait spawn.
    Sauf si tu mets le code du spawn dans une condition qui vérifie que ta variable est égal a 1. et avec 1 chance sur 10000000000000000000000000000000000000000000000000000000000000000000000000000000?000000000000000000000000, tu le verras pas souvent.



  • J'essaie pour le mob et je te redis ça.

    Pour le spawn, je voulais dire, que en faisant ça:

    • Dans quelle classe je le ferrais?
    • et cela m'obligerait à le faire spawn toujours au même endroit ou bien dans un endroit proche avec un random pour les coordonné x,y et z non?

    Edit:

    @'Patatoufet':

    Après quelque recherche pour me rafraichir la mémoire, c'est le

    super.onUpdate();
    

    dans public void onUpdate(); qui ma faire remonter de fichier en fichier jusqu'à EntityLivingBase qui un moment appelle

    this.onLivingUpdate();
    

    et c'est là que ma méthode apparait.

    Normalement mettre ma méthode directement dans le fichier de ton mob devrais fonctionner si les extends remonte jusqu'à EntityLivingBase

    En effet, ceci fonctionne, merci de ton aide, seul bémol, quand je tape mon golem il se met à courir dans le vide très rapidement comme un idiot, mais cela résoud mon problème merci de ton aide! 🙂 +1 pour toi 😄



  • Ce code qui génére les spawns :

    EntityRegistry.addSpawn(GekkoMob.class, 5, 1, 1, EnumCreatureType.monster, BiomeGenBase.beach, BiomeGenBase.extremeHills, BiomeGenBase.extremeHillsEdge, BiomeGenBase.forest, BiomeGenBase.forestHills, BiomeGenBase.jungle, BiomeGenBase.jungleHills, BiomeGenBase.mushroomIsland, BiomeGenBase.mushroomIslandShore, BiomeGenBase.ocean, BiomeGenBase.plains, BiomeGenBase.river, BiomeGenBase.swampland);
    

    tu le mets dans

    
    if (variable == 0)
    {
    EntityRegistry.addSpawn(GekkoMob.class, 5, 1, 1, EnumCreatureType.monster, BiomeGenBase.beach, BiomeGenBase.extremeHills, BiomeGenBase.extremeHillsEdge, BiomeGenBase.forest, BiomeGenBase.forestHills, BiomeGenBase.jungle, BiomeGenBase.jungleHills, BiomeGenBase.mushroomIsland, BiomeGenBase.mushroomIslandShore, BiomeGenBase.ocean, BiomeGenBase.plains, BiomeGenBase.river, BiomeGenBase.swampland);
    }
    


  • Je sais j'ai le même problème pour l'animation de course^^ Personnellement Mes mobs sont juste décoratif donc en invulnérable. Mais si tu veux régler le problème il faudrait retirer l'animation de course (je les tues avec un item adapter qui désactive le gode mode avec un click droit).



  • Il y aurait peut être moyen de simplement désactiver leur animation? :3
    Je suis curieux, des mobs décoratifs? Des animaux empaillés?? ^^



  • Pour moi cela vient du faite que le mob est projeté en arrière quand il reçoit des dégâts mais vu qu'il ne peut pas être projeter l'animation de mouvement des pieds n'est prend jamais fin. Il faut juste trouver la méthode qui gère ça.

    Je te cache pas que c'est très très très très long de fouiller dans les milliers de lignes de code.. J'ai trouvé beaucoup de méthode lié au mouvement mais aucune pour le bump quand l’entité reçoit des dégâts..

    et pour les entity, c'est juste des pnj décoratif pour embellir un peu les villes sur le serveur 😃 Et d'autre seront relié avec un gui pour une banque, l'achat d'item etc..



  • Sinon, tu fais un block avec le model des mobs ?



  • Oui je me doute, plus simplement, on peut pas simplement faire que le mob ne soit pas animé du tout? genre une statue :3

    Edit: @Nolan je comprends le code que tu m'as envoyé, mais j'arrive pas à l'utiliser, fin je veux dire: si je le mets dans ma classe principale de mon mod, ilo v a seulement le faire au demarrage du jeu et pas à chaque fois non?


  • Moddeurs confirmés Rédacteurs Administrateurs

    II) Il faut vraiment que je fasse des recherche la dessus, ça doit être un code tout con en plus, je vais voir demain si j'oublie pas (faut aussi que je finisse le tuto de merdredi)

    III) Mettre en plus le burn time du joueur sur 0 lors de la sortie du bateau ?

    IV) Lors de ça mort, tu fais que le boss spawn autre autre entité avec un timer, et au bout d'un certain temps, il repose tout les blocs de la structure et refait pop le boss.

    V) Mets un spawn normal, et utilise l'event EntityJoinWorldEvent pour vérifier si event.entity instanceof TonEntité, et si c'est le cas, faire un random du genre
    if(event.world.rand.nextInt(1000) < 998)
    {
    event.setCancel(true);
    event.setResult(Result.DENY);
    }
    avec ça, une chance sur 1000 que ça spawn.



  • @Robin: Et pour remédier à la suppression du boss par le /butcher une idée?

    En tout cas merci des pistes que tu me donnes, je vais regarder un peu cette nuit

    hum j'ai quelques hypothèses, sont elles faisables? trop compliqués? est ce la bonne approche?

    • Générer ma structure en x y et z random puis généré le boss en x, y +48 et z?
    • Génerer un bloc en x y+47 et z, qui soit incassable, qui toutes les 10h, regen la structure et le boss si il n'y en a pas déja un?

    Edit 2: J'ai tenté d'annuler l'event du spawn, cela ne fonctionne pas, par contre le setdead oui mais cela fait ramer énormément je trouve


Log in to reply