Jump to content

[1.8] Natural entity spawns.


GerbShert

Recommended Posts

Hello, I am trying to get a custom entity to spawn in the world. I can get it to spawn with it's spawn egg and with the /summon command but it does not spawn naturally. This is the current code I am using to try to spawn my creatures.

public class RegisterEntitySpawns {
    static BiomeGenBase[] WaterBiomes = {BiomeGenBase.beach, BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.swampland, BiomeGenBase.frozenOcean, BiomeGenBase.frozenRiver};

    public static void registerEntitySpawns() {
        System.out.println("Registering natural fish spawns");
        EntityRegistry.addSpawn(EntityCod.class, 10, 1,7, EnumCreatureType.WATER_CREATURE, BiomeGenBase.deepOcean);
        EntityRegistry.addSpawn(EntityClown.class, 20, 2, 5, EnumCreatureType.WATER_CREATURE, WaterBiomes);
        EntityRegistry.addSpawn(EntitySalmon.class, 20, 2, 7, EnumCreatureType.WATER_CREATURE, WaterBiomes);
    }
}

My mods full code can be seen on GitHub if that will help at all.

Link to comment
Share on other sites

Registering Entitys

public class RegisterEntitys {
    public static void RegisterFishyEntitys() {
        GerbsEntityRegistrar.registerEntity(EntityCod.class, "entityCod", 8774806, 11784191);
        GerbsEntityRegistrar.registerEntity(EntitySalmon.class, "entitySalmon", 11295305, 16766904);
        GerbsEntityRegistrar.registerEntity(EntityPuffer.class, "entityPuffer", 16764928, 3839999);
        GerbsEntityRegistrar.registerEntity(EntityClown.class, "entityClown", 16740096, 16777215);
    }
}

public class GerbsEntityRegistrar {
    public static void registerEntity(Class entityClass, String name, Integer colorOne, Integer colorTwo) {
        int entityID = EntityRegistry.findGlobalUniqueEntityId();
        long seed = name.hashCode();
        Random rand = new Random(seed);
        int primaryColor = colorOne;
        int secondaryColor = colorTwo;

        EntityRegistry.registerGlobalEntityID(entityClass, name, entityID);
        EntityRegistry.registerModEntity(entityClass, name, entityID, FishyPlus.instance, 64, 1, true);
        EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, primaryColor, secondaryColor));
    }
}

Link to comment
Share on other sites

You provide an id yourself.

-Mitchellbrine

 

Minecraft can do ANYTHING, it's coded in Java and you got the full power of Java behind you when you code. So nothing is impossible.

It may be freaking fucking hard though, but still possible ;)

 

If you create a topic on Modder Support, live by this motto:

I don't want your charity, I want your information
Link to comment
Share on other sites

New Entity Registration

public class RegisterEntitys {

    public static void RegisterFishyEntitys() {

        GerbsEntityRegistrar.registerEntity(EntityCod.class, "entityCod", 8774806, 11784191,0);
        GerbsEntityRegistrar.registerEntity(EntitySalmon.class, "entitySalmon", 11295305, 16766904,1);
        GerbsEntityRegistrar.registerEntity(EntityPuffer.class, "entityPuffer", 16764928, 3839999,2);
        GerbsEntityRegistrar.registerEntity(EntityClown.class, "entityClown", 16740096, 16777215,3);
    }
}

public class GerbsEntityRegistrar {
    static int startEntityId = 354;
    public static void registerEntity(Class entityClass, String name, Integer colorOne, Integer colorTwo, Integer gerbsEntityID) {
        int entityID = 354 + gerbsEntityID;
        long seed = name.hashCode();;
        int primaryColor = colorOne;
        int secondaryColor = colorTwo;

        EntityRegistry.registerModEntity(entityClass, name, entityID, FishyPlus.instance, 64, 1, true);
        EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, primaryColor, secondaryColor));

    }
}

Spawn eggs are in-game but when used they don't spawn and console says

[16:41:29] [server thread/WARN]: Skipping Entity with id 358
[16:41:31] [server thread/WARN]: Skipping Entity with id 358
[16:41:31] [server thread/WARN]: Skipping Entity with id 358
[16:41:31] [server thread/WARN]: Skipping Entity with id 358
[16:41:31] [server thread/WARN]: Skipping Entity with id 358

They can be spawned with the summon command just fine.

 

 

Link to comment
Share on other sites

Using registerModEntity, you can't spawn them with spawn eggs.  IIRC, you need to create your own spawn egg item.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Using registerModEntity, you can't spawn them with spawn eggs(without making my own spawn egg item).  IIRC, you need to create your own spawn egg item.

I looked at EntityList and figured out how to make spawn eggs. Replaced
EntityList.entityEggs.put(Integer.valueOf(entityID), new EntityList.EntityEggInfo(entityID, primaryColor, secondaryColor));

