Posted February 16, 20178 yr 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?
February 16, 20178 yr 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). 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.
February 17, 20178 yr Author 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. Thanks a bunch for your very informative post, btw! Edited February 17, 20178 yr by Aarilight
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.