コード例 #1
0
ファイル: BungeeCord.java プロジェクト: jmhertlein/ReportRTS
 public static void handleNotify(byte[] bytes) {
   try {
     DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
     String subChannel = in.readUTF();
     if (subChannel.equals("ReportRTS")) {
       short len = in.readShort();
       byte[] msgbytes = new byte[len];
       in.readFully(msgbytes);
       DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(msgbytes));
       String function = msgin.readUTF();
       if (function.equals("NotifyAndSync")) {
         int ticketId = msgin.readInt();
         NotificationType notifType = NotificationType.getTypeByCode(msgin.readInt());
         String msg = msgin.readUTF();
         if (notifType.getCode() == 0 || notifType.getCode() == 1) {
           if (RTSFunctions.syncTicket(ticketId)) {
             RTSFunctions.messageMods(msg, (notifType.getCode() == 0));
           }
         } else if (notifType.getCode() == 3 || notifType.getCode() == 4) {
           RTSFunctions.messageMods(msg, false);
         } else if (notifType.getCode() == 2 || notifType.getCode() == 5) {
           if (RTSFunctions.syncTicket(ticketId)) {
             if (notifType.getCode() == 2)
               ReportRTS.getPlugin()
                   .notificationMap
                   .put(ticketId, ReportRTS.getPlugin().requestMap.get(ticketId).getName());
             ReportRTS.getPlugin().requestMap.remove(ticketId);
             RTSFunctions.messageMods(msg, (notifType.getCode() == 0));
           }
         } else if (notifType.getCode() == 6) {
           ReportRTS.getPlugin().requestMap.remove(ticketId);
           RTSFunctions.messageMods(msg, (notifType.getCode() == 0));
         }
       } else if (function.equals("NotifyUserAndSync")) {
         int ticketId = msgin.readInt();
         String username = msgin.readUTF();
         String msg = msgin.readUTF();
         if (RTSFunctions.syncTicket(ticketId)) {
           Player player = Bukkit.getPlayerExact(username);
           if (player != null) {
             player.sendMessage(msg);
             if (!DatabaseManager.getDatabase().setNotificationStatus(ticketId, 1))
               ReportRTS.getPlugin()
                   .getLogger()
                   .warning("Unable to set notification status to 1.");
           }
         }
       } else if (function.equals("TeleportNotify")) {
         int ticketId = msgin.readInt();
         String username = msgin.readUTF();
         if (RTSFunctions.isUserOnline(username)) {
           Player player = Bukkit.getPlayerExact(username);
           if (player != null) {
             player.sendMessage(
                 Message.parse("teleportedUser", "/tp-id " + Integer.toString(ticketId)));
             Bukkit.dispatchCommand(player, "tp-id " + Integer.toString(ticketId));
           } else {
             ReportRTS.getPlugin().teleportMap.put(username, ticketId);
           }
         } else {
           ReportRTS.getPlugin().teleportMap.put(username, ticketId);
         }
       }
     } else if (subChannel.equals("GetServer")) {
       String serverName = in.readUTF();
       setServer(serverName);
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
コード例 #2
0
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (args.length == 0) return false;
    if (!(sender instanceof Player)) {
      sender.sendMessage("[ReportRTS] Some information will not be correct, such as location.");
      int userId = dbManager.getUserId("CONSOLE", true);
      String message = RTSFunctions.implode(args, " ");
      Location location = plugin.getServer().getWorlds().get(0).getSpawnLocation();
      String world = plugin.getServer().getWorlds().get(0).getName();
      if (!dbManager.fileRequest("CONSOLE", world, location, message, userId)) {
        sender.sendMessage(Message.parse("generalInternalError", "Request could not be filed."));
        return true;
      }
      int ticketId = dbManager.getLatestTicketIdByUser(userId);
      HelpRequest request =
          new HelpRequest(
              "CONSOLE",
              ticketId,
              System.currentTimeMillis() / 1000,
              message,
              0,
              location.getBlockX(),
              location.getBlockY(),
              location.getBlockZ(),
              location.getYaw(),
              location.getPitch(),
              world,
              BungeeCord.getServer(),
              "");
      plugin.getServer().getPluginManager().callEvent(new ReportCreateEvent(request));
      plugin.requestMap.put(ticketId, request);
      if (plugin.notifyStaffOnNewRequest) {
        try {
          BungeeCord.globalNotify(
              Message.parse("modreqFiledMod", "CONSOLE", ticketId), ticketId, NotificationType.NEW);
        } catch (IOException e) {
          e.printStackTrace();
        }
        RTSFunctions.messageMods(Message.parse("modreqFiledMod", "CONSOLE", ticketId), true);
      }
      return true;
    }
    if (!RTSPermissions.canFileRequest(sender)) return true;
    if (plugin.requestMinimumWords > args.length) {
      sender.sendMessage(Message.parse("modreqTooShort", plugin.requestMinimumWords));
      return true;
    }
    if (RTSFunctions.getOpenRequestsByUser(sender) >= plugin.maxRequests
        && !(ReportRTS.permission != null
            ? ReportRTS.permission.has(sender, "reportrts.command.modreq.unlimited")
            : sender.hasPermission("reportrts.command.modreq.unlimited"))) {
      sender.sendMessage(Message.parse("modreqTooManyOpen"));
      return true;
    }
    if (plugin.requestDelay > 0) {
      if (!(ReportRTS.permission != null
          ? ReportRTS.permission.has(sender, "reportrts.command.modreq.unlimited")
          : sender.hasPermission("reportrts.command.modreq.unlimited"))) {
        long timeBetweenRequest = RTSFunctions.checkTimeBetweenRequests(sender);
        if (timeBetweenRequest > 0) {
          sender.sendMessage(Message.parse("modreqTooFast", timeBetweenRequest));
          return true;
        }
      }
    }
    double start = 0;
    if (plugin.debugMode) start = System.nanoTime();

    Player player = (Player) sender;
    String message = RTSFunctions.implode(args, " ");
    int userId = dbManager.getUserId(player.getName(), true);
    if (!dbManager.fileRequest(
        player.getName(), player.getWorld().getName(), player.getLocation(), message, userId)) {
      sender.sendMessage(Message.parse("generalInternalError", "Request could not be filed."));
      return true;
    }
    int ticketId = dbManager.getLatestTicketIdByUser(userId);

    Location location = player.getLocation();

    sender.sendMessage(Message.parse("modreqFiledUser"));
    plugin.getLogger().log(Level.INFO, "" + player.getName() + " filed a request.");
    if (plugin.notifyStaffOnNewRequest) {
      try {
        BungeeCord.globalNotify(
            Message.parse("modreqFiledMod", player.getName(), ticketId),
            ticketId,
            NotificationType.NEW);
      } catch (IOException e) {
        e.printStackTrace();
      }
      RTSFunctions.messageMods(Message.parse("modreqFiledMod", player.getName(), ticketId), true);
    }

    HelpRequest request =
        new HelpRequest(
            player.getName(),
            ticketId,
            System.currentTimeMillis() / 1000,
            message,
            0,
            location.getBlockX(),
            location.getBlockY(),
            location.getBlockZ(),
            location.getYaw(),
            location.getPitch(),
            player.getWorld().getName(),
            BungeeCord.getServer(),
            "");
    plugin.getServer().getPluginManager().callEvent(new ReportCreateEvent(request));
    plugin.requestMap.put(ticketId, request);
    if (plugin.debugMode)
      Message.debug(sender.getName(), this.getClass().getSimpleName(), start, cmd.getName(), args);
    return true;
  }