Uhhh. Where to begin.
The overall structure of the entity model is very hyperion esq. PacketSender is the equivalent of ActionSender. etc. But despite the similarities, it is obvious that you wrote this.
The packaging is utterly horrid. You have the networking packages located within the core package even though there is no relevance between the classes in core and the classes in net. Your only class in core is, 'GameEngine' which is an implementation of task, so in all reality it should be in a subpackage of task.
In "org.rs2.core.net.login," you have ConnectionManager. This is another example of a poorly located class. I would think that it would be worth moving to the 'net' superpackage.
Additionally, in that class you have
Code:
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
/*
* If the message is a player, then we set the player.
*/
if (e.getMessage() instanceof Player) {
player = (Player) e.getMessage();
}
/*
* If the message is a packet, then we handle the packet.
*/
else if (e.getMessage() instanceof Packet) {
PacketManager.handlePacket(player, (Packet) e.getMessage());
}
}
This is not thread safe, because you are running netty on threads separate from your GameEngine. As a result, the way the source is organized currently you will have problems with processing packets while processing/updating. Hyperion attempts to address this issue by submitting every packet as a Task to be processed on the game thread.