Il reste moins de 24h pour s'inscrire à la MFFJam !

Aide mob aquatique



  • Salut, j'essaye d'ajouter un poisson dans mon mod, le seul problème c'est qu'il ne spawn pas dans les biomes océan, deep océan et rivière. Même si je met 
    ….BiomeGenBase.ocean, ..etc
    par contre quand je met BiomeGenBase.plains, il spawn dans les plaines
    Ce n'est pas ce qui est souhaitait, est-ce qu'il y a des conditions pour les biomes marin ?

    Merci pour l'aide



  • Regarde le codage de squid



  • Regardes les fonction "getCanSpawn" et "onInitialSpawn" du squid.



  • Ok d'accord je vais voir ça et je reviens si ça à marché ou si j'ai un autre souci, merci



  • Dans le addSpawn il me semble qu'il y a WATER_CREATURE (ou similaire) à mettre au lieu de CREATURE.



  • Bon, j'ai suivie chacun de vos conseils mais cela ne change rien, le mob ne spawn toujours pas dans l'océan, le deep océan et les rivières
    Voici mes classes :

    Classe principale :

    @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION)
    
    public class ModSurvivant
    {
    
       @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
       public static CommonProxy proxy;
    
       @Instance(Reference.MOD_ID)
       public static ModSurvivant instance;
    
       public static CreativeTabs tabSurvivant = new CreativeTabs("tabSurvivant")
       {
           @SideOnly(Side.CLIENT)
           public Item getTabIconItem()
           {
               return Item.getItemFromBlock(BlockMod.blockTotem);
           }
       };
    
       @EventHandler
       public void preInit (FMLPreInitializationEvent event)
       {
           ItemMod.init();
           ItemMod.register();
           BlockMod.init();
           BlockMod.register();
       }
    
       @EventHandler
       public void init (FMLInitializationEvent event)
       {
           proxy.registerRenders();
           MinecraftForge.EVENT_BUS.register(new SurvivantBlockEvent());
           EntityHandler.RegisterFish(EntityFish.class, "Fish");
       }
    
       @EventHandler
       public void postInit (FMLPostInitializationEvent event)
       {
    
       }
    }
    
    

    La classe du client proxy :

    ublic class ClientProxy extends CommonProxy
    {
       @Override
       public void registerRenders()
       {
           ItemMod.registerRenders();
           BlockMod.registerRenders();
    
           RenderingRegistry.registerEntityRenderingHandler(EntityFish.class, new RenderFish(Minecraft.getMinecraft().getRenderManager(), new ModelFish(), 0.5F));
    
       }  
    }
    

    La classe de l'entité :

    public class EntityFish extends EntityWaterMob
    {
    
       public EntityFish(World worldIn)
       {
           super(worldIn);
           this.setSize(0.6F, 0.5F);
       }
    
       protected void applyEntityAttributes()
       {
           super.applyEntityAttributes();
           this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D);
       }
    
       public boolean getCanSpawnHere()
       {
           return this.posY > 45.0D && this.posY < (double)this.worldObj.getSeaLevel() && super.getCanSpawnHere();
       }
    }
    

    La classe du model de l'entité :

    public class ModelFish extends ModelBase
    {
     //fields
       ModelRenderer corps;
       ModelRenderer queue1;
       ModelRenderer queue2;
    
     public ModelFish()
     {
       textureWidth = 64;
       textureHeight = 32;
    
         corps = new ModelRenderer(this, 6, 9);
         corps.addBox(0F, 0F, 0F, 7, 4, 3);
         corps.setRotationPoint(-3F, 17F, 0F);
         corps.setTextureSize(64, 32);
         corps.mirror = true;
         setRotation(corps, 0F, 0F, 0F);
         queue1 = new ModelRenderer(this, 27, 16);
         queue1.addBox(0F, 0F, 0F, 1, 3, 1);
         queue1.setRotationPoint(3F, 19F, 1F);
         queue1.setTextureSize(64, 32);
         queue1.mirror = true;
         setRotation(queue1, 0F, 0F, -1.07818F);
         queue2 = new ModelRenderer(this, 27, 9);
         queue2.addBox(0F, 0F, 0F, 1, 3, 1);
         queue2.setRotationPoint(3F, 19F, 1F);
         queue2.setTextureSize(64, 32);
         queue2.mirror = true;
         setRotation(queue2, 0F, 0F, -1.891668F);
     }
    
     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);
       corps.render(f5);
       queue1.render(f5);
       queue2.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);
     }
    
    }
    
    

    La classe du render de l'entité :

    public class RenderFish extends RenderLiving
    {
    
       private ResourceLocation texture = new ResourceLocation(Reference.MOD_ID + ":textures/mobs/Fish.png");
    
       public RenderFish(RenderManager render, ModelBase model, float x)
       {
           super(render, model, x);
       }
    
       public void renderFish(EntityFish entity, double x, double y, double z, float v, float b)
       {
           super.doRender(entity, x, y, z, v, b);
       }
    
       public void doRenderLiving(EntityLiving entity, double x, double y, double z, float v, float b)
       {
           renderFish((EntityFish) entity, x, y, z, v, b);
       }
    
       public void doRendering(Entity entity, double x, double y, double z, float v, float b)
       {
           renderFish((EntityFish) entity, x, y, z, v, b);
       }
    
       @Override
       protected ResourceLocation getEntityTexture(Entity entity)
       {
           return texture;
       }
    
    }
    
    

    La classe EntityHandler :

    public class EntityHandler
    {
       public static void RegisterFish(Class entityClass, String name)
       {
           int entityID = EntityRegistry.findGlobalUniqueEntityId();
           int mainColor = new Color(0, 0, 100).getRGB();
           int subColor = new Color(0, 100, 0).getRGB();
    
           EntityRegistry.registerGlobalEntityID(entityClass, name, entityID);
           EntityRegistry.addSpawn(entityClass, 30, 5, 15, EnumCreatureType.WATER_CREATURE, BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.river);
           EntityRegistry.registerModEntity(entityClass, name, entityID, ModSurvivant.instance, 25, 1, true);
           EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor));
       }
    }
    

    Merci, pour l'aide



  • Alors, toujours pas d'idée….. 😐



  • Est-ce qu'il spawn avec l'oeuf ?



  • Oui avec l'oeuf aucun problème



  • Aucune idée pourquoi ça ne marche pas, au pire essaye de voir le moment où les mobs spawnent pourquoi ton mob n'est pas choisit avec le debugger



  • Alors j'ai trouvé   😉
    Il faut que tu rajoutes ça où tu enregistres ton entité :

    EntitySpawnPlacementRegistry.setPlacementType(TonEntityé.class, EntityLiving.SpawnPlacementType.IN_WATER);
    

    Après ça normalement ça marche.



  • Merci, les poissons spawnent dans l'eau des océan, deep océan et rivière, du coup ma classe EntityHandler ressemble à ça maintenant :

    public class EntityHandler
    {
       public static void RegisterFish(Class entityClass, String name)
       {
           int entityID = EntityRegistry.findGlobalUniqueEntityId();
           int mainColor = new Color(0, 0, 100).getRGB();
           int subColor = new Color(0, 100, 0).getRGB();
    
           EntityRegistry.registerGlobalEntityID(entityClass, name, entityID);
           EntityRegistry.addSpawn(entityClass, 90, 20, 50, EnumCreatureType.WATER_CREATURE, BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.river);
           EntityRegistry.registerModEntity(entityClass, name, entityID, ModSurvivant.instance, 25, 1, true);
           EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, mainColor, subColor));
           EntitySpawnPlacementRegistry.setPlacementType(EntityFish.class, EntityLiving.SpawnPlacementType.IN_WATER);
       }
    }
    

    Plus qu'à faire les AI du mob, merci  🙂



  • Ça en fait des lignes rien que pour l'enregistrer ^^
    Si t'as un problème avec l'ai hésite pas à redemander 🙂



  • J'ai mis l'AI du poulpe pour le moment