Jump to content

Recommended Posts

Posted

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.

Posted

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));
    }
}

Posted

I am new to this and followed a tutorial for registering the entities. So I do not know how to register them without using the global id. How would you do it?

Posted

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
Posted

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.

 

 

Posted

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.

Posted

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.

Posted

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);

Posted

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);
    }
}

Posted

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.

Posted

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!

Posted

I use that and I am still able to use the vanilla eggs. Actually, when I updated to 1.8, I wasn't able to use custom egg items, only the vanilla ones

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!

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



×
×
  • Create New...

Important Information

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