private void handleItemPickup(Message m, GameSession s) {
		final Player p = s.getPlayer();
		int x = m.readShortA() & 0xFFFF;
		int y = m.readShort() & 0xFFFF;
		final RSTile location = RSTile.locate(y, x, s.getPlayer().getLocation().getZ());
		final int id = m.readLEShortA() & 0xFFFF;
		final GroundItem i = World.getSingleton().getGroundItemManager().getItem(id, location, p);
		if(i == null) {
			return;
		}
		if(p.getLocation().withinDistance(location, 0)) {
			int result = canPickup(p, i);
			if(result == 1) {
				World.getSingleton().getGroundItemManager().getGroundItems().remove(i);
				ActionSender.removeGroundItem(p, i);
				p.getInventory().refresh();
			}
		} else {
			Event pickup = new Event() {				
				@Override
				public Event tick() {
					setDelay(0);
					setRepeat(true);
					if(!p.getLocation().withinDistance(location, 0)) {
						return this;
					} else {
						int result = canPickup(p, i);
						if(result == 1) {
							World.getSingleton().getGroundItemManager().getGroundItems().remove(i);
							ActionSender.removeGroundItem(p, i);
							p.getInventory().refresh();
							stop();
						}
					}
					return this;
				}
			};
			EventManager.getSingleton().addEvent(pickup);
			p.setDistancedTask(pickup);
		}
	}