Jump to content

Recommended Posts

Posted (edited)

I am trying to spawn a mob in lava. I looked into how mobs are spawned and saw that their is no way to do this as there are checks in place that do not allow this. What would be the best way to spawn mobs in lava?

Edited by LogicTechCorp
Posted (edited)

I don't think this is currently possible using the vanilla passive spawning system.

 

When WorldEntitySpawner#findChunksForSpawning tries to spawn an entity, it calls WorldServer#canCreatureTypeSpawnHere and WorldEntitySpawner#canCreatureTypeSpawnAtLocation and only proceeds if they both return true. You can use WorldEvent.PotentialSpawns to change the result of the former, but the latter is hardcoded to check for water if the entity uses EntityLiving.SpawnPlacementType.IN_WATER and call Block#canCreatureSpawn (which calls (Block#isSideSolid with EnumFacing.UP) for any other EntityLiving.SpawnPlacementType.

 

Lava isn't water or a solid block, so entities won't be spawned in it.

 

I think Forge would need to add an event in WorldEntitySpawner#canCreatureTypeSpawnAtLocation to allow the result of the method to be changed.

Edited by Choonster
Added missing word
  • 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.

  • 1 month later...
Posted
On 2/11/2017 at 8:51 AM, Choonster said:

I don't think this is currently possible using the vanilla passive spawning system.

 

When WorldEntitySpawner#findChunksForSpawning tries to spawn an entity, it calls WorldServer#canCreatureTypeSpawnHere and WorldEntitySpawner#canCreatureTypeSpawnAtLocation and only proceeds if they both return true. You can use WorldEvent.PotentialSpawns to change the result of the former, but the latter is hardcoded to check for water if the entity uses EntityLiving.SpawnPlacementType.IN_WATER and call Block#canCreatureSpawn (which calls (Block#isSideSolid with EnumFacing.UP) for any other EntityLiving.SpawnPlacementType.

 

Lava isn't water or a solid block, so entities won't be spawned in it.

 

I think Forge would need to add an event in WorldEntitySpawner#canCreatureTypeSpawnAtLocation to allow the result of the method to be changed.

@Choonster Do you have any recommendations on what the event should be? I am going to try and see what I can come up with but would like to know where to start. 

Posted (edited)
2 hours ago, LogicTechCorp said:

@Choonster Do you have any recommendations on what the event should be? I am going to try and see what I can come up with but would like to know where to start. 

 

It should probably be fired just before the second if statement in WorldEntitySpawner.canCreatureTypeSpawnAtLocation. The event should include the EntityLiving.SpawnPlacementType, World, BlockPos and IBlockState and have an Event.Result that controls the behaviour (like LivingSpawnEvent.CheckSpawn).

 

An alternative would be to add a method to EntityLiving.SpawnPlacementType that takes the World, BlockPos and IBlockState and returns a nullable Boolean or Optional<Boolean> functioning similar to Event.Result (allow, deny, default). You'd then need to add a field to EntityLiving.SpawnPlacementType to hold a delegate function for the method to call (like EnumEnchantmentType#canEnchantItem/EnumEnchantmentType#delegate). A Function<Triple<World, BlockPos, IBlockState>> would work, though it's a bit ugly.

Edited by Choonster

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.

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.