@Override
  public void handle(Session client, MessageEvent msg) throws Exception {
    int itemId = msg.readInt();

    RoomItemWall item = client.getPlayer().getEntity().getRoom().getItems().getWallItem(itemId);

    if (item == null) {
      return;
    }

    if (!client.getPlayer().getEntity().isVisible()) {
      return;
    }

    item.onInteract(client.getPlayer().getEntity(), 0, false);
  }
  @Override
  public void execute(Session client, String[] message) {
    final MotdNotificationMessageComposer msg =
        new MotdNotificationMessageComposer(
            this.merge(message) + "\n\n- " + client.getPlayer().getData().getUsername());

    NetworkManager.getInstance().getSessions().broadcast(msg);
  }
  public boolean isInRoom() {
    if (!isOnline()) {
      return false;
    }

    Session client = NetworkManager.getInstance().getSessions().getByPlayerId(this.userId);

    // Could have these in 1 statement, but to make it easier to read - lets just leave it like
    // this. :P
    if (client == null || client.getPlayer() == null || client.getPlayer().getEntity() == null) {
      return false;
    }

    if (!client.getPlayer().getEntity().isVisible()) return false;

    return true;
  }
  @Override
  public void handle(Session client, MessageEvent msg) throws Exception {
    if (client.getPlayer().getEntity() != null) {
      client.send(
          new TilesInUseMessageComposer(
              client.getPlayer().getEntity().getRoom().getMapping().tilesWithFurniture()));

      if (client.getPlayer().getEntity() != null) {
        RoomModel model = client.getPlayer().getEntity().getRoom().getModel();

        if (model == null) return;

        client.send(
            new FloorPlanDoorMessageComposer(
                model.getDoorX(), model.getDoorY(), model.getDoorRotation()));
      }
    }
  }
  public void handle(Session client, MessageEvent msg) {
    int danceId = msg.readInt();

    if (client.getPlayer().getEntity().getDanceId() == danceId) {
      return;
    }

    client.getPlayer().getEntity().unIdle();

    if (!client.getPlayer().getEntity().isVisible()) {
      return;
    }

    client.getPlayer().getEntity().setDanceId(danceId);
    client
        .getPlayer()
        .getEntity()
        .getRoom()
        .getEntities()
        .broadcastMessage(
            new DanceMessageComposer(client.getPlayer().getEntity().getId(), danceId));

    client.getPlayer().getQuests().progressQuest(QuestType.SOCIAL_DANCE);
  }
  public void handle(MessageEvent message, Session client) {
    final Short header = message.getId();

    if (Comet.isDebugging) {
      log.debug(message.toString());
    }

    if (!Comet.isRunning) return;

    if (this.getMessages().containsKey(header)) {
      try {
        final Event event = this.getMessages().get(header);

        if (event != null) {
          if (this.asyncEventExecution) {
            this.eventExecutor.submit(new MessageEventTask(event, client, message));
          } else {
            final long start = System.currentTimeMillis();
            log.debug(
                "Started packet process for packet: ["
                    + event.getClass().getSimpleName()
                    + "]["
                    + header
                    + "]");

            event.handle(client, message);

            long timeTakenSinceCreation = ((System.currentTimeMillis() - start));

            // If the packet took more than 100ms to be handled, red flag!
            if (timeTakenSinceCreation >= 100) {
              if (client.getPlayer() != null && client.getPlayer().getData() != null)
                log.trace(
                    "["
                        + event.getClass().getSimpleName()
                        + "]["
                        + message.getId()
                        + "]["
                        + client.getPlayer().getId()
                        + "]["
                        + client.getPlayer().getData().getUsername()
                        + "] Packet took "
                        + timeTakenSinceCreation
                        + "ms to execute");
              else
                log.trace(
                    "["
                        + event.getClass().getSimpleName()
                        + "]["
                        + message.getId()
                        + "] Packet took "
                        + timeTakenSinceCreation
                        + "ms to execute");
            }

            log.debug(
                "Finished packet process for packet: ["
                    + event.getClass().getSimpleName()
                    + "]["
                    + header
                    + "] in "
                    + ((System.currentTimeMillis() - start))
                    + "ms");
          }
        }
      } catch (Exception e) {
        if (client.getLogger() != null)
          client
              .getLogger()
              .error(
                  "Error while handling event: "
                      + this.getMessages().get(header).getClass().getSimpleName(),
                  e);
        else
          log.error(
              "Error while handling event: "
                  + this.getMessages().get(header).getClass().getSimpleName(),
              e);
      }
    } else if (Comet.isDebugging) {
      log.debug("Unhandled message: " + Events.valueOfId(header) + " / " + header);
    }
  }
 public void handle(Session client, MessageEvent msg) {
   client.send(new BotInventoryMessageComposer(client.getPlayer().getBots().getBots()));
 }
  public void handle(Session client, MessageEvent msg) {
    String text = msg.readString();

    String user = text.split(" ")[0];
    String message = text.replace(user + " ", "");

    if (client.getPlayer().getEntity() == null
        || client.getPlayer().getEntity().getRoom() == null) {
      return;
    }

    if (!client.getPlayer().getEntity().isVisible()) {
      return;
    }

    final Room room = client.getPlayer().getEntity().getRoom();

    RoomEntity userTo = room.getEntities().getEntityByName(user, RoomEntityType.PLAYER);

    if (userTo == null || user.equals(client.getPlayer().getData().getUsername())) return;

    String filteredMessage = TalkMessageEvent.filterMessage(message);

    if (!client.getPlayer().getPermissions().getRank().roomFilterBypass()) {
      FilterResult filterResult = RoomManager.getInstance().getFilter().filter(message);

      if (filterResult.isBlocked()) {
        client.send(
            new AdvancedAlertMessageComposer(
                Locale.get("game.message.blocked").replace("%s", filterResult.getMessage())));
        return;
      } else if (filterResult.wasModified()) {
        filteredMessage = filterResult.getMessage();
      }
    }

    if (!client.getPlayer().getEntity().onChat(filteredMessage)) return;

    try {
      if (LogManager.ENABLED)
        LogManager.getInstance()
            .getStore()
            .getLogEntryContainer()
            .put(
                new RoomChatLogEntry(
                    room.getId(),
                    client.getPlayer().getId(),
                    Locale.getOrDefault("game.logging.whisper", "<Whisper to %username%>")
                            .replace("%username%", user)
                        + " "
                        + message));
    } catch (Exception ignored) {

    }

    client.send(
        new WhisperMessageComposer(client.getPlayer().getEntity().getId(), filteredMessage));

    if (!((PlayerEntity) userTo).getPlayer().ignores(client.getPlayer().getId()))
      ((PlayerEntity) userTo)
          .getPlayer()
          .getSession()
          .send(
              new WhisperMessageComposer(client.getPlayer().getEntity().getId(), filteredMessage));

    for (PlayerEntity entity :
        client.getPlayer().getEntity().getRoom().getEntities().getWhisperSeers()) {
      if (entity.getPlayer().getId() != client.getPlayer().getId()
          && !user.equals(entity.getUsername()))
        entity
            .getPlayer()
            .getSession()
            .send(
                new WhisperMessageComposer(
                    client.getPlayer().getEntity().getId(),
                    "Whisper to " + user + ": " + filteredMessage));
    }
  }
  public void handle(Session client, MessageEvent msg) {
    String username = msg.readString();

    if (username.equals(client.getPlayer().getData().getUsername())) return;

    Session request = NetworkManager.getInstance().getSessions().getByPlayerUsername(username);

    if (request == null
        || request.getPlayer() == null
        || request.getPlayer().getMessenger() == null) return;

    if (!request.getPlayer().getSettings().getAllowFriendRequests()) {
      client.send(
          new AdvancedAlertMessageComposer(Locale.get("game.messenger.friendrequests.disabled")));
      return;
    }

    if (request.getPlayer().getMessenger().hasRequestFrom(client.getPlayer().getId())) return;

    request.getPlayer().getMessenger().addRequest(client.getPlayer().getId());
    request.send(new FriendRequestMessageComposer(client.getPlayer().getData()));

    int userId = PlayerDao.getIdByUsername(username);

    if (userId == 0) return;

    client.getPlayer().getQuests().progressQuest(QuestType.SOCIAL_FRIEND);
    MessengerDao.createRequest(client.getPlayer().getId(), userId);
  }