diff --git a/src/main/java/world/bentobox/greenhouses/listeners/GreenhouseGuard.java b/src/main/java/world/bentobox/greenhouses/listeners/GreenhouseGuard.java index 2b0a051..377f593 100644 --- a/src/main/java/world/bentobox/greenhouses/listeners/GreenhouseGuard.java +++ b/src/main/java/world/bentobox/greenhouses/listeners/GreenhouseGuard.java @@ -10,6 +10,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; import world.bentobox.greenhouses.Greenhouses; import world.bentobox.greenhouses.data.Greenhouse; @@ -78,6 +79,23 @@ public class GreenhouseGuard implements Listener { .anyMatch(this::inGreenhouse)); } + + /** + * Guard Greenhouse from natural entity spawning. + * + * @param spawnEvent the spawn event + */ + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onCreatureSpawn(CreatureSpawnEvent spawnEvent) + { + if (CreatureSpawnEvent.SpawnReason.NATURAL == spawnEvent.getSpawnReason()) + { + // Natural spawn events should be cancelled. Greenhouse spawns its own mobs. + spawnEvent.setCancelled(this.inGreenhouse(spawnEvent.getLocation())); + } + } + + private boolean inGreenhouse(Location l) { return addon.getManager().getMap().getGreenhouse(l).map(g -> g.isRoofOrWallBlock(l)).orElse(false); }