Merge pull request #157 from ryleykimmel/issue142

Fix issue #142
This commit is contained in:
Major
2016-02-05 17:27:51 +00:00
4 changed files with 27 additions and 22 deletions
+12 -14
View File
@@ -309,13 +309,12 @@ public final class World {
* @param npc The npc.
*/
public void unregister(final Npc npc) {
if (npcRepository.remove(npc)) {
Region region = regions.fromPosition(npc.getPosition());
Preconditions.checkNotNull(npc, "Npc may not be null.");
region.removeEntity(npc);
} else {
logger.warning("Could not find npc " + npc + " to unregister!");
}
Region region = regions.fromPosition(npc.getPosition());
region.removeEntity(npc);
npcRepository.remove(npc);
}
/**
@@ -324,15 +323,14 @@ public final class World {
* @param player The player.
*/
public void unregister(final Player player) {
if (playerRepository.remove(player)) {
players.remove(NameUtil.encodeBase37(player.getUsername()));
logger.info("Unregistered player: " + player + " [count=" + playerRepository.size() + "]");
Preconditions.checkNotNull(player, "Player may not be null.");
players.remove(NameUtil.encodeBase37(player.getUsername()));
Region region = regions.fromPosition(player.getPosition());
region.removeEntity(player);
} else {
logger.warning("Could not find player " + player + " to unregister!");
}
Region region = regions.fromPosition(player.getPosition());
region.removeEntity(player);
playerRepository.remove(player);
logger.info("Unregistered player: " + player + " [count=" + playerRepository.size() + "]");
}
/**
@@ -18,6 +18,7 @@ import org.apollo.game.model.area.update.GroupableEntity;
import org.apollo.game.model.area.update.UpdateOperation;
import org.apollo.game.model.entity.Entity;
import org.apollo.game.model.entity.EntityType;
import org.apollo.game.model.entity.Mob;
import org.apollo.game.model.entity.obj.DynamicGameObject;
import com.google.common.base.MoreObjects;
@@ -175,30 +175,27 @@ public final class MobRepository<T extends Mob> implements Iterable<T> {
* Removes a Mob from the repository.
*
* @param mob The Mob to remove.
* @return {@code true} if the Mob was removed, {@code false} if not.
*/
public boolean remove(T mob) {
Preconditions.checkNotNull(mob);
return remove(mob.getIndex());
public void remove(T mob) {
Preconditions.checkNotNull(mob, "Mob may not be null.");
remove(mob.getIndex());
}
/**
* Removes a Mob from the repository by the specified index.
*
* @param index The index of the Mob to remove.
* @return {@code true} if the Mob at the specified index was removed otherwise {@code false}.
*/
public boolean remove(int index) {
private void remove(int index) {
Mob mob = get(index);
if (mob.getIndex() != index) {
return false;
throw new IllegalArgumentException("MobRepository index mismatch, cannot remove Mob.");
}
mobs[index - 1] = null;
mob.setIndex(-1);
size--;
return true;
}
/**
@@ -73,6 +73,15 @@ public final class MobRepositoryTest {
assertEquals(0, players.size());
}
/**
* Tests failing of {@link MobRepository#remove(Mob)}
*/
@Test(expected = NullPointerException.class)
public void testRemoveNull() {
MobRepository<Player> players = new MobRepository<>(CAPACITY);
players.remove(null);
}
/**
* Ensures that a MobRepository maintains a fixed capacity.
*/