with

EntityList.addMapping(entityClass, name, entityID, primaryColor, secondaryColor);

And now the spawn eggs work again and the /summon command works but now I still have my original problem... They can not be found naturally spawned in-world.

Link to comment
Share on other sites

Adding directly to the EntityList like that is still not a good idea - you have no idea whether the ID you chose is unique or not, and if you did still use findUniqueGlobalId but didn't register it to your entity, then it's pointless.

 

You need to implement your own custom EntityList / spawn egg / summon command. I've brought this up before, but the Forge team is apparently not keen on making it easier to use, and that's just the way it is.

 

I've posted links to my own code as an example somewhere around here; you can probably find it if you search.

 

To make your entity spawn in the world, you need to add the spawn information to the EntityRegistry for each biome that you want it to spawn in:

EntityRegistry.addSpawn(entity.class, spawnRate, min, max, creatureType, biome);

Link to comment
Share on other sites

Adding directly to the EntityList like that is still not a good idea - you have no idea whether the ID you chose is unique or not, and if you did still use findUniqueGlobalId but didn't register it to your entity, then it's pointless.

 

You need to implement your own custom EntityList / spawn egg / summon command. I've brought this up before, but the Forge team is apparently not keen on making it easier to use, and that's just the way it is.

 

I've posted links to my own code as an example somewhere around here; you can probably find it if you search.

 

To make your entity spawn in the world, you need to add the spawn information to the EntityRegistry for each biome that you want it to spawn in:

EntityRegistry.addSpawn(entity.class, spawnRate, min, max, creatureType, biome);

 

I am not trying to be rude but in the first post I said that "EntityRegistry.addSpawn(entity.class, spawnRate, min, max, creatureType, biome);" was exactly what I was using and it is not working.

When I was using the global unique ID I was registering it to my entity (and diesieben07 said I should not do that so I registered them with my own IDs.)

The spawn eggs and Summon command were(and are) not a problem. They work fine. My mob is not spawning naturally in the world.

 

Here is ALL my current code I am using for entitys

 

 

Registering Entitys :

public class RegisterEntitys {

    public static void RegisterFishyEntitys() {

        GerbsEntityRegistrar.registerEntity(EntityCod.class, "entityCod", 8774806, 11784191,0);
        GerbsEntityRegistrar.registerEntity(EntitySalmon.class, "entitySalmon", 11295305, 16766904,1);
        GerbsEntityRegistrar.registerEntity(EntityPuffer.class, "entityPuffer", 16764928, 3839999,2);
        GerbsEntityRegistrar.registerEntity(EntityClown.class, "entityClown", 16740096, 16777215,3);
    }
}

public class GerbsEntityRegistrar {
    public static void registerEntity(Class entityClass, String name, Integer colorOne, Integer colorTwo, Integer gerbsEntityID) {

        int entityID = 354 + gerbsEntityID;
        int primaryColor = colorOne;
        int secondaryColor = colorTwo;

        EntityRegistry.registerModEntity(entityClass, name, entityID, FishyPlus.instance, 64, 1, true);
        EntityList.addMapping(entityClass, name, entityID, primaryColor, secondaryColor);
        System.out.println("Registering GerbShert's Fish entity " + name + " with ID of " + entityID);
    }
}

Making entities spawn in world

public class RegisterEntitySpawns {
    static BiomeGenBase[] WaterBiomes = {BiomeGenBase.beach, BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.swampland, BiomeGenBase.frozenOcean, BiomeGenBase.frozenRiver};

    public static void registerEntitySpawns() {
        System.out.println("Registering natural fish spawns");
        EntityRegistry.addSpawn(EntityCod.class, 50, 1,7, EnumCreatureType.WATER_CREATURE, BiomeGenBase.deepOcean);
        EntityRegistry.addSpawn(EntityClown.class, 20, 2, 5, EnumCreatureType.WATER_CREATURE, WaterBiomes);
        EntityRegistry.addSpawn(EntitySalmon.class, 20, 2, 7, EnumCreatureType.WATER_CREATURE, WaterBiomes);
    }
}

Link to comment
Share on other sites

And when do you call registerEntitySpawns? I don't see you call that method from anywhere.

 

It needs to be after all entities are registered, and preferably during FMLPostInitializationEvent in case you want to use any modded biomes or anything. That's where I add mob spawns, and that works for me.

I was calling it like this

    public void preInit(FMLPreInitializationEvent event) {
        //Register Entities
        RegisterEntitys.RegisterFishyEntitys();
        //Register Blocks
        RegisterBlocks.RegisterBlocks();
        //Register Items
        RegisterItems.RegisterItems();
        //Register Recipes
        FishyRecipes.RegisterFishyRecipes();
        //Register Entity Spawns
        RegisterEntitySpawns.registerEntitySpawns();

    }

