diff --git a/data/plugins/bootstrap.rb b/data/plugins/bootstrap.rb
index 7cf977d7..d0b6ea03 100644
--- a/data/plugins/bootstrap.rb
+++ b/data/plugins/bootstrap.rb
@@ -18,8 +18,8 @@ java_import 'org.apollo.game.command.CommandListener'
java_import 'org.apollo.game.event.handler.EventHandler'
java_import 'org.apollo.game.login.LoginListener'
java_import 'org.apollo.game.login.LogoutListener'
-java_import 'org.apollo.game.model.Player'
java_import 'org.apollo.game.model.World'
+java_import 'org.apollo.game.model.entity.Player'
java_import 'org.apollo.game.model.settings.PrivilegeLevel'
java_import 'org.apollo.game.scheduling.ScheduledTask'
diff --git a/data/plugins/cmd/animate/animate.rb b/data/plugins/cmd/animate/animate.rb
index 890a3d89..b3dc5e24 100644
--- a/data/plugins/cmd/animate/animate.rb
+++ b/data/plugins/cmd/animate/animate.rb
@@ -22,5 +22,6 @@ on :command, :graphic, RIGHTS_MOD do |player, command|
return
end
+ player.send(DisplayCrossbonesEvent.new(true ))
player.play_graphic(Graphic.new(args[0].to_i))
end
\ No newline at end of file
diff --git a/data/plugins/cmd/lookup/lookup.rb b/data/plugins/cmd/lookup/lookup.rb
index 48d0fc21..85b0370b 100644
--- a/data/plugins/cmd/lookup/lookup.rb
+++ b/data/plugins/cmd/lookup/lookup.rb
@@ -1,11 +1,11 @@
require 'java'
-java_import 'org.apollo.game.model.Entity'
-java_import 'org.apollo.game.model.Player'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.def.ItemDefinition'
java_import 'org.apollo.game.model.def.NpcDefinition'
java_import 'org.apollo.game.model.def.ObjectDefinition'
+java_import 'org.apollo.game.model.entity.Entity'
+java_import 'org.apollo.game.model.entity.Player'
on :command, :lookup, RIGHTS_ADMIN do |player, command|
args = command.arguments.to_a
diff --git a/data/plugins/cmd/npc/spawn.rb b/data/plugins/cmd/npc/spawn.rb
index 091a19f3..8180d8e1 100644
--- a/data/plugins/cmd/npc/spawn.rb
+++ b/data/plugins/cmd/npc/spawn.rb
@@ -1,8 +1,8 @@
require 'java'
-java_import 'org.apollo.game.model.Npc'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.Position'
+java_import 'org.apollo.game.model.entity.Npc'
# An array of npcs that cannot be spawned.
blacklist = []
diff --git a/data/plugins/cmd/skill/skill.rb b/data/plugins/cmd/skill/skill.rb
index c84f5938..b252a29b 100644
--- a/data/plugins/cmd/skill/skill.rb
+++ b/data/plugins/cmd/skill/skill.rb
@@ -1,6 +1,6 @@
require 'java'
-java_import 'org.apollo.game.model.SkillSet'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.SkillSet'
+java_import 'org.apollo.game.model.entity.Skill'
# Maximises the player's skill set.
on :command, :max, RIGHTS_ADMIN do |player, command|
diff --git a/data/plugins/consumables/food.rb b/data/plugins/consumables/food.rb
index 2aa87a3a..53f2daca 100644
--- a/data/plugins/consumables/food.rb
+++ b/data/plugins/consumables/food.rb
@@ -1,8 +1,8 @@
require 'java'
java_import 'org.apollo.game.model.Animation'
-java_import 'org.apollo.game.model.Player'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.Skill'
+java_import 'org.apollo.game.model.entity.Player'
EAT_FOOD_SOUND = 317
diff --git a/data/plugins/consumables/potions.rb b/data/plugins/consumables/potions.rb
index 55ff326d..5311a98e 100644
--- a/data/plugins/consumables/potions.rb
+++ b/data/plugins/consumables/potions.rb
@@ -1,6 +1,6 @@
require 'java'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.Skill'
DRINK_POTION_SOUND = 334
diff --git a/data/plugins/dummy/dummy.rb b/data/plugins/dummy/dummy.rb
index 84970805..4add5051 100644
--- a/data/plugins/dummy/dummy.rb
+++ b/data/plugins/dummy/dummy.rb
@@ -1,7 +1,7 @@
require 'java'
java_import 'org.apollo.game.action.DistancedAction'
java_import 'org.apollo.game.model.Animation'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.Skill'
# TODO: this shouldn't use the punch animation/delay, but should use the one
# from the active weapon/attack style (according to Scu11 anyway).
diff --git a/data/plugins/entity/attributes/attributes.rb b/data/plugins/entity/attributes/attributes.rb
index 662ac2b2..0f81c6ba 100644
--- a/data/plugins/entity/attributes/attributes.rb
+++ b/data/plugins/entity/attributes/attributes.rb
@@ -1,16 +1,11 @@
require 'java'
-java_import 'org.apollo.game.model.Entity'
+java_import 'org.apollo.game.model.entity.Entity'
# Maps attribute names (i.e. symbols) to attribute definitions.
ATTRIBUTE_DEFINITIONS = {}
class Entity
-
- # The map of strings to attributes.
- def attributes
- @attributes ||= {}
- end
# Overridies method_missing
def method_missing(symbol, *args)
@@ -20,11 +15,13 @@ class Entity
raise "Error - expected argument count of 1, received #{args.length}" unless args.length == 1
name = name[0...-1].strip # Drop the equals and preceeding whitespace
- attributes[name] = args[0]
+ attributes[name] = args[0].is_a?(Symbol) ? args[0].to_s : args[0]
elsif ATTRIBUTE_DEFINITIONS[name] == nil
super(symbol, *args)
else
- return attributes[name] || ATTRIBUTE_DEFINITIONS[name].default
+ if attributes[name] == nil then return ATTRIBUTE_DEFINITIONS[name].default end
+
+ return ATTRIBUTE_DEFINITIONS[name].type == :symbol ? attributes[name].to_sym : attributes[name]
end
end
@@ -36,7 +33,7 @@ end
# An attribute belonging to an entity.
class AttributeDefinition
- attr_reader :default, :persistence
+ attr_reader :default, :type, :persistence
def initialize(default, persistence=:transient)
@default = default
diff --git a/data/plugins/entity/spawning/npc-spawn.rb b/data/plugins/entity/spawning/npc-spawn.rb
index 2c2e4b03..8be1bf77 100644
--- a/data/plugins/entity/spawning/npc-spawn.rb
+++ b/data/plugins/entity/spawning/npc-spawn.rb
@@ -3,10 +3,10 @@ require 'java'
java_import 'org.apollo.game.action.Action'
java_import 'org.apollo.game.model.Animation'
java_import 'org.apollo.game.model.Graphic'
-java_import 'org.apollo.game.model.Npc'
java_import 'org.apollo.game.model.Position'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.def.NpcDefinition'
+java_import 'org.apollo.game.model.entity.Npc'
# Information about npc spawning
#
@@ -61,16 +61,12 @@ end
# Applies a decoded hash (one aquired using parse_hash) to the specified npc.
def apply_decoded_hash(npc, hash)
hash.each do |key, value|
- if key == :face
- npc.turn_to(value)
- elsif key == :boundary
- npc.boundary = value
- elsif key == :spawn_animation
- npc.play_animation(Animation.new(value))
- elsif key == :spawn_graphic
- npc.play_graphic(Graphic.new(value))
- else
- raise "Unrecognised key #{key} - value #{value}."
+ case key
+ when :face then npc.turn_to(value)
+ when :boundary then npc.boundary = value
+ when :spawn_animation then npc.play_animation(Animation.new(value))
+ when :spawn_graphic then npc.play_graphic(Graphic.new(value))
+ else raise "Unrecognised key #{key} - value #{value}."
end
end
end
@@ -78,23 +74,20 @@ end
# Parses the remaining key-value pairs in the hash.
def decode_hash(position, hash)
decoded = {}
- hash.each do |key, value|
- if key == :face
- facing_position = direction_to_position(value, position)
- decoded[:face] = facing_position
- elsif key == :bounds
- decoded[:boundary] = value
- elsif key == :delta_bounds
- dx, dy, x, y, z = value[0], value[1], position.x, position.y, position.height
- raise 'Delta values cannot be < 0.' if dx < 0 || dy < 0
+ hash.each do |key, value|
+ case key
+ when :face
+ facing_position = direction_to_position(value, position)
+ decoded[:face] = facing_position
+ when :delta_bounds
+ dx, dy, x, y, z = value[0], value[1], position.x, position.y, position.height
+ raise 'Delta values cannot be less than 0.' if dx < 0 || dy < 0
- decoded[:boundary] = [ Position.new(x + dx, y, z), Position.new(x, y + dy, z), Position.new(x - dx, y, z), Position.new(x, y - dy, z) ]
- elsif key == :spawn_animation
- decoded[:spawn_animation] = Animation.new(value)
- elsif key == :spawn_graphic
- decoded[:spawn_graphic] = Graphic.new(value)
- else
- raise "Unrecognised key #{key} - value #{value}."
+ decoded[:boundary] = [ Position.new(x + dx, y, z), Position.new(x, y + dy, z), Position.new(x - dx, y, z), Position.new(x, y - dy, z) ]
+ when :bounds then decoded[:boundary] = value
+ when :spawn_animation then decoded[:spawn_animation] = Animation.new(value)
+ when :spawn_graphic then decoded[:spawn_graphic] = Graphic.new(value)
+ else raise "Unrecognised key #{key} - value #{value}."
end
end
return decoded
diff --git a/data/plugins/entity/spawning/plugin.xml b/data/plugins/entity/spawning/plugin.xml
index ffd4ec9f..e164c47b 100644
--- a/data/plugins/entity/spawning/plugin.xml
+++ b/data/plugins/entity/spawning/plugin.xml
@@ -9,6 +9,7 @@
+
\ No newline at end of file
diff --git a/data/plugins/private-messaging/friend.rb b/data/plugins/private-messaging/friend.rb
index 57adacef..57b2ec49 100644
--- a/data/plugins/private-messaging/friend.rb
+++ b/data/plugins/private-messaging/friend.rb
@@ -2,10 +2,10 @@ require 'java'
java_import 'org.apollo.game.event.impl.FriendServerStatusEvent'
java_import 'org.apollo.game.event.impl.SendFriendEvent'
-java_import 'org.apollo.game.model.Player'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.settings.ServerStatus'
java_import 'org.apollo.game.model.settings.PrivacyState'
+java_import 'org.apollo.game.model.entity.Player'
# Processes an add friend event, updating the logged-in status of the player (and the person they added) if necessary.
diff --git a/data/plugins/run/plugin.xml b/data/plugins/run/plugin.xml
index dad835a3..6594f2bb 100644
--- a/data/plugins/run/plugin.xml
+++ b/data/plugins/run/plugin.xml
@@ -10,5 +10,7 @@
-
+
+ attributes
+
\ No newline at end of file
diff --git a/data/plugins/skill/herblore/herblore.rb b/data/plugins/skill/herblore/herblore.rb
index c55f50ac..aa06335c 100644
--- a/data/plugins/skill/herblore/herblore.rb
+++ b/data/plugins/skill/herblore/herblore.rb
@@ -4,7 +4,7 @@
require 'java'
java_import 'org.apollo.game.event.impl.SetWidgetItemModelEvent'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.Skill'
HERBLORE_DIALOGUE = 4429
diff --git a/data/plugins/skill/magic/element.rb b/data/plugins/skill/magic/element.rb
index 941af9dc..30305ffd 100644
--- a/data/plugins/skill/magic/element.rb
+++ b/data/plugins/skill/magic/element.rb
@@ -1,6 +1,6 @@
require 'java'
-java_import 'org.apollo.game.model.EquipmentConstants'
+java_import 'org.apollo.game.model.entity.EquipmentConstants'
AIR_ELEMENTS = {}
WATER_ELEMENTS = {}
diff --git a/data/plugins/skill/magic/magic.rb b/data/plugins/skill/magic/magic.rb
index c6625ba7..68b9619b 100644
--- a/data/plugins/skill/magic/magic.rb
+++ b/data/plugins/skill/magic/magic.rb
@@ -2,8 +2,8 @@ require 'java'
java_import 'org.apollo.game.action.Action'
java_import 'org.apollo.game.event.impl.DisplayTabInterfaceEvent'
-java_import 'org.apollo.game.model.EquipmentConstants'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.EquipmentConstants'
+java_import 'org.apollo.game.model.entity.Skill'
DISPLAY_SPELLBOOK = DisplayTabInterfaceEvent.new(6)
diff --git a/data/plugins/skill/mining/mining.rb b/data/plugins/skill/mining/mining.rb
index 4a7bb8f3..c204966d 100644
--- a/data/plugins/skill/mining/mining.rb
+++ b/data/plugins/skill/mining/mining.rb
@@ -1,8 +1,8 @@
require 'java'
java_import 'org.apollo.game.action.DistancedAction'
-java_import 'org.apollo.game.model.EquipmentConstants'
java_import 'org.apollo.game.model.def.ItemDefinition'
+java_import 'org.apollo.game.model.entity.EquipmentConstants'
PROSPECT_PULSES = 3
ORE_SIZE = 1
diff --git a/data/plugins/skill/prayer/bury.rb b/data/plugins/skill/prayer/bury.rb
index 7109c6b1..fb923bb1 100644
--- a/data/plugins/skill/prayer/bury.rb
+++ b/data/plugins/skill/prayer/bury.rb
@@ -2,12 +2,12 @@ require 'java'
java_import 'org.apollo.game.action.Action'
java_import 'org.apollo.game.model.Animation'
-java_import 'org.apollo.game.model.Skill'
+java_import 'org.apollo.game.model.entity.Skill'
BURY_BONE_ANIMATION = 827
BONES = {}
-# Represents a bone with a name, id, and experience.
+# Represents a bone with an id and experience value.
class Bone
attr_reader :id, :exp
diff --git a/src/org/apollo/game/GameService.java b/src/org/apollo/game/GameService.java
index eaf998aa..dd0e7213 100644
--- a/src/org/apollo/game/GameService.java
+++ b/src/org/apollo/game/GameService.java
@@ -11,9 +11,9 @@ import java.util.concurrent.TimeUnit;
import org.apollo.Service;
import org.apollo.game.event.handler.chain.EventHandlerChainGroup;
-import org.apollo.game.model.Player;
import org.apollo.game.model.World;
import org.apollo.game.model.World.RegistrationStatus;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.ClientSynchronizer;
import org.apollo.io.EventHandlerChainParser;
import org.apollo.io.RsaKeyParser;
diff --git a/src/org/apollo/game/action/Action.java b/src/org/apollo/game/action/Action.java
index 5a970e68..2c34b19e 100644
--- a/src/org/apollo/game/action/Action.java
+++ b/src/org/apollo/game/action/Action.java
@@ -1,6 +1,6 @@
package org.apollo.game.action;
-import org.apollo.game.model.Mob;
+import org.apollo.game.model.entity.Mob;
import org.apollo.game.scheduling.ScheduledTask;
/**
diff --git a/src/org/apollo/game/action/DistancedAction.java b/src/org/apollo/game/action/DistancedAction.java
index 9e8691de..5beae597 100644
--- a/src/org/apollo/game/action/DistancedAction.java
+++ b/src/org/apollo/game/action/DistancedAction.java
@@ -1,7 +1,7 @@
package org.apollo.game.action;
-import org.apollo.game.model.Mob;
import org.apollo.game.model.Position;
+import org.apollo.game.model.entity.Mob;
/**
* An @{link Action} which fires when a distance requirement is met.
diff --git a/src/org/apollo/game/command/CommandDispatcher.java b/src/org/apollo/game/command/CommandDispatcher.java
index 621ce7b0..be3015db 100644
--- a/src/org/apollo/game/command/CommandDispatcher.java
+++ b/src/org/apollo/game/command/CommandDispatcher.java
@@ -3,7 +3,7 @@ package org.apollo.game.command;
import java.util.HashMap;
import java.util.Map;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* A class that dispatches {@link Command}s to {@link CommandListener}s.
diff --git a/src/org/apollo/game/command/CommandListener.java b/src/org/apollo/game/command/CommandListener.java
index 3d2c486e..48b2e029 100644
--- a/src/org/apollo/game/command/CommandListener.java
+++ b/src/org/apollo/game/command/CommandListener.java
@@ -1,6 +1,6 @@
package org.apollo.game.command;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.settings.PrivilegeLevel;
/**
diff --git a/src/org/apollo/game/command/CreditsCommandListener.java b/src/org/apollo/game/command/CreditsCommandListener.java
index 1738884b..44d1900c 100644
--- a/src/org/apollo/game/command/CreditsCommandListener.java
+++ b/src/org/apollo/game/command/CreditsCommandListener.java
@@ -4,8 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import org.apollo.game.model.Player;
import org.apollo.game.model.World;
+import org.apollo.game.model.entity.Player;
import org.apollo.util.plugin.PluginManager;
/**
diff --git a/src/org/apollo/game/event/handler/EventHandler.java b/src/org/apollo/game/event/handler/EventHandler.java
index 2fb02867..b4cdc5b5 100644
--- a/src/org/apollo/game/event/handler/EventHandler.java
+++ b/src/org/apollo/game/event/handler/EventHandler.java
@@ -1,7 +1,7 @@
package org.apollo.game.event.handler;
import org.apollo.game.event.Event;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* A class which handles events.
diff --git a/src/org/apollo/game/event/handler/chain/EventHandlerChain.java b/src/org/apollo/game/event/handler/chain/EventHandlerChain.java
index 655ca5d7..d67c443a 100644
--- a/src/org/apollo/game/event/handler/chain/EventHandlerChain.java
+++ b/src/org/apollo/game/event/handler/chain/EventHandlerChain.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.chain;
import org.apollo.game.event.Event;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* A chain of event handlers.
diff --git a/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java b/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
index 21a70eca..37623a06 100644
--- a/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/BankButtonEventHandler.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ButtonEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* An {@link EventHandler} that responds to {@link ButtonEvent}s for withdrawing items as notes.
diff --git a/src/org/apollo/game/event/handler/impl/BankEventHandler.java b/src/org/apollo/game/event/handler/impl/BankEventHandler.java
index 99dba0be..8f5199c9 100644
--- a/src/org/apollo/game/event/handler/impl/BankEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/BankEventHandler.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ItemActionEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inter.bank.BankDepositEnterAmountListener;
import org.apollo.game.model.inter.bank.BankUtils;
diff --git a/src/org/apollo/game/event/handler/impl/ChatEventHandler.java b/src/org/apollo/game/event/handler/impl/ChatEventHandler.java
index c7ecf63f..5cde13f9 100644
--- a/src/org/apollo/game/event/handler/impl/ChatEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/ChatEventHandler.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ChatEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.block.SynchronizationBlock;
/**
diff --git a/src/org/apollo/game/event/handler/impl/ChatVerificationHandler.java b/src/org/apollo/game/event/handler/impl/ChatVerificationHandler.java
index 0454e2c1..b750d6c8 100644
--- a/src/org/apollo/game/event/handler/impl/ChatVerificationHandler.java
+++ b/src/org/apollo/game/event/handler/impl/ChatVerificationHandler.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ChatEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* An {@link EventHandler} that verifies {@link ChatEvent}s.
diff --git a/src/org/apollo/game/event/handler/impl/ClosedInterfaceEventHandler.java b/src/org/apollo/game/event/handler/impl/ClosedInterfaceEventHandler.java
index e1833ed5..3d1e0330 100644
--- a/src/org/apollo/game/event/handler/impl/ClosedInterfaceEventHandler.java
+++ b/src/org/apollo/game/event/handler/impl/ClosedInterfaceEventHandler.java
@@ -3,7 +3,7 @@ package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ClosedInterfaceEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* An {@link EventHandler} for the {@link ClosedInterfaceEvent}.
@@ -14,6 +14,7 @@ public final class ClosedInterfaceEventHandler extends EventHandler attributes = new HashMap<>(5);
+
/**
* The position of this entity.
*/
@@ -55,6 +67,25 @@ public abstract class Entity {
this.position = position;
}
+ /**
+ * Gets the value of the attribute with the specified name.
+ *
+ * @param name The name of the attribute.
+ * @return The value of the attribute.
+ */
+ public final Object getAttribute(String name) {
+ return attributes.get(name);
+ }
+
+ /**
+ * Gets all of the attributes of this entity, as a {@link Set} of {@link Entry} objects.
+ *
+ * @return The set of attributes.
+ */
+ public final Set> getAttributes() {
+ return attributes.entrySet();
+ }
+
/**
* Gets the {@link EntityType} of this entity.
*
@@ -71,4 +102,14 @@ public abstract class Entity {
return position;
}
+ /**
+ * Sets the value of the attribute with the specified name.
+ *
+ * @param name The name of the attribute.
+ * @param value The value of the attribute.
+ */
+ public final void setAttribute(String name, Object value) {
+ attributes.put(name, value);
+ }
+
}
\ No newline at end of file
diff --git a/src/org/apollo/game/model/EquipmentConstants.java b/src/org/apollo/game/model/entity/EquipmentConstants.java
similarity index 96%
rename from src/org/apollo/game/model/EquipmentConstants.java
rename to src/org/apollo/game/model/entity/EquipmentConstants.java
index 4dd0e217..13945d07 100644
--- a/src/org/apollo/game/model/EquipmentConstants.java
+++ b/src/org/apollo/game/model/entity/EquipmentConstants.java
@@ -1,4 +1,4 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
/**
* Contains equipment-related constants.
diff --git a/src/org/apollo/game/model/Mob.java b/src/org/apollo/game/model/entity/Mob.java
similarity index 96%
rename from src/org/apollo/game/model/Mob.java
rename to src/org/apollo/game/model/entity/Mob.java
index 4668bfe7..2e32eddd 100644
--- a/src/org/apollo/game/model/Mob.java
+++ b/src/org/apollo/game/model/entity/Mob.java
@@ -1,11 +1,18 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
import java.util.ArrayList;
import java.util.List;
import org.apollo.game.action.Action;
-import org.apollo.game.model.Inventory.StackMode;
+import org.apollo.game.model.Animation;
+import org.apollo.game.model.Direction;
+import org.apollo.game.model.Graphic;
+import org.apollo.game.model.Position;
+import org.apollo.game.model.World;
import org.apollo.game.model.def.NpcDefinition;
+import org.apollo.game.model.inv.Inventory;
+import org.apollo.game.model.inv.InventoryConstants;
+import org.apollo.game.model.inv.Inventory.StackMode;
import org.apollo.game.scheduling.impl.SkillNormalizationTask;
import org.apollo.game.sync.block.SynchronizationBlock;
import org.apollo.game.sync.block.SynchronizationBlockSet;
diff --git a/src/org/apollo/game/model/Npc.java b/src/org/apollo/game/model/entity/Npc.java
similarity index 96%
rename from src/org/apollo/game/model/Npc.java
rename to src/org/apollo/game/model/entity/Npc.java
index d4b78cb2..2fc521e4 100644
--- a/src/org/apollo/game/model/Npc.java
+++ b/src/org/apollo/game/model/entity/Npc.java
@@ -1,5 +1,6 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
+import org.apollo.game.model.Position;
import org.apollo.game.model.def.NpcDefinition;
import org.apollo.game.sync.block.SynchronizationBlock;
diff --git a/src/org/apollo/game/model/Player.java b/src/org/apollo/game/model/entity/Player.java
similarity index 98%
rename from src/org/apollo/game/model/Player.java
rename to src/org/apollo/game/model/entity/Player.java
index be623450..51ef17bb 100644
--- a/src/org/apollo/game/model/Player.java
+++ b/src/org/apollo/game/model/entity/Player.java
@@ -1,4 +1,4 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
import java.util.ArrayDeque;
import java.util.ArrayList;
@@ -15,7 +15,9 @@ import org.apollo.game.event.impl.ServerMessageEvent;
import org.apollo.game.event.impl.SetWidgetTextEvent;
import org.apollo.game.event.impl.SwitchTabInterfaceEvent;
import org.apollo.game.event.impl.UpdateRunEnergyEvent;
-import org.apollo.game.model.Inventory.StackMode;
+import org.apollo.game.model.Appearance;
+import org.apollo.game.model.Position;
+import org.apollo.game.model.World;
import org.apollo.game.model.inter.InterfaceConstants;
import org.apollo.game.model.inter.InterfaceListener;
import org.apollo.game.model.inter.InterfaceSet;
@@ -23,8 +25,11 @@ import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inter.bank.BankInterfaceListener;
import org.apollo.game.model.inv.AppearanceInventoryListener;
import org.apollo.game.model.inv.FullInventoryListener;
+import org.apollo.game.model.inv.Inventory;
+import org.apollo.game.model.inv.InventoryConstants;
import org.apollo.game.model.inv.InventoryListener;
import org.apollo.game.model.inv.SynchronizationInventoryListener;
+import org.apollo.game.model.inv.Inventory.StackMode;
import org.apollo.game.model.settings.PrivacyState;
import org.apollo.game.model.settings.PrivilegeLevel;
import org.apollo.game.model.settings.ScreenBrightness;
diff --git a/src/org/apollo/game/model/Skill.java b/src/org/apollo/game/model/entity/Skill.java
similarity index 98%
rename from src/org/apollo/game/model/Skill.java
rename to src/org/apollo/game/model/entity/Skill.java
index a5ae1093..f0ccdf95 100644
--- a/src/org/apollo/game/model/Skill.java
+++ b/src/org/apollo/game/model/entity/Skill.java
@@ -1,4 +1,4 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
/**
* Represents a single skill.
diff --git a/src/org/apollo/game/model/SkillSet.java b/src/org/apollo/game/model/entity/SkillSet.java
similarity index 99%
rename from src/org/apollo/game/model/SkillSet.java
rename to src/org/apollo/game/model/entity/SkillSet.java
index 6cf53990..308def15 100644
--- a/src/org/apollo/game/model/SkillSet.java
+++ b/src/org/apollo/game/model/entity/SkillSet.java
@@ -1,4 +1,4 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/org/apollo/game/model/WalkingQueue.java b/src/org/apollo/game/model/entity/WalkingQueue.java
similarity index 97%
rename from src/org/apollo/game/model/WalkingQueue.java
rename to src/org/apollo/game/model/entity/WalkingQueue.java
index fcd5e2bd..7f7d283f 100644
--- a/src/org/apollo/game/model/WalkingQueue.java
+++ b/src/org/apollo/game/model/entity/WalkingQueue.java
@@ -1,9 +1,12 @@
-package org.apollo.game.model;
+package org.apollo.game.model.entity;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Queue;
+import org.apollo.game.model.Direction;
+import org.apollo.game.model.Position;
+
/**
* A queue of {@link Direction}s which a {@link Mob} will follow.
*
diff --git a/src/org/apollo/game/model/entity/package-info.java b/src/org/apollo/game/model/entity/package-info.java
new file mode 100644
index 00000000..2e4d906e
--- /dev/null
+++ b/src/org/apollo/game/model/entity/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Contains entity related classes.
+ */
+package org.apollo.game.model.entity;
\ No newline at end of file
diff --git a/src/org/apollo/game/model/inter/InterfaceSet.java b/src/org/apollo/game/model/inter/InterfaceSet.java
index 62fbbc70..1763fe32 100644
--- a/src/org/apollo/game/model/inter/InterfaceSet.java
+++ b/src/org/apollo/game/model/inter/InterfaceSet.java
@@ -8,7 +8,7 @@ import org.apollo.game.event.impl.EnterAmountEvent;
import org.apollo.game.event.impl.OpenDialogueInterfaceEvent;
import org.apollo.game.event.impl.OpenInterfaceEvent;
import org.apollo.game.event.impl.OpenInterfaceSidebarEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.dialogue.DialogueListener;
/**
diff --git a/src/org/apollo/game/model/inter/bank/BankDepositEnterAmountListener.java b/src/org/apollo/game/model/inter/bank/BankDepositEnterAmountListener.java
index 5f23a9d0..866edfe0 100644
--- a/src/org/apollo/game/model/inter/bank/BankDepositEnterAmountListener.java
+++ b/src/org/apollo/game/model/inter/bank/BankDepositEnterAmountListener.java
@@ -1,6 +1,6 @@
package org.apollo.game.model.inter.bank;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.EnterAmountListener;
/**
diff --git a/src/org/apollo/game/model/inter/bank/BankInterfaceListener.java b/src/org/apollo/game/model/inter/bank/BankInterfaceListener.java
index 5c3befb5..a4130a32 100644
--- a/src/org/apollo/game/model/inter/bank/BankInterfaceListener.java
+++ b/src/org/apollo/game/model/inter/bank/BankInterfaceListener.java
@@ -1,6 +1,6 @@
package org.apollo.game.model.inter.bank;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.InterfaceListener;
import org.apollo.game.model.inv.InventoryListener;
diff --git a/src/org/apollo/game/model/inter/bank/BankUtils.java b/src/org/apollo/game/model/inter/bank/BankUtils.java
index 647411ba..01702ba9 100644
--- a/src/org/apollo/game/model/inter/bank/BankUtils.java
+++ b/src/org/apollo/game/model/inter/bank/BankUtils.java
@@ -1,10 +1,10 @@
package org.apollo.game.model.inter.bank;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
-import org.apollo.game.model.Player;
import org.apollo.game.model.def.ItemDefinition;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.InterfaceListener;
+import org.apollo.game.model.inv.Inventory;
import org.apollo.game.model.inv.InventoryListener;
import org.apollo.game.model.inv.SynchronizationInventoryListener;
diff --git a/src/org/apollo/game/model/inter/bank/BankWithdrawEnterAmountListener.java b/src/org/apollo/game/model/inter/bank/BankWithdrawEnterAmountListener.java
index 3f6c6f2c..f51811cc 100644
--- a/src/org/apollo/game/model/inter/bank/BankWithdrawEnterAmountListener.java
+++ b/src/org/apollo/game/model/inter/bank/BankWithdrawEnterAmountListener.java
@@ -1,6 +1,6 @@
package org.apollo.game.model.inter.bank;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.EnterAmountListener;
/**
diff --git a/src/org/apollo/game/model/inv/AppearanceInventoryListener.java b/src/org/apollo/game/model/inv/AppearanceInventoryListener.java
index 1b42eea8..54f592b3 100644
--- a/src/org/apollo/game/model/inv/AppearanceInventoryListener.java
+++ b/src/org/apollo/game/model/inv/AppearanceInventoryListener.java
@@ -1,8 +1,7 @@
package org.apollo.game.model.inv;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.block.SynchronizationBlock;
/**
diff --git a/src/org/apollo/game/model/inv/FullInventoryListener.java b/src/org/apollo/game/model/inv/FullInventoryListener.java
index 46a50228..0254b964 100644
--- a/src/org/apollo/game/model/inv/FullInventoryListener.java
+++ b/src/org/apollo/game/model/inv/FullInventoryListener.java
@@ -2,8 +2,7 @@ package org.apollo.game.model.inv;
import org.apollo.game.event.Event;
import org.apollo.game.event.impl.ServerMessageEvent;
-import org.apollo.game.model.Inventory;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* An {@link InventoryListener} which sends a message to a player when an inventory has run out of space.
diff --git a/src/org/apollo/game/model/Inventory.java b/src/org/apollo/game/model/inv/Inventory.java
similarity index 99%
rename from src/org/apollo/game/model/Inventory.java
rename to src/org/apollo/game/model/inv/Inventory.java
index f793c9ac..0805c7b0 100644
--- a/src/org/apollo/game/model/Inventory.java
+++ b/src/org/apollo/game/model/inv/Inventory.java
@@ -1,10 +1,10 @@
-package org.apollo.game.model;
+package org.apollo.game.model.inv;
import java.util.ArrayList;
import java.util.List;
+import org.apollo.game.model.Item;
import org.apollo.game.model.def.ItemDefinition;
-import org.apollo.game.model.inv.InventoryListener;
/**
* Represents an inventory - a collection of {@link Item}s.
diff --git a/src/org/apollo/game/model/inv/InventoryAdapter.java b/src/org/apollo/game/model/inv/InventoryAdapter.java
index 8c7c7634..52cb6260 100644
--- a/src/org/apollo/game/model/inv/InventoryAdapter.java
+++ b/src/org/apollo/game/model/inv/InventoryAdapter.java
@@ -1,6 +1,5 @@
package org.apollo.game.model.inv;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
/**
diff --git a/src/org/apollo/game/model/InventoryConstants.java b/src/org/apollo/game/model/inv/InventoryConstants.java
similarity index 93%
rename from src/org/apollo/game/model/InventoryConstants.java
rename to src/org/apollo/game/model/inv/InventoryConstants.java
index 7c540c2c..82fa704a 100644
--- a/src/org/apollo/game/model/InventoryConstants.java
+++ b/src/org/apollo/game/model/inv/InventoryConstants.java
@@ -1,4 +1,4 @@
-package org.apollo.game.model;
+package org.apollo.game.model.inv;
/**
* Holds {@link Inventory}-related constants.
diff --git a/src/org/apollo/game/model/inv/InventoryListener.java b/src/org/apollo/game/model/inv/InventoryListener.java
index 848a04a3..152fd956 100644
--- a/src/org/apollo/game/model/inv/InventoryListener.java
+++ b/src/org/apollo/game/model/inv/InventoryListener.java
@@ -1,6 +1,5 @@
package org.apollo.game.model.inv;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
/**
diff --git a/src/org/apollo/game/model/SlottedItem.java b/src/org/apollo/game/model/inv/SlottedItem.java
similarity index 92%
rename from src/org/apollo/game/model/SlottedItem.java
rename to src/org/apollo/game/model/inv/SlottedItem.java
index dd391f7a..266b2109 100644
--- a/src/org/apollo/game/model/SlottedItem.java
+++ b/src/org/apollo/game/model/inv/SlottedItem.java
@@ -1,4 +1,6 @@
-package org.apollo.game.model;
+package org.apollo.game.model.inv;
+
+import org.apollo.game.model.Item;
/**
* A class which contains an {@link Item} and its corresponding slot.
diff --git a/src/org/apollo/game/model/inv/SynchronizationInventoryListener.java b/src/org/apollo/game/model/inv/SynchronizationInventoryListener.java
index a2c631e1..7569e998 100644
--- a/src/org/apollo/game/model/inv/SynchronizationInventoryListener.java
+++ b/src/org/apollo/game/model/inv/SynchronizationInventoryListener.java
@@ -2,10 +2,8 @@ package org.apollo.game.model.inv;
import org.apollo.game.event.impl.UpdateItemsEvent;
import org.apollo.game.event.impl.UpdateSlottedItemsEvent;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
-import org.apollo.game.model.Player;
-import org.apollo.game.model.SlottedItem;
+import org.apollo.game.model.entity.Player;
/**
* An {@link InventoryListener} which synchronizes the state of the server's inventory with the client's.
diff --git a/src/org/apollo/game/model/obj/GameObject.java b/src/org/apollo/game/model/obj/GameObject.java
index 2f0b90ef..11f5a19f 100644
--- a/src/org/apollo/game/model/obj/GameObject.java
+++ b/src/org/apollo/game/model/obj/GameObject.java
@@ -1,8 +1,8 @@
package org.apollo.game.model.obj;
-import org.apollo.game.model.Entity;
import org.apollo.game.model.Position;
import org.apollo.game.model.def.ObjectDefinition;
+import org.apollo.game.model.entity.Entity;
/**
* Represents an object in the game world.
diff --git a/src/org/apollo/game/model/sector/Sector.java b/src/org/apollo/game/model/sector/Sector.java
index b92b7ea5..30fbd4c1 100644
--- a/src/org/apollo/game/model/sector/Sector.java
+++ b/src/org/apollo/game/model/sector/Sector.java
@@ -5,8 +5,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apollo.game.model.Entity;
-import org.apollo.game.model.Entity.EntityType;
+import org.apollo.game.model.entity.Entity;
+import org.apollo.game.model.entity.Entity.EntityType;
import org.apollo.game.model.Position;
/**
@@ -146,7 +146,7 @@ public final class Sector {
public boolean removeEntity(Entity entity) {
List entities = this.entities.get(entity.getPosition());
if (entities == null) {
- this.entities.put(entity.getPosition(), new ArrayList());
+ this.entities.put(entity.getPosition(), new ArrayList<>());
return false;
}
diff --git a/src/org/apollo/game/model/sector/SectorListener.java b/src/org/apollo/game/model/sector/SectorListener.java
index 3859b538..93d1539a 100644
--- a/src/org/apollo/game/model/sector/SectorListener.java
+++ b/src/org/apollo/game/model/sector/SectorListener.java
@@ -1,6 +1,6 @@
package org.apollo.game.model.sector;
-import org.apollo.game.model.Entity;
+import org.apollo.game.model.entity.Entity;
/**
* A class that should be extended by listeners that execute actions when an entity is added or removed from the sector.
diff --git a/src/org/apollo/game/model/skill/LevelUpSkillListener.java b/src/org/apollo/game/model/skill/LevelUpSkillListener.java
index c8f65d82..953706f8 100644
--- a/src/org/apollo/game/model/skill/LevelUpSkillListener.java
+++ b/src/org/apollo/game/model/skill/LevelUpSkillListener.java
@@ -1,8 +1,8 @@
package org.apollo.game.model.skill;
-import org.apollo.game.model.Player;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Player;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
import org.apollo.util.LanguageUtil;
/**
diff --git a/src/org/apollo/game/model/skill/SkillAdapter.java b/src/org/apollo/game/model/skill/SkillAdapter.java
index cb30ba55..83c98a34 100644
--- a/src/org/apollo/game/model/skill/SkillAdapter.java
+++ b/src/org/apollo/game/model/skill/SkillAdapter.java
@@ -1,7 +1,7 @@
package org.apollo.game.model.skill;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
/**
* An adapter for the {@link SkillListener}.
diff --git a/src/org/apollo/game/model/skill/SkillListener.java b/src/org/apollo/game/model/skill/SkillListener.java
index 9ef30779..aa6cc33d 100644
--- a/src/org/apollo/game/model/skill/SkillListener.java
+++ b/src/org/apollo/game/model/skill/SkillListener.java
@@ -1,7 +1,7 @@
package org.apollo.game.model.skill;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
/**
* An interface which listens to events from a {@link SkillSet}.
diff --git a/src/org/apollo/game/model/skill/SynchronizationSkillListener.java b/src/org/apollo/game/model/skill/SynchronizationSkillListener.java
index 3c1c23c5..0313c4c5 100644
--- a/src/org/apollo/game/model/skill/SynchronizationSkillListener.java
+++ b/src/org/apollo/game/model/skill/SynchronizationSkillListener.java
@@ -1,9 +1,9 @@
package org.apollo.game.model.skill;
import org.apollo.game.event.impl.UpdateSkillEvent;
-import org.apollo.game.model.Player;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Player;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
import org.apollo.game.sync.block.SynchronizationBlock;
/**
diff --git a/src/org/apollo/game/scheduling/impl/SkillNormalizationTask.java b/src/org/apollo/game/scheduling/impl/SkillNormalizationTask.java
index 5881c0ee..8e88a3fc 100644
--- a/src/org/apollo/game/scheduling/impl/SkillNormalizationTask.java
+++ b/src/org/apollo/game/scheduling/impl/SkillNormalizationTask.java
@@ -1,6 +1,6 @@
package org.apollo.game.scheduling.impl;
-import org.apollo.game.model.Mob;
+import org.apollo.game.model.entity.Mob;
import org.apollo.game.scheduling.ScheduledTask;
/**
diff --git a/src/org/apollo/game/sync/ParallelClientSynchronizer.java b/src/org/apollo/game/sync/ParallelClientSynchronizer.java
index 7fec7686..8a62ad92 100644
--- a/src/org/apollo/game/sync/ParallelClientSynchronizer.java
+++ b/src/org/apollo/game/sync/ParallelClientSynchronizer.java
@@ -6,9 +6,9 @@ import java.util.concurrent.Phaser;
import java.util.concurrent.ThreadFactory;
import org.apollo.game.GameService;
-import org.apollo.game.model.Npc;
-import org.apollo.game.model.Player;
import org.apollo.game.model.World;
+import org.apollo.game.model.entity.Npc;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.task.NpcSynchronizationTask;
import org.apollo.game.sync.task.PhasedSynchronizationTask;
import org.apollo.game.sync.task.PlayerSynchronizationTask;
diff --git a/src/org/apollo/game/sync/SequentialClientSynchronizer.java b/src/org/apollo/game/sync/SequentialClientSynchronizer.java
index 843291b8..4a5360c9 100644
--- a/src/org/apollo/game/sync/SequentialClientSynchronizer.java
+++ b/src/org/apollo/game/sync/SequentialClientSynchronizer.java
@@ -1,9 +1,9 @@
package org.apollo.game.sync;
import org.apollo.game.GameService;
-import org.apollo.game.model.Npc;
-import org.apollo.game.model.Player;
import org.apollo.game.model.World;
+import org.apollo.game.model.entity.Npc;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.task.NpcSynchronizationTask;
import org.apollo.game.sync.task.PlayerSynchronizationTask;
import org.apollo.game.sync.task.PostNpcSynchronizationTask;
diff --git a/src/org/apollo/game/sync/block/AppearanceBlock.java b/src/org/apollo/game/sync/block/AppearanceBlock.java
index 292e84b7..5e008191 100644
--- a/src/org/apollo/game/sync/block/AppearanceBlock.java
+++ b/src/org/apollo/game/sync/block/AppearanceBlock.java
@@ -1,7 +1,7 @@
package org.apollo.game.sync.block;
import org.apollo.game.model.Appearance;
-import org.apollo.game.model.Inventory;
+import org.apollo.game.model.inv.Inventory;
/**
* The appearance {@link SynchronizationBlock}. Only players can utilise this block.
diff --git a/src/org/apollo/game/sync/block/SynchronizationBlock.java b/src/org/apollo/game/sync/block/SynchronizationBlock.java
index e3130bd0..f4e4ff85 100644
--- a/src/org/apollo/game/sync/block/SynchronizationBlock.java
+++ b/src/org/apollo/game/sync/block/SynchronizationBlock.java
@@ -4,8 +4,8 @@ import org.apollo.game.event.impl.ChatEvent;
import org.apollo.game.model.Animation;
import org.apollo.game.model.Direction;
import org.apollo.game.model.Graphic;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.seg.SynchronizationSegment;
/**
diff --git a/src/org/apollo/game/sync/task/NpcSynchronizationTask.java b/src/org/apollo/game/sync/task/NpcSynchronizationTask.java
index 94480c71..c19b8e60 100644
--- a/src/org/apollo/game/sync/task/NpcSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/NpcSynchronizationTask.java
@@ -5,10 +5,10 @@ import java.util.Iterator;
import java.util.List;
import org.apollo.game.event.impl.NpcSynchronizationEvent;
-import org.apollo.game.model.Npc;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
import org.apollo.game.model.World;
+import org.apollo.game.model.entity.Npc;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.seg.AddNpcSegment;
import org.apollo.game.sync.seg.MovementSegment;
import org.apollo.game.sync.seg.RemoveMobSegment;
diff --git a/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java b/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java
index f2b01931..46d637d0 100644
--- a/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java
@@ -5,9 +5,9 @@ import java.util.Iterator;
import java.util.List;
import org.apollo.game.event.impl.PlayerSynchronizationEvent;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
import org.apollo.game.model.World;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.sync.block.AppearanceBlock;
import org.apollo.game.sync.block.ChatBlock;
import org.apollo.game.sync.block.SynchronizationBlock;
diff --git a/src/org/apollo/game/sync/task/PostNpcSynchronizationTask.java b/src/org/apollo/game/sync/task/PostNpcSynchronizationTask.java
index c6e956bb..172ffba0 100644
--- a/src/org/apollo/game/sync/task/PostNpcSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/PostNpcSynchronizationTask.java
@@ -1,6 +1,6 @@
package org.apollo.game.sync.task;
-import org.apollo.game.model.Npc;
+import org.apollo.game.model.entity.Npc;
/**
* A {@link SynchronizationTask} which does post-synchronization work for the specified {@link Npc}.
diff --git a/src/org/apollo/game/sync/task/PostPlayerSynchronizationTask.java b/src/org/apollo/game/sync/task/PostPlayerSynchronizationTask.java
index 5a4275f8..5864311c 100644
--- a/src/org/apollo/game/sync/task/PostPlayerSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/PostPlayerSynchronizationTask.java
@@ -1,6 +1,6 @@
package org.apollo.game.sync.task;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* A {@link SynchronizationTask} which does post-synchronization work for the specified {@link Player}.
diff --git a/src/org/apollo/game/sync/task/PreNpcSynchronizationTask.java b/src/org/apollo/game/sync/task/PreNpcSynchronizationTask.java
index f6a0a33b..28870d99 100644
--- a/src/org/apollo/game/sync/task/PreNpcSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/PreNpcSynchronizationTask.java
@@ -1,6 +1,6 @@
package org.apollo.game.sync.task;
-import org.apollo.game.model.Npc;
+import org.apollo.game.model.entity.Npc;
/**
* A {@link SynchronizationTask} which does pre-synchronization work for the specified npc.
diff --git a/src/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java b/src/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java
index f28b895c..bbd14280 100644
--- a/src/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java
+++ b/src/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java
@@ -1,8 +1,8 @@
package org.apollo.game.sync.task;
import org.apollo.game.event.impl.RegionChangeEvent;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
+import org.apollo.game.model.entity.Player;
/**
* A {@link SynchronizationTask} which does pre-synchronization work for the specified {@link Player}.
diff --git a/src/org/apollo/io/player/PlayerLoaderResponse.java b/src/org/apollo/io/player/PlayerLoaderResponse.java
index 50cbbb37..77a8244c 100644
--- a/src/org/apollo/io/player/PlayerLoaderResponse.java
+++ b/src/org/apollo/io/player/PlayerLoaderResponse.java
@@ -1,6 +1,6 @@
package org.apollo.io.player;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.net.codec.login.LoginConstants;
/**
diff --git a/src/org/apollo/io/player/PlayerSaver.java b/src/org/apollo/io/player/PlayerSaver.java
index c45b3ca8..1a2def5d 100644
--- a/src/org/apollo/io/player/PlayerSaver.java
+++ b/src/org/apollo/io/player/PlayerSaver.java
@@ -1,6 +1,6 @@
package org.apollo.io.player;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* An interface which may be implemented by others which are capable of saving players. For example, implementations
diff --git a/src/org/apollo/io/player/impl/BinaryPlayerLoader.java b/src/org/apollo/io/player/impl/BinaryPlayerLoader.java
index 1213fd6a..71a326a6 100644
--- a/src/org/apollo/io/player/impl/BinaryPlayerLoader.java
+++ b/src/org/apollo/io/player/impl/BinaryPlayerLoader.java
@@ -8,12 +8,12 @@ import java.util.ArrayList;
import java.util.List;
import org.apollo.game.model.Appearance;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Player;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
+import org.apollo.game.model.inv.Inventory;
import org.apollo.game.model.settings.Gender;
import org.apollo.game.model.settings.PrivacyState;
import org.apollo.game.model.settings.PrivilegeLevel;
diff --git a/src/org/apollo/io/player/impl/BinaryPlayerSaver.java b/src/org/apollo/io/player/impl/BinaryPlayerSaver.java
index dbc94c0f..e694bcc6 100644
--- a/src/org/apollo/io/player/impl/BinaryPlayerSaver.java
+++ b/src/org/apollo/io/player/impl/BinaryPlayerSaver.java
@@ -5,14 +5,15 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
+import java.util.Map.Entry;
import org.apollo.game.model.Appearance;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
-import org.apollo.game.model.Skill;
-import org.apollo.game.model.SkillSet;
+import org.apollo.game.model.entity.Player;
+import org.apollo.game.model.entity.Skill;
+import org.apollo.game.model.entity.SkillSet;
+import org.apollo.game.model.inv.Inventory;
import org.apollo.io.player.PlayerSaver;
import org.apollo.util.NameUtil;
import org.apollo.util.StreamUtil;
@@ -87,6 +88,34 @@ public final class BinaryPlayerSaver implements PlayerSaver {
for (String username : usernames) {
out.writeLong(NameUtil.encodeBase37(username));
}
+
+ for (Entry attribute : player.getAttributes()) {
+ saveAttribute(out, attribute);
+ }
+ }
+ }
+
+ /**
+ * Writes an attribute to the specified output stream.
+ *
+ * @param out The output stream.
+ * @param attribute The attribute.
+ * @throws IOException If an I/O error occurs.
+ */
+ private void saveAttribute(DataOutputStream out, Entry attribute) throws IOException {
+ StreamUtil.writeString(out, attribute.getKey());
+ Object value = attribute.getValue();
+ if (value instanceof String) {
+ out.writeByte(0);
+ StreamUtil.writeString(out, (String) value);
+ } else if (value instanceof Integer) {
+ out.writeByte(1);
+ out.writeInt((Integer) value);
+ } else if (value instanceof Boolean) {
+ out.writeByte(2);
+ out.writeByte(((Boolean) value) ? 1 : 0);
+ } else {
+ throw new IllegalArgumentException("Undefined attribute type " + value + ".");
}
}
diff --git a/src/org/apollo/io/player/impl/DiscardPlayerSaver.java b/src/org/apollo/io/player/impl/DiscardPlayerSaver.java
index 5f221b96..cc00e839 100644
--- a/src/org/apollo/io/player/impl/DiscardPlayerSaver.java
+++ b/src/org/apollo/io/player/impl/DiscardPlayerSaver.java
@@ -1,6 +1,6 @@
package org.apollo.io.player.impl;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.io.player.PlayerSaver;
/**
diff --git a/src/org/apollo/io/player/impl/DummyPlayerLoader.java b/src/org/apollo/io/player/impl/DummyPlayerLoader.java
index 40419c38..069da700 100644
--- a/src/org/apollo/io/player/impl/DummyPlayerLoader.java
+++ b/src/org/apollo/io/player/impl/DummyPlayerLoader.java
@@ -1,7 +1,7 @@
package org.apollo.io.player.impl;
-import org.apollo.game.model.Player;
import org.apollo.game.model.Position;
+import org.apollo.game.model.entity.Player;
import org.apollo.game.model.settings.PrivilegeLevel;
import org.apollo.io.player.PlayerLoader;
import org.apollo.io.player.PlayerLoaderResponse;
diff --git a/src/org/apollo/io/player/impl/JdbcPlayerSaver.java b/src/org/apollo/io/player/impl/JdbcPlayerSaver.java
index c83e6855..3098b324 100644
--- a/src/org/apollo/io/player/impl/JdbcPlayerSaver.java
+++ b/src/org/apollo/io/player/impl/JdbcPlayerSaver.java
@@ -1,6 +1,6 @@
package org.apollo.io.player.impl;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.io.player.PlayerSaver;
public final class JdbcPlayerSaver implements PlayerSaver {
diff --git a/src/org/apollo/login/LoginService.java b/src/org/apollo/login/LoginService.java
index c477750f..b60a29c7 100644
--- a/src/org/apollo/login/LoginService.java
+++ b/src/org/apollo/login/LoginService.java
@@ -7,7 +7,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apollo.Service;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.io.player.PlayerLoader;
import org.apollo.io.player.PlayerLoaderResponse;
import org.apollo.io.player.PlayerSaver;
diff --git a/src/org/apollo/login/PlayerSaverWorker.java b/src/org/apollo/login/PlayerSaverWorker.java
index febea7c7..2a0e369a 100644
--- a/src/org/apollo/login/PlayerSaverWorker.java
+++ b/src/org/apollo/login/PlayerSaverWorker.java
@@ -3,7 +3,7 @@ package org.apollo.login;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
import org.apollo.io.player.PlayerSaver;
import org.apollo.net.session.GameSession;
diff --git a/src/org/apollo/net/release/r317/PlayerSynchronizationEventEncoder.java b/src/org/apollo/net/release/r317/PlayerSynchronizationEventEncoder.java
index 36e5c2df..05bf876b 100644
--- a/src/org/apollo/net/release/r317/PlayerSynchronizationEventEncoder.java
+++ b/src/org/apollo/net/release/r317/PlayerSynchronizationEventEncoder.java
@@ -4,12 +4,12 @@ import org.apollo.game.event.impl.PlayerSynchronizationEvent;
import org.apollo.game.model.Animation;
import org.apollo.game.model.Appearance;
import org.apollo.game.model.Direction;
-import org.apollo.game.model.EquipmentConstants;
import org.apollo.game.model.Graphic;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
import org.apollo.game.model.Position;
import org.apollo.game.model.def.EquipmentDefinition;
+import org.apollo.game.model.entity.EquipmentConstants;
+import org.apollo.game.model.inv.Inventory;
import org.apollo.game.model.settings.Gender;
import org.apollo.game.sync.block.AnimationBlock;
import org.apollo.game.sync.block.AppearanceBlock;
diff --git a/src/org/apollo/net/release/r317/Release317.java b/src/org/apollo/net/release/r317/Release317.java
index 99bfaa8c..506c1d40 100644
--- a/src/org/apollo/net/release/r317/Release317.java
+++ b/src/org/apollo/net/release/r317/Release317.java
@@ -24,7 +24,6 @@ import org.apollo.game.event.impl.RemoveTileItemEvent;
import org.apollo.game.event.impl.SendFriendEvent;
import org.apollo.game.event.impl.ServerMessageEvent;
import org.apollo.game.event.impl.SetPlayerActionEvent;
-import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.game.event.impl.SetWidgetItemModelEvent;
import org.apollo.game.event.impl.SetWidgetModelAnimationEvent;
import org.apollo.game.event.impl.SetWidgetNpcModelEvent;
@@ -36,6 +35,7 @@ import org.apollo.game.event.impl.UpdateItemsEvent;
import org.apollo.game.event.impl.UpdateRunEnergyEvent;
import org.apollo.game.event.impl.UpdateSkillEvent;
import org.apollo.game.event.impl.UpdateSlottedItemsEvent;
+import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.game.event.impl.UpdateWeightEvent;
import org.apollo.net.meta.PacketMetaDataGroup;
import org.apollo.net.release.Release;
@@ -138,7 +138,7 @@ public final class Release317 extends Release {
register(189, spamEventDecoder);
register(210, spamEventDecoder);
register(226, spamEventDecoder);
- register(121, spamEventDecoder);
+ register(121, spamEventDecoder);
register(155, new FirstNpcActionEventDecoder());
register(17, new SecondNpcActionEventDecoder());
diff --git a/src/org/apollo/net/release/r317/UpdateSkillEventEncoder.java b/src/org/apollo/net/release/r317/UpdateSkillEventEncoder.java
index 4a43094b..a2545ec2 100644
--- a/src/org/apollo/net/release/r317/UpdateSkillEventEncoder.java
+++ b/src/org/apollo/net/release/r317/UpdateSkillEventEncoder.java
@@ -1,7 +1,7 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.UpdateSkillEvent;
-import org.apollo.game.model.Skill;
+import org.apollo.game.model.entity.Skill;
import org.apollo.net.codec.game.DataOrder;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
diff --git a/src/org/apollo/net/release/r317/UpdateSlottedItemsEventEncoder.java b/src/org/apollo/net/release/r317/UpdateSlottedItemsEventEncoder.java
index f4538a65..9422aa72 100644
--- a/src/org/apollo/net/release/r317/UpdateSlottedItemsEventEncoder.java
+++ b/src/org/apollo/net/release/r317/UpdateSlottedItemsEventEncoder.java
@@ -2,7 +2,7 @@ package org.apollo.net.release.r317;
import org.apollo.game.event.impl.UpdateSlottedItemsEvent;
import org.apollo.game.model.Item;
-import org.apollo.game.model.SlottedItem;
+import org.apollo.game.model.inv.SlottedItem;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
diff --git a/src/org/apollo/net/release/r377/PlayerSynchronizationEventEncoder.java b/src/org/apollo/net/release/r377/PlayerSynchronizationEventEncoder.java
index 04e1e57b..ae468587 100644
--- a/src/org/apollo/net/release/r377/PlayerSynchronizationEventEncoder.java
+++ b/src/org/apollo/net/release/r377/PlayerSynchronizationEventEncoder.java
@@ -4,12 +4,12 @@ import org.apollo.game.event.impl.PlayerSynchronizationEvent;
import org.apollo.game.model.Animation;
import org.apollo.game.model.Appearance;
import org.apollo.game.model.Direction;
-import org.apollo.game.model.EquipmentConstants;
import org.apollo.game.model.Graphic;
-import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
import org.apollo.game.model.Position;
import org.apollo.game.model.def.EquipmentDefinition;
+import org.apollo.game.model.entity.EquipmentConstants;
+import org.apollo.game.model.inv.Inventory;
import org.apollo.game.model.settings.Gender;
import org.apollo.game.sync.block.AnimationBlock;
import org.apollo.game.sync.block.AppearanceBlock;
diff --git a/src/org/apollo/net/release/r377/UpdateSkillEventEncoder.java b/src/org/apollo/net/release/r377/UpdateSkillEventEncoder.java
index a633ed52..53fc23ba 100644
--- a/src/org/apollo/net/release/r377/UpdateSkillEventEncoder.java
+++ b/src/org/apollo/net/release/r377/UpdateSkillEventEncoder.java
@@ -1,7 +1,7 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.UpdateSkillEvent;
-import org.apollo.game.model.Skill;
+import org.apollo.game.model.entity.Skill;
import org.apollo.net.codec.game.DataTransformation;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
diff --git a/src/org/apollo/net/release/r377/UpdateSlottedItemsEventEncoder.java b/src/org/apollo/net/release/r377/UpdateSlottedItemsEventEncoder.java
index 683e3a81..b4e73150 100644
--- a/src/org/apollo/net/release/r377/UpdateSlottedItemsEventEncoder.java
+++ b/src/org/apollo/net/release/r377/UpdateSlottedItemsEventEncoder.java
@@ -2,7 +2,7 @@ package org.apollo.net.release.r377;
import org.apollo.game.event.impl.UpdateSlottedItemsEvent;
import org.apollo.game.model.Item;
-import org.apollo.game.model.SlottedItem;
+import org.apollo.game.model.inv.SlottedItem;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
diff --git a/src/org/apollo/net/session/GameSession.java b/src/org/apollo/net/session/GameSession.java
index 051c239c..c87ff0fd 100644
--- a/src/org/apollo/net/session/GameSession.java
+++ b/src/org/apollo/net/session/GameSession.java
@@ -16,7 +16,7 @@ import org.apollo.game.event.Event;
import org.apollo.game.event.handler.chain.EventHandlerChain;
import org.apollo.game.event.handler.chain.EventHandlerChainGroup;
import org.apollo.game.event.impl.LogoutEvent;
-import org.apollo.game.model.Player;
+import org.apollo.game.model.entity.Player;
/**
* A game session.
diff --git a/src/org/apollo/net/session/LoginSession.java b/src/org/apollo/net/session/LoginSession.java
index b94e0876..875feca7 100644
--- a/src/org/apollo/net/session/LoginSession.java
+++ b/src/org/apollo/net/session/LoginSession.java
@@ -7,8 +7,8 @@ import io.netty.channel.ChannelHandlerContext;
import org.apollo.ServerContext;
import org.apollo.game.GameService;
-import org.apollo.game.model.Player;
import org.apollo.game.model.World.RegistrationStatus;
+import org.apollo.game.model.entity.Player;
import org.apollo.io.player.PlayerLoaderResponse;
import org.apollo.login.LoginService;
import org.apollo.net.ApolloHandler;
diff --git a/src/org/apollo/util/MobRepository.java b/src/org/apollo/util/MobRepository.java
index 22369ae4..6d272a0a 100644
--- a/src/org/apollo/util/MobRepository.java
+++ b/src/org/apollo/util/MobRepository.java
@@ -3,7 +3,7 @@ package org.apollo.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
-import org.apollo.game.model.Mob;
+import org.apollo.game.model.entity.Mob;
/**
* A {@link MobRepository} is a repository of {@link Mob}s that are currently active in the game world.