Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 19 additions & 33 deletions src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,26 @@ private void applyEntityChanges(final Entity entity) {
}

private boolean checkShouldRemoveEntities(final World world) {
final int worldEntityCount = world.getEntities().size();

if (worldEntityCount > MAX_ENTITIES_PER_WORLD) {
for (Entity entity : world.getEntities()) {
if (!EntityType.PLAYER.equals(entity.getType())) {
try {
entity.remove();
} catch (Exception ignored) {
// Broken entity
continue;
}
}
if (world.getEntityCount() <= MAX_ENTITIES_PER_CHUNK) return false;

for (final Entity entity : world.getEntities()) {
if (EntityType.PLAYER.equals(entity.getType())) continue;

try {
entity.remove();
} catch (final Exception ignored) {
// Broken entity
}
return true;
}
return false;

return true;
}

private boolean isEntityLimitReached(final EntityType entityType, final Chunk chunk,
final World world) {
switch (entityType) {
case PLAYER:
break;
case ENDER_DRAGON:
final int worldDragonCount = world.getEntitiesByClass(EnderDragon.class).size();
final int worldDragonCountLimit = 24;
Expand All @@ -88,12 +87,10 @@ private boolean isEntityLimitReached(final EntityType entityType, final Chunk ch
}
break;
default:
if (!EntityType.PLAYER.equals(entityType)) {
final int chunkEntityCount = chunk.getEntities().length;
final int chunkEntityCount = chunk.getEntities().length;

if (chunkEntityCount >= MAX_ENTITIES_PER_CHUNK) {
return true;
}
if (chunkEntityCount >= MAX_ENTITIES_PER_CHUNK) {
return true;
}
break;
}
Expand Down Expand Up @@ -127,6 +124,9 @@ private void limitCubeSize(final AbstractCubeMob cube) {
private void limitSpawner(final CreatureSpawner spawner) {
if (EntityType.SPAWNER_MINECART.equals(spawner.getSpawnedType())) {
spawner.setSpawnedType(EntityType.MINECART);
} else if (spawner.getSpawnedEntity() instanceof final FallingBlock block
&& block.getBlockData().getMaterial().equals(Material.SPAWNER)) {
spawner.setSpawnedType(EntityType.FALLING_BLOCK);
}

if (spawner.getMinSpawnDelay() < 1000) {
Expand Down Expand Up @@ -220,20 +220,6 @@ void onPreSpawnerSpawn(final PreSpawnerSpawnEvent event) {
}
}

@EventHandler
void onSpawnerSpawn(final SpawnerSpawnEvent event) {
if (EntityType.FALLING_BLOCK.equals(event.getEntityType())) {
final FallingBlock block = (FallingBlock) event.getEntity();

if (!block.getBlockData().getMaterial().equals(Material.SPAWNER)) return;
event.setCancelled(true);

if (event.getSpawner() != null) {
event.getSpawner().setSpawnedType(EntityType.FALLING_BLOCK);
}
}
}

@EventHandler
void onTNTPrime(final TNTPrimeEvent event) {
if (event.getBlock()
Expand Down