I will try to move it to post init.

Link to comment
Share on other sites

Do something like this:

 

public class ModEntities {

public static final String tag = "EntityName";
public static int startEntityId = 300;

// Put Renderers in ClientProxy//
// Put Guis in CommonProxy//
// Put Creature SFX in Sound and sounds.json//
public static void loadCreatures() {
	registerEntity(EntityZertum.class, "Zertum", 0);
	registerEntityEgg(EntityZertum.class, 0xCCCCCC, 0x33FFFF);
	registerEntity(EntityRedZertum.class, "RedZertum", 1);
	registerEntityEgg(EntityRedZertum.class, 0xCCCCCC, 0xFF0000);
	registerEntity(EntityDestroZertum.class, "DestroZertum", 2);
	registerEntityEgg(EntityDestroZertum.class, 0xCCCCCC, 0xE6CC80);
	registerEntity(EntityIceZertum.class, "IceZertum", 3);
	registerEntityEgg(EntityIceZertum.class, 0xCCCCCC, 0x6699FF);
	registerEntity(EntityForisZertum.class, "ForisZertum", 4);
	registerEntityEgg(EntityForisZertum.class, 0xCCCCCC, 0x33CC33);
	registerEntity(EntityMetalZertum.class, "MetalZertum", 5);
	registerEntityEgg(EntityMetalZertum.class, 0xCCCCCC, 0x666699);
	registerEntity(EntityJakan.class, "Jakan", 30);
	registerEntityEgg(EntityJakan.class, 0x0033CC, 0x00CCFF);
	registerEntity(EntityKortor.class, "Kortor", 31);
	registerEntityEgg(EntityKortor.class, 0x6699FF, 0xD1E0FF);
	registerEntity(EntityRiggator.class, "Riggator", 32);
	registerEntityEgg(EntityRiggator.class, 0x1D302C, 0x671734);
}

public static void loadDarkCreatures() {
	registerEntity(EntityDarkZertum.class, "DarkZertum", 40);
	registerEntityEgg(EntityDarkZertum.class, 0xCCCCCC, 0x470047);
	registerEntity(EntityKurr.class, "Kurr", 41);
	registerEntityEgg(EntityKurr.class, 0xFF0000, 0x660000);
}

public static void loadSpawns() {
	addSpawn(EntityZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.bioZone, ModBiomes.nileSavanna, ModBiomes.nileSavannaPlateau, ModBiomes.nileSwampland, ModBiomes.pinkZone);
	addSpawn(EntityRedZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.redSeed);
	addSpawn(EntityDestroZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.destroZone, ModBiomes.destroZoneHills);
	addSpawn(EntityIceZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.blueTaiga, ModBiomes.blueTaigaHills, ModBiomes.blueColdTaiga, ModBiomes.blueColdTaigaHills);
	addSpawn(EntityForisZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.nileJungle, ModBiomes.nileJungleHills, ModBiomes.nileJungleEdge, ModBiomes.nileSwampland);
	addSpawn(EntityMetalZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.walRockland);
	addSpawn(EntityJakan.class, 100, 2, 3, EnumCreatureType.CREATURE, ModBiomes.walRockland);
	addSpawn(EntityKortor.class, 100, 2, 3, EnumCreatureType.CREATURE, ModBiomes.nileSavanna, ModBiomes.nileSavannaPlateau, ModBiomes.nileJungle, ModBiomes.nileJungleEdge, ModBiomes.nileJungleHills);
	addSpawn(EntityRiggator.class, 100, 2, 3, EnumCreatureType.MONSTER, ModBiomes.bioZone, ModBiomes.nileSwampland, ModBiomes.nileMesa, ModBiomes.nileMesaPlateau, ModBiomes.nileMesaPlateau_F);
}

public static void loadDarkSpawns() {
	addSpawn(EntityDarkZertum.class, 100, 4, 5, EnumCreatureType.CREATURE, ModBiomes.darkWasteland);
	addSpawn(EntityKurr.class, 100, 2, 3, EnumCreatureType.MONSTER, ModBiomes.darkWasteland);
}

public static void loadOthers() {
	registerTileEntity(TileEntityNileWorkbench.class, "Nile Worktable");
	registerTileEntity(TileEntityFoodBowl.class, "Food Bowl");
	registerProjectileEntity(EntityFlamingPoisonball.class, "FPoisonball", 400);
	registerProjectileEntity(EntityGrenade.class, "Grenade", 401);
	registerProjectileEntity(EntityIceball.class, "Iceball", 402);
}

public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) {
	EntityRegistry.addSpawn(entityClass, weightedProb, min, max, typeOfCreature, biomes);
}

