mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2024-11-22 18:47:20 +01:00
Now removes projectiles shot by the entities removed by the purger. Should fix #958.
This commit is contained in:
parent
4780f87278
commit
a65dc4966b
@ -10,7 +10,6 @@ package com.onarandombox.MultiverseCore.utils;
|
|||||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||||
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
|
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
|
||||||
import com.onarandombox.MultiverseCore.api.WorldPurger;
|
import com.onarandombox.MultiverseCore.api.WorldPurger;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Animals;
|
import org.bukkit.entity.Animals;
|
||||||
@ -18,11 +17,14 @@ import org.bukkit.entity.Entity;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Ghast;
|
import org.bukkit.entity.Ghast;
|
||||||
import org.bukkit.entity.Golem;
|
import org.bukkit.entity.Golem;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Monster;
|
import org.bukkit.entity.Monster;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.entity.Slime;
|
import org.bukkit.entity.Slime;
|
||||||
import org.bukkit.entity.Squid;
|
import org.bukkit.entity.Squid;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
@ -86,18 +88,41 @@ public class SimpleWorldPurger implements WorldPurger {
|
|||||||
if (world == null) {
|
if (world == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int projectilesKilled = 0;
|
||||||
int entitiesKilled = 0;
|
int entitiesKilled = 0;
|
||||||
boolean specifiedAll = thingsToKill.contains("ALL");
|
boolean specifiedAll = thingsToKill.contains("ALL");
|
||||||
boolean specifiedAnimals = thingsToKill.contains("ANIMALS") || specifiedAll;
|
boolean specifiedAnimals = thingsToKill.contains("ANIMALS") || specifiedAll;
|
||||||
boolean specifiedMonsters = thingsToKill.contains("MONSTERS") || specifiedAll;
|
boolean specifiedMonsters = thingsToKill.contains("MONSTERS") || specifiedAll;
|
||||||
for (Entity e : world.getEntities()) {
|
List<Entity> worldEntities = world.getEntities();
|
||||||
|
List<LivingEntity> livingEntities = new ArrayList<LivingEntity>(worldEntities.size());
|
||||||
|
List<Projectile> projectiles = new ArrayList<Projectile>(worldEntities.size());
|
||||||
|
for (final Entity e : worldEntities) {
|
||||||
|
if (e instanceof Projectile) {
|
||||||
|
final Projectile p = (Projectile) e;
|
||||||
|
if (p.getShooter() != null) {
|
||||||
|
projectiles.add((Projectile) e);
|
||||||
|
}
|
||||||
|
} else if (e instanceof LivingEntity) {
|
||||||
|
livingEntities.add((LivingEntity) e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (final LivingEntity e : livingEntities) {
|
||||||
if (killDecision(e, thingsToKill, negateAnimals, negateMonsters, specifiedAnimals, specifiedMonsters)) {
|
if (killDecision(e, thingsToKill, negateAnimals, negateMonsters, specifiedAnimals, specifiedMonsters)) {
|
||||||
|
final Iterator<Projectile> it = projectiles.iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
final Projectile p = it.next();
|
||||||
|
if (p.getShooter().equals(e)) {
|
||||||
|
p.remove();
|
||||||
|
it.remove();
|
||||||
|
projectilesKilled++;
|
||||||
|
}
|
||||||
|
}
|
||||||
e.remove();
|
e.remove();
|
||||||
entitiesKilled++;
|
entitiesKilled++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sender != null) {
|
if (sender != null) {
|
||||||
sender.sendMessage(entitiesKilled + " entities purged from the world '" + world.getName() + "'");
|
sender.sendMessage(entitiesKilled + " entities purged from the world '" + world.getName() + "' along with " + projectilesKilled + " projectiles that belonged to them.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user