mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-10-01 02:17:35 +00:00
Fix the re-addition of StaticObjects to the game world.
This commit is contained in:
@@ -1,13 +1,6 @@
|
||||
package org.apollo.game.model;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.apollo.Service;
|
||||
import org.apollo.fs.IndexedFileSystem;
|
||||
import org.apollo.fs.decoder.GameObjectDecoder;
|
||||
@@ -37,7 +30,13 @@ import org.apollo.util.MobRepository;
|
||||
import org.apollo.util.NameUtil;
|
||||
import org.apollo.util.plugin.PluginManager;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* The world class is a singleton which contains objects like the {@link MobRepository} for players and NPCs. It should
|
||||
@@ -385,12 +384,12 @@ public final class World {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds entities to regions in the {@link RegionRepository}.
|
||||
* Adds entities to regions in the {@link RegionRepository}. By default, we do not notify listeners.
|
||||
*
|
||||
* @param entities The entities.
|
||||
*/
|
||||
private void placeEntities(Entity... entities) {
|
||||
Arrays.stream(entities).forEach(entity -> regions.fromPosition(entity.getPosition()).addEntity(entity));
|
||||
Arrays.stream(entities).forEach(entity -> regions.fromPosition(entity.getPosition()).addEntity(entity, false));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +1,9 @@
|
||||
package org.apollo.game.model.area;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import org.apollo.game.message.impl.RegionUpdateMessage;
|
||||
import org.apollo.game.model.Direction;
|
||||
import org.apollo.game.model.Position;
|
||||
@@ -19,10 +13,8 @@ import org.apollo.game.model.entity.Entity;
|
||||
import org.apollo.game.model.entity.Entity.EntityType;
|
||||
import org.apollo.game.model.entity.obj.GameObject;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* An 8x8 area of the map.
|
||||
@@ -41,7 +33,7 @@ public final class Region {
|
||||
@Override
|
||||
public void execute(Region region, Entity entity, EntityUpdateType update) {
|
||||
EntityType type = entity.getEntityType();
|
||||
if (type != EntityType.PLAYER && type != EntityType.NPC && (type != EntityType.STATIC_OBJECT || update == EntityUpdateType.REMOVE)) {
|
||||
if (type != EntityType.PLAYER && type != EntityType.NPC) {
|
||||
region.record(entity, update);
|
||||
}
|
||||
}
|
||||
@@ -116,13 +108,14 @@ public final class Region {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link Entity} from to Region. Note that this does not spawn the Entity, or do any other action other than
|
||||
* Adds a {@link Entity} to the Region. Note that this does not spawn the Entity, or do any other action other than
|
||||
* register it to this Region.
|
||||
*
|
||||
* @param entity The Entity.
|
||||
* @param notify A flag indicating whether the {@link RegionListener}s for this Region should be notified.
|
||||
* @throws IllegalArgumentException If the Entity does not belong in this Region.
|
||||
*/
|
||||
public void addEntity(Entity entity) {
|
||||
public void addEntity(Entity entity, boolean notify) {
|
||||
Position position = entity.getPosition();
|
||||
checkPosition(position);
|
||||
|
||||
@@ -133,17 +126,33 @@ public final class Region {
|
||||
System.out.println("Adding entity " + entity + " to " + entity.getPosition());
|
||||
}
|
||||
|
||||
if (notify) {
|
||||
notifyListeners(entity, EntityUpdateType.ADD);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link Entity} to the Region. Note that this does not spawn the Entity, or do any other action other than
|
||||
* register it to this Region.
|
||||
* <p/>
|
||||
* By default, this method notifies RegionListeners for this region of the addition.
|
||||
*
|
||||
* @param entity The Entity.
|
||||
* @throws IllegalArgumentException If the Entity does not belong in this Region.
|
||||
*/
|
||||
public void addEntity(Entity entity) {
|
||||
addEntity(entity, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this Region contains the specified Entity.
|
||||
* <p>
|
||||
* <p/>
|
||||
* This method operates in constant time.
|
||||
*
|
||||
* @param entity The Entity.
|
||||
* @return {@code true} if this Region contains the Entity, otherwise {@code false}.
|
||||
*/
|
||||
|
||||
public boolean contains(Entity entity) {
|
||||
Position position = entity.getPosition();
|
||||
Set<Entity> local = entities.get(position);
|
||||
@@ -304,7 +313,10 @@ public final class Region {
|
||||
int height = entity.getPosition().getHeight();
|
||||
|
||||
updates.get(height).add(message);
|
||||
|
||||
if (entity.getEntityType() != EntityType.STATIC_OBJECT || type == EntityUpdateType.REMOVE) {
|
||||
snapshots.get(height).add(message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user