• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Créer un mob qui saute

Les entités
1.7.2
5
15
6.4k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • Pchom
    Pchom dernière édition par robin4002 29 nov. 2021, 00:33 24 mai 2014, 13:35

    Sommaire

    • Introduction
    • Pré-requis
    • Code
      • EntityJoomda
      • ModelJoomda
      • RenderJoomda
    • Résultat
    • Crédits

    Introduction

    Aujourd’hui nous allons apprendre à créer un mob qui ne se déplace pas normalement.
    Ce mob sautera pour se déplacer.

    Pré-requis

    • Créer un mob basique

    Code

    Déjà, vous devez déclarer votre mob dans la classe principale, rien n’a changé.
    Je vous laisse donc déclarer une nouvelle entité que nous nommerons Joomda.

    Créez donc une classe EntityJoomda qui hérite de la classe EntityAmbientCreature (net.minecraft.entity.passive.EntityAmbientCreature), nous allons principalement travailler dans celle-ci.

    EntityJoomda :

    Le constructeur ne change pas :

    public class EntityJoomda extends EntityAmbientCreature {
    public EntityJoomda(World par1World) {
    super(par1World);
    }
    }

    Votre entité peut désormais être utilisée, mais elle sera une entité de base, sans aucun modèle ni rien.

    Ajoutez la méthode onUpdate() :

    public void onUpdate() {
    super.onUpdate();
    if (this.worldObj.getTotalWorldTime() % 80 == 0) {
    if (this.onGround) {
    this.jump();
    }
    }
    }

    Je vais tout expliquer petit à petit.

    public void onUpdate() {
    

    Tout le monde doit comprendre cette ligne je pense.

    super.onUpdate();
    

    Cette ligne est essentielle si vous souhaitez que votre mob marche normalement. Vous pouvez faire CTRL + Clic gauche pour voir la méthode onUpdate() de EntityAmbientCreature.

    if (this.worldObj.getTotalWorldTime() % 80 == 0) {
    

    Cette condition n’est vraie que lorsque le nombre de ticks du monde actuel divisé par 80 n’a aucun reste (le modulo, que vous devez connaître). Cette condition n’est vraie qu’une fois toutes les 4 secondes (1 seconde = 20 ticks), vous pouvez donc changer cette valeur si vous souhaitez que le mob saute plus ou moins souvent.

    if (this.onGround) {
    this.jump();

    Si le mob est au sol, on appelle la méthode qui le fera sauter. Cette condition est obligatoire car si le mob est en l’air il va sauter, ce qui fait quelque chose qui n’est absolument pas réaliste. Si vous tapez ce mob juste avant qu’il saute il n’y aura aucun problème avec cette condition. Vous pouvez très bien l’enlever et tester, mais le résultat sera moche.

    Normalement votre mob est utilisable, mais il ne sautera que de façon verticale, il ne bougera pas. Vous pouvez parer ce problème avec cette méthode :

    protected void jump()
    {
    this.motionY = 0.41999998688697815D;
    if (this.isPotionActive(Potion.jump))
    {
    this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
    }
    float f = this.rotationYaw * 0.017453292F;
    this.motionX -= (double)(MathHelper.sin(f) * 0.5F);
    this.motionZ += (double)(MathHelper.cos(f) * 0.5F);
    this.isAirBorne = true;
    ForgeHooks.onLivingJump(this);
    }

    Expliquons cette méthode également ligne par ligne :

    this.motionY = 0.41999998688697815D;
    

    Cet élément permettra de choisir la hauteur de saut, une valeur trop grande fera sauter le mob trop haut et il despawnera. Une valeur élevée peut aussi infliger de grands dégâts au mob lorsqu’il sautera. Je vous conseille donc de ne pas toucher à cette valeur.

    if (this.isPotionActive(Potion.jump))
    {
    this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
    }

    Cette condition permet d’augmenter la hauteur de saut si le mob a l’effet Jump actif. Cette condition est la condition de la fonction Jump de Minecraft de base.

    float f = this.rotationYaw * 0.017453292F;
    this.motionX -= (double)(MathHelper.sin(f) * 0.5F);
    this.motionZ += (double)(MathHelper.cos(f) * 0.5F);
    this.isAirBorne = true;
    ForgeHooks.onLivingJump(this);

    Le float f est intégré à la méthode de base mais je ne sais pas à quoi il sert, si vous savez son utilité, merci de me prévenir en réponse ^^
    motionX et motionZ permettent respectivement de modifier le déplacement en X et en Z lors du saut.
    this.isAirBorne = true permet de signaler à Minecraft que le mob est en train de voler.
    La dernière ligne permet de faire sauter le mob.

    ModelJoomda :

    Ce model est mon œuvre, si vous souhaitez l’utiliser merci de me citer.

    import net.minecraft.client.model.ModelBase;
    import net.minecraft.client.model.ModelRenderer;
    import net.minecraft.entity.Entity;
    public class ModelJoomda extends ModelBase
    {
    //fields
    ModelRenderer Base;
    ModelRenderer Foot;
    ModelRenderer Head;
    public ModelJoomda()
    {
    textureWidth = 32;
    textureHeight = 32;
    Base = new ModelRenderer(this, 0, 0);
    Base.addBox(-2.533333F, 0F, -2.466667F, 5, 1, 5);
    Base.setRotationPoint(0F, 23F, 0F);
    Base.setTextureSize(32, 32);
    Base.mirror = true;
    setRotation(Base, 0F, 0F, 0F);
    Foot = new ModelRenderer(this, 0, 6);
    Foot.addBox(-1.5F, 0F, -1.533333F, 3, 16, 3);
    Foot.setRotationPoint(0F, 8F, 0F);
    Foot.setTextureSize(32, 32);
    Foot.mirror = true;
    setRotation(Foot, 0F, 0F, 0F);
    Head = new ModelRenderer(this, 12, 6);
    Head.addBox(-0.5F, -8F, -3.5F, 1, 8, 7);
    Head.setRotationPoint(0F, 8F, 0F);
    Head.setTextureSize(32, 32);
    Head.mirror = true;
    setRotation(Head, 0F, 4.8F, 0F);
    }
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
    {
    super.render(entity, f, f1, f2, f3, f4, f5);
    setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    Base.render(f5);
    Foot.render(f5);
    Head.render(f5);
    }
    private void setRotation(ModelRenderer model, float x, float y, float z)
    {
    model.rotateAngleX = x;
    model.rotateAngleY = y;
    model.rotateAngleZ = z;
    }
    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
    {
    super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    }
    }

    Je n’expliquerai pas le code, c’est un code généré par Techne que j’ai modifié pour qu’il fonctionne.

    RenderJoomda :

    import fr.minecraftforgefrance.modtutoriel.ModTutoriel;
    import net.minecraft.client.model.ModelBase;
    import net.minecraft.client.renderer.entity.RenderLiving;
    import net.minecraft.entity.Entity;
    import net.minecraft.util.ResourceLocation;
    public class RenderJoomda extends RenderLiving {
    public RenderJoomda(ModelBase par1ModelBase, float par2) {
    super(par1ModelBase, par2);
    }
    @Override
    protected ResourceLocation getEntityTexture(Entity var1) {
    return new ResourceLocation("modtutoriel", "textures/entity/joomda.png");
    }
    }

    Je vais juste expliquer cette fonction :

    @Override
    protected ResourceLocation getEntityTexture(Entity var1) {
    return new ResourceLocation("modtutoriel", "textures/entity/joomda.png");
    }

    Les première et deuxième ligne n’ont pas besoin d’explication.
    Le premier argument de la 3e ligne est le modid, que vous devez remplacer selon votre modid. Ensuite le deuxième argument signifie le chemin d’accès de la texture du model à partir du dossier assets/votremodid.

    Vous pouvez télécharger la texture ici.

    Vous devez ensuite enregistrer votre model dans la classe ClientProxy.

    Résultat

    Crédits

    Rédaction :

    • @Pchom

    Correction :

    • @Pchom

    Creative Commons
    Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retourRetour vers le sommaire des tutoriels

    > *Si vous ne pouvez expliquer un concept à un enfant de six ans, c’est que vous ne le comprenez pas c…

    1 réponse Dernière réponse Répondre Citer 0
    • environ 4 mois
    • M
      MrAzErTy31 dernière édition par 24 sept. 2014, 13:11

      Tutoriel très intéressant qui m’est passé inaperçu (désolé du up) ^^ Merci @Pchom ! 🙂

      Mes mods :

      >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
      CraftYourMenu : http://minecraftforgefrance.fr/showth…

      1 réponse Dernière réponse Répondre Citer 0
      • 2 ans
      • M
        MisterAlex95 dernière édition par 22 févr. 2017, 03:50

        Peut on utiliser un .obj ? Si oui comment ?

        1 réponse Dernière réponse Répondre Citer 0
        • Deleted
          Deleted dernière édition par 22 févr. 2017, 06:23

          https://www.minecraftforgefrance.fr/showthread.php?tid=584

          1 réponse Dernière réponse Répondre Citer 0
          • M
            MisterAlex95 dernière édition par 22 févr. 2017, 06:59

            Merci beaucoup 🙂
            edit: Il semblerai que cet lib soit outdated … 😕 Y a t il autre chose ?

            1 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par 22 févr. 2017, 09:05

              Tu peux sinon lire ce poste où l’auteur utilise uniquement forge et pas glutils : https://www.minecraftforgefrance.fr/showthread.php?tid=560

              1 réponse Dernière réponse Répondre Citer 0
              • SCAREX
                SCAREX dernière édition par 22 févr. 2017, 13:33

                @‘MisterAlex95’:

                Merci beaucoup 🙂
                edit: Il semblerai que cet lib soit outdated … 😕 Y a t il autre chose ?

                Si tu utilises une version supérieure à la 1.7 tu dois pouvoir utiliser des .obj nativement sinon il y a plein de librairies sur internet

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

                1 réponse Dernière réponse Répondre Citer 0
                • M
                  MisterAlex95 dernière édition par 23 févr. 2017, 16:38

                  En fait je me suis mal exprimé. Je cherche a modifier un model de mob grace a un .obj.
                  Je trouve ça nul part, est ce que c’est possible ?

                  1 réponse Dernière réponse Répondre Citer 0
                  • Deleted
                    Deleted dernière édition par 23 févr. 2017, 16:55

                    Remplacer le model d’un mob déjà existant par un .obj, c’est bien cela ?

                    1 réponse Dernière réponse Répondre Citer 0
                    • M
                      MisterAlex95 dernière édition par 23 févr. 2017, 16:55

                      Non plutot créer un nouveau mob et utiliser un .obj comme model
                      Impossible de trouver comment faire 😕

                      1 réponse Dernière réponse Répondre Citer 0
                      • Deleted
                        Deleted dernière édition par 23 févr. 2017, 17:05

                        Heureusement que j’ai voulu, y’a pas mal de temps, faire la même chose que toi 🙂
                        https://www.minecraftforgefrance.fr/archive/index.php?thread-2985.html

                        1 réponse Dernière réponse Répondre Citer 0
                        • M
                          MisterAlex95 dernière édition par 23 févr. 2017, 17:08

                          @‘Plaigon’:

                          Heureusement que j’ai voulu, y’a pas mal de temps, faire la même chose que toi 🙂
                          https://www.minecraftforgefrance.fr/archive/index.php?thread-2985.html

                          il y a t il un moyen de te contacter plus facilement ? 🙂

                          1 réponse Dernière réponse Répondre Citer 0
                          • Deleted
                            Deleted dernière édition par 23 févr. 2017, 17:12

                            Non, le but d’un forum est d’utiliser les postes afin de résoudre les problèmes. Si on finit par résoudre le problème sur skype/discord/ts sans laisser de traces aux futurs membres en difficultes, cela n’aura servi à rien…

                            De plus, je vois difficilement comme t’aider davantage vu le lien que je t’ai déniché: tout le code est déjà servi, t’as plus qu’à faire un copier coller ^^’

                            1 réponse Dernière réponse Répondre Citer 0
                            • M
                              MisterAlex95 dernière édition par 23 févr. 2017, 17:12

                              D’accord, merci en tout cas 🙂
                              Il semblerai qu’en 1.10.2 il n’y ai plus IModelCustom ainsi que [color=#000000AdvancedModelLoader… qu’est ce qui les remplace actuellement ? ]

                              1 réponse Dernière réponse Répondre Citer 0
                              • Deleted
                                Deleted dernière édition par 23 févr. 2017, 18:32

                                Les fichiers json

                                1 réponse Dernière réponse Répondre Citer 0
                                • Référencé par  robin4002 robin4002 29 nov. 2021, 01:52
                                • Référencé par  robin4002 robin4002 29 nov. 2021, 02:04
                                • Référencé par  robin4002 robin4002 29 nov. 2021, 02:07
                                • 1 / 1
                                3 sur 15
                                • Premier message
                                  3/15
                                  Dernier message
                                Design by Woryk
                                Contact / Mentions Légales

                                MINECRAFT FORGE FRANCE © 2018

                                Powered by NodeBB