MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Un mob basique

    Planifier Épinglé Verrouillé Déplacé Tutoriels des membres
    1.10.x
    7 Messages 5 Publieurs 2.6k Vues 1 Watching
    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.
    • S Hors-ligne
      ShadCanard
      dernière édition par robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • L’entitée
        • L’intelligence Artificielle
        • Les SoundEvent
        • Le Rendu
        • Enregistrer le mob
        • Enregistrer le rendu
      • Crédits

      Introduction

      Bonjour à tous et à toutes, ici Shad, en direct de MinecraftForgeFrance ! Ceci est un petit tutoriel pour apprendre à faire des mobs, avec une IA de base.

      Pré-requis

      • Un environnement Minecraft 1.10 (Le lien officiel)
      • Une structure basique de mod

      Code

      L’entitée :

      Qu’est-ce qui constitue un mob ? Une entité et un rendu. L’entité est la partie qui est - vulgairement - implanté dans votre serveur. C’est dans l’entité que l’on va implémenter le comportement de notre mob.

      Il existe plusieurs types d’entités (accessibles via EnumCreatureType) :

      • MONSTER
      • CREATURE
      • AMBIENT
      • WATER_CREATURE

      Nous allons donc commencer cette entitée qui sera… Vous !

      package fr.minecraftforge.tutoriel.entities;
      
      import net.minecraft.entity.EntityCreature;
      import net.minecraft.world.World;
      
      public class EntityTutoriel extends EntityCreature {
      
          public EntityTutoriel(World worldIn) {
              super(worldIn);
          }
      }
      

      Voilà, c’est fini !

      L’Intelligence Artificielle :

      Alors vu comme ça, ça paye pas de mine, mais pour commencer, on va rajouter quelques petites choses dans notre constructeur :

          public EntityTutoriel(World worldIn) {
              super(worldIn);
              this.tasks.addTask(0,new EntityAISwimming(this));
              this.tasks.addTask(1, new EntityAIPanic(this,0.6D));
              this.tasks.addTask(2, new EntityAIWander(this,0.5D));
              this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class,5.0F));
          }
      

      Alors, on a quoi ici ? Eh bien simplement, on a plusieurs tâches ! Eh oui, 99% du comportement de notre mob passe maintenant par des tâches et une priorité. Comment on fait pour en rajouter une ? Eh bien c’est simple :

              this.tasks.addTask(0,new EntityAISwimming(this));
      

      0 est la priorité de notre comportement, EntityAISwimming(EntityLiving) est le comportement IA que l’on veut rajouter. Par exemple, pour rajouter le comportement “Peut être tenté avec un objet tenu” (le fameux “Le blé attire les vaches”) il s’agit de :

              this.tasks.addTask(new EntityAITempt(this,0.65D,Items.WHEAT,false));
      

      maintenant il va s’agit d’activer cette intelligence artificielle !

      on fera ça avec :

          @Override
          public boolean isAIDisabled() {
              return false;
          }
      

      Les SoundEvent:

      Rajoutons des sons à notre entité maintenant !
      Pour rajouter des sons, on va commencer par rajouter une méthode qui va s’occuper de créer l’évènement sonore !

          private SoundEvent getSoundEvent(String event){
              return new SoundEvent(new ResourceLocation(Tutoriel.MODID + ":mob.tutoriel." + event));
          }
      

      Maintenant, on va rajouter 3 méthodes d’un coup !

          @Nullable
          @Override
          protected SoundEvent getHurtSound() {
              return getSoundEvent("hurt");
          }
      
          @Nullable
          @Override
          protected SoundEvent getAmbientSound() {
              return getSoundEvent("idle");
          }
      
          @Nullable
          @Override
          protected SoundEvent getDeathSound() {
              return getSoundEvent("death");
          }
      

      Ceci aura pour effet de lier 3 sons à notre entité :

      • le son “ambient” qui est le son ambiant d’une entité (celle qu’elle fait quand elle vit tranquillement sans qu’on interagisse de quelque façon que ce soit). Exemple : le “beuargh” du zombie à proximité
      • le son “hurt” qui est le son quand une entité est blessée (déclenchée après s’être pris des dégats)
      • le son “death” qui est le son joué quand une entité meurt.

      Le Rendu :

      Maintenant que notre entité est créée, il faut la rendre, en tout cas côté client !
      Créons donc une classe “RenderMobTutoriel” qui implémentera les méthodes de IRenderFactory

      public class RenderMobTutoriel extends RenderBiped implements IRenderFactory {
          public final ResourceLocation texture = new ResourceLocation(Reference.MOD_ID, "textures/entity/moi.png");
      
          public RenderMobTutoriel(ModelBiped modelBiped, float shadow) {
              super(Minecraft.getMinecraft().getRenderManager(), modelBiped, shadow);
          }
      
          private ResourceLocation getMobTexture(EntityTutoriel tutoriel) {
              return texture;
          }
      
          @Override
          protected ResourceLocation getEntityTexture(Entity entity) {
              return this.getMobTexture((EntityTutoriel) entity);
          }
      
          @Override
          public Render createRenderFor(RenderManager manager) {
              return manager.getEntityClassRenderObject(EntityTutoriel.class);
          }
      }
      

      Remplacez simplement le “mobTutoriel.png” par le nom du fichier de votre skin Minecraft.

      Voilà, en gros on crée un rendu de bipède, et on y lie la texture, rien de

      Enregistrer le mob :

      Maintenant, c’est assez simple. On va aller dans l’init de notre mod et rajouter cette ligne :

              EntityRegistry.registerModEntity(EntityTutoriel.class, "mobTutoriel", 0, Tutoriel.instance,40,1,true,new Color(180, 0, 0).getRGB(), new Color(255,182,90).getRGB());
      
      

      Ici, on ne va pas trop chercher à tout disséquer. sachez que les arguments sont :

      • Classe de l’entité en question
      • Nom de l’entité
      • ID de l’entité (mettez celle que vous voulez, les conflits d’ID pour les mobs n’existent plus entre mods/avec minecraft. Mais mettez en une différente par entité)
      • l’instance du mod
      • la distance à laquelle l’entité est mise à jour
      • La fréquence à laquelle le mob doit être mis à jour
      • Est-ce qu’on envoie des mises à jour sur la vélocité (mettez true dans le doute)
      • La couleur primaire de l’oeuf
      • La couleur secondaire de l’oeuf
        Et voilà. On a enregistré l’entité,

      Enregistrer le rendu :

      Pour cela, allons dans le ClientProxy, et rajoutons ceci :

          @Override
          public void registerRender() {
              RenderingRegistry.registerEntityRenderingHandler(EntityTutoriel.class, (IRenderFactory) new RenderMobTutoriel(new ModelBiped(), 0.5F));
          }
      

      En gros, on rajoute le lien entre “entité” et “rendu”.

      Et voilà, tout est lié, tout fonctionne !

      Crédits

      Rédaction :

      • ShadCanard


      Ce tutoriel de ShadCanard publié sur 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

      Retour vers le sommaire des tutoriels

      1 réponse Dernière réponse Répondre Citer 0
      • SCAREXS Hors-ligne
        SCAREX
        dernière édition par

        Ici ce n’est pas un mob que tu fais, mais plutôt une créature. Penses aux balises java pour une meilleure lisibilité. Mis à part quelques erreurs le tutoriel a l’air correct (par exemple pour enregistrer le rendu : tu n’as pas besoin de cast normalement, si c’est le cas c’est qu’il y a un problème)

        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
        • S Hors-ligne
          ShadCanard
          dernière édition par

          La version uncastée est dépréciée 😕

          1 réponse Dernière réponse Répondre Citer 0
          • Snowy_1803S Hors-ligne
            Snowy_1803
            dernière édition par

            @‘ShadCanard’:

            La version uncastée est dépréciée 😕

            C’est parce que dans la classe du rendu, tu dois mettre implements IRenderFactory****

            Moddeur 1.8

            Développeur Java

            1 réponse Dernière réponse Répondre Citer 0
            • ? Hors-ligne
              Un Ancien Utilisateur
              dernière édition par

              La différence entre une créature et un mob, c’est quoi ?  😕 :dodgy: :dodgy:

              1 réponse Dernière réponse Répondre Citer 0
              • DeletedD Hors-ligne
                Deleted
                dernière édition par

                Le mob est agressif, la créature pas forcément, puisque EntityMob hérite de EntityCreature, mais EntityAnimal également.
                EDIT: La classe EntityCreature est la classe parent à tous les types d’entités vanilla de mc, sauf particules et moyens de transport, donc dedans on retrouve les agressives: comme les mobs, les neutres ou les passives, telles que les loups ou les cochons.

                1 réponse Dernière réponse Répondre Citer 0
                • ? Hors-ligne
                  Un Ancien Utilisateur
                  dernière édition par

                  D’accord, merci pour les infos, et d’avoir pris du temps pour me répondre  😉

                  1 réponse Dernière réponse Répondre Citer 0
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  ContactMentions Légales

                  MINECRAFT FORGE FRANCE © 2024

                  Powered by NodeBB