diff --git a/game/src/main/org/apollo/game/fs/decoder/GameObjectDecoder.java b/game/src/main/org/apollo/game/fs/decoder/GameObjectDecoder.java
index 25a20d60..3667ad2c 100644
--- a/game/src/main/org/apollo/game/fs/decoder/GameObjectDecoder.java
+++ b/game/src/main/org/apollo/game/fs/decoder/GameObjectDecoder.java
@@ -206,7 +206,7 @@ public final class GameObjectDecoder implements Runnable {
Position position = new Position(x, y, height);
if (!previous.contains(position)) {
- previous = regions.fromPosition(new Position(x, y, height));
+ previous = regions.fromPosition(position);
}
previous.getMatrix(height).block(localX, localY);
@@ -270,9 +270,11 @@ public final class GameObjectDecoder implements Runnable {
while (true) {
int attributeId = buffer.get() & 0xFF;
- if (attributeId == 1) {
+ if (attributeId == 0) {
+ decodeAttributes(attributes, x + localX, y + localY, height);
+ break;
+ } else if (attributeId == 1) {
buffer.get();
- } else if (attributeId == 0) {
decodeAttributes(attributes, x + localX, y + localY, height);
break;
} else if (attributeId <= 49) {
diff --git a/game/src/main/org/apollo/game/model/area/Region.java b/game/src/main/org/apollo/game/model/area/Region.java
index 23c0fe07..e2add931 100644
--- a/game/src/main/org/apollo/game/model/area/Region.java
+++ b/game/src/main/org/apollo/game/model/area/Region.java
@@ -103,7 +103,7 @@ public final class Region {
/**
* Creates a new Region with the specified {@link RegionCoordinates}.
*
- * @param coordinates The coordinates.
+ * @param coordinates The RegionCoordinates.
*/
public Region(RegionCoordinates coordinates) {
this.coordinates = coordinates;
@@ -120,7 +120,7 @@ public final class Region {
* 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.
+ * @param notify Whether or not 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, boolean notify) {
@@ -138,7 +138,7 @@ public final class Region {
/**
* 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.
- *
+ *
* By default, this method notifies RegionListeners for this region of the addition.
*
* @param entity The Entity.
@@ -150,7 +150,7 @@ public final class Region {
/**
* Checks if this Region contains the specified Entity.
- *
+ *
* This method operates in constant time.
*
* @param entity The Entity.
@@ -193,7 +193,7 @@ public final class Region {
/**
* Gets this Region's {@link RegionCoordinates}.
*
- * @return The Region coordinates.
+ * @return The RegionCoordinates.
*/
public RegionCoordinates getCoordinates() {
return coordinates;
@@ -203,8 +203,8 @@ public final class Region {
* Gets a shallow copy of the {@link Set} of {@link Entity} objects at the specified {@link Position}. The returned
* type will be immutable.
*
- * @param position The position containing the entities.
- * @return The list.
+ * @param position The Position containing the entities.
+ * @return The Set. Will be immutable.
*/
public Set getEntities(Position position) {
Set set = entities.get(position);
@@ -218,7 +218,7 @@ public final class Region {
*
* @param position The {@link Position} containing the entities.
* @param types The {@link EntityType}s.
- * @return The set of entities.
+ * @return The Set of Entity objects.
*/
public Set getEntities(Position position, EntityType... types) {
Set local = entities.get(position);
@@ -271,12 +271,12 @@ public final class Region {
}
/**
- * Removes a {@link Entity} from this Region.
+ * Removes an {@link Entity} from this Region.
*
* @param entity The Entity.
* @throws IllegalArgumentException If the Entity does not belong in this Region, or if it was never added.
*/
- public void removeEntity(Entity entity) { // TODO entity update stuff
+ public void removeEntity(Entity entity) {
Position position = entity.getPosition();
checkPosition(position);
diff --git a/game/src/main/org/apollo/game/model/area/collision/CollisionMatrix.java b/game/src/main/org/apollo/game/model/area/collision/CollisionMatrix.java
index acb95b84..23c058fe 100644
--- a/game/src/main/org/apollo/game/model/area/collision/CollisionMatrix.java
+++ b/game/src/main/org/apollo/game/model/area/collision/CollisionMatrix.java
@@ -73,7 +73,7 @@ public final class CollisionMatrix {
* @param x The x coordinate.
* @param y The y coordinate.
* @param flags The CollisionFlags.
- * @return {@code true} if all of the CollisionFlags are set, otherwise {@code false}.
+ * @return {@code true} iff all of the CollisionFlags are set.
*/
public boolean all(int x, int y, CollisionFlag... flags) {
for (CollisionFlag flag : flags) {
@@ -92,7 +92,7 @@ public final class CollisionMatrix {
* @param x The x coordinate.
* @param y The y coordinate.
* @param flags The CollisionFlags.
- * @return {@code true} if any of the CollisionFlags are set, otherwise {@code false}.
+ * @return {@code true} iff any of the CollisionFlags are set.
*/
public boolean any(int x, int y, CollisionFlag... flags) {
for (CollisionFlag flag : flags) {
@@ -115,8 +115,8 @@ public final class CollisionMatrix {
}
/**
- * Clears (i.e. sets to {@code false}) the value of the specified {@link CollisionFlag} for the specified coordinate
- * pair.
+ * Clears (i.e. sets to {@code false}) the value of the specified {@link CollisionFlag} for the specified
+ * coordinate pair.
*
* @param x The x coordinate.
* @param y The y coordinate.
@@ -132,7 +132,7 @@ public final class CollisionMatrix {
* @param x The x coordinate.
* @param y The y coordinate.
* @param flag The CollisionFlag.
- * @return {@code true} if the CollisionFlag is set, {@code false} if not.
+ * @return {@code true} iff the CollisionFlag is set.
*/
public boolean flagged(int x, int y, CollisionFlag flag) {
return (get(x, y) & flag.asByte()) != 0;
@@ -159,17 +159,6 @@ public final class CollisionMatrix {
set(x, y, ALL_ALLOWED);
}
- /**
- * Sets the appropriate index for the specified coordinate pair to the specified value.
- *
- * @param x The x coordinate.
- * @param y The y coordinate.
- * @param value The value.
- */
- private void set(int x, int y, byte value) {
- matrix[indexOf(x, y)] = value;
- }
-
/**
* Sets (i.e. sets to {@code true}) the value of the specified {@link CollisionFlag} for the specified coordinate
* pair.
@@ -184,7 +173,8 @@ public final class CollisionMatrix {
@Override
public String toString() {
- return MoreObjects.toStringHelper(this).add("width", width).add("length", length).add("matrix", Arrays.toString(matrix)).toString();
+ return MoreObjects.toStringHelper(this).add("width", width).add("length", length)
+ .add("matrix", Arrays.toString(matrix)).toString();
}
/**
@@ -195,7 +185,7 @@ public final class CollisionMatrix {
* @param y The y coordinate.
* @param entity The {@link EntityType}.
* @param direction The {@link Direction} the Entity is approaching from.
- * @return {@code true} if the tile at the specified coordinate pair is not traversable, {@code false} if not.
+ * @return {@code true} iff the tile at the specified coordinate pair is not traversable.
*/
public boolean untraversable(int x, int y, EntityType entity, Direction direction) {
CollisionFlag[] flags = CollisionFlag.forType(entity);
@@ -203,19 +193,19 @@ public final class CollisionMatrix {
switch (direction) {
case NORTH_WEST:
- return any(x, y, flags[south], flags[east]);
+ return flagged(x, y, flags[south]) || flagged(x, y, flags[east]);
case NORTH:
return flagged(x, y, flags[south]);
case NORTH_EAST:
- return any(x, y, flags[south], flags[west]);
+ return flagged(x, y, flags[south]) || flagged(x, y, flags[west]);
case EAST:
return flagged(x, y, flags[west]);
case SOUTH_EAST:
- return any(x, y, flags[north], flags[west]);
+ return flagged(x, y, flags[north]) || flagged(x, y, flags[west]);
case SOUTH:
return flagged(x, y, flags[north]);
case SOUTH_WEST:
- return any(x, y, flags[north], flags[east]);
+ return flagged(x, y, flags[north]) || flagged(x, y, flags[east]);
case WEST:
return flagged(x, y, flags[east]);
default:
@@ -234,8 +224,18 @@ public final class CollisionMatrix {
private int indexOf(int x, int y) {
Preconditions.checkElementIndex(x, width, "X coordinate must be [0, " + width + "), received " + x + ".");
Preconditions.checkElementIndex(y, length, "Y coordinate must be [0, " + length + "), received " + y + ".");
- int index = y * width + x;
- return index;
+ return y * width + x;
+ }
+
+ /**
+ * Sets the appropriate index for the specified coordinate pair to the specified value.
+ *
+ * @param x The x coordinate.
+ * @param y The y coordinate.
+ * @param value The value.
+ */
+ private void set(int x, int y, byte value) {
+ matrix[indexOf(x, y)] = value;
}
}
\ No newline at end of file