public static void registerEntity(Class entityClass, String saveName, int id) {
	EntityRegistry.registerModEntity(entityClass, saveName, id, ZeroQuest.instance, 120, 1, true);
}

public static void registerEntityEgg(Class<? extends Entity> entity, int main, int spots) {
	int id = getUniqueEntityId();
	EntityList.idToClassMapping.put(id, entity);
	EntityList.entityEggs.put(id, new EntityList.EntityEggInfo(id, main, spots));
}

public static void registerTileEntity(Class entityTileClass, String saveName) {
	GameRegistry.registerTileEntity(entityTileClass, saveName);
}

public static void registerProjectileEntity(Class entityClass, String saveName, int id) {
	EntityRegistry.registerModEntity(entityClass, saveName, id, ZeroQuest.instance, 128, 1, true);
}

public static int getUniqueEntityId() {
	do {
		startEntityId++;
	}
	while (EntityList.getStringFromID(startEntityId) != null);

	return startEntityId;
}
}

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Sonic77 adalah pilihan tepat bagi Anda yang menginginkan pengalaman bermain slot yang unggul dengan akun pro Swiss terbaik. Berikut adalah beberapa alasan mengapa Anda harus memilih Sonic77: Slot Gacor Terbaik Kami menyajikan koleksi slot gacor terbaik dari provider terkemuka. Dengan fitur-fitur unggulan dan peluang kemenangan yang tinggi, Anda akan merasakan pengalaman bermain yang tak terlupakan. Akun Pro Swiss Berkualitas Kami menawarkan akun pro Swiss yang berkualitas dan terpercaya. Dengan akun ini, Anda dapat menikmati berbagai keuntungan eksklusif dan fasilitas premium yang tidak tersedia untuk akun reguler.
    • SV388 SITUS RESMI SABUNG AYAM 2024   Temukan situs resmi untuk sabung ayam terpercaya di tahun 2024 dengan SV388! Dengan layanan terbaik dan pengalaman bertaruh yang tak tertandingi, SV388 adalah tempat terbaik untuk pecinta sabung ayam. Daftar sekarang untuk mengakses arena sabung ayam yang menarik dan nikmati kesempatan besar untuk meraih kemenangan. Jelajahi sensasi taruhan yang tak terlupakan di tahun ini dengan SV388! [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]] [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]]   JURAGANSLOT88 SITUS JUDI SLOT ONLINE TERPERCAYA 2024 Jelajahi pengalaman judi slot online terpercaya di tahun 2024 dengan JuraganSlot88! Sebagai salah satu situs terkemuka, JuraganSlot88 menawarkan berbagai pilihan permainan slot yang menarik dengan layanan terbaik dan keamanan yang terjamin. Daftar sekarang untuk mengakses sensasi taruhan yang tak terlupakan dan raih kesempatan besar untuk meraih kemenangan di tahun ini dengan JuraganSlot88 [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]] [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]]
    • Slot Bank MEGA atau Daftar slot Bank MEGA bisa anda lakukan pada situs WINNING303 kapanpun dan dimanapun, Bermodalkan Hp saja anda bisa mengakses chat ke agen kami selama 24 jam full. keuntungan bergabung bersama kami di WINNING303 adalah anda akan mendapatkan bonus 100% khusus member baru yang bergabung dan deposit. Tidak perlu banyak, 5 ribu rupiah saja anda sudah bisa bermain bersama kami di WINNING303 . Tunggu apa lagi ? Segera Klik DAFTAR dan anda akan jadi Jutawan dalam semalam.
    • ladangtoto situs resmi ladangtoto situs terpercaya 2024   Temukan situs resmi dan terpercaya untuk tahun 2024 di LadangToto! Dengan layanan terbaik dan keamanan yang terjamin, LadangToto adalah pilihan utama untuk penggemar judi online. Daftar sekarang untuk mengakses berbagai jenis permainan taruhan, termasuk togel, kasino, dan banyak lagi. Jelajahi sensasi taruhan yang tak terlupakan dan raih kesempatan besar untuk meraih kemenangan di tahun ini dengan LadangToto!" [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]] [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]]
    • WINNING303 DAFTAR SITUS JUDI SLOT RESMI TERPERCAYA 2024 Temukan situs judi slot resmi dan terpercaya untuk tahun 2024 di Winning303! Daftar sekarang untuk mengakses pengalaman berjudi slot yang aman dan terjamin. Dengan layanan terbaik dan reputasi yang kokoh, Winning303 adalah pilihan terbaik bagi para penggemar judi slot. Jelajahi berbagai pilihan permainan dan raih kesempatan besar untuk meraih kemenangan di tahun ini dengan Winning303 [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]] [[jumpuri:❱❱❱❱❱ DAFTAR DI SINI ❰❰❰❰❰ > https://w303.pink/orochimaru]]
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.