Jump to content

[1.10] Removing all natural mob spawns


Aarilight

Recommended Posts

Except entities spawned by mob spawners, my goal is to prevent all entity spawning. Hostile mobs, passive mobs, mobs spawned w/ structure generation, etc. 

 

I've already seen the EntityJoinWorldEvent, and it seems mostly useless for the complexity of what I need to do.

 

Using the following code, I was able to disable most spawns (I think?):

for (BiomeDictionary.Type type : BiomeDictionary.Type.values()) {
    Biome[] biomes = BiomeDictionary.getBiomesForType(type);
    for (Biome biome : biomes) {
        for (EnumCreatureType creatureType : EnumCreatureType.values()) {
	        List<Biome.SpawnListEntry> spawnableList = biome.getSpawnableList(creatureType);
	        spawnableList.clear();
        }
    }
}

 

It doesn't seem to catch everything, however. And since it doesn't prevent structure generation spawns, I need to find a workaround for that as well.

Any ideas/suggestions?

Link to comment
Share on other sites

You can cancel WorldEvent.PotentialSpawns to prevent any entities from being spawned passively, but structures spawn their entities directly and don't fire any events apart from EntityJoinWorldEvent.

 

PopulateChunkEvent.Pre is fired before a chunk is populated (i.e. before most structures are generated) and PopulateChunkEvent.Post is fired after a chunk has been populated (i.e. after most structures are generated), so you can use these to set a per-chunk boolean value and use this in conjunction with EntityJoinWorldEvent to prevent any entities from being spawned during structure generation.

 

Unfortunately mod world generators all run after PopulateChunkEvent.Post, as do structures generated in IChunkGenerator#generateStructures rather than IChunkGenerator#populate. The only vanilla structure to do this is the Ocean Monument.

 

You could suggest that entities spawned by structures fire a unique event (either on the forums or on GitHub), but there's no guarantee that it will be accepted (and very little chance it will be added to 1.10.2).

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

So what I'm thinking now is cancel all PotentialSpawns, then cancel any EntityJoinWorldEvents which are EntityLivings that don't have NBT data saying that they were spawned by my mob spawners. Unfortunately, I don't think there's a way for me to set custom NBT data on an entity with a vanilla mob spawner, so I'll have to make a wrapper class for my mob spawners now as well. Oh well. I figured it'd happen eventually. =P

 

If I find time I'll file a request for those events, but altho they'll make things easier for me I'm not really sure they're worth the effort. I'm the first person trying to prevent spawns in generated structures, as far as I can tell by googling. xD

 

Thanks a bunch for your very informative post, btw!

Edited by Aarilight
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



×
×
  • Create New...

Important Information

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