Guest User

WorldPacketsDecoder.java

a guest
Jul 19th, 2012
540
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 56.57 KB | None | 0 0
  1. package com.rs.net.decoders;
  2.  
  3. import com.rs.Settings;
  4. import com.rs.game.Animation;
  5. import com.rs.game.Graphics;
  6. import com.rs.game.World;
  7. import com.rs.game.WorldObject;
  8. import com.rs.game.WorldTile;
  9. import com.rs.game.item.FloorItem;
  10. import com.rs.game.item.Item;
  11. import com.rs.game.minigames.clanwars.ClanWars;
  12. import com.rs.game.minigames.creations.StealingCreation;
  13. import com.rs.game.npc.NPC;
  14. import com.rs.game.npc.familiar.Familiar;
  15. import com.rs.game.npc.familiar.Familiar.SpecialAttack;
  16. import com.rs.game.player.CoordsEvent;
  17. import com.rs.game.player.Inventory;
  18. import com.rs.game.player.LogicPacket;
  19. import com.rs.game.player.Player;
  20. import com.rs.game.player.PublicChatMessage;
  21. import com.rs.game.player.QuickChatMessage;
  22. import com.rs.game.player.Skills;
  23. import com.rs.game.player.actions.PlayerCombat;
  24. import com.rs.game.player.actions.PlayerFollow;
  25. import com.rs.game.player.actions.Summoning;
  26. import com.rs.game.player.content.Commands;
  27. import com.rs.game.player.content.FriendChatsManager;
  28. import com.rs.game.player.content.Magic;
  29. import com.rs.game.player.content.Notes.Note;
  30. import com.rs.game.player.content.Shop;
  31. import com.rs.game.player.content.SkillCapeCustomizer;
  32. import com.rs.game.player.content.Vote;
  33. import com.rs.io.InputStream;
  34. import com.rs.net.Session;
  35. import com.rs.net.decoders.handlers.ButtonHandler;
  36. import com.rs.net.decoders.handlers.InventoryOptionsHandler;
  37. import com.rs.net.decoders.handlers.NPCHandler;
  38. import com.rs.net.decoders.handlers.ObjectHandler;
  39. import com.rs.utils.DisplayNames;
  40. import com.rs.utils.Logger;
  41. import com.rs.utils.Utils;
  42. import com.rs.utils.huffman.Huffman;
  43.  
  44. public final class WorldPacketsDecoder extends Decoder {
  45.  
  46.     private static final byte[] PACKET_SIZES = new byte[104];
  47.  
  48.     private final static int WALKING_PACKET = 8;
  49.     private final static int MINI_WALKING_PACKET = 58;
  50.     private final static int AFK_PACKET = -1;
  51.     public final static int ACTION_BUTTON1_PACKET = 14;
  52.     public final static int ACTION_BUTTON2_PACKET = 67;
  53.     public final static int ACTION_BUTTON3_PACKET = 5;
  54.     public final static int ACTION_BUTTON4_PACKET = 55;
  55.     public final static int ACTION_BUTTON5_PACKET = 68;
  56.     public final static int ACTION_BUTTON6_PACKET = 90;
  57.     public final static int ACTION_BUTTON7_PACKET = 6;
  58.     public final static int ACTION_BUTTON8_PACKET = 32;
  59.     public final static int ACTION_BUTTON9_PACKET = 27;
  60.     public final static int WORLD_MAP_CLICK = 38;
  61.     public final static int ACTION_BUTTON10_PACKET = 96;
  62.     public final static int RECEIVE_PACKET_COUNT_PACKET = 33;
  63.     private final static int MAGIC_ON_ITEM_PACKET = -1;
  64.     private final static int PLAYER_OPTION_4_PACKET = 17;
  65.     private final static int MOVE_CAMERA_PACKET = 103;
  66.     private final static int INTERFACE_ON_OBJECT = 37;
  67.     private final static int CLICK_PACKET = -1;
  68.     private final static int MOUVE_MOUSE_PACKET = -1;
  69.     private final static int KEY_TYPED_PACKET = -1;
  70.     private final static int CLOSE_INTERFACE_PACKET = 54;
  71.     private final static int COMMANDS_PACKET = 60;
  72.     private final static int ITEM_ON_ITEM_PACKET = 3;
  73.     private final static int IN_OUT_SCREEN_PACKET = -1;
  74.     private final static int DONE_LOADING_REGION_PACKET = 30;
  75.     private final static int PING_PACKET = 21;
  76.     private final static int SCREEN_PACKET = 98;
  77.     private final static int CHAT_TYPE_PACKET = 83;
  78.     private final static int CHAT_PACKET = 53;
  79.     private final static int PUBLIC_QUICK_CHAT_PACKET = 86;
  80.     private final static int ADD_FRIEND_PACKET = 89;
  81.     private final static int ADD_IGNORE_PACKET = 4;
  82.     private final static int REMOVE_IGNORE_PACKET = 73;
  83.     private final static int JOIN_FRIEND_CHAT_PACKET = 36;
  84.     private final static int CHANGE_FRIEND_CHAT_PACKET = 22;
  85.     private final static int KICK_FRIEND_CHAT_PACKET = 74;
  86.     private final static int REMOVE_FRIEND_PACKET = 24;
  87.     private final static int SEND_FRIEND_MESSAGE_PACKET = 82;
  88.     private final static int SEND_FRIEND_QUICK_CHAT_PACKET = 0;
  89.     private final static int OBJECT_CLICK1_PACKET = 26;
  90.     private final static int OBJECT_CLICK2_PACKET = 59;
  91.     private final static int OBJECT_CLICK3_PACKET = 40;
  92.     private final static int OBJECT_CLICK4_PACKET = 23;
  93.     private final static int OBJECT_CLICK5_PACKET = 80;
  94.     private final static int OBJECT_EXAMINE_PACKET = 25;
  95.     private final static int NPC_CLICK1_PACKET = 31;
  96.     private final static int NPC_CLICK2_PACKET = 101;
  97.     private final static int NPC_CLICK3_PACKET = 34;
  98.     private final static int ATTACK_NPC = 20;
  99.     private final static int PLAYER_OPTION_1_PACKET = 42;
  100.     private final static int PLAYER_OPTION_2_PACKET = 46;
  101.     private final static int ITEM_TAKE_PACKET = 57;
  102.     private final static int DIALOGUE_CONTINUE_PACKET = 72;
  103.     private final static int ENTER_INTEGER_PACKET = 81;
  104.     private final static int ENTER_NAME_PACKET = 29;
  105.     private final static int ENTER_STRING_PACKET = -1;
  106.     private final static int SWITCH_INTERFACE_ITEM_PACKET = 76;
  107.     private final static int INTERFACE_ON_PLAYER = 50;
  108.     private final static int INTERFACE_ON_NPC = 66;
  109.     private final static int COLOR_ID_PACKET = 97;
  110.     private static final int NPC_EXAMINE_PACKET = 9;
  111.     private final static int REPORT_ABUSE_PACKET = -1;
  112.  
  113.     static {
  114.         loadPacketSizes();
  115.     }
  116.  
  117.     public static void loadPacketSizes() {
  118.         PACKET_SIZES[0] = -1;
  119.         PACKET_SIZES[1] = -2;
  120.         PACKET_SIZES[2] = -1;
  121.         PACKET_SIZES[3] = 16;
  122.         PACKET_SIZES[4] = -1;
  123.         PACKET_SIZES[5] = 8;
  124.         PACKET_SIZES[6] = 8;
  125.         PACKET_SIZES[7] = 3;
  126.         PACKET_SIZES[8] = -1;
  127.         PACKET_SIZES[9] = 3;
  128.         PACKET_SIZES[10] = -1;
  129.         PACKET_SIZES[11] = -1;
  130.         PACKET_SIZES[12] = -1;
  131.         PACKET_SIZES[13] = 7;
  132.         PACKET_SIZES[14] = 8;
  133.         PACKET_SIZES[15] = 6;
  134.         PACKET_SIZES[16] = 2;
  135.         PACKET_SIZES[17] = 3;
  136.         PACKET_SIZES[18] = -1;
  137.         PACKET_SIZES[19] = -2;
  138.         PACKET_SIZES[20] = 3;
  139.         PACKET_SIZES[21] = 0;
  140.         PACKET_SIZES[22] = -1;
  141.         PACKET_SIZES[23] = 9;
  142.         PACKET_SIZES[24] = -1;
  143.         PACKET_SIZES[25] = 9;
  144.         PACKET_SIZES[26] = 9;
  145.         PACKET_SIZES[27] = 8;
  146.         PACKET_SIZES[28] = 4;
  147.         PACKET_SIZES[29] = -1;
  148.         PACKET_SIZES[30] = 0;
  149.         PACKET_SIZES[31] = 3;
  150.         PACKET_SIZES[32] = 8;
  151.         PACKET_SIZES[33] = 4;
  152.         PACKET_SIZES[34] = 3;
  153.         PACKET_SIZES[35] = -1;
  154.         PACKET_SIZES[36] = -1;
  155.         PACKET_SIZES[37] = 17;
  156.         PACKET_SIZES[38] = 4;
  157.         PACKET_SIZES[39] = 4;
  158.         PACKET_SIZES[40] = 9;
  159.         PACKET_SIZES[41] = -1;
  160.         PACKET_SIZES[42] = 3;
  161.         PACKET_SIZES[43] = 7;
  162.         PACKET_SIZES[44] = -2;
  163.         PACKET_SIZES[45] = 7;
  164.         PACKET_SIZES[46] = 3;
  165.         PACKET_SIZES[47] = 4;
  166.         PACKET_SIZES[48] = -1;
  167.         PACKET_SIZES[49] = 3;
  168.         PACKET_SIZES[50] = 11;
  169.         PACKET_SIZES[51] = 3;
  170.         PACKET_SIZES[52] = -1;
  171.         PACKET_SIZES[53] = -1;
  172.         PACKET_SIZES[54] = 0;
  173.         PACKET_SIZES[55] = 8;
  174.         PACKET_SIZES[56] = 3;
  175.         PACKET_SIZES[57] = 7;
  176.         PACKET_SIZES[58] = -1;
  177.         PACKET_SIZES[59] = 9;
  178.         PACKET_SIZES[60] = -1;
  179.         PACKET_SIZES[61] = 7;
  180.         PACKET_SIZES[62] = 7;
  181.         PACKET_SIZES[63] = 12;
  182.         PACKET_SIZES[64] = 4;
  183.         PACKET_SIZES[65] = 3;
  184.         PACKET_SIZES[66] = 11;
  185.         PACKET_SIZES[67] = 8;
  186.         PACKET_SIZES[68] = 8;
  187.         PACKET_SIZES[69] = 15;
  188.         PACKET_SIZES[70] = 1;
  189.         PACKET_SIZES[71] = 2;
  190.         PACKET_SIZES[72] = 6;
  191.         PACKET_SIZES[73] = -1;
  192.         PACKET_SIZES[74] = -1;
  193.         PACKET_SIZES[75] = -2;
  194.         PACKET_SIZES[76] = 16;
  195.         PACKET_SIZES[77] = 3;
  196.         PACKET_SIZES[78] = 1;
  197.         PACKET_SIZES[79] = 3;
  198.         PACKET_SIZES[80] = 9;
  199.         PACKET_SIZES[81] = 4;
  200.         PACKET_SIZES[82] = -2;
  201.         PACKET_SIZES[83] = 1;
  202.         PACKET_SIZES[84] = 1;
  203.         PACKET_SIZES[85] = 3;
  204.         PACKET_SIZES[86] = -1;
  205.         PACKET_SIZES[87] = 4;
  206.         PACKET_SIZES[88] = 3;
  207.         PACKET_SIZES[89] = -1;
  208.         PACKET_SIZES[90] = 8;
  209.         PACKET_SIZES[91] = -2;
  210.         PACKET_SIZES[92] = -1;
  211.         PACKET_SIZES[93] = -1;
  212.         PACKET_SIZES[94] = 9;
  213.         PACKET_SIZES[95] = -2;
  214.         PACKET_SIZES[96] = 8;
  215.         PACKET_SIZES[97] = 2;
  216.         PACKET_SIZES[98] = 6;
  217.         PACKET_SIZES[99] = 2;
  218.         PACKET_SIZES[100] = -2;
  219.         PACKET_SIZES[101] = 3;
  220.         PACKET_SIZES[102] = 7;
  221.         PACKET_SIZES[103] = 4;
  222.     }
  223.  
  224.     private Player player;
  225.     private int chatType;
  226.  
  227.     public WorldPacketsDecoder(Session session, Player player) {
  228.         super(session);
  229.         this.player = player;
  230.     }
  231.  
  232.     @Override
  233.     public void decode(InputStream stream) {
  234.         while (stream.getRemaining() > 0 && session.getChannel().isConnected()
  235.                 && !player.hasFinished()) {
  236.             int packetId = stream.readPacket(player);
  237.             if (packetId >= PACKET_SIZES.length || packetId < 0) {
  238.                 if (Settings.DEBUG)
  239.                     System.out.println("PacketId " + packetId
  240.                             + " has fake packet id.");
  241.                 break;
  242.             }
  243.             int length = PACKET_SIZES[packetId];
  244.             if (length == -1)
  245.                 length = stream.readUnsignedByte();
  246.             else if (length == -2)
  247.                 length = stream.readUnsignedShort();
  248.             else if (length == -3)
  249.                 length = stream.readInt();
  250.             else if (length == -4) {
  251.                 length = stream.getRemaining();
  252.                 if (Settings.DEBUG)
  253.                     System.out.println("Invalid size for PacketId " + packetId
  254.                             + ". Size guessed to be " + length);
  255.             }
  256.             if (length > stream.getRemaining()) {
  257.                 length = stream.getRemaining();
  258.                 if (Settings.DEBUG)
  259.                     System.out.println("PacketId " + packetId
  260.                             + " has fake size. - expected size " + length);
  261.                 // break;
  262.  
  263.             }
  264.             /*
  265.              * System.out.println("PacketId " +packetId+
  266.              * " has . - expected size " +length);
  267.              */
  268.             int startOffset = stream.getOffset();
  269.             processPackets(packetId, stream, length);
  270.             stream.setOffset(startOffset + length);
  271.         }
  272.     }
  273.  
  274.     public static void decodeLogicPacket(final Player player, LogicPacket packet) {
  275.         int packetId = packet.getId();
  276.         InputStream stream = new InputStream(packet.getData());
  277.         if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) {
  278.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  279.                     || player.isDead())
  280.                 return;
  281.             long currentTime = Utils.currentTimeMillis();
  282.             if (player.getLockDelay() > currentTime)
  283.                 return;
  284.             if (player.getFreezeDelay() >= currentTime) {
  285.                 player.getPackets().sendGameMessage(
  286.                         "A magical force prevents you from moving.");
  287.                 return;
  288.             }
  289.             int length = stream.getLength();
  290.             /*if (packetId == MINI_WALKING_PACKET)
  291.                 length -= 13;*/
  292.             int baseX = stream.readUnsignedShort128();
  293.             boolean forceRun = stream.readUnsigned128Byte() == 1;
  294.             int baseY = stream.readUnsignedShort128();
  295.             int steps = (length - 5) / 2;
  296.             if (steps > 25)
  297.                 steps = 25;
  298.             player.stopAll();
  299.             if(forceRun)
  300.                 player.setRun(forceRun);
  301.             for (int step = 0; step < steps; step++)
  302.                 if (!player.addWalkSteps(baseX + stream.readUnsignedByte(),
  303.                         baseY + stream.readUnsignedByte(), 25,
  304.                         true))
  305.                     break;
  306.         } else if (packetId == INTERFACE_ON_OBJECT) {
  307.             boolean forceRun = stream.readByte128() == 1;
  308.             int itemId = stream.readShortLE128();
  309.             int y = stream.readShortLE128();
  310.             int objectId = stream.readIntV2();
  311.             int interfaceHash = stream.readInt();
  312.             final int interfaceId = interfaceHash >> 16;
  313.             int slot = stream.readShortLE();
  314.             int x = stream.readShort128();
  315.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  316.                     || player.isDead())
  317.                 return;
  318.             long currentTime = Utils.currentTimeMillis();
  319.             if (player.getLockDelay() >= currentTime || player.getEmotesManager().getNextEmoteEnd() >= currentTime)
  320.                 return;
  321.             final WorldTile tile = new WorldTile(x, y, player.getPlane());
  322.             int regionId = tile.getRegionId();
  323.             if (!player.getMapRegionsIds().contains(regionId))
  324.                 return;
  325.             WorldObject mapObject = World.getRegion(regionId).getObject(objectId, tile);
  326.             if (mapObject == null || mapObject.getId() != objectId)
  327.                 return;
  328.             final WorldObject object = !player.isAtDynamicRegion() ? mapObject : new WorldObject(objectId, mapObject.getType(), mapObject.getRotation(), x, y, player.getPlane());
  329.             final Item item = player.getInventory().getItem(slot);
  330.             if (player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId)
  331.                 return;
  332.             if (player.getLockDelay() > Utils.currentTimeMillis())
  333.                 return;
  334.             if (!player.getInterfaceManager().containsInterface(interfaceId))
  335.                 return;
  336.             if (item == null || item.getId() != itemId)
  337.                 return;
  338.             player.stopAll(false); // false
  339.             if(forceRun)
  340.                 player.setRun(forceRun);
  341.             switch (interfaceId) {
  342.             case Inventory.INVENTORY_INTERFACE: // inventory
  343.                 ObjectHandler.handleItemOnObject(player, object, interfaceId, item);
  344.                 break;
  345.             }
  346.         } else if (packetId == PLAYER_OPTION_2_PACKET) {
  347.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  348.                     || player.isDead())
  349.                 return;
  350.             @SuppressWarnings("unused")
  351.             boolean unknown = stream.readByte() == 1;
  352.             int playerIndex = stream.readUnsignedShortLE128();
  353.             Player p2 = World.getPlayers().get(playerIndex);
  354.             if (p2 == null || p2.isDead() || p2.hasFinished()
  355.                     || !player.getMapRegionsIds().contains(p2.getRegionId()))
  356.                 return;
  357.             if (player.getLockDelay() > Utils.currentTimeMillis())
  358.                 return;
  359.             player.stopAll(false);
  360.             player.getActionManager().setAction(new PlayerFollow(p2));
  361.         } else if (packetId == PLAYER_OPTION_4_PACKET) {
  362.             @SuppressWarnings("unused")
  363.             boolean unknown = stream.readByte() == 1;
  364.             int playerIndex = stream.readUnsignedShortLE128();
  365.             Player p2 = World.getPlayers().get(playerIndex);
  366.             if (p2 == null || p2.isDead() || p2.hasFinished()
  367.                     || !player.getMapRegionsIds().contains(p2.getRegionId()))
  368.                 return;
  369.             if (player.getLockDelay() > Utils.currentTimeMillis())
  370.                 return;
  371.             player.stopAll(false);
  372.             if(player.isCantTrade()) {
  373.                 player.getPackets().sendGameMessage("You are busy.");
  374.                 return;
  375.             }
  376.             if (p2.getInterfaceManager().containsScreenInter() || p2.isCantTrade()) {
  377.                 player.getPackets().sendGameMessage("The other player is busy.");
  378.                 return;
  379.             }
  380.             if (!p2.withinDistance(player, 14)) {
  381.                 player.getPackets().sendGameMessage(
  382.                         "Unable to find target "+p2.getDisplayName());
  383.                 return;
  384.             }
  385.  
  386.             if (p2.getTemporaryAttributtes().get("TradeTarget") == player) {
  387.                 p2.getTemporaryAttributtes().remove("TradeTarget");
  388.                 player.getTrade().openTrade(p2);
  389.                 p2.getTrade().openTrade(player);
  390.                 return;
  391.             }
  392.             player.getTemporaryAttributtes().put("TradeTarget", p2);
  393.             player.getPackets().sendGameMessage("Sending " + p2.getDisplayName() + " a request...");
  394.             p2.getPackets().sendTradeRequestMessage(player);
  395.         } else if (packetId == PLAYER_OPTION_1_PACKET) {
  396.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  397.                     || player.isDead())
  398.                 return;
  399.             @SuppressWarnings("unused")
  400.             boolean unknown = stream.readByte() == 1;
  401.             int playerIndex = stream.readUnsignedShortLE128();
  402.             Player p2 = World.getPlayers().get(playerIndex);
  403.             if (p2 == null || p2.isDead() || p2.hasFinished()
  404.                     || !player.getMapRegionsIds().contains(p2.getRegionId()))
  405.                 return;
  406.             if (player.getLockDelay() > Utils.currentTimeMillis()
  407.                     || !player.getControlerManager().canPlayerOption1(p2))
  408.                 return;
  409.             if (!player.isCanPvp())
  410.                 return;
  411.             if (!player.getControlerManager().canAttack(p2))
  412.                 return;
  413.  
  414.             if (!player.isCanPvp() || !p2.isCanPvp()) {
  415.                 player.getPackets()
  416.                 .sendGameMessage(
  417.                         "You can only attack players in a player-vs-player area.");
  418.                 return;
  419.             }
  420.             if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
  421.                 if (player.getAttackedBy() != p2
  422.                         && player.getAttackedByDelay() > Utils
  423.                         .currentTimeMillis()) {
  424.                     player.getPackets().sendGameMessage(
  425.                             "You are already in combat.");
  426.                     return;
  427.                 }
  428.                 if (p2.getAttackedBy() != player
  429.                         && p2.getAttackedByDelay() > Utils.currentTimeMillis()) {
  430.                     if (p2.getAttackedBy() instanceof NPC) {
  431.                         p2.setAttackedBy(player); // changes enemy to player,
  432.                         // player has priority over
  433.                         // npc on single areas
  434.                     } else {
  435.                         player.getPackets().sendGameMessage(
  436.                                 "That player is already in combat.");
  437.                         return;
  438.                     }
  439.                 }
  440.             }
  441.             player.stopAll(false);
  442.             player.getActionManager().setAction(new PlayerCombat(p2));
  443.         } else if (packetId == ATTACK_NPC) {
  444.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  445.                     || player.isDead()) {
  446.                 return;
  447.             }
  448.             if (player.getLockDelay() > Utils.currentTimeMillis()) {
  449.                 return;
  450.             }
  451.             int npcIndex = stream.readUnsignedShort128();
  452.             boolean forceRun = stream.read128Byte() == 1;
  453.             if(forceRun)
  454.                 player.setRun(forceRun);
  455.             NPC npc = World.getNPCs().get(npcIndex);
  456.             if (npc == null || npc.isDead() || npc.hasFinished()
  457.                     || !player.getMapRegionsIds().contains(npc.getRegionId())
  458.                     || !npc.getDefinitions().hasAttackOption()) {
  459.                 return;
  460.             }
  461.             if (!player.getControlerManager().canAttack(npc)) {
  462.                 return;
  463.             }
  464.             if (npc instanceof Familiar) {
  465.                 Familiar familiar = (Familiar) npc;
  466.                 if (familiar == player.getFamiliar()) {
  467.                     player.getPackets().sendGameMessage(
  468.                             "You can't attack your own familiar.");
  469.                     return;
  470.                 }
  471.                 if (!familiar.canAttack(player)) {
  472.                     player.getPackets().sendGameMessage(
  473.                             "You can't attack this npc.");
  474.                     return;
  475.                 }
  476.             } else if (!npc.isForceMultiAttacked()) {
  477.                 if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
  478.                     if (player.getAttackedBy() != npc
  479.                             && player.getAttackedByDelay() > Utils
  480.                             .currentTimeMillis()) {
  481.                         player.getPackets().sendGameMessage(
  482.                                 "You are already in combat.");
  483.                         return;
  484.                     }
  485.                     if (npc.getAttackedBy() != player
  486.                             && npc.getAttackedByDelay() > Utils
  487.                             .currentTimeMillis()) {
  488.                         player.getPackets().sendGameMessage(
  489.                                 "This npc is already in combat.");
  490.                         return;
  491.                     }
  492.                 }
  493.             }
  494.             player.stopAll(false);
  495.             player.getActionManager().setAction(new PlayerCombat(npc));
  496.         } else if (packetId == INTERFACE_ON_PLAYER) {
  497.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  498.                     || player.isDead())
  499.                 return;
  500.             if (player.getLockDelay() > Utils.currentTimeMillis())
  501.                 return;
  502.             @SuppressWarnings("unused")
  503.             int junk1 = stream.readUnsignedShort();
  504.             int playerIndex = stream.readUnsignedShort();
  505.             int interfaceHash = stream.readIntV2();
  506.             @SuppressWarnings("unused")
  507.             int junk2 = stream.readUnsignedShortLE128();
  508.             @SuppressWarnings("unused")
  509.             boolean unknown = stream.read128Byte() == 1;
  510.             int interfaceId = interfaceHash >> 16;
  511.             int componentId = interfaceHash - (interfaceId << 16);
  512.             if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
  513.                 return;
  514.             if (!player.getInterfaceManager().containsInterface(interfaceId))
  515.                 return;
  516.             if (componentId == 65535)
  517.                 componentId = -1;
  518.             if (componentId != -1
  519.                     && Utils.getInterfaceDefinitionsComponentsSize(interfaceId) <= componentId)
  520.                 return;
  521.             Player p2 = World.getPlayers().get(playerIndex);
  522.             if (p2 == null || p2.isDead() || p2.hasFinished()
  523.                     || !player.getMapRegionsIds().contains(p2.getRegionId()))
  524.                 return;
  525.             player.stopAll(false);
  526.             switch (interfaceId) {
  527.             case 662:
  528.             case 747:
  529.                 if (player.getFamiliar() == null)
  530.                     return;
  531.                 player.resetWalkSteps();
  532.                 if ((interfaceId == 747 && componentId == 15)
  533.                         || (interfaceId == 662 && componentId == 65)
  534.                         || (interfaceId == 662 && componentId == 74)
  535.                         || interfaceId == 747 && componentId == 18) {
  536.                     if ((interfaceId == 662 && componentId == 74
  537.                             || interfaceId == 747 && componentId == 24 || interfaceId == 747
  538.                             && componentId == 18)) {
  539.                         if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
  540.                             return;
  541.                     }
  542.                     if (!player.isCanPvp() || !p2.isCanPvp()) {
  543.                         player.getPackets()
  544.                         .sendGameMessage(
  545.                                 "You can only attack players in a player-vs-player area.");
  546.                         return;
  547.                     }
  548.                     if (!player.getFamiliar().canAttack(p2)) {
  549.                         player.getPackets()
  550.                         .sendGameMessage(
  551.                                 "You can only use your familiar in a multi-zone area.");
  552.                         return;
  553.                     } else {
  554.                         player.getFamiliar().setSpecial(
  555.                                 interfaceId == 662 && componentId == 74
  556.                                 || interfaceId == 747
  557.                                 && componentId == 18);
  558.                         player.getFamiliar().setTarget(p2);
  559.                     }
  560.                 }
  561.                 break;
  562.             case 193:
  563.                 switch (componentId) {
  564.                 case 28:
  565.                 case 32:
  566.                 case 24:
  567.                 case 20:
  568.                 case 30:
  569.                 case 34:
  570.                 case 26:
  571.                 case 22:
  572.                 case 29:
  573.                 case 33:
  574.                 case 25:
  575.                 case 21:
  576.                 case 31:
  577.                 case 35:
  578.                 case 27:
  579.                 case 23:
  580.                     if (Magic.checkCombatSpell(player, componentId, 1, false)) {
  581.                         player.setNextFaceWorldTile(new WorldTile(p2
  582.                                 .getCoordFaceX(p2.getSize()), p2
  583.                                 .getCoordFaceY(p2.getSize()), p2.getPlane()));
  584.                         if (!player.getControlerManager().canAttack(p2))
  585.                             return;
  586.                         if (!player.isCanPvp() || !p2.isCanPvp()) {
  587.                             player.getPackets()
  588.                             .sendGameMessage(
  589.                                     "You can only attack players in a player-vs-player area.");
  590.                             return;
  591.                         }
  592.                         if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
  593.                             if (player.getAttackedBy() != p2
  594.                                     && player.getAttackedByDelay() > Utils
  595.                                     .currentTimeMillis()) {
  596.                                 player.getPackets()
  597.                                 .sendGameMessage(
  598.                                         "That "
  599.                                                 + (player
  600.                                                         .getAttackedBy() instanceof Player ? "player"
  601.                                                                 : "npc")
  602.                                                                 + " is already in combat.");
  603.                                 return;
  604.                             }
  605.                             if (p2.getAttackedBy() != player
  606.                                     && p2.getAttackedByDelay() > Utils
  607.                                     .currentTimeMillis()) {
  608.                                 if (p2.getAttackedBy() instanceof NPC) {
  609.                                     p2.setAttackedBy(player); // changes enemy
  610.                                     // to player,
  611.                                     // player has
  612.                                     // priority over
  613.                                     // npc on single
  614.                                     // areas
  615.                                 } else {
  616.                                     player.getPackets()
  617.                                     .sendGameMessage(
  618.                                             "That player is already in combat.");
  619.                                     return;
  620.                                 }
  621.                             }
  622.                         }
  623.                         player.getActionManager()
  624.                         .setAction(new PlayerCombat(p2));
  625.                     }
  626.                     break;
  627.                 }
  628.             case 192:
  629.                 switch (componentId) {
  630.                 case 25: // air strike
  631.                 case 28: // water strike
  632.                 case 30: // earth strike
  633.                 case 32: // fire strike
  634.                 case 34: // air bolt
  635.                 case 39: // water bolt
  636.                 case 42: // earth bolt
  637.                 case 45: // fire bolt
  638.                 case 49: // air blast
  639.                 case 52: // water blast
  640.                 case 58: // earth blast
  641.                 case 63: // fire blast
  642.                 case 70: // air wave
  643.                 case 73: // water wave
  644.                 case 77: // earth wave
  645.                 case 80: // fire wave
  646.                 case 86: // teleblock
  647.                 case 84: // air surge
  648.                 case 87: // water surge
  649.                 case 89: // earth surge
  650.                 case 91: // fire surge
  651.                 case 99: // storm of armadyl
  652.                 case 36: // bind
  653.                 case 66: // Sara Strike
  654.                 case 67: // Guthix Claws
  655.                 case 68: // Flame of Zammy
  656.                 case 55: // snare
  657.                 case 81: // entangle
  658.                     if (Magic.checkCombatSpell(player, componentId, 1, false)) {
  659.                         player.setNextFaceWorldTile(new WorldTile(p2
  660.                                 .getCoordFaceX(p2.getSize()), p2
  661.                                 .getCoordFaceY(p2.getSize()), p2.getPlane()));
  662.                         if (!player.getControlerManager().canAttack(p2))
  663.                             return;
  664.                         if (!player.isCanPvp() || !p2.isCanPvp()) {
  665.                             player.getPackets()
  666.                             .sendGameMessage(
  667.                                     "You can only attack players in a player-vs-player area.");
  668.                             return;
  669.                         }
  670.                         if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
  671.                             if (player.getAttackedBy() != p2
  672.                                     && player.getAttackedByDelay() > Utils
  673.                                     .currentTimeMillis()) {
  674.                                 player.getPackets()
  675.                                 .sendGameMessage(
  676.                                         "That "
  677.                                                 + (player
  678.                                                         .getAttackedBy() instanceof Player ? "player"
  679.                                                                 : "npc")
  680.                                                                 + " is already in combat.");
  681.                                 return;
  682.                             }
  683.                             if (p2.getAttackedBy() != player
  684.                                     && p2.getAttackedByDelay() > Utils
  685.                                     .currentTimeMillis()) {
  686.                                 if (p2.getAttackedBy() instanceof NPC) {
  687.                                     p2.setAttackedBy(player); // changes enemy
  688.                                     // to player,
  689.                                     // player has
  690.                                     // priority over
  691.                                     // npc on single
  692.                                     // areas
  693.                                 } else {
  694.                                     player.getPackets()
  695.                                     .sendGameMessage(
  696.                                             "That player is already in combat.");
  697.                                     return;
  698.                                 }
  699.                             }
  700.                         }
  701.                         player.getActionManager()
  702.                         .setAction(new PlayerCombat(p2));
  703.                     }
  704.                     break;
  705.                 }
  706.                 break;
  707.             }
  708.             if (Settings.DEBUG)
  709.                 System.out.println("Spell:" + componentId);
  710.         } else if (packetId == INTERFACE_ON_NPC) {
  711.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  712.                     || player.isDead())
  713.                 return;
  714.             if (player.getLockDelay() > Utils.currentTimeMillis())
  715.                 return;
  716.             @SuppressWarnings("unused")
  717.             boolean unknown = stream.readByte() == 1;
  718.             int interfaceHash = stream.readInt();
  719.             int npcIndex = stream.readUnsignedShortLE();
  720.             int interfaceSlot = stream.readUnsignedShortLE128();
  721.             @SuppressWarnings("unused")
  722.             int junk2 =stream.readUnsignedShortLE();
  723.             int interfaceId = interfaceHash >> 16;
  724.             int componentId = interfaceHash - (interfaceId << 16);
  725.             if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
  726.                 return;
  727.             if (!player.getInterfaceManager().containsInterface(interfaceId))
  728.                 return;
  729.             if (componentId == 65535)
  730.                 componentId = -1;
  731.             if (componentId != -1
  732.                     && Utils.getInterfaceDefinitionsComponentsSize(interfaceId) <= componentId)
  733.                 return;
  734.             NPC npc = World.getNPCs().get(npcIndex);
  735.             if (npc == null || npc.isDead() || npc.hasFinished()
  736.                     || !player.getMapRegionsIds().contains(npc.getRegionId()))
  737.                 return;
  738.             player.stopAll(false);
  739.             if (interfaceId != Inventory.INVENTORY_INTERFACE) {
  740.                 if (!npc.getDefinitions().hasAttackOption()) {
  741.                     player.getPackets().sendGameMessage(
  742.                             "You can't attack this npc.");
  743.                     return;
  744.                 }
  745.             }
  746.             switch (interfaceId) {
  747.             case Inventory.INVENTORY_INTERFACE:
  748.                 Item item = player.getInventory().getItem(interfaceSlot);
  749.                 if (item == null || !player.getControlerManager().processItemOnNPC(npc, item))
  750.                     return;
  751.                 InventoryOptionsHandler.handleItemOnNPC(player, npc, item);
  752.                 break;
  753.             case 1165:
  754.                 Summoning.attackDreadnipTarget(npc, player);
  755.                 break;
  756.             case 662:
  757.             case 747:
  758.                 if (player.getFamiliar() == null)
  759.                     return;
  760.                 player.resetWalkSteps();
  761.                 if ((interfaceId == 747 && componentId == 15)
  762.                         || (interfaceId == 662 && componentId == 65)
  763.                         || (interfaceId == 662 && componentId == 74)
  764.                         || interfaceId == 747 && componentId == 18
  765.                         || interfaceId == 747 && componentId == 24) {
  766.                     if ((interfaceId == 662 && componentId == 74 || interfaceId == 747
  767.                             && componentId == 18)) {
  768.                         if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
  769.                             return;
  770.                     }
  771.                     if(npc instanceof Familiar) {
  772.                         Familiar familiar = (Familiar) npc;
  773.                         if (familiar == player.getFamiliar()) {
  774.                             player.getPackets().sendGameMessage("You can't attack your own familiar.");
  775.                             return;
  776.                         }
  777.                         if (!player.getFamiliar().canAttack(familiar.getOwner())) {
  778.                             player.getPackets().sendGameMessage("You can only attack players in a player-vs-player area.");
  779.                             return;
  780.                         }
  781.                     }
  782.                     if (!player.getFamiliar().canAttack(npc)) {
  783.                         player.getPackets()
  784.                         .sendGameMessage(
  785.                                 "You can only use your familiar in a multi-zone area.");
  786.                         return;
  787.                     } else {
  788.                         player.getFamiliar().setSpecial(
  789.                                 interfaceId == 662 && componentId == 74
  790.                                 || interfaceId == 747
  791.                                 && componentId == 18);
  792.                         player.getFamiliar().setTarget(npc);
  793.                     }
  794.                 }
  795.                 break;
  796.             case 193:
  797.                 switch (componentId) {
  798.                 case 28:
  799.                 case 32:
  800.                 case 24:
  801.                 case 20:
  802.                 case 30:
  803.                 case 34:
  804.                 case 26:
  805.                 case 22:
  806.                 case 29:
  807.                 case 33:
  808.                 case 25:
  809.                 case 21:
  810.                 case 31:
  811.                 case 35:
  812.                 case 27:
  813.                 case 23:
  814.                     if (Magic.checkCombatSpell(player, componentId, 1, false)) {
  815.                         player.setNextFaceWorldTile(new WorldTile(npc
  816.                                 .getCoordFaceX(npc.getSize()), npc
  817.                                 .getCoordFaceY(npc.getSize()), npc.getPlane()));
  818.                         if (!player.getControlerManager().canAttack(npc))
  819.                             return;
  820.                         if (npc instanceof Familiar) {
  821.                             Familiar familiar = (Familiar) npc;
  822.                             if (familiar == player.getFamiliar()) {
  823.                                 player.getPackets().sendGameMessage(
  824.                                         "You can't attack your own familiar.");
  825.                                 return;
  826.                             }
  827.                             if (!familiar.canAttack(player)) {
  828.                                 player.getPackets().sendGameMessage(
  829.                                         "You can't attack this npc.");
  830.                                 return;
  831.                             }
  832.                         } else if (!npc.isForceMultiAttacked()) {
  833.                             if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
  834.                                 if (player.getAttackedBy() != npc
  835.                                         && player.getAttackedByDelay() > Utils
  836.                                         .currentTimeMillis()) {
  837.                                     player.getPackets().sendGameMessage(
  838.                                             "You are already in combat.");
  839.                                     return;
  840.                                 }
  841.                                 if (npc.getAttackedBy() != player
  842.                                         && npc.getAttackedByDelay() > Utils
  843.                                         .currentTimeMillis()) {
  844.                                     player.getPackets().sendGameMessage(
  845.                                             "This npc is already in combat.");
  846.                                     return;
  847.                                 }
  848.                             }
  849.                         }
  850.                         player.getActionManager().setAction(
  851.                                 new PlayerCombat(npc));
  852.                     }
  853.                     break;
  854.                 }
  855.             case 192:
  856.                 switch (componentId) {
  857.                 case 25: // air strike
  858.                 case 28: // water strike
  859.                 case 30: // earth strike
  860.                 case 32: // fire strike
  861.                 case 34: // air bolt
  862.                 case 39: // water bolt
  863.                 case 42: // earth bolt
  864.                 case 45: // fire bolt
  865.                 case 49: // air blast
  866.                 case 52: // water blast
  867.                 case 58: // earth blast
  868.                 case 63: // fire blast
  869.                 case 70: // air wave
  870.                 case 73: // water wave
  871.                 case 77: // earth wave
  872.                 case 80: // fire wave
  873.                 case 84: // air surge
  874.                 case 87: // water surge
  875.                 case 89: // earth surge
  876.                 case 66: // Sara Strike
  877.                 case 67: // Guthix Claws
  878.                 case 68: // Flame of Zammy
  879.                 case 93:
  880.                 case 91: // fire surge
  881.                 case 99: // storm of Armadyl
  882.                 case 36: // bind
  883.                 case 55: // snare
  884.                 case 81: // entangle
  885.                     if (Magic.checkCombatSpell(player, componentId, 1, false)) {
  886.                         player.setNextFaceWorldTile(new WorldTile(npc
  887.                                 .getCoordFaceX(npc.getSize()), npc
  888.                                 .getCoordFaceY(npc.getSize()), npc.getPlane()));
  889.                         if (!player.getControlerManager().canAttack(npc))
  890.                             return;
  891.                         if (npc instanceof Familiar) {
  892.                             Familiar familiar = (Familiar) npc;
  893.                             if (familiar == player.getFamiliar()) {
  894.                                 player.getPackets().sendGameMessage(
  895.                                         "You can't attack your own familiar.");
  896.                                 return;
  897.                             }
  898.                             if (!familiar.canAttack(player)) {
  899.                                 player.getPackets().sendGameMessage(
  900.                                         "You can't attack this npc.");
  901.                                 return;
  902.                             }
  903.                         } else if (!npc.isForceMultiAttacked()) {
  904.                             if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
  905.                                 if (player.getAttackedBy() != npc
  906.                                         && player.getAttackedByDelay() > Utils
  907.                                         .currentTimeMillis()) {
  908.                                     player.getPackets().sendGameMessage(
  909.                                             "You are already in combat.");
  910.                                     return;
  911.                                 }
  912.                                 if (npc.getAttackedBy() != player
  913.                                         && npc.getAttackedByDelay() > Utils
  914.                                         .currentTimeMillis()) {
  915.                                     player.getPackets().sendGameMessage(
  916.                                             "This npc is already in combat.");
  917.                                     return;
  918.                                 }
  919.                             }
  920.                         }
  921.                         player.getActionManager().setAction(
  922.                                 new PlayerCombat(npc));
  923.                     }
  924.                     break;
  925.                 }
  926.                 break;
  927.             }
  928.             if (Settings.DEBUG)
  929.                 System.out.println("Spell:" + componentId);
  930.         } else if (packetId == NPC_CLICK1_PACKET)
  931.             NPCHandler.handleOption1(player, stream);
  932.         else if (packetId == NPC_CLICK2_PACKET)
  933.             NPCHandler.handleOption2(player, stream);
  934.         else if (packetId == NPC_CLICK3_PACKET)
  935.             NPCHandler.handleOption3(player, stream);
  936.         else if (packetId == OBJECT_CLICK1_PACKET)
  937.             ObjectHandler.handleOption(player, stream, 1);
  938.         else if (packetId == OBJECT_CLICK2_PACKET)
  939.             ObjectHandler.handleOption(player, stream, 2);
  940.         else if (packetId == OBJECT_CLICK3_PACKET)
  941.             ObjectHandler.handleOption(player, stream, 3);
  942.         else if (packetId == OBJECT_CLICK4_PACKET)
  943.             ObjectHandler.handleOption(player, stream, 4);
  944.         else if (packetId == OBJECT_CLICK5_PACKET)
  945.             ObjectHandler.handleOption(player, stream, 5);
  946.         else if (packetId == ITEM_TAKE_PACKET) {
  947.             if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
  948.                     || player.isDead())
  949.                 return;
  950.             long currentTime = Utils.currentTimeMillis();
  951.             if (player.getLockDelay() > currentTime)
  952.                 // || player.getFreezeDelay() >= currentTime)
  953.                 return;
  954.             int y = stream.readUnsignedShort();
  955.             int x = stream.readUnsignedShortLE();
  956.             final int id = stream.readUnsignedShort();
  957.             boolean forceRun = stream.read128Byte() == 1;
  958.             final WorldTile tile = new WorldTile(x, y, player.getPlane());
  959.             final int regionId = tile.getRegionId();
  960.             if (!player.getMapRegionsIds().contains(regionId))
  961.                 return;
  962.             final FloorItem item = World.getRegion(regionId).getGroundItem(id,
  963.                     tile, player);
  964.             if (item == null)
  965.                 return;
  966.             player.stopAll(false);
  967.             if(forceRun)
  968.                 player.setRun(forceRun);
  969.             player.setCoordsEvent(new CoordsEvent(tile, new Runnable() {
  970.                 @Override
  971.                 public void run() {
  972.                     final FloorItem item = World.getRegion(regionId)
  973.                             .getGroundItem(id, tile, player);
  974.                     if (item == null)
  975.                         return;
  976.             /*      if (player.getRights() > 0 || player.isSupporter())
  977.                         player.getPackets().sendGameMessage("This item was dropped by [Username] "+item.getOwner().getUsername()+ " [DiplayName] "+item.getOwner().getDisplayName());
  978.             */      player.setNextFaceWorldTile(tile);
  979.                     player.addWalkSteps(tile.getX(), tile.getY(), 1);
  980.                     World.removeGroundItem(player, item);
  981.                 }
  982.             }, 1, 1));
  983.         }
  984.     }
  985.  
  986.     public void processPackets(final int packetId, InputStream stream,
  987.             int length) {
  988.         player.setPacketsDecoderPing(Utils.currentTimeMillis());
  989.         if (packetId == PING_PACKET) {
  990.             // kk we ping :)
  991.         } else if (packetId == MOUVE_MOUSE_PACKET) {
  992.             // USELESS PACKET
  993.         } else if (packetId == KEY_TYPED_PACKET) {
  994.             // USELESS PACKET
  995.         } else if (packetId == RECEIVE_PACKET_COUNT_PACKET) {
  996.             // interface packets
  997.             stream.readInt();
  998.         } else if (packetId == ITEM_ON_ITEM_PACKET) {
  999.             InventoryOptionsHandler.handleItemOnItem(player, stream);
  1000.         } else if (packetId == MAGIC_ON_ITEM_PACKET) {
  1001.             int inventoryInter = stream.readInt() >> 16;
  1002.             int itemId = stream.readShort128();
  1003.             @SuppressWarnings("unused")
  1004.             int junk = stream.readShort();
  1005.             @SuppressWarnings("unused")
  1006.             int itemSlot = stream.readShortLE();
  1007.             int interfaceSet = stream.readIntV1();
  1008.             int spellId = interfaceSet & 0xFFF;
  1009.             int magicInter = interfaceSet >> 16;
  1010.             if (inventoryInter == 149 && magicInter == 192) {
  1011.                 switch (spellId) {
  1012.                 case 59:// High Alch
  1013.                     if (player.getSkills().getLevel(Skills.MAGIC) < 55) {
  1014.                         player.getPackets()
  1015.                         .sendGameMessage(
  1016.                                 "You do not have the required level to cast this spell.");
  1017.                         return;
  1018.                     }
  1019.                     if (itemId == 995) {
  1020.                         player.getPackets().sendGameMessage(
  1021.                                 "You can't alch this!");
  1022.                         return;
  1023.                     }
  1024.                     if (player.getEquipment().getWeaponId() == 1401
  1025.                             || player.getEquipment().getWeaponId() == 3054
  1026.                             || player.getEquipment().getWeaponId() == 19323) {
  1027.                         if (!player.getInventory().containsItem(561, 1)) {
  1028.                             player.getPackets()
  1029.                             .sendGameMessage(
  1030.                                     "You do not have the required runes to cast this spell.");
  1031.                             return;
  1032.                         }
  1033.                         player.setNextAnimation(new Animation(9633));
  1034.                         player.setNextGraphics(new Graphics(112));
  1035.                         player.getInventory().deleteItem(561, 1);
  1036.                         player.getInventory().deleteItem(itemId, 1);
  1037.                         player.getInventory()
  1038.                         .addItem(
  1039.                                 995,
  1040.                                 new Item(itemId, 1).getDefinitions()
  1041.                                 .getValue() >> 6);
  1042.                     } else {
  1043.                         if (!player.getInventory().containsItem(561, 1)
  1044.                                 || !player.getInventory().containsItem(554, 5)) {
  1045.                             player.getPackets()
  1046.                             .sendGameMessage(
  1047.                                     "You do not have the required runes to cast this spell.");
  1048.                             return;
  1049.                         }
  1050.                         player.setNextAnimation(new Animation(713));
  1051.                         player.setNextGraphics(new Graphics(113));
  1052.                         player.getInventory().deleteItem(561, 1);
  1053.                         player.getInventory().deleteItem(554, 5);
  1054.                         player.getInventory().deleteItem(itemId, 1);
  1055.                         player.getInventory()
  1056.                         .addItem(
  1057.                                 995,
  1058.                                 new Item(itemId, 1).getDefinitions()
  1059.                                 .getValue() >> 6);
  1060.                     }
  1061.                     break;
  1062.                 default:
  1063.                     System.out.println("Spell:" + spellId + ", Item:" + itemId);
  1064.                 }
  1065.                 System.out.println("Spell:" + spellId + ", Item:" + itemId);
  1066.             }
  1067.         } else if (packetId == AFK_PACKET) {
  1068.             player.getSession().getChannel().close();
  1069.         } else if (packetId == CLOSE_INTERFACE_PACKET) {
  1070.             if (player.hasStarted() && !player.hasFinished() && !player.isRunning()) { //used for old welcome screen
  1071.                 player.run();
  1072.                 return;
  1073.             }
  1074.             player.stopAll();
  1075.         } else if (packetId == MOVE_CAMERA_PACKET) {
  1076.             // not using it atm
  1077.             stream.readUnsignedShort();
  1078.             stream.readUnsignedShort();
  1079.         } else if (packetId == IN_OUT_SCREEN_PACKET) {
  1080.             // not using this check because not 100% efficient
  1081.             @SuppressWarnings("unused")
  1082.             boolean inScreen = stream.readByte() == 1;
  1083.         } else if (packetId == SCREEN_PACKET) {
  1084.             int displayMode = stream.readUnsignedByte();
  1085.             player.setScreenWidth(stream.readUnsignedShort());
  1086.             player.setScreenHeight(stream.readUnsignedShort());
  1087.             @SuppressWarnings("unused")
  1088.             boolean switchScreenMode = stream.readUnsignedByte() == 1;
  1089.             if (!player.hasStarted() || player.hasFinished()
  1090.                     || displayMode == player.getDisplayMode()
  1091.                     || !player.getInterfaceManager().containsInterface(742))
  1092.                 return;
  1093.             player.setDisplayMode(displayMode);
  1094.             player.getInterfaceManager().removeAll();
  1095.             player.getInterfaceManager().sendInterfaces();
  1096.             player.getInterfaceManager().sendInterface(742);
  1097.         } else if (packetId == CLICK_PACKET) {
  1098.             int mouseHash = stream.readShortLE128();
  1099.             int mouseButton = mouseHash >> 15;
  1100.             int time = mouseHash - (mouseButton << 15); // time
  1101.             int positionHash = stream.readIntV1();
  1102.             int y = positionHash >> 16; // y;
  1103.             int x = positionHash - (y << 16); // x
  1104.             @SuppressWarnings("unused")
  1105.             boolean clicked;
  1106.             // mass click or stupid autoclicker, lets stop lagg
  1107.             if (time <= 1 || x < 0 || x > player.getScreenWidth() || y < 0
  1108.                     || y > player.getScreenHeight()) {
  1109.                 // player.getSession().getChannel().close();
  1110.                 clicked = false;
  1111.                 return;
  1112.             }
  1113.             clicked = true;
  1114.         } else if (packetId == DIALOGUE_CONTINUE_PACKET) {
  1115.             int interfaceHash = stream.readInt();
  1116.             int junk = stream.readShort128();
  1117.             int interfaceId = interfaceHash >> 16;
  1118.             int buttonId = (interfaceHash & 0xFF);
  1119.             if (Utils.getInterfaceDefinitionsSize() <= interfaceId) {
  1120.                 // hack, or server error or client error
  1121.                 // player.getSession().getChannel().close();
  1122.                 return;
  1123.             }
  1124.             if (!player.isRunning()
  1125.                     || !player.getInterfaceManager().containsInterface(
  1126.                             interfaceId))
  1127.                 return;
  1128.             if(Settings.DEBUG)
  1129.                 Logger.log(this, "Dialogue: "+interfaceId+", "+buttonId+", "+junk);
  1130.             int componentId = interfaceHash - (interfaceId << 16);
  1131.             player.getDialogueManager().continueDialogue(interfaceId,
  1132.                     componentId);
  1133.         } else if (packetId == WORLD_MAP_CLICK) {
  1134.             int coordinateHash = stream.readInt();
  1135.             int x = coordinateHash >> 14;
  1136.             int y = coordinateHash & 0x3fff;
  1137.             int plane = coordinateHash >> 28;
  1138.             Integer hash  =  (Integer)player.getTemporaryAttributtes().get("worldHash");
  1139.             if (hash == null || coordinateHash != hash)
  1140.                 player.getTemporaryAttributtes().put("worldHash", coordinateHash);
  1141.             else {
  1142.                 player.getTemporaryAttributtes().remove("worldHash");
  1143.                 player.getHintIconsManager().addHintIcon(x, y, plane, 20, 0, 2, -1, true);
  1144.                 player.getPackets().sendConfig(1159, coordinateHash);
  1145.             }
  1146.         } else if (packetId == ACTION_BUTTON1_PACKET
  1147.                 || packetId == ACTION_BUTTON2_PACKET
  1148.                 || packetId == ACTION_BUTTON4_PACKET
  1149.                 || packetId == ACTION_BUTTON5_PACKET
  1150.                 || packetId == ACTION_BUTTON6_PACKET
  1151.                 || packetId == ACTION_BUTTON7_PACKET
  1152.                 || packetId == ACTION_BUTTON8_PACKET
  1153.                 || packetId == ACTION_BUTTON3_PACKET
  1154.                 || packetId == ACTION_BUTTON9_PACKET
  1155.                 || packetId == ACTION_BUTTON10_PACKET) {
  1156.             ButtonHandler.handleButtons(player, stream, packetId);
  1157.         } else if (packetId == ENTER_NAME_PACKET) {
  1158.             if (!player.isRunning() || player.isDead())
  1159.                 return;
  1160.             String value = stream.readString();
  1161.             if (value.equals(""))
  1162.                 return;
  1163.             if (player.getInterfaceManager().containsInterface(1108))
  1164.                 player.getFriendsIgnores().setChatPrefix(value);
  1165.             else if (player.getTemporaryAttributtes().get("yellcolor") == Boolean.TRUE) {
  1166.                 if(value.length() != 6) {
  1167.                     player.getDialogueManager().startDialogue("SimpleMessage", "The HEX yell color you wanted to pick cannot be longer and shorter then 6.");
  1168.                 } else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
  1169.                     player.getDialogueManager().startDialogue("SimpleMessage", "The requested yell color can only contain numeric and regular characters.");
  1170.                 } else {
  1171.                     player.setYellColor(value);
  1172.                     player.getDialogueManager().startDialogue("SimpleMessage", "Your yell color has been changed to <col="+player.getYellColor()+">"+player.getYellColor()+"</col>.");
  1173.                 }
  1174.                 player.getTemporaryAttributtes().put("yellcolor", Boolean.FALSE);
  1175.             }
  1176.             else if (player.getTemporaryAttributtes().get("entering_note") == Boolean.TRUE) {
  1177.                 player.getNotes().add(new Note(value, 1));
  1178.                 player.getNotes().refresh();
  1179.                 player.getTemporaryAttributtes().put("entering_note", Boolean.FALSE);
  1180.                 return;
  1181.             } else if (player.getTemporaryAttributtes().get("editing_note") == Boolean.TRUE) {
  1182.                 Note note = (Note) player.getTemporaryAttributtes().get("curNote");
  1183.                 player.getNotes().getNotes().get(player.getNotes().getNotes().indexOf(note));
  1184.                 player.getNotes().refresh();
  1185.                 player.getTemporaryAttributtes().put("editing_note", Boolean.FALSE);
  1186.             } else if (player.getTemporaryAttributtes().get("view_name") == Boolean.TRUE) {
  1187.                 player.getTemporaryAttributtes().remove("view_name");
  1188.                 Player other = World.getPlayerByDisplayName(value);
  1189.                 if (other == null) {
  1190.                     player.getPackets().sendGameMessage("Couldn't find player.");
  1191.                     return;
  1192.                 }
  1193.                 ClanWars clan = other.getCurrentFriendChat() != null ? other.getCurrentFriendChat().getClanWars() : null;
  1194.                 if (clan == null) {
  1195.                     player.getPackets().sendGameMessage("This player's clan is not in war.");
  1196.                     return;
  1197.                 }
  1198.                 if (clan.getSecondTeam().getOwnerDisplayName() != other.getCurrentFriendChat().getOwnerDisplayName()) {
  1199.                     player.getTemporaryAttributtes().put("view_prefix", 1);
  1200.                 }
  1201.                 player.getTemporaryAttributtes().put("view_clan", clan);
  1202.                 ClanWars.enter(player);
  1203.             } else if (player.getTemporaryAttributtes().remove("setdisplay") != null) {
  1204.                 if(Utils.invalidAccountName(Utils
  1205.                         .formatPlayerNameForProtocol(value))) {
  1206.                     player.getPackets().sendGameMessage("Invalid name!");
  1207.                     return;
  1208.                 }
  1209.                 if(!DisplayNames.setDisplayName(player, value)) {
  1210.                     player.getPackets().sendGameMessage("Name already in use!");
  1211.                     return;
  1212.                 }
  1213.                 player.getPackets().sendGameMessage("Changed display name!");
  1214.             } else if (player.getTemporaryAttributtes().remove("checkvoteinput") != null)
  1215.                 Vote.checkVote(player, value);
  1216.         } else if (packetId == ENTER_STRING_PACKET) {
  1217.             if (!player.isRunning() || player.isDead())
  1218.                 return;
  1219.             String value = stream.readString();
  1220.             if (value.equals(""))
  1221.                 return;
  1222.         } else if (packetId == ENTER_INTEGER_PACKET) {
  1223.             if (!player.isRunning() || player.isDead())
  1224.                 return;
  1225.             int value = stream.readInt();
  1226.             if ((player.getInterfaceManager().containsInterface(762) && player
  1227.                     .getInterfaceManager().containsInterface(763))
  1228.                     || player.getInterfaceManager().containsInterface(11)) {
  1229.                 if (value < 0)
  1230.                     return;
  1231.                 Integer bank_item_X_Slot = (Integer) player
  1232.                         .getTemporaryAttributtes().remove("bank_item_X_Slot");
  1233.                 if (bank_item_X_Slot == null)
  1234.                     return;
  1235.                 player.getBank().setLastX(value);
  1236.                 player.getBank().refreshLastX();
  1237.                 if (player.getTemporaryAttributtes().remove("bank_isWithdraw") != null)
  1238.                     player.getBank().withdrawItem(bank_item_X_Slot, value);
  1239.                 else
  1240.                     player.getBank()
  1241.                             .depositItem(
  1242.                                     bank_item_X_Slot,
  1243.                                     value,
  1244.                                     player.getInterfaceManager()
  1245.                                             .containsInterface(11) ? false
  1246.                                             : true);
  1247.             } else if (player.getInterfaceManager().containsInterface(206)
  1248.                     && player.getInterfaceManager().containsInterface(207)) {
  1249.                 if (value < 0)
  1250.                     return;
  1251.                 Integer pc_item_X_Slot = (Integer) player
  1252.                         .getTemporaryAttributtes().remove("pc_item_X_Slot");
  1253.                 if (pc_item_X_Slot == null)
  1254.                     return;
  1255.                 if (player.getTemporaryAttributtes().remove("pc_isRemove") != null)
  1256.                     player.getPriceCheckManager().removeItem(pc_item_X_Slot,
  1257.                             value);
  1258.                 else
  1259.                     player.getPriceCheckManager()
  1260.                     .addItem(pc_item_X_Slot, value);
  1261.             } else if (player.getInterfaceManager().containsInterface(671)
  1262.                     && player.getInterfaceManager().containsInterface(665)) {
  1263.                 if (player.getFamiliar() == null
  1264.                         || player.getFamiliar().getBob() == null)
  1265.                     return;
  1266.                 if (value < 0)
  1267.                     return;
  1268.                 Integer bob_item_X_Slot = (Integer) player
  1269.                         .getTemporaryAttributtes().remove("bob_item_X_Slot");
  1270.                 if (bob_item_X_Slot == null)
  1271.                     return;
  1272.                 if (player.getTemporaryAttributtes().remove("bob_isRemove") != null)
  1273.                     player.getFamiliar().getBob()
  1274.                     .removeItem(bob_item_X_Slot, value);
  1275.                 else
  1276.                     player.getFamiliar().getBob()
  1277.                     .addItem(bob_item_X_Slot, value);
  1278.             } else if (player.getInterfaceManager().containsInterface(335)
  1279.                     && player.getInterfaceManager().containsInterface(336)) {
  1280.                 if (value < 0)
  1281.                     return;
  1282.                 Integer trade_item_X_Slot = (Integer) player
  1283.                         .getTemporaryAttributtes().remove("trade_item_X_Slot");
  1284.                 if (trade_item_X_Slot == null)
  1285.                     return;
  1286.                 if (player.getTemporaryAttributtes().remove("trade_isRemove") != null)
  1287.                     player.getTrade().removeItem(trade_item_X_Slot, value);
  1288.                 else
  1289.                     player.getTrade().addItem(trade_item_X_Slot, value);
  1290.             } else if (player.getTemporaryAttributtes().get("skillId") != null) {
  1291.                 if (player.getEquipment().wearingArmour()) {
  1292.                     player.getDialogueManager().finishDialogue();
  1293.                     player.getDialogueManager().startDialogue("SimpleMessage", "You cannot do this while having armour on!");
  1294.                     return;
  1295.                 }
  1296.                 int skillId = (Integer) player.getTemporaryAttributtes()
  1297.                         .remove("skillId");
  1298.                 if (skillId == Skills.HITPOINTS && value <= 9)
  1299.                     value = 10;
  1300.                 else if (value < 1)
  1301.                     value = 1;
  1302.                 else if (value > 99)
  1303.                     value = 99;
  1304.                 player.getSkills().set(skillId, value);
  1305.                 player.getSkills().setXp(skillId, Skills.getXPForLevel(value));
  1306.                 player.getAppearence().generateAppearenceData();
  1307.                 player.getDialogueManager().finishDialogue();
  1308.             } else if (player.getTemporaryAttributtes().get("kilnX") != null) {
  1309.                 int index = (Integer) player.getTemporaryAttributtes().get("scIndex");
  1310.                 int componentId = (Integer) player.getTemporaryAttributtes().get("scComponentId");
  1311.                 int itemId = (Integer) player.getTemporaryAttributtes().get("scItemId");
  1312.                 player.getTemporaryAttributtes().remove("kilnX");
  1313.                 if (StealingCreation.proccessKilnItems(player, componentId, index, itemId, value))
  1314.                     return;
  1315.             }
  1316.         } else if (packetId == SWITCH_INTERFACE_ITEM_PACKET) {
  1317.             stream.readShortLE128();
  1318.             int fromInterfaceHash = stream.readIntV1();
  1319.             int toInterfaceHash = stream.readInt();
  1320.             int fromSlot = stream.readUnsignedShort();
  1321.             int toSlot = stream.readUnsignedShortLE128();
  1322.             stream.readUnsignedShortLE();
  1323.  
  1324.  
  1325.             int toInterfaceId = toInterfaceHash >> 16;
  1326.                 int toComponentId = toInterfaceHash - (toInterfaceId << 16);
  1327.                 int fromInterfaceId = fromInterfaceHash >> 16;
  1328.                 int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16);
  1329.  
  1330.                 if (Utils.getInterfaceDefinitionsSize() <= fromInterfaceId
  1331.                         || Utils.getInterfaceDefinitionsSize() <= toInterfaceId)
  1332.                     return;
  1333.                 if (!player.getInterfaceManager()
  1334.                         .containsInterface(fromInterfaceId)
  1335.                         || !player.getInterfaceManager().containsInterface(
  1336.                                 toInterfaceId))
  1337.                     return;
  1338.                 if (fromComponentId != -1
  1339.                         && Utils.getInterfaceDefinitionsComponentsSize(fromInterfaceId) <= fromComponentId)
  1340.                     return;
  1341.                 if (toComponentId != -1
  1342.                         && Utils.getInterfaceDefinitionsComponentsSize(toInterfaceId) <= toComponentId)
  1343.                     return;
  1344.                 if (fromInterfaceId == Inventory.INVENTORY_INTERFACE
  1345.                         && fromComponentId == 0
  1346.                         && toInterfaceId == Inventory.INVENTORY_INTERFACE
  1347.                         && toComponentId == 0) {
  1348.                     toSlot -= 28;
  1349.                     if (toSlot < 0
  1350.                             || toSlot >= player.getInventory()
  1351.                             .getItemsContainerSize()
  1352.                             || fromSlot >= player.getInventory()
  1353.                             .getItemsContainerSize())
  1354.                         return;
  1355.                     player.getInventory().switchItem(fromSlot, toSlot);
  1356.                 } else  if (fromInterfaceId == 1265 && toInterfaceId == 1266 && player.getTemporaryAttributtes().get("shop_buying") != null) {
  1357.                         if ((boolean) player.getTemporaryAttributtes().get("shop_buying") == true) {
  1358.                             Shop shop = (Shop) player.getTemporaryAttributtes().get("Shop");
  1359.                             if (shop == null)
  1360.                                 return;
  1361.                             shop.buy(player, fromSlot, 1);
  1362.                         }
  1363.                 } else if (fromInterfaceId == 763 && fromComponentId == 0
  1364.                         && toInterfaceId == 763 && toComponentId == 0) {
  1365.                     if (toSlot >= player.getInventory().getItemsContainerSize()
  1366.                             || fromSlot >= player.getInventory()
  1367.                             .getItemsContainerSize())
  1368.                         return;
  1369.                     player.getInventory().switchItem(fromSlot, toSlot);
  1370.                 } else if (fromInterfaceId == 762 && toInterfaceId == 762) {
  1371.                     player.getBank().switchItem(fromSlot, toSlot, fromComponentId,
  1372.                             toComponentId);
  1373.                 }
  1374.                 if (Settings.DEBUG)
  1375.                     System.out.println("Switch item " + fromInterfaceId + ", "
  1376.                             + fromSlot + ", " + toSlot);
  1377.         } else if (packetId == DONE_LOADING_REGION_PACKET) {
  1378.             /*
  1379.              * if(!player.clientHasLoadedMapRegion()) { //load objects and items
  1380.              * here player.setClientHasLoadedMapRegion(); }
  1381.              * //player.refreshSpawnedObjects(); //player.refreshSpawnedItems();
  1382.              */
  1383.         } else if (packetId == WALKING_PACKET
  1384.                 || packetId == MINI_WALKING_PACKET
  1385.                 || packetId == ITEM_TAKE_PACKET
  1386.                 || packetId == PLAYER_OPTION_2_PACKET
  1387.                 || packetId == PLAYER_OPTION_4_PACKET
  1388.                 || packetId == PLAYER_OPTION_1_PACKET || packetId == ATTACK_NPC
  1389.                 || packetId == INTERFACE_ON_PLAYER
  1390.                 || packetId == INTERFACE_ON_NPC
  1391.                 || packetId == NPC_CLICK1_PACKET
  1392.                 || packetId == NPC_CLICK2_PACKET
  1393.                 || packetId == NPC_CLICK3_PACKET
  1394.                 || packetId == OBJECT_CLICK1_PACKET
  1395.                 || packetId == SWITCH_INTERFACE_ITEM_PACKET
  1396.                 || packetId == OBJECT_CLICK2_PACKET
  1397.                 || packetId == OBJECT_CLICK3_PACKET
  1398.                 || packetId == OBJECT_CLICK4_PACKET
  1399.                 || packetId == OBJECT_CLICK5_PACKET
  1400.                 || packetId == INTERFACE_ON_OBJECT)
  1401.             player.addLogicPacketToQueue(new LogicPacket(packetId, length,
  1402.                     stream));
  1403.         else if (packetId == OBJECT_EXAMINE_PACKET) {
  1404.             ObjectHandler.handleOption(player, stream, -1);
  1405.         }else if (packetId == NPC_EXAMINE_PACKET) {
  1406.             NPCHandler.handleExamine(player, stream);
  1407.         } else if (packetId == JOIN_FRIEND_CHAT_PACKET) {
  1408.             if (!player.hasStarted())
  1409.                 return;
  1410.             FriendChatsManager.joinChat(stream.readString(), player);
  1411.         } else if (packetId == KICK_FRIEND_CHAT_PACKET) {
  1412.             if (!player.hasStarted())
  1413.                 return;
  1414.             player.setLastPublicMessage(Utils.currentTimeMillis() + 1000); // avoids
  1415.             // message
  1416.             // appearing
  1417.             player.kickPlayerFromFriendsChannel(stream.readString());
  1418.         } else if (packetId == CHANGE_FRIEND_CHAT_PACKET) {
  1419.             if (!player.hasStarted()
  1420.                     || !player.getInterfaceManager().containsInterface(1108))
  1421.                 return;
  1422.             player.getFriendsIgnores().changeRank(stream.readString(),
  1423.                     stream.readUnsignedByte128());
  1424.         } else if (packetId == ADD_FRIEND_PACKET) {
  1425.             if (!player.hasStarted())
  1426.                 return;
  1427.             player.getFriendsIgnores().addFriend(stream.readString());
  1428.         } else if (packetId == REMOVE_FRIEND_PACKET) {
  1429.             if (!player.hasStarted())
  1430.                 return;
  1431.             player.getFriendsIgnores().removeFriend(stream.readString());
  1432.         } else if (packetId == ADD_IGNORE_PACKET) {
  1433.             if (!player.hasStarted())
  1434.                 return;
  1435.             player.getFriendsIgnores().addIgnore(stream.readString(), stream.readUnsignedByte() == 1);
  1436.         } else if (packetId == REMOVE_IGNORE_PACKET) {
  1437.             if (!player.hasStarted())
  1438.                 return;
  1439.             player.getFriendsIgnores().removeIgnore(stream.readString());
  1440.         } else if (packetId == SEND_FRIEND_MESSAGE_PACKET) {
  1441.             if (!player.hasStarted())
  1442.                 return;
  1443.             if (player.getMuted() > Utils.currentTimeMillis()) {
  1444.                 player.getPackets().sendGameMessage(
  1445.                         "You temporary muted. Recheck in 48 hours.");
  1446.                 return;
  1447.             }
  1448.             String username = stream.readString();
  1449.             Player p2 = World.getPlayerByDisplayName(username);
  1450.             if (p2 == null)
  1451.                 return;
  1452.  
  1453.             player.getFriendsIgnores().sendMessage(
  1454.                     p2,
  1455.                     Utils.fixChatMessage(Huffman.readEncryptedMessage(150,
  1456.                             stream)));
  1457.         } else if (packetId == SEND_FRIEND_QUICK_CHAT_PACKET) {
  1458.             if (!player.hasStarted())
  1459.                 return;
  1460.             String username = stream.readString();
  1461.             int fileId = stream.readUnsignedShort();
  1462.             byte[] data = null;
  1463.             if (length > 3 + username.length()) {
  1464.                 data = new byte[length - (3 + username.length())];
  1465.                 stream.readBytes(data);
  1466.             }
  1467.             data = Utils.completeQuickMessage(player, fileId, data);
  1468.             Player p2 = World.getPlayerByDisplayName(username);
  1469.             if (p2 == null)
  1470.                 return;
  1471.             player.getFriendsIgnores().sendQuickChatMessage(p2,
  1472.                     new QuickChatMessage(fileId, data));
  1473.         } else if (packetId == PUBLIC_QUICK_CHAT_PACKET) {
  1474.             if (!player.hasStarted())
  1475.                 return;
  1476.             if (player.getLastPublicMessage() > Utils.currentTimeMillis())
  1477.                 return;
  1478.             player.setLastPublicMessage(Utils.currentTimeMillis() + 300);
  1479.             // just tells you which client script created packet
  1480.             @SuppressWarnings("unused")
  1481.             boolean secondClientScript = stream.readByte() == 1;// script 5059
  1482.             // or 5061
  1483.             int fileId = stream.readUnsignedShort();
  1484.             byte[] data = null;
  1485.             if (length > 3) {
  1486.                 data = new byte[length - 3];
  1487.                 stream.readBytes(data);
  1488.             }
  1489.             data = Utils.completeQuickMessage(player, fileId, data);
  1490.             if (chatType == 0)
  1491.                 player.sendPublicChatMessage(new QuickChatMessage(fileId, data));
  1492.             else if (chatType == 1)
  1493.                 player.sendFriendsChannelQuickMessage(new QuickChatMessage(
  1494.                         fileId, data));
  1495.             else if (Settings.DEBUG)
  1496.                 Logger.log(this, "Unknown chat type: " + chatType);
  1497.         } else if (packetId == CHAT_TYPE_PACKET) {
  1498.             chatType = stream.readUnsignedByte();
  1499.         } else if (packetId == CHAT_PACKET) {
  1500.             if (!player.hasStarted())
  1501.                 return;
  1502.             if (player.getLastPublicMessage() > Utils.currentTimeMillis())
  1503.                 return;
  1504.             player.setLastPublicMessage(Utils.currentTimeMillis() + 300);
  1505.             int colorEffect = stream.readUnsignedByte();
  1506.             int moveEffect = stream.readUnsignedByte();
  1507.             String message = Huffman.readEncryptedMessage(200, stream);
  1508.             if (message == null || message.replaceAll(" ", "").equals(""))
  1509.                 return;
  1510.             if (message.startsWith("::") || message.startsWith(";;")) {
  1511.                 // if command exists and processed wont send message as public
  1512.                 // message
  1513.                 Commands.processCommand(player, message.replace("::", "")
  1514.                         .replace(";;", ""), false, false);
  1515.                 return;
  1516.             }
  1517.             if (player.getMuted() > Utils.currentTimeMillis()) {
  1518.                 player.getPackets().sendGameMessage(
  1519.                         "You temporary muted. Recheck in 48 hours.");
  1520.                 return;
  1521.             }
  1522.             int effects = (colorEffect << 8) | (moveEffect & 0xff);
  1523.             if (chatType == 1)
  1524.                 player.sendFriendsChannelMessage(Utils.fixChatMessage(message));
  1525.             else
  1526.                 player.sendPublicChatMessage(new PublicChatMessage(Utils
  1527.                         .fixChatMessage(message), effects));
  1528.             player.setLastMsg(message);
  1529.             if (Settings.DEBUG)
  1530.                 Logger.log(this, "Chat type: " + chatType);
  1531.         } else if (packetId == COMMANDS_PACKET) {
  1532.             if (!player.isRunning())
  1533.                 return;
  1534.             boolean clientCommand = stream.readUnsignedByte() == 1;
  1535.             @SuppressWarnings("unused")
  1536.             boolean unknown = stream.readUnsignedByte() == 1;
  1537.             String command = stream.readString();
  1538.             if (!Commands.processCommand(player, command, true, clientCommand)
  1539.                     && Settings.DEBUG)
  1540.                 Logger.log(this, "Command: " + command);
  1541.         } else if (packetId == COLOR_ID_PACKET) {
  1542.             if (!player.hasStarted())
  1543.                 return;
  1544.             int colorId = stream.readUnsignedShort();
  1545.             if (player.getTemporaryAttributtes().get("SkillcapeCustomize") != null)
  1546.                 SkillCapeCustomizer.handleSkillCapeCustomizerColor(player,
  1547.                         colorId);
  1548.         }else if (packetId == REPORT_ABUSE_PACKET) {
  1549.             if (!player.hasStarted())
  1550.                 return;
  1551.             @SuppressWarnings("unused")
  1552.             String username = stream.readString();
  1553.             @SuppressWarnings("unused")
  1554.             int type = stream.readUnsignedByte();
  1555.             @SuppressWarnings("unused")
  1556.             boolean mute = stream.readUnsignedByte() == 1;
  1557.             @SuppressWarnings("unused")
  1558.             String unknown2 = stream.readString();
  1559.         } else {
  1560.             if (Settings.DEBUG)
  1561.                 Logger.log(this, "Missing packet " + packetId
  1562.                         + ", expected size: " + length + ", actual size: "
  1563.                         + PACKET_SIZES[packetId]);
  1564.         }
  1565.     }
  1566.  
  1567. }
Advertisement
Add Comment
Please, Sign In to add comment