AddSpawn(mix, max)



  • Puisque les anglophones ne semblent pas avoir la solution, je poste aussi ici.

    Il y a donc cette fonction dans EntityRegistry:

    public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase… biomes)
        {
            for (BiomeGenBase biome : biomes)
            {
                List <spawnlistentry>spawns = biome.getSpawnableList(typeOfCreature);
    
                for (SpawnListEntry entry : spawns)
                {
                    //Adjusting an existing spawn entry
                    if (entry.entityClass == entityClass)
                    {
                        entry.itemWeight = weightedProb;
                        entry.minGroupCount = min;
                        entry.maxGroupCount = max;
                        break;
                    }
                }
    
                spawns.add(new SpawnListEntry(entityClass, weightedProb, min, max));
            }
        }
    

    Je l'ai donc utilisé pour spawn mon EntitySchiff :

    EntityRegistry.addSpawn(EntitySchiff.class, 30, 3, 4, EnumCreatureType.MONSTER, BiomeGenBase.hell);
    

    Les entités spawn, cependant plutôt seules ou par groupe de deux, alors qu'elles devraient toujours spawn en groupe de 3 ou 4 😕

    Le code de l'entité :

       package mod.dylems.bloodplus.entity;
    
       import net.minecraft.entity.monster.EntityPigZombie;
       import net.minecraft.init.Items;
       import net.minecraft.item.ItemStack;
       import net.minecraft.world.DifficultyInstance;
       import net.minecraft.world.World;
    
       public class EntitySchiff extends EntityPigZombie {
    
           public EntitySchiff(World worldIn) {
               super(worldIn);
               this.isImmuneToFire = true;
           }
    
           @Override
           public boolean isChild() {
               return false;
           }
    
           @Override
           public int getMaxSpawnedInChunk()
           {
               return 4;
           }
    
           @Override
           protected void dropFewItems(boolean p_70628_1_, int p_70628_2_) {
               int i = this.rand.nextInt(1 + p_70628_2_);
    
               for (int n = 0; n < i; ++n)
               {
                   this.dropItem(Items.book, 1);
               }
           }
    
           @Override
           protected void addRandomDrop() {
               this.dropItem(Items.book, 1);
           }
    
           @Override
           protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) {
               this.setCurrentItemOrArmor(0, new ItemStack(Items.diamond_sword));
           }
    
           @Override
           protected String getLivingSound()
           {
               return null;
           }
    
           @Override
           protected String getHurtSound() {
               return "mob.villager.hit";
           }
    
           @Override
           protected String getDeathSound() {
               return "mob.villager.death";
           }
       }
    

    edit : topic anglophone : http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/modification-development/2625390-addspawn-minimum-maximum</spawnlistentry>


  • Administrateurs

    Salut,
    C'est en effet assez étrange.
    Je viens de regarder du côté du biome hell, il y a ça :

    this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityGhast.class, 50, 4, 4));
    this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityPigZombie.class, 100, 4, 4));
    this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityMagmaCube.class, 1, 4, 4));
    

    Visiblement les ghast sont sensé spawner par groupe de 4, pourtant en général il n'y en a qu'un seul. C'est surement car getMaxSpawnedInChunk retourne 1 dans le cas du ghast.

    Mais chez toi il y a 4, donc ça devrait fonctionner. Essayes de retirer la fonction getMaxSpawnedInChunk pour voir ?



  • @'robin4002':

    Salut,
    C'est en effet assez étrange.
    Je viens de regarder du côté du biome hell, il y a ça :

           this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityGhast.class, 50, 4, 4));
           this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityPigZombie.class, 100, 4, 4));
           this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityMagmaCube.class, 1, 4, 4));
    

    Visiblement les ghast sont sensé spawner par groupe de 4, pourtant en général il n'y en a qu'un seul. C'est surement car getMaxSpawnedInChunk retourne 1 dans le cas du ghast.

    Mais chez toi il y a 4, donc ça devrait fonctionner. Essayes de retirer la fonction getMaxSpawnedInChunk pour voir ?

    Salut, il me semble que la valeur de getMaxSpawnedInChunk est 4 de base, héritée d'EntityCreature. J'ai essayé de l'enlever et même de la mettre à 32, mais je tombais toujours sur des solitaires. Encore plus bizarre,
    j'ai mis la valeur du minimum à 4 :

    EntityRegistry.addSpawn(EntitySchiff.class, 30, 4, 4, EnumCreatureType.MONSTER, BiomeGenBase.hell);
    

    Et ils spawnent bien en groupe de 4 ! Alors je me suis dit :

    • soit c'est le problème de forge
    • soit les groupes doivent être de 4 minimum

    J'ai donc modifié les valeurs à 4, 5 et j'ai croisé un solitaire et des groupes de 2 !
    J'ai ensuite essayé avec 5, 5 et je n'ai croisé que des groupes de 5 !

    Conclusion : Les deux valeurs doivent être égales sinon ça ne fonctionne pas… Ou peut-être qu'il y a moyen de contourner cela ?

    EDIT : J'ai aussi essayé à 3, 3 et ça ne fonctionne pas.. Le minimum semble être 4...



  • Bon je fais un autre post, parce que ça remet en cause mon précédent post… En fait j'ai croisé un solitaire avec les paramètres à 4, 4 donc ça ne fonctionne pas... 😕 Peut-être que les autres n'arrivent pas à spawn pour x ou y raison ?


  • Administrateurs

    ça doit surement être ça.
    Après maintenant pourquoi le min max est planté, surement un problème de minecraft, cette fonction de forge ne fait que utiliser la fonction add des biomes devant du code de Mojang.



  • Merci pour l'aide en tout cas, j'ai trouvé un moyen de contourner le problème.