Thread: Matrix Base Trade Dupe Help

Page 2 of 2 FirstFirst 12
Results 11 to 13 of 13
  1. #11  
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    Quote Originally Posted by khayam View Post
    also check worldpacketsencoder and worldspacketdecoder
    do you know how to fix this?

    Spoiler for worldpacketsencoder:

    package com.rs.net.encoders;

    import org.jboss.netty.channel.ChannelFuture;
    import org.jboss.netty.channel.ChannelFutureListener;

    import com.rs.Settings;
    import com.rs.cache.loaders.ObjectDefinitions;
    import com.rs.game.Animation;
    import com.rs.game.DynamicRegion;
    import com.rs.game.Entity;
    import com.rs.game.Graphics;
    import com.rs.game.Region;
    import com.rs.game.World;
    import com.rs.game.WorldObject;
    import com.rs.game.WorldTile;
    import com.rs.game.item.FloorItem;
    import com.rs.game.item.Item;
    import com.rs.game.item.ItemsContainer;
    import com.rs.game.npc.NPC;
    import com.rs.game.player.HintIcon;
    import com.rs.game.player.Player;
    import com.rs.game.player.PublicChatMessage;
    import com.rs.game.player.QuickChatMessage;
    import com.rs.game.player.content.FriendChatsManager;
    import com.rs.io.OutputStream;
    import com.rs.net.Session;
    import com.rs.utils.Logger;
    import com.rs.utils.MapArchiveKeys;
    import com.rs.utils.Utils;
    import com.rs.utils.huffman.Huffman;

    public class WorldPacketsEncoder extends Encoder {

    private Player player;

    public WorldPacketsEncoder(Session session, Player player) {
    super(session);
    this.player = player;
    }

    public Player getPlayer() {
    return player;
    }

    public void sendPlayerUnderNPCPriority(boolean priority) {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 6);
    stream.writeByteC(priority ? 1 : 0);
    session.write(stream);
    }

    public void sendHintIcon(HintIcon icon) {
    OutputStream stream = new OutputStream(15);
    stream.writePacket(player, 79);
    stream.writeByte((icon.getTargetType() & 0x1f) | (icon.getIndex() << 5));
    if (icon.getTargetType() == 0)
    stream.skip(13);
    else {
    stream.writeByte(icon.getArrowType());
    if (icon.getTargetType() == 1 || icon.getTargetType() == 10) {
    stream.writeShort(icon.getTargetIndex());
    stream.writeShort(2500); // how often the arrow flashes, 2500 ideal, 0 never
    stream.skip(4);
    } else if ((icon.getTargetType() >= 2 && icon.getTargetType() <= 6)) { // directions
    stream.writeByte(icon.getPlane()); // unknown
    stream.writeShort(icon.getCoordX());
    stream.writeShort(icon.getCoordY());
    stream.writeByte(icon.getDistanceFromFloor() * 4 >> 2);
    stream.writeShort(-1); //distance to start showing on minimap, 0 doesnt show, -1 infinite
    }
    stream.writeInt(icon.getModelId());
    }
    session.write(stream);

    }


    public void sendCameraShake(int slotId, int b, int c, int d, int e) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 44);
    stream.writeByte128(b);
    stream.writeByte128(slotId);
    stream.writeByte128;
    stream.writeByte128(c);
    stream.writeShortLE(e);
    session.write(stream);
    }

    public void sendStopCameraShake() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 131);
    session.write(stream);
    }

    public void sendIComponentModel(int interfaceId, int componentId,
    int modelId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 102);
    stream.writeIntV1(modelId);
    stream.writeIntV1(interfaceId << 16 | componentId);
    session.write(stream);
    }

    public void sendHideIComponent(int interfaceId, int componentId,
    boolean hidden) {
    OutputStream stream = new OutputStream(6);
    stream.writePacket(player, 112);
    stream.writeIntV2(interfaceId << 16 | componentId);
    stream.writeByte(hidden ? 1 : 0);
    session.write(stream);
    }

    public void sendRemoveGroundItem(FloorItem item) {
    OutputStream stream = createWorldTileStream(item.getTile());
    int localX = item.getTile().getLocalX(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int localY = item.getTile().getLocalY(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 108);
    stream.writeShortLE(item.getId());
    stream.write128Byte((offsetX << 4) | offsetY);
    session.write(stream);

    }


    public void sendGroundItem(FloorItem item) {
    OutputStream stream = createWorldTileStream(item.getTile());
    int localX = item.getTile().getLocalX(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int localY = item.getTile().getLocalY(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 125);
    stream.writeByte128((offsetX << 4) | offsetY);
    stream.writeShortLE128(item.getAmount());
    stream.writeShortLE(item.getId());
    session.write(stream);
    }

    public void sendProjectile(Entity receiver, WorldTile startTile,
    WorldTile endTile, int gfxId, int startHeight, int endHeight,
    int speed, int delay, int curve, int startDistanceOffset,
    int creatorSize) {
    OutputStream stream = createWorldTileStream(startTile);
    stream.writePacket(player, 20);
    int localX = startTile.getLocalX(player.getLastLoadedMapRegionT ile(),
    player.getMapSize());
    int localY = startTile.getLocalY(player.getLastLoadedMapRegionT ile(),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writeByte((offsetX << 3) | offsetY);
    stream.writeByte(endTile.getX() - startTile.getX());
    stream.writeByte(endTile.getY() - startTile.getY());
    stream.writeShort(receiver == null ? 0
    : (receiver instanceof Player ? -(receiver.getIndex() + 1)
    : receiver.getIndex() + 1));
    stream.writeShort(gfxId);
    stream.writeByte(startHeight);
    stream.writeByte(endHeight);
    stream.writeShort(delay);
    int duration = (Utils.getDistance(startTile.getX(), startTile.getY(),
    endTile.getX(), endTile.getY()) * 30 / ((speed / 10) < 1 ? 1
    : (speed / 10)))
    + delay;
    stream.writeShort(duration);
    stream.writeByte(curve);
    stream.writeShort(creatorSize * 64 + startDistanceOffset * 64);
    session.write(stream);

    }

    public void sendUnlockIComponentOptionSlots(int interfaceId,
    int componentId, int fromSlot, int toSlot, int... optionsSlots) {
    int settingsHash = 0;
    for (int slot : optionsSlots)
    settingsHash |= 2 << slot;
    sendIComponentSettings(interfaceId, componentId, fromSlot, toSlot,
    settingsHash);
    }

    public void sendIComponentSettings(int interfaceId, int componentId,
    int fromSlot, int toSlot, int settingsHash) {
    OutputStream stream = new OutputStream(13);
    stream.writePacket(player, 40);
    stream.writeIntV2(settingsHash);
    stream.writeInt(interfaceId << 16 | componentId);
    stream.writeShort128(fromSlot);
    stream.writeShortLE(toSlot);
    session.write(stream);
    }

    public void sendInterFlashScript(int interfaceId,
    int componentId, int width, int height, int slot) {
    Object[] parameters = new Object[4];
    int index = 0;
    parameters[index++] = slot;
    parameters[index++] = height;
    parameters[index++] = width;
    parameters[index++] = interfaceId << 16 | componentId;
    sendRunScript(143, parameters);
    }

    public void sendInterSetItemsOptionsScript(int interfaceId,
    int componentId, int key, int width, int height, String... options) {
    sendInterSetItemsOptionsScript(interfaceId, componentId, key, false, width, height, options);
    }

    public void sendInterSetItemsOptionsScript(int interfaceId,
    int componentId, int key, boolean negativeKey, int width, int height, String... options) {
    Object[] parameters = new Object[6 + options.length];
    int index = 0;
    for (int count = options.length - 1; count >= 0; count--)
    parameters[index++] = options[count];
    parameters[index++] = -1; // dunno but always this
    parameters[index++] = 0;// dunno but always this, maybe startslot?
    parameters[index++] = height;
    parameters[index++] = width;
    parameters[index++] = key;
    parameters[index++] = interfaceId << 16 | componentId;
    sendRunScript(negativeKey ? 695 : 150, parameters); // scriptid 150 does that the method
    // name says*/
    }

    public void sendInputNameScript(String message) {
    sendRunScript(109, new Object[] { message });
    }

    public void sendInputIntegerScript(boolean integerEntryOnly, String message) {
    sendRunScript(108, new Object[] { message });
    }

    public void sendInputLongTextScript(String message) {
    sendRunScript(110, new Object[] { message });
    }


    public void sendRunScript(int scriptId, Object... params) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 119);
    String parameterTypes = "";
    if (params != null) {
    for (int count = params.length - 1; count >= 0; count--) {
    if (params[count] instanceof String)
    parameterTypes += "s"; // string
    else
    parameterTypes += "i"; // integer
    }
    }
    stream.writeString(parameterTypes);
    if (params != null) {
    int index = 0;
    for (int count = parameterTypes.length() - 1; count >= 0; count--) {
    if (parameterTypes.charAt(count) == 's')
    stream.writeString((String) params[index++]);
    else
    stream.writeInt((Integer) params[index++]);
    }
    }
    stream.writeInt(scriptId);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGlobalConfig(int id, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendGlobalConfig2(id, value);
    else
    sendGlobalConfig1(id, value);
    }

    public void sendGlobalConfig1(int id, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 154);
    stream.writeByteC(value);
    stream.writeShort128(id);
    session.write(stream);
    }

    public void sendGlobalConfig2(int id, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 63);
    stream.writeShort128(id);
    stream.writeInt(value);
    session.write(stream);
    }

    public void sendConfig(int id, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendConfig2(id, value);
    else
    sendConfig1(id, value);
    }

    public void sendConfigByFile(int fileId, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendConfigByFile2(fileId, value);
    else
    sendConfigByFile1(fileId, value);
    }

    public void sendConfig1(int id, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 110);
    stream.writeShortLE128(id);
    stream.writeByte128(value);
    session.write(stream);
    }

    public void sendConfig2(int id, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 56);
    stream.writeShort128(id);
    stream.writeIntLE(value);
    session.write(stream);
    }

    public void sendConfigByFile1(int fileId, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 111);
    stream.writeShort128(fileId);
    stream.writeByteC(value);
    session.write(stream);
    }

    public void sendConfigByFile2(int fileId, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 81);
    stream.writeIntV1(value);
    stream.writeShort128(fileId);
    session.write(stream);
    }

    public void sendRunEnergy() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 25);
    stream.writeByte(player.getRunEnergy());
    session.write(stream);
    }

    public void sendIComponentText(int interfaceId, int componentId, String text) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 135);
    stream.writeString(text);
    stream.writeInt(interfaceId << 16 | componentId);
    stream.endPacketVarShort();
    session.write(stream);

    }

    public void sendIComponentAnimation(int emoteId, int interfaceId,
    int componentId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 103);
    stream.writeIntV2(emoteId);
    stream.writeInt(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendItemOnIComponent(int interfaceid, int componentId, int id,
    int amount) {
    OutputStream stream = new OutputStream(11);
    stream.writePacket(player, 152);
    stream.writeShort128(id);
    stream.writeIntV1(amount);
    stream.writeIntV2(interfaceid << 16 | componentId);
    session.write(stream);

    }

    public void sendEntityOnIComponent(boolean isPlayer, int entityId,
    int interfaceId, int componentId) {
    if (isPlayer)
    sendPlayerOnIComponent(interfaceId, componentId);
    else
    sendNPCOnIComponent(interfaceId, componentId, entityId);
    }

    public void sendWorldTile(WorldTile tile) {
    session.write(createWorldTileStream(tile));
    }

    public OutputStream createWorldTileStream(WorldTile tile) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 158);
    stream.writeByte128(tile.getLocalY(player.getLastL oadedMapRegionTile(),
    player.getMapSize()) >> 3);
    stream.writeByteC(tile.getPlane());
    stream.write128Byte(tile.getLocalX(player.getLastL oadedMapRegionTile(),
    player.getMapSize()) >> 3);
    return stream;
    }

    public void sendObjectAnimation(WorldObject object, Animation animation) {
    OutputStream stream = new OutputStream(10);
    stream.writePacket(player, 76);
    stream.writeInt(animation.getIds()[0]);
    stream.writeByteC((object.getType() << 2)
    + (object.getRotation() & 0x3));
    stream.writeIntLE(object.getTileHash());
    session.write(stream);
    }

    public void sendTileMessage(String message, WorldTile tile, int color) {
    sendTileMessage(message, tile, 5000, 255, color);
    }

    public void sendTileMessage(String message, WorldTile tile, int delay,
    int height, int color) {
    OutputStream stream = createWorldTileStream(tile);
    stream.writePacketVarByte(player, 107);
    stream.skip(1);
    int localX = tile.getLocalX(player.getLastLoadedMapRegionTile() ,
    player.getMapSize());
    int localY = tile.getLocalY(player.getLastLoadedMapRegionTile() ,
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writeByte((offsetX << 4) | offsetY);
    stream.writeShort(delay / 30);
    stream.writeByte(height);
    stream.write24BitInteger(color);
    stream.writeString(message);
    stream.endPacketVarByte();
    session.write(stream);
    }
    public void sendSpawnedObject(WorldObject object) {
    int chunkRotation = World.getRotation(object.getPlane(), object.getX(), object.getY());
    if(chunkRotation == 1) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(0, - (defs.getSizeY() - 1), 0);
    }else if(chunkRotation == 2) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(- (defs.getSizeY() - 1), 0, 0);
    }
    OutputStream stream = createWorldTileStream(object);
    int localX = object.getLocalX(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int localY = object.getLocalY(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 120);
    stream.writeByte((offsetX << 4) | offsetY); // the hash
    // for
    // coords,
    // useless
    stream.writeByte((object.getType() << 2) + (object.getRotation() & 0x3));
    stream.writeIntLE(object.getId());
    session.write(stream);

    }

    public void sendDestroyObject(WorldObject object) {
    int chunkRotation = World.getRotation(object.getPlane(), object.getX(), object.getY());
    if(chunkRotation == 1) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(0, - (defs.getSizeY() - 1), 0);
    }else if(chunkRotation == 2) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(- (defs.getSizeY() - 1), 0, 0);
    }
    OutputStream stream = createWorldTileStream(object);
    int localX = object.getLocalX(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int localY = object.getLocalY(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 45);
    stream.writeByteC((object.getType() << 2) + (object.getRotation() & 0x3));
    stream.writeByte128((offsetX << 4) | offsetY); // the hash for coords,
    // useless
    session.write(stream);

    }

    public void sendPlayerOnIComponent(int interfaceId, int componentId) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 23);
    stream.writeIntV2(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendNPCOnIComponent(int interfaceId, int componentId, int npcId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 31);
    stream.writeInt(npcId);
    stream.writeInt(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendRandomOnIComponent(int interfaceId, int componentId, int id) {
    /*
    * OutputStream stream = new OutputStream(); stream.writePacket(player, 235);
    * stream.writeShort(id); stream.writeIntV1(interfaceId << 16 |
    * componentId); stream.writeShort(interPacketsCount++);
    * session.write(stream);
    */
    }

    public void sendFaceOnIComponent(int interfaceId, int componentId,
    int look1, int look2, int look3) {
    /*
    * OutputStream stream = new OutputStream(); stream.writePacket(player, 192);
    * stream.writeIntV2(interfaceId << 16 | componentId);
    * stream.writeShortLE128(interPacketsCount++);
    * stream.writeShortLE128(look1); stream.writeShortLE128(look2);
    * stream.writeShort128(look2); session.write(stream);
    */
    }

    public void sendFriendsChatChannel() {
    FriendChatsManager manager = player.getCurrentFriendChat();
    OutputStream stream = new OutputStream(manager == null ? 3
    : manager.getDataBlock().length + 3);
    stream.writePacketVarShort(player, 117);
    if (manager != null)
    stream.writeBytes(manager.getDataBlock());
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriends() {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 2);
    for(String username : player.getFriendsIgnores().getFriends()) {
    String displayName;
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 != null)
    displayName = p2.getDisplayName();
    else
    displayName = Utils.formatPlayerNameForDisplay(username);
    player.getPackets().sendFriend(
    Utils.formatPlayerNameForDisplay(username), displayName, 1,
    p2 != null && player.getFriendsIgnores().isOnline(p2), false, stream);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriend(String username, String displayName, int world,
    boolean putOnline, boolean warnMessage) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 2);
    sendFriend(username, displayName, world, putOnline, warnMessage, stream);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriend(String username, String displayName, int world,
    boolean putOnline, boolean warnMessage, OutputStream stream) {
    stream.writeByte(warnMessage ? 0 : 1);
    stream.writeString(displayName);
    stream.writeString(displayName.equals(username) ? "" : username);
    stream.writeShort(putOnline ? world : 0);
    stream.writeByte(player.getFriendsIgnores().getRan k(
    Utils.formatPlayerNameForProtocol(username)));
    stream.writeByte(0);
    if (putOnline) {
    stream.writeString(Settings.SERVER_NAME);
    stream.writeByte(0);
    }
    }

    public void sendIgnores() {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 55);
    stream.writeByte(player.getFriendsIgnores().getIgn ores().size());
    for(String username : player.getFriendsIgnores().getIgnores()) {
    String display;
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 != null)
    display = p2.getDisplayName();
    else
    display = Utils.formatPlayerNameForDisplay(username);
    String name = Utils.formatPlayerNameForDisplay(username);
    stream.writeString(display.equals(name) ? name : display);
    stream.writeString("");
    stream.writeString(display.equals(name) ? "" : name);
    stream.writeString("");
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendIgnore(String name, String display, boolean updateName) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 128);
    stream.writeByte(0x2);
    stream.writeString(display.equals(name) ? name : display);
    stream.writeString("");
    stream.writeString(display.equals(name) ? "" : name);
    stream.writeString("");
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPrivateMessage(String username, String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 130);
    stream.writeString(username);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGameBarStages() {
    sendConfig(1054, player.getClanStatus());
    sendConfig(1055, player.getAssistStatus());
    sendConfig(1056, player.isFilterGame() ? 1 : 0);
    sendConfig(2159, player.getFriendsIgnores().getFriendsChatStatus()) ;
    sendOtherGameBarStages();
    sendPrivateGameBarStage();
    }

    public void sendOtherGameBarStages() {
    OutputStream stream = new OutputStream(3);
    stream.writePacket(player, 89);
    stream.write128Byte(player.getTradeStatus());
    stream.writeByte(player.getPublicStatus());
    session.write(stream);
    }

    public void sendPrivateGameBarStage() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 75);
    stream.writeByte(player.getFriendsIgnores().getPri vateStatus());
    session.write(stream);
    }

    public void receivePrivateMessage(String name, String display, int rights,
    String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 105);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarShort();
    session.write(stream);
    }

    // 131 clan chat quick message

    public void receivePrivateChatQuickMessage(String name, String display,
    int rights, QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 104);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPrivateQuickMessageMessage(String username,
    QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 30);
    stream.writeString(username);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void receiveFriendChatMessage(String name, String display,
    int rights, String chatName, String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 139);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    stream.writeLong(Utils.stringToLong(chatName));
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void receiveFriendChatQuickMessage(String name, String display,
    int rights, String chatName, QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 32);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    stream.writeLong(Utils.stringToLong(chatName));
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    /*
    * useless, sending friends unlocks it
    */
    public void sendUnlockIgnoreList() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 18);
    session.write(stream);
    }

    /*
    * dynamic map region
    */
    public void sendDynamicMapRegion(boolean sendLswp) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 144);
    if (sendLswp)
    player.getLocalPlayerUpdate().init(stream);
    int regionX = player.getChunkX();
    int regionY = player.getChunkY();
    stream.write128Byte(2);
    stream.writeShortLE(regionY);
    stream.writeShortLE128(regionX);
    stream.write128Byte(player.isForceNextMapLoadRefre sh() ? 1 : 0);
    stream.writeByteC(player.getMapSize());
    stream.initBitAccess();
    int mapHash = Settings.MAP_SIZES[player.getMapSize()] >> 4;
    int[] realRegionIds = new int[4 * mapHash * mapHash];
    int realRegionIdsCount = 0;
    for (int plane = 0; plane < 4; plane++) {
    for (int thisRegionX = (regionX - mapHash); thisRegionX <= ((regionX + mapHash)); thisRegionX++) { // real
    // x
    // calcs
    for (int thisRegionY = (regionY - mapHash); thisRegionY <= ((regionY + mapHash)); thisRegionY++) { // real
    // y
    // calcs
    int regionId = (((thisRegionX / 8) << 8) + (thisRegionY / 8));
    Region region = World.getRegions().get(regionId);
    int realRegionX;
    int realRegionY;
    int realPlane;
    int rotation;
    if (region instanceof DynamicRegion) { // generated map
    DynamicRegion dynamicRegion = (DynamicRegion) region;
    int[] regionCoords = dynamicRegion.getRegionCoords()[plane][thisRegionX
    - ((thisRegionX / 8) * 8)][thisRegionY
    - ((thisRegionY / 8) * 8)];
    realRegionX = regionCoords[0];
    realRegionY = regionCoords[1];
    realPlane = regionCoords[2];
    rotation = regionCoords[3];
    } else { // real map
    // base region + difference * 8 so gets real region
    // coords
    realRegionX = thisRegionX;
    realRegionY = thisRegionY;
    realPlane = plane;
    rotation = 0;// no rotation
    }
    // invalid region, not built region
    if (realRegionX == 0 || realRegionY == 0)
    stream.writeBits(1, 0);
    else {
    stream.writeBits(1, 1);
    stream.writeBits(26, (rotation << 1)
    | (realPlane << 24) | (realRegionX << 14)
    | (realRegionY << 3));
    int realRegionId = (((realRegionX / 8) << 8) + (realRegionY / 8));
    boolean found = false;
    for (int index = 0; index < realRegionIdsCount; index++)
    if (realRegionIds[index] == realRegionId) {
    found = true;
    break;
    }
    if (!found)
    realRegionIds[realRegionIdsCount++] = realRegionId;
    }

    }
    }
    }
    stream.finishBitAccess();
    for (int index = 0; index < realRegionIdsCount; index++) {
    int[] xteas = MapArchiveKeys
    .getMapKeys(realRegionIds[index]);
    if (xteas == null)
    xteas = new int[4];
    for (int keyIndex = 0; keyIndex < 4; keyIndex++)
    stream.writeInt(xteas[keyIndex]);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    /*
    * normal map region
    */
    public void sendMapRegion(boolean sendLswp) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 42);
    if (sendLswp)
    player.getLocalPlayerUpdate().init(stream);
    stream.writeByteC(player.getMapSize());
    stream.writeByte(player.isForceNextMapLoadRefresh( ) ? 1 : 0);
    stream.writeShort(player.getChunkX());
    stream.writeShort(player.getChunkY());
    for (int regionId : player.getMapRegionsIds()) {
    int[] xteas = MapArchiveKeys.getMapKeys(regionId);
    if (xteas == null)
    xteas = new int[4];
    for (int index = 0; index < 4; index++)
    stream.writeInt(xteas[index]);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendCutscene(int id) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 142);
    stream.writeShort(id);
    stream.writeShort(20); // xteas count
    for (int count = 0; count < 20; count++)
    // xteas
    for (int i = 0; i < 4; i++)
    stream.writeInt(0);
    byte[] appearence = player.getAppearence().getAppeareanceData();
    stream.writeByte(appearence.length);
    stream.writeBytes(appearence);
    stream.endPacketVarShort();
    session.write(stream);
    }

    /*
    * sets the pane interface
    */
    public void sendWindowsPane(int id, int type) {
    int[] xteas = new int[4];
    player.getInterfaceManager().setWindowsPane(id);
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 39);
    stream.write128Byte(type);
    stream.writeShort128(id);
    stream.writeIntLE(xteas[1]);
    stream.writeIntV2(xteas[0]);
    stream.writeInt(xteas[3]);
    stream.writeInt(xteas[2]);
    session.write(stream);
    }

    public void sendPlayerOption(String option, int slot, boolean top) {
    sendPlayerOption(option, slot, top, -1);
    }

    public void sendPublicMessage(Player p, PublicChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 106);
    stream.writeShort(p.getIndex());
    stream.writeShort(message.getEffects());
    stream.writeByte(p.getMessageIcon());
    if (message instanceof QuickChatMessage) {
    QuickChatMessage qcMessage = (QuickChatMessage) message;
    stream.writeShort(qcMessage.getFileId());
    if (qcMessage.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    } else {
    byte[] chatStr = new byte[250];
    chatStr[0] = (byte) message.getMessage().length();
    int offset = 1 + Huffman.encryptMessage(1, message.getMessage()
    .length(), chatStr, 0, message.getMessage().getBytes());
    stream.writeBytes(chatStr, 0, offset);
    }
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPlayerOption(String option, int slot, boolean top,
    int cursor) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 118);
    stream.writeByte128(slot);
    stream.writeString(option);
    stream.writeShortLE128(cursor);
    stream.writeByteC(top ? 1 : 0);
    stream.endPacketVarByte();
    session.write(stream);
    }

    /*
    * sends local players update
    */
    public void sendLocalPlayersUpdate() {
    session.write(player.getLocalPlayerUpdate().create PacketAndProcess());
    }

    /*
    * sends local npcs update
    */
    public void sendLocalNPCsUpdate() {
    session.write(player.getLocalNPCUpdate().createPac ketAndProcess());
    }

    public void sendGraphics(Graphics graphics, Object target) {
    OutputStream stream = new OutputStream(13);
    int hash = 0;
    if (target instanceof Player) {
    Player p = (Player) target;
    hash = p.getIndex() & 0xffff | 1 << 28;
    } else if (target instanceof NPC) {
    NPC n = (NPC) target;
    hash = n.getIndex() & 0xffff | 1 << 29;
    } else {
    WorldTile tile = (WorldTile) target;
    hash = tile.getPlane() << 28 | tile.getX() << 14 | tile.getY()
    & 0x3fff | 1 << 30;
    }
    stream.writePacket(player, 90);
    stream.writeShort(graphics.getId());
    stream.writeByte128(0); // slot id used for entitys
    stream.writeShort(graphics.getSpeed());
    stream.writeByte128(graphics.getSettings2Hash());
    stream.writeShort(graphics.getHeight());
    stream.writeIntLE(hash);
    session.write(stream);
    }

    public void sendDelayedGraphics(Graphics graphics, int delay, WorldTile tile) {

    }

    public void closeInterface(int windowComponentId) {
    closeInterface(
    player.getInterfaceManager().getTabWindow(windowCo mponentId),
    windowComponentId);
    player.getInterfaceManager().removeTab(windowCompo nentId);
    }

    public void closeInterface(int windowId, int windowComponentId) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 5);
    stream.writeIntLE(windowId << 16 | windowComponentId);
    session.write(stream);
    }

    public void sendInterface(boolean nocliped, int windowId,
    int windowComponentId, int interfaceId) {
    // currently fixes the inter engine.. not ready for same component
    // ids(tabs), different inters
    if (!(windowId == 752 && (windowComponentId == 9 || windowComponentId == 12))) { // if
    // chatbox
    if (player.getInterfaceManager().containsInterface(
    windowComponentId, interfaceId))
    closeInterface(windowComponentId);
    if (!player.getInterfaceManager().addInterface(window Id,
    windowComponentId, interfaceId)) {
    Logger.log(this, "Error adding interface: " + windowId + " , "
    + windowComponentId + " , " + interfaceId);
    return;
    }
    }
    int[] xteas = new int[4];
    OutputStream stream = new OutputStream(24);
    stream.writePacket(player, 14);
    stream.writeShort(interfaceId);
    stream.writeInt(xteas[0]);
    stream.writeIntV2(xteas[1]);
    stream.writeIntV1(windowId << 16 | windowComponentId);
    stream.writeByte(nocliped ? 1 : 0);
    stream.writeIntV1(xteas[3]);
    stream.writeIntV2(xteas[2]);
    session.write(stream);
    }

    public void sendSystemUpdate(int delay) {
    OutputStream stream = new OutputStream(3);
    stream.writePacket(player, 141);
    stream.writeShort((int) (delay * 1.6));
    session.write(stream);
    }

    public void sendUpdateItems(int key, ItemsContainer<Item> items,
    int... slots) {
    sendUpdateItems(key, items.getItems(), slots);
    }

    public void sendUpdateItems(int key, Item[] items, int... slots) {
    sendUpdateItems(key, key < 0, items, slots);
    }

    public void sendUpdateItems(int key, boolean negativeKey, Item[] items,
    int... slots) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 138);
    stream.writeShort(key);
    stream.writeByte(negativeKey ? 1 : 0);
    for (int slotId : slots) {
    if (slotId >= items.length)
    continue;
    stream.writeSmart(slotId);
    int id = -1;
    int amount = 0;
    Item item = items[slotId];
    if (item != null) {
    id = item.getId();
    amount = item.getAmount();
    }
    stream.writeShort(id + 1);
    if (id != -1) {
    stream.writeByte(amount >= 255 ? 255 : amount);
    if (amount >= 255)
    stream.writeInt(amount);
    }
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGlobalString(int id, String string) {
    OutputStream stream = new OutputStream();
    if(string.length() > 253) {
    stream.writePacketVarShort(player, 34);
    stream.writeString(string);
    stream.writeShort(id);
    stream.endPacketVarShort();
    }else{
    stream.writePacketVarByte(player, 134);
    stream.writeShort(id);
    stream.writeString(string);
    stream.endPacketVarByte();
    }
    session.write(stream);
    }

    public void sendItems(int key, ItemsContainer<Item> items) {
    sendItems(key, key < 0, items);
    }

    public void sendItems(int key, boolean negativeKey,
    ItemsContainer<Item> items) {
    sendItems(key, negativeKey, items.getItems());
    }

    public void sendItems(int key, Item[] items) {
    sendItems(key, key < 0, items);
    }


    public void resetItems(int key, boolean negativeKey, int size) {
    sendItems(key, negativeKey, new Item[size]);
    }

    public void sendItems(int key, boolean negativeKey, Item[] items) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 77);
    stream.writeShort(key); //negativeKey ? -key : key
    stream.writeByte(negativeKey ? 1 : 0);
    stream.writeShort(items.length);
    for (int index = 0; index < items.length; index++) {
    Item item = items[index];
    int id = -1;
    int amount = 0;
    if (item != null) {
    id = item.getId();
    amount = item.getAmount();
    }
    stream.writeShortLE128(id + 1);
    stream.writeByte128(amount >= 255 ? 255 : amount);
    if (amount >= 255)
    stream.writeIntV1(amount);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendLogout(boolean lobby) {
    OutputStream stream = new OutputStream();
    stream.writePacket(player, lobby ? 59 : 60);
    ChannelFuture future = session.write(stream);
    if (future != null)
    future.addListener(ChannelFutureListener.CLOSE);
    else
    session.getChannel().close();
    }


    public void sendInventoryMessage(int border, int slotId, String message) {
    sendGameMessage(message);
    sendRunScript(948, border, slotId, message);
    }

    public void sendNPCMessage(int border, NPC npc, String message) {
    sendGameMessage(message);
    }

    public void sendGameMessage(String text) {
    sendGameMessage(text, false);
    }

    public void sendGameMessage(String text, boolean filter) {
    sendMessage(filter ? 109 : 0, text, null);
    }

    public void sendPanelBoxMessage(String text) {
    sendMessage(player.getRights() == 2 ? 99 : 0, text, null);
    }

    public void sendTradeRequestMessage(Player p) {
    sendMessage(100, "wishes to trade with you.", p);
    }

    public void sendClanWarsRequestMessage(Player p) {
    sendMessage(101, "wishes to challenge your clan to a clan war.", p);
    }

    public void sendDuelChallengeRequestMessage(Player p, boolean friendly) {
    sendMessage(101, "wishes to duel with you("
    + (friendly ? "friendly" : "stake") + ").", p);
    }

    public void sendMessage(int type, String text, Player p) {
    int maskData = 0;
    if (p != null) {
    maskData |= 0x1;
    if (p.hasDisplayName())
    maskData |= 0x2;
    }
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 136);
    stream.writeSmart(type);
    stream.writeInt(player.getTileHash()); // junk, not used by client
    stream.writeByte(maskData);
    if ((maskData & 0x1) != 0) {
    stream.writeString(p.getDisplayName());
    if (p.hasDisplayName())
    stream.writeString(Utils.formatPlayerNameForDispla y(p
    .getUsername()));
    }
    stream.writeString(text);
    stream.endPacketVarByte();
    session.write(stream);
    }

    // effect type 1 or 2(index4 or index14 format, index15 format unusused by
    // jagex for now)
    public void sendSound(int id, int delay, int effectType) {
    if (effectType == 1)
    sendIndex14Sound(id, delay);
    else if (effectType == 2)
    sendIndex15Sound(id, delay);
    }

    public void sendVoice(int id) {
    resetSounds();
    sendSound(id, 0, 2);
    }

    public void resetSounds() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 145);
    session.write(stream);
    }

    public void sendIndex14Sound(int id, int delay) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 26);
    stream.writeShort(id);
    stream.writeByte(1);//repeated amount
    stream.writeShort(delay);
    stream.writeByte(255);
    stream.writeShort(256);
    session.write(stream);
    }

    public void sendIndex15Sound(int id, int delay) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 70);
    stream.writeShort(id);
    stream.writeByte(1); // amt of times it repeats
    stream.writeShort(delay);
    stream.writeByte(255); // volume
    session.write(stream);
    }

    public void sendMusicEffect(int id) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 9);
    stream.write128Byte(255); // volume
    stream.write24BitIntegerV2(0);
    stream.writeShort(id);
    session.write(stream);
    }

    public void sendMusic(int id) {
    sendMusic(id, 100, 255);
    }

    public void sendMusic(int id, int delay, int volume) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 129);
    stream.writeByte(delay);
    stream.writeShortLE128(id);
    stream.writeByte128(volume);
    session.write(stream);
    }

    public void sendSkillLevel(int skill) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 146);
    stream.write128Byte(skill);
    stream.writeInt((int) player.getSkills().getXp(skill));
    stream.writeByte128(player.getSkills().getLevel(sk ill));
    session.write(stream);
    }

    // CUTSCENE PACKETS START

    /**
    * This will blackout specified area.
    *
    * @Param byte area = area which will be blackout (0 = unblackout; 1 =
    * blackout orb; 2 = blackout map; 5 = blackout orb and map)
    */
    public void sendBlackOut(int area) {
    OutputStream out = new OutputStream(2);
    out.writePacket(player, 69);
    out.writeByte(area);
    session.write(out);
    }

    // instant
    public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ) {
    sendCameraLook(viewLocalX, viewLocalY, viewZ, -1, -1);
    }

    public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ,
    int speed1, int speed2) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 116);
    stream.writeByte128(viewLocalY);
    stream.writeByte(speed1);
    stream.writeByteC(viewLocalX);
    stream.writeByte(speed2);
    stream.writeShort128(viewZ >> 2);
    session.write(stream);
    }

    public void sendResetCamera() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 95);
    session.write(stream);
    }

    public void sendCameraRotation(int unknown1, int unknown2) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 123);
    stream.writeShort(unknown1);
    stream.writeShortLE(unknown1);
    session.write(stream);
    }

    public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ) {
    sendCameraPos(moveLocalX, moveLocalY, moveZ, -1, -1);
    }

    public void sendClientConsoleCommand(String command) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 61);
    stream.writeString(command);
    stream.endPacketVarByte();
    }

    public void sendOpenURL(String url) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 17);
    stream.writeByte(0);
    stream.writeString(url);
    stream.endPacketVarShort();
    session.write(stream);
    }



    public void sendSetMouse(String walkHereReplace, int cursor) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 10);
    stream.writeString(walkHereReplace);
    stream.writeShort(cursor);
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendItemsLook() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 159);
    stream.writeByte(player.isOldItemsLook() ? 1 : 0);
    session.write(stream);
    }

    public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ,
    int speed1, int speed2) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 74);
    stream.writeByte128(speed2);
    stream.writeByte128(speed1);
    stream.writeByte(moveLocalY);
    stream.writeShort(moveZ >> 2);
    stream.writeByte(moveLocalX);
    session.write(stream);
    }

    }



    Spoiler for worldspacketdecoder:


    package com.rs.net.decoders;

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;

    import com.rs.Settings;
    import com.rs.game.Animation;
    import com.rs.game.Graphics;
    import com.rs.game.World;
    import com.rs.game.WorldObject;
    import com.rs.game.WorldTile;
    import com.rs.game.item.FloorItem;
    import com.rs.game.item.Item;
    import com.rs.game.minigames.clanwars.ClanWars;
    import com.rs.game.minigames.creations.StealingCreation;
    import com.rs.game.npc.NPC;
    import com.rs.game.npc.familiar.Familiar;
    import com.rs.game.npc.familiar.Familiar.SpecialAttack;
    import com.rs.game.player.CoordsEvent;
    import com.rs.game.player.Inventory;
    import com.rs.game.player.LogicPacket;
    import com.rs.game.player.Player;
    import com.rs.game.player.PublicChatMessage;
    import com.rs.game.player.QuickChatMessage;
    import com.rs.game.player.Skills;
    import com.rs.game.player.actions.PlayerCombat;
    import com.rs.game.player.actions.PlayerFollow;
    import com.rs.game.player.actions.Summoning;
    import com.rs.game.player.content.Commands;
    import com.rs.game.player.content.FriendChatsManager;
    import com.rs.game.player.content.Magic;
    import com.rs.game.player.content.Notes.Note;
    import com.rs.game.player.content.Shop;
    import com.rs.game.player.content.SkillCapeCustomizer;
    import com.rs.game.player.content.Vote;
    import com.rs.io.InputStream;
    import com.rs.net.Session;
    import com.rs.net.decoders.handlers.ButtonHandler;
    import com.rs.net.decoders.handlers.InventoryOptionsHandl er;
    import com.rs.net.decoders.handlers.NPCHandler;
    import com.rs.net.decoders.handlers.ObjectHandler;
    import com.rs.utils.DisplayNames;
    import com.rs.utils.Logger;
    import com.rs.utils.Utils;
    import com.rs.utils.huffman.Huffman;

    public final class WorldPacketsDecoder extends Decoder {

    private static final byte[] PACKET_SIZES = new byte[104];

    private final static int WALKING_PACKET = 8;
    private final static int PLAYER_OPTION_6_PACKET = 49;
    private final static int MINI_WALKING_PACKET = 58;
    private final static int AFK_PACKET = -1;
    public final static int ACTION_BUTTON1_PACKET = 14;
    public final static int ACTION_BUTTON2_PACKET = 67;
    public final static int ACTION_BUTTON3_PACKET = 5;
    public final static int ACTION_BUTTON4_PACKET = 55;
    public final static int ACTION_BUTTON5_PACKET = 68;
    public final static int ACTION_BUTTON6_PACKET = 90;
    public final static int ACTION_BUTTON7_PACKET = 6;
    public final static int ACTION_BUTTON8_PACKET = 32;
    public final static int ACTION_BUTTON9_PACKET = 27;
    public final static int WORLD_MAP_CLICK = 38;
    public final static int ACTION_BUTTON10_PACKET = 96;
    public final static int RECEIVE_PACKET_COUNT_PACKET = 33;
    private final static int MAGIC_ON_ITEM_PACKET = -1;
    private final static int PLAYER_OPTION_4_PACKET = 17;
    private final static int MOVE_CAMERA_PACKET = 103;
    private final static int INTERFACE_ON_OBJECT = 37;
    private final static int CLICK_PACKET = -1;
    private final static int MOUVE_MOUSE_PACKET = -1;
    private final static int KEY_TYPED_PACKET = -1;
    private final static int CLOSE_INTERFACE_PACKET = 54;
    private final static int COMMANDS_PACKET = 60;
    private final static int ITEM_ON_ITEM_PACKET = 3;
    private final static int IN_OUT_SCREEN_PACKET = -1;
    private final static int DONE_LOADING_REGION_PACKET = 30;
    private final static int PING_PACKET = 21;
    private final static int SCREEN_PACKET = 98;
    private final static int CHAT_TYPE_PACKET = 83;
    private final static int CHAT_PACKET = 53;
    private final static int PUBLIC_QUICK_CHAT_PACKET = 86;
    private final static int ADD_FRIEND_PACKET = 89;
    private final static int ADD_IGNORE_PACKET = 4;
    private final static int REMOVE_IGNORE_PACKET = 73;
    private final static int JOIN_FRIEND_CHAT_PACKET = 36;
    private final static int CHANGE_FRIEND_CHAT_PACKET = 22;
    private final static int KICK_FRIEND_CHAT_PACKET = 74;
    private final static int REMOVE_FRIEND_PACKET = 24;
    private final static int SEND_FRIEND_MESSAGE_PACKET = 82;
    private final static int SEND_FRIEND_QUICK_CHAT_PACKET = 0;
    private final static int OBJECT_CLICK1_PACKET = 26;
    private final static int OBJECT_CLICK2_PACKET = 59;
    private final static int OBJECT_CLICK3_PACKET = 40;
    private final static int OBJECT_CLICK4_PACKET = 23;
    private final static int OBJECT_CLICK5_PACKET = 80;
    private final static int OBJECT_EXAMINE_PACKET = 25;
    private final static int NPC_CLICK1_PACKET = 31;
    private final static int NPC_CLICK2_PACKET = 101;
    private final static int NPC_CLICK3_PACKET = 34;
    private final static int ATTACK_NPC = 20;
    private final static int PLAYER_OPTION_1_PACKET = 42;
    private final static int PLAYER_OPTION_2_PACKET = 46;
    private final static int ITEM_TAKE_PACKET = 57;
    private final static int DIALOGUE_CONTINUE_PACKET = 72;
    private final static int ENTER_INTEGER_PACKET = 81;
    private final static int ENTER_NAME_PACKET = 29;
    private final static int ENTER_STRING_PACKET = -1;
    private final static int SWITCH_INTERFACE_ITEM_PACKET = 76;
    private final static int INTERFACE_ON_PLAYER = 50;
    private final static int INTERFACE_ON_NPC = 66;
    private final static int COLOR_ID_PACKET = 97;
    private static final int NPC_EXAMINE_PACKET = 9;
    private final static int REPORT_ABUSE_PACKET = -1;

    private static final int Hakurenpin = 0;

    static {
    loadPacketSizes();
    }

    public static void loadPacketSizes() {
    PACKET_SIZES[0] = -1;
    PACKET_SIZES[1] = -2;
    PACKET_SIZES[2] = -1;
    PACKET_SIZES[3] = 16;
    PACKET_SIZES[4] = -1;
    PACKET_SIZES[5] = 8;
    PACKET_SIZES[6] = 8;
    PACKET_SIZES[7] = 3;
    PACKET_SIZES[8] = -1;
    PACKET_SIZES[9] = 3;
    PACKET_SIZES[10] = -1;
    PACKET_SIZES[11] = -1;
    PACKET_SIZES[12] = -1;
    PACKET_SIZES[13] = 7;
    PACKET_SIZES[14] = 8;
    PACKET_SIZES[15] = 6;
    PACKET_SIZES[16] = 2;
    PACKET_SIZES[17] = 3;
    PACKET_SIZES[18] = -1;
    PACKET_SIZES[19] = -2;
    PACKET_SIZES[20] = 3;
    PACKET_SIZES[21] = 0;
    PACKET_SIZES[22] = -1;
    PACKET_SIZES[23] = 9;
    PACKET_SIZES[24] = -1;
    PACKET_SIZES[25] = 9;
    PACKET_SIZES[26] = 9;
    PACKET_SIZES[27] = 8;
    PACKET_SIZES[28] = 4;
    PACKET_SIZES[29] = -1;
    PACKET_SIZES[30] = 0;
    PACKET_SIZES[31] = 3;
    PACKET_SIZES[32] = 8;
    PACKET_SIZES[33] = 4;
    PACKET_SIZES[34] = 3;
    PACKET_SIZES[35] = -1;
    PACKET_SIZES[36] = -1;
    PACKET_SIZES[37] = 17;
    PACKET_SIZES[38] = 4;
    PACKET_SIZES[39] = 4;
    PACKET_SIZES[40] = 9;
    PACKET_SIZES[41] = -1;
    PACKET_SIZES[42] = 3;
    PACKET_SIZES[43] = 7;
    PACKET_SIZES[44] = -2;
    PACKET_SIZES[45] = 7;
    PACKET_SIZES[46] = 3;
    PACKET_SIZES[47] = 4;
    PACKET_SIZES[48] = -1;
    PACKET_SIZES[49] = 3;
    PACKET_SIZES[50] = 11;
    PACKET_SIZES[51] = 3;
    PACKET_SIZES[52] = -1;
    PACKET_SIZES[53] = -1;
    PACKET_SIZES[54] = 0;
    PACKET_SIZES[55] = 8;
    PACKET_SIZES[56] = 3;
    PACKET_SIZES[57] = 7;
    PACKET_SIZES[58] = -1;
    PACKET_SIZES[59] = 9;
    PACKET_SIZES[60] = -1;
    PACKET_SIZES[61] = 7;
    PACKET_SIZES[62] = 7;
    PACKET_SIZES[63] = 12;
    PACKET_SIZES[64] = 4;
    PACKET_SIZES[65] = 3;
    PACKET_SIZES[66] = 11;
    PACKET_SIZES[67] = 8;
    PACKET_SIZES[68] = 8;
    PACKET_SIZES[69] = 15;
    PACKET_SIZES[70] = 1;
    PACKET_SIZES[71] = 2;
    PACKET_SIZES[72] = 6;
    PACKET_SIZES[73] = -1;
    PACKET_SIZES[74] = -1;
    PACKET_SIZES[75] = -2;
    PACKET_SIZES[76] = 16;
    PACKET_SIZES[77] = 3;
    PACKET_SIZES[78] = 1;
    PACKET_SIZES[79] = 3;
    PACKET_SIZES[80] = 9;
    PACKET_SIZES[81] = 4;
    PACKET_SIZES[82] = -2;
    PACKET_SIZES[83] = 1;
    PACKET_SIZES[84] = 1;
    PACKET_SIZES[85] = 3;
    PACKET_SIZES[86] = -1;
    PACKET_SIZES[87] = 4;
    PACKET_SIZES[88] = 3;
    PACKET_SIZES[89] = -1;
    PACKET_SIZES[90] = 8;
    PACKET_SIZES[91] = -2;
    PACKET_SIZES[92] = -1;
    PACKET_SIZES[93] = -1;
    PACKET_SIZES[94] = 9;
    PACKET_SIZES[95] = -2;
    PACKET_SIZES[96] = 8;
    PACKET_SIZES[97] = 2;
    PACKET_SIZES[98] = 6;
    PACKET_SIZES[99] = 2;
    PACKET_SIZES[100] = -2;
    PACKET_SIZES[101] = 3;
    PACKET_SIZES[102] = 7;
    PACKET_SIZES[103] = 4;
    }

    private Player player;
    private int chatType;

    public WorldPacketsDecoder(Session session, Player player) {
    super(session);
    this.player = player;
    }

    @Override
    public void decode(InputStream stream) {
    while (stream.getRemaining() > 0 && session.getChannel().isConnected()
    && !player.hasFinished()) {
    int packetId = stream.readPacket(player);
    if (packetId >= PACKET_SIZES.length || packetId < 0) {
    if (Settings.DEBUG)
    System.out.println("PacketId " + packetId
    + " has fake packet id.");
    break;
    }
    int length = PACKET_SIZES[packetId];
    if (length == -1)
    length = stream.readUnsignedByte();
    else if (length == -2)
    length = stream.readUnsignedShort();
    else if (length == -3)
    length = stream.readInt();
    else if (length == -4) {
    length = stream.getRemaining();
    if (Settings.DEBUG)
    System.out.println("Invalid size for PacketId " + packetId
    + ". Size guessed to be " + length);
    }
    if (length > stream.getRemaining()) {
    length = stream.getRemaining();
    if (Settings.DEBUG)
    System.out.println("PacketId " + packetId
    + " has fake size. - expected size " + length);
    // break;

    }


    /*
    * System.out.println("PacketId " +packetId+
    * " has . - expected size " +length);
    */
    int startOffset = stream.getOffset();
    processPackets(packetId, stream, length);
    stream.setOffset(startOffset + length);
    }
    }

    public static void decodeLogicPacket(final Player player, LogicPacket packet) {
    int packetId = packet.getId();
    InputStream stream = new InputStream(packet.getData());
    if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() > currentTime)
    return;
    if (player.getFreezeDelay() >= currentTime) {
    player.getPackets().sendGameMessage(
    "A magical force prevents you from moving.");
    return;
    }
    int length = stream.getLength();
    /*if (packetId == MINI_WALKING_PACKET)
    length -= 13;*/
    int baseX = stream.readUnsignedShort128();
    boolean forceRun = stream.readUnsigned128Byte() == 1;
    int baseY = stream.readUnsignedShort128();
    int steps = (length - 5) / 2;
    if (steps > 25)
    steps = 25;
    player.stopAll();
    if(forceRun)
    player.setRun(forceRun);
    for (int step = 0; step < steps; step++)
    if (!player.addWalkSteps(baseX + stream.readUnsignedByte(),
    baseY + stream.readUnsignedByte(), 25,
    true))
    break;
    } else if (packetId == INTERFACE_ON_OBJECT) {
    boolean forceRun = stream.readByte128() == 1;
    int itemId = stream.readShortLE128();
    int y = stream.readShortLE128();
    int objectId = stream.readIntV2();
    int interfaceHash = stream.readInt();
    final int interfaceId = interfaceHash >> 16;
    int slot = stream.readShortLE();
    int x = stream.readShort128();
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() >= currentTime || player.getEmotesManager().getNextEmoteEnd() >= currentTime)
    return;
    final WorldTile tile = new WorldTile(x, y, player.getPlane());
    int regionId = tile.getRegionId();
    if (!player.getMapRegionsIds().contains(regionId))
    return;
    WorldObject mapObject = World.getRegion(regionId).getObject(objectId, tile);
    if (mapObject == null || mapObject.getId() != objectId)
    return;
    final WorldObject object = !player.isAtDynamicRegion() ? mapObject : new WorldObject(objectId, mapObject.getType(), mapObject.getRotation(), x, y, player.getPlane());
    final Item item = player.getInventory().getItem(slot);
    if (player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (item == null || item.getId() != itemId)
    return;
    player.stopAll(false); // false
    if(forceRun)
    player.setRun(forceRun);
    switch (interfaceId) {
    case Inventory.INVENTORY_INTERFACE: // inventory
    ObjectHandler.handleItemOnObject(player, object, interfaceId, item);
    break;
    }
    } else if (packetId == PLAYER_OPTION_2_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerFollow(p2));

    } else if (packetId == PLAYER_OPTION_6_PACKET) {
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player other = World.getPlayers().get(playerIndex);
    if (other == null || other.isDead() || other.hasFinished()
    || !player.getMapRegionsIds().contains(other.getRegio nId()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    if (player.getInterfaceManager().containsScreenInter( )) {
    player.getPackets()
    .sendGameMessage("The other player is busy.");
    return;
    }
    if (!other.withinDistance(player, 14)) {
    player.getPackets().sendGameMessage(
    "Unable to find target " + other.getDisplayName());
    return;
    }
    if (player.getAttackedByDelay() + 10000 > Utils.currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "<col=B00000>You view "
    + other.getDisplayName()
    + " Stats's until 10 seconds after the end of combat.");
    return;
    }
    player.getInterfaceManager().sendInterface(1314);
    player.getPackets().sendIComponentText(1314, 91,
    "" + other.getDisplayName() + "'s stats");
    player.getPackets().sendIComponentText(1314, 90,
    ""+ other.getPrestige()+ " <col=00FF7F>FS - Prestige Points");
    player.getPackets().sendIComponentText(1314, 61,
    "" + other.getSkills().getLevel(0));
    player.getPackets().sendIComponentText(1314, 62,
    "" + other.getSkills().getLevel(2));
    player.getPackets().sendIComponentText(1314, 63,
    "" + other.getSkills().getLevel(1));
    player.getPackets().sendIComponentText(1314, 65,
    "" + other.getSkills().getLevel(4));
    player.getPackets().sendIComponentText(1314, 66,
    "" + other.getSkills().getLevel(5));
    player.getPackets().sendIComponentText(1314, 64,
    "" + other.getSkills().getLevel(6));
    player.getPackets().sendIComponentText(1314, 78,
    "" + other.getSkills().getLevel(20));
    player.getPackets().sendIComponentText(1314, 81,
    "" + other.getSkills().getLevel(22));
    player.getPackets().sendIComponentText(1314, 76,
    "" + other.getSkills().getLevel(24));
    player.getPackets().sendIComponentText(1314, 82,
    "" + other.getSkills().getLevel(3));
    player.getPackets().sendIComponentText(1314, 83,
    "" + other.getSkills().getLevel(16));
    player.getPackets().sendIComponentText(1314, 84,
    "" + other.getSkills().getLevel(15));
    player.getPackets().sendIComponentText(1314, 80,
    "" + other.getSkills().getLevel(17));
    player.getPackets().sendIComponentText(1314, 70,
    "" + other.getSkills().getLevel(12));
    player.getPackets().sendIComponentText(1314, 85,
    "" + other.getSkills().getLevel(9));
    player.getPackets().sendIComponentText(1314, 77,
    "" + other.getSkills().getLevel(18));
    player.getPackets().sendIComponentText(1314, 79,
    "" + other.getSkills().getLevel(21));
    player.getPackets().sendIComponentText(1314, 68,
    "" + other.getSkills().getLevel(14));
    player.getPackets().sendIComponentText(1314, 69,
    "" + other.getSkills().getLevel(13));
    player.getPackets().sendIComponentText(1314, 74,
    "" + other.getSkills().getLevel(10));
    player.getPackets().sendIComponentText(1314, 75,
    "" + other.getSkills().getLevel(7));
    player.getPackets().sendIComponentText(1314, 73,
    "" + other.getSkills().getLevel(11));
    player.getPackets().sendIComponentText(1314, 71,
    "" + other.getSkills().getLevel(8));
    player.getPackets().sendIComponentText(1314, 72,
    "" + other.getSkills().getLevel(19));
    player.getPackets().sendIComponentText(1314, 67,
    "" + other.getSkills().getLevel(23));
    player.getPackets().sendIComponentText(1314, 87,
    "" + other.getMaxHitpoints());
    player.getPackets().sendIComponentText(1314, 86,
    "" + other.getSkills().getCombatLevelWithSummoning());
    player.getPackets().sendIComponentText(1314, 88,
    "" + other.getSkills().getTotalLevel(other));
    player.getPackets().sendIComponentText(1314, 89,
    "" + other.getSkills().getTotalXp(other));
    player.getTemporaryAttributtes().put("finding_play er",
    Boolean.FALSE);
    } else if (packetId == PLAYER_OPTION_4_PACKET) {
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    player.stopAll(false);
    if(player.isCantTrade()) {
    player.getPackets().sendGameMessage("You are busy.");
    return;
    }
    if (p2.getInterfaceManager().containsScreenInter() || p2.isCantTrade()) {
    player.getPackets().sendGameMessage("The other player is busy.");
    return;
    }
    if (!p2.withinDistance(player, 14)) {
    player.getPackets().sendGameMessage(
    "Unable to find target "+p2.getDisplayName());
    return;
    }

    if (p2.getTemporaryAttributtes().get("TradeTarget") == player) {
    p2.getTemporaryAttributtes().remove("TradeTarget") ;
    player.getTrade().openTrade(p2);
    p2.getTrade().openTrade(player);
    return;
    }
    player.getTemporaryAttributtes().put("TradeTarget" , p2);
    player.getPackets().sendGameMessage("Sending " + p2.getDisplayName() + " a request...");
    p2.getPackets().sendTradeRequestMessage(player);
    //tradelogs
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE SENT] "+ player.getDisplayName()+" to "+p2.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } else if (packetId == PLAYER_OPTION_1_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis()
    || !player.getControlerManager().canPlayerOption1(p2) )
    return;
    if (!player.isCanPvp())
    return;
    if (!player.getControlerManager().canAttack(p2))
    return;

    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils.currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy to player,
    // player has priority over
    // npc on single areas
    } else {
    player.getPackets().sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerCombat(p2));
    } else if (packetId == ATTACK_NPC) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead()) {
    return;
    }
    if (player.getLockDelay() > Utils.currentTimeMillis()) {
    return;
    }
    int npcIndex = stream.readUnsignedShort128();
    boolean forceRun = stream.read128Byte() == 1;
    if(forceRun)
    player.setRun(forceRun);
    NPC npc = World.getNPCs().get(npcIndex);
    if (npc == null || npc.isDead() || npc.hasFinished()
    || !player.getMapRegionsIds().contains(npc.getRegionI d())
    || !npc.getDefinitions().hasAttackOption()) {
    return;
    }
    if (!player.getControlerManager().canAttack(npc)) {
    return;
    }
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerCombat(npc));
    } else if (packetId == INTERFACE_ON_PLAYER) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    @suppressWarnings("unused")
    int junk1 = stream.readUnsignedShort();
    int playerIndex = stream.readUnsignedShort();
    int interfaceHash = stream.readIntV2();
    @suppressWarnings("unused")
    int junk2 = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    boolean unknown = stream.read128Byte() == 1;
    int interfaceId = interfaceHash >> 16;
    int componentId = interfaceHash - (interfaceId << 16);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (componentId == 65535)
    componentId = -1;
    if (componentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
    return;
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    player.stopAll(false);
    switch (interfaceId) {
    case 662:
    case 747:
    if (player.getFamiliar() == null)
    return;
    player.resetWalkSteps();
    if ((interfaceId == 747 && componentId == 15)
    || (interfaceId == 662 && componentId == 65)
    || (interfaceId == 662 && componentId == 74)
    || interfaceId == 747 && componentId == 18) {
    if ((interfaceId == 662 && componentId == 74
    || interfaceId == 747 && componentId == 24 || interfaceId == 747
    && componentId == 18)) {
    if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
    return;
    }
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!player.getFamiliar().canAttack(p2)) {
    player.getPackets()
    .sendGameMessage(
    "You can only use your familiar in a multi-zone area.");
    return;
    } else {
    player.getFamiliar().setSpecial(
    interfaceId == 662 && componentId == 74
    || interfaceId == 747
    && componentId == 18);
    player.getFamiliar().setTarget(p2);
    }
    }
    break;
    case 193:
    switch (componentId) {
    case 28:
    case 32:
    case 24:
    case 20:
    case 30:
    case 34:
    case 26:
    case 22:
    case 29:
    case 33:
    case 25:
    case 21:
    case 31:
    case 35:
    case 27:
    case 23:
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(p2
    .getCoordFaceX(p2.getSize()), p2
    .getCoordFaceY(p2.getSize()), p2.getPlane()));
    if (!player.getControlerManager().canAttack(p2))
    return;
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "That "
    + (player
    .getAttackedBy() instanceof Player ? "player"
    : "npc")
    + " is already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy
    // to player,
    // player has
    // priority over
    // npc on single
    // areas
    } else {
    player.getPackets()
    .sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.getActionManager()
    .setAction(new PlayerCombat(p2));
    }
    break;
    }
    case 192:
    switch (componentId) {
    case 25: // air strike
    case 28: // water strike
    case 30: // earth strike
    case 32: // fire strike
    case 34: // air bolt
    case 39: // water bolt
    case 42: // earth bolt
    case 45: // fire bolt
    case 49: // air blast
    case 52: // water blast
    case 58: // earth blast
    case 63: // fire blast
    case 70: // air wave
    case 73: // water wave
    case 77: // earth wave
    case 80: // fire wave
    case 86: // teleblock
    case 84: // air surge
    case 87: // water surge
    case 89: // earth surge
    case 91: // fire surge
    case 99: // storm of armadyl
    case 36: // bind
    case 66: // Sara Strike
    case 67: // Guthix Claws
    case 68: // Flame of Zammy
    case 55: // snare
    case 81: // entangle
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(p2
    .getCoordFaceX(p2.getSize()), p2
    .getCoordFaceY(p2.getSize()), p2.getPlane()));
    if (!player.getControlerManager().canAttack(p2))
    return;
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "That "
    + (player
    .getAttackedBy() instanceof Player ? "player"
    : "npc")
    + " is already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy
    // to player,
    // player has
    // priority over
    // npc on single
    // areas
    } else {
    player.getPackets()
    .sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.getActionManager()
    .setAction(new PlayerCombat(p2));
    }
    break;
    }
    break;
    }
    if (Settings.DEBUG)
    System.out.println("Spell:" + componentId);
    } else if (packetId == INTERFACE_ON_NPC) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int interfaceHash = stream.readInt();
    int npcIndex = stream.readUnsignedShortLE();
    int interfaceSlot = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    int junk2 =stream.readUnsignedShortLE();
    int interfaceId = interfaceHash >> 16;
    int componentId = interfaceHash - (interfaceId << 16);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (componentId == 65535)
    componentId = -1;
    if (componentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
    return;
    NPC npc = World.getNPCs().get(npcIndex);
    if (npc == null || npc.isDead() || npc.hasFinished()
    || !player.getMapRegionsIds().contains(npc.getRegionI d()))
    return;
    player.stopAll(false);
    if (interfaceId != Inventory.INVENTORY_INTERFACE) {
    if (!npc.getDefinitions().hasAttackOption()) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    }
    switch (interfaceId) {
    case Inventory.INVENTORY_INTERFACE:
    Item item = player.getInventory().getItem(interfaceSlot);
    if (item == null || !player.getControlerManager().processItemOnNPC(npc , item))
    return;
    InventoryOptionsHandler.handleItemOnNPC(player, npc, item);
    break;
    case 1165:
    Summoning.attackDreadnipTarget(npc, player/*, stream*/);
    break;
    case 662:
    case 747:
    if (player.getFamiliar() == null)
    return;
    player.resetWalkSteps();
    if ((interfaceId == 747 && componentId == 15)
    || (interfaceId == 662 && componentId == 65)
    || (interfaceId == 662 && componentId == 74)
    || interfaceId == 747 && componentId == 18
    || interfaceId == 747 && componentId == 24) {
    if ((interfaceId == 662 && componentId == 74 || interfaceId == 747
    && componentId == 18)) {
    if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
    return;
    }
    if(npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage("You can't attack your own familiar.");
    return;
    }
    if (!player.getFamiliar().canAttack(familiar.getOwner ())) {
    player.getPackets().sendGameMessage("You can only attack players in a player-vs-player area.");
    return;
    }
    }
    if (!player.getFamiliar().canAttack(npc)) {
    player.getPackets()
    .sendGameMessage(
    "You can only use your familiar in a multi-zone area.");
    return;
    } else {
    player.getFamiliar().setSpecial(
    interfaceId == 662 && componentId == 74
    || interfaceId == 747
    && componentId == 18);
    player.getFamiliar().setTarget(npc);
    }
    }
    break;
    case 193:
    switch (componentId) {
    case 28:
    case 32:
    case 24:
    case 20:
    case 30:
    case 34:
    case 26:
    case 22:
    case 29:
    case 33:
    case 25:
    case 21:
    case 31:
    case 35:
    case 27:
    case 23:
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(npc
    .getCoordFaceX(npc.getSize()), npc
    .getCoordFaceY(npc.getSize()), npc.getPlane()));
    if (!player.getControlerManager().canAttack(npc))
    return;
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.getActionManager().setAction(
    new PlayerCombat(npc));
    }
    break;
    }
    case 192:
    switch (componentId) {
    case 25: // air strike
    case 28: // water strike
    case 30: // earth strike
    case 32: // fire strike
    case 34: // air bolt
    case 39: // water bolt
    case 42: // earth bolt
    case 45: // fire bolt
    case 49: // air blast
    case 52: // water blast
    case 58: // earth blast
    case 63: // fire blast
    case 70: // air wave
    case 73: // water wave
    case 77: // earth wave
    case 80: // fire wave
    case 84: // air surge
    case 87: // water surge
    case 89: // earth surge
    case 66: // Sara Strike
    case 67: // Guthix Claws
    case 68: // Flame of Zammy
    case 93:
    case 91: // fire surge
    case 99: // storm of Armadyl
    case 36: // bind
    case 55: // snare
    case 81: // entangle
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(npc
    .getCoordFaceX(npc.getSize()), npc
    .getCoordFaceY(npc.getSize()), npc.getPlane()));
    if (!player.getControlerManager().canAttack(npc))
    return;
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.getActionManager().setAction(
    new PlayerCombat(npc));
    }
    break;
    }
    break;
    }
    if (Settings.DEBUG)
    System.out.println("Spell:" + componentId);
    } else if (packetId == NPC_CLICK1_PACKET)
    NPCHandler.handleOption1(player, stream);
    else if (packetId == NPC_CLICK2_PACKET)
    NPCHandler.handleOption2(player, stream);
    else if (packetId == NPC_CLICK3_PACKET)
    NPCHandler.handleOption3(player, stream);
    else if (packetId == OBJECT_CLICK1_PACKET)
    ObjectHandler.handleOption(player, stream, 1);
    else if (packetId == OBJECT_CLICK2_PACKET)
    ObjectHandler.handleOption(player, stream, 2);
    else if (packetId == OBJECT_CLICK3_PACKET)
    ObjectHandler.handleOption(player, stream, 3);
    else if (packetId == OBJECT_CLICK4_PACKET)
    ObjectHandler.handleOption(player, stream, 4);
    else if (packetId == OBJECT_CLICK5_PACKET)
    ObjectHandler.handleOption(player, stream, 5);
    else if (packetId == ITEM_TAKE_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() > currentTime)
    // || player.getFreezeDelay() >= currentTime)
    return;
    int y = stream.readUnsignedShort();
    int x = stream.readUnsignedShortLE();
    final int id = stream.readUnsignedShort();
    boolean forceRun = stream.read128Byte() == 1;
    final WorldTile tile = new WorldTile(x, y, player.getPlane());
    final int regionId = tile.getRegionId();
    if (!player.getMapRegionsIds().contains(regionId))
    return;
    final FloorItem item = World.getRegion(regionId).getGroundItem(id,
    tile, player);
    if (item == null)
    return;
    player.stopAll(false);
    if(forceRun)
    player.setRun(forceRun);
    player.setCoordsEvent(new CoordsEvent(tile, new Runnable() {
    @Override
    public void run() {
    final FloorItem item = World.getRegion(regionId)
    .getGroundItem(id, tile, player);
    if (item == null)
    return;
    /* if (player.getRights() > 0 || player.isSupporter())
    player.getPackets().sendGameMessage("This item was dropped by [Username] "+item.getOwner().getUsername()+ " [DiplayName] "+item.getOwner().getDisplayName());
    */ player.setNextFaceWorldTile(tile);
    player.addWalkSteps(tile.getX(), tile.getY(), 1);
    World.removeGroundItem(player, item);
    }
    }, 1, 1));
    }
    }

    public void processPackets(final int packetId, InputStream stream,
    int length) {
    player.setPacketsDecoderPing(Utils.currentTimeMill is());
    if (packetId == PING_PACKET) {
    // kk we ping
    } else if (packetId == MOUVE_MOUSE_PACKET) {
    // USELESS PACKET
    } else if (packetId == KEY_TYPED_PACKET) {
    // USELESS PACKET
    } else if (packetId == RECEIVE_PACKET_COUNT_PACKET) {
    // interface packets
    stream.readInt();
    } else if (packetId == ITEM_ON_ITEM_PACKET) {
    InventoryOptionsHandler.handleItemOnItem(player, stream);
    } else if (packetId == MAGIC_ON_ITEM_PACKET) {
    int inventoryInter = stream.readInt() >> 16;
    int itemId = stream.readShort128();
    @suppressWarnings("unused")
    int junk = stream.readShort();
    @suppressWarnings("unused")
    int itemSlot = stream.readShortLE();
    int interfaceSet = stream.readIntV1();
    int spellId = interfaceSet & 0xFFF;
    int magicInter = interfaceSet >> 16;
    if (inventoryInter == 149 && magicInter == 192) {
    switch (spellId) {
    case 59:// High Alch
    if (player.getSkills().getLevel(Skills.MAGIC) < 55) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required level to cast this spell.");
    return;
    }
    if (itemId == 995) {
    player.getPackets().sendGameMessage(
    "You can't alch this!");
    return;
    }
    if (player.getEquipment().getWeaponId() == 1401
    || player.getEquipment().getWeaponId() == 3054
    || player.getEquipment().getWeaponId() == 19323) {
    if (!player.getInventory().containsItem(561, 1)) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required runes to cast this spell.");
    return;
    }
    player.setNextAnimation(new Animation(9633));
    player.setNextGraphics(new Graphics(112));
    player.getInventory().deleteItem(561, 1);
    player.getInventory().deleteItem(itemId, 1);
    player.getInventory()
    .addItem(
    995,
    new Item(itemId, 1).getDefinitions()
    .getValue() >> 6);
    } else {
    if (!player.getInventory().containsItem(561, 1)
    || !player.getInventory().containsItem(554, 5)) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required runes to cast this spell.");
    return;
    }
    player.setNextAnimation(new Animation(713));
    player.setNextGraphics(new Graphics(113));
    player.getInventory().deleteItem(561, 1);
    player.getInventory().deleteItem(554, 5);
    player.getInventory().deleteItem(itemId, 1);
    player.getInventory()
    .addItem(
    995,
    new Item(itemId, 1).getDefinitions()
    .getValue() >> 6);
    }
    break;
    default:
    System.out.println("Spell:" + spellId + ", Item:" + itemId);
    }
    System.out.println("Spell:" + spellId + ", Item:" + itemId);
    }
    } else if (packetId == AFK_PACKET) {
    player.getSession().getChannel().close();
    } else if (packetId == CLOSE_INTERFACE_PACKET) {
    if (player.hasStarted() && !player.hasFinished() && !player.isRunning()) { //used for old welcome screen
    player.run();
    return;
    }
    player.stopAll();
    } else if (packetId == MOVE_CAMERA_PACKET) {
    // not using it atm
    stream.readUnsignedShort();
    stream.readUnsignedShort();
    } else if (packetId == IN_OUT_SCREEN_PACKET) {
    // not using this check because not 100% efficient
    @suppressWarnings("unused")
    boolean inScreen = stream.readByte() == 1;
    } else if (packetId == SCREEN_PACKET) {
    int displayMode = stream.readUnsignedByte();
    player.setScreenWidth(stream.readUnsignedShort());
    player.setScreenHeight(stream.readUnsignedShort()) ;
    @suppressWarnings("unused")
    boolean switchScreenMode = stream.readUnsignedByte() == 1;
    if (!player.hasStarted() || player.hasFinished()
    || displayMode == player.getDisplayMode()
    || !player.getInterfaceManager().containsInterface(74 2))
    return;
    player.setDisplayMode(displayMode);
    player.getInterfaceManager().removeAll();
    player.getInterfaceManager().sendInterfaces();
    player.getInterfaceManager().sendInterface(742);
    } else if (packetId == CLICK_PACKET) {
    int mouseHash = stream.readShortLE128();
    int mouseButton = mouseHash >> 15;
    int time = mouseHash - (mouseButton << 15); // time
    int positionHash = stream.readIntV1();
    int y = positionHash >> 16; // y;
    int x = positionHash - (y << 16); // x
    @suppressWarnings("unused")
    boolean clicked;
    // mass click or stupid autoclicker, lets stop lagg
    if (time <= 1 || x < 0 || x > player.getScreenWidth() || y < 0
    || y > player.getScreenHeight()) {
    // player.getSession().getChannel().close();
    clicked = false;
    return;
    }
    clicked = true;
    } else if (packetId == DIALOGUE_CONTINUE_PACKET) {
    int interfaceHash = stream.readInt();
    int junk = stream.readShort128();
    int interfaceId = interfaceHash >> 16;
    int buttonId = (interfaceHash & 0xFF);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId) {
    // hack, or server error or client error
    // player.getSession().getChannel().close();
    return;
    }
    if (!player.isRunning()
    || !player.getInterfaceManager().containsInterface(
    interfaceId))
    return;
    if(Settings.DEBUG)
    Logger.log(this, "Dialogue: "+interfaceId+", "+buttonId+", "+junk);
    int componentId = interfaceHash - (interfaceId << 16);
    player.getDialogueManager().continueDialogue(inter faceId,
    componentId);
    } else if (packetId == WORLD_MAP_CLICK) {
    int coordinateHash = stream.readInt();
    int x = coordinateHash >> 14;
    int y = coordinateHash & 0x3fff;
    int plane = coordinateHash >> 28;
    Integer hash = (Integer)player.getTemporaryAttributtes().get("wor ldHash");
    if (hash == null || coordinateHash != hash)
    player.getTemporaryAttributtes().put("worldHash", coordinateHash);
    else {
    player.getTemporaryAttributtes().remove("worldHash ");
    player.getHintIconsManager().addHintIcon(x, y, plane, 20, 0, 2, -1, true);
    player.getPackets().sendConfig(1159, coordinateHash);
    }
    } else if (packetId == ACTION_BUTTON1_PACKET
    || packetId == ACTION_BUTTON2_PACKET
    || packetId == ACTION_BUTTON4_PACKET
    || packetId == ACTION_BUTTON5_PACKET
    || packetId == ACTION_BUTTON6_PACKET
    || packetId == ACTION_BUTTON7_PACKET
    || packetId == ACTION_BUTTON8_PACKET
    || packetId == ACTION_BUTTON3_PACKET
    || packetId == ACTION_BUTTON9_PACKET
    || packetId == ACTION_BUTTON10_PACKET) {
    ButtonHandler.handleButtons(player, stream, packetId);
    } else if (packetId == ENTER_NAME_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;
    String value = stream.readString();
    if (value.equals(""))
    return;
    if (player.getInterfaceManager().containsInterface(11 08))
    player.getFriendsIgnores().setChatPrefix(value);
    else if (player.getTemporaryAttributtes().get("yellcolor") == Boolean.TRUE) {
    if(value.length() != 6) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell color you wanted to pick cannot be longer and shorter then 6.");
    } else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell color can only contain numeric and regular characters.");
    } else {
    player.setYellColor(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getYellColor()+">"+player.getYellCol or()+"</col>.");
    }
    player.getTemporaryAttributtes().put("yellcolor", Boolean.FALSE);


    } else if (player.getTemporaryAttributtes().get("yellshade") == Boolean.TRUE) {
    if(value.length() != 6) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell shade you wanted to pick cannot be longer and shorter then 6.");
    } else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell shade can only contain numeric and regular characters.");
    } else {
    player.setYellShade(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getShadColor()+">"+player.getShadCol or()+"</col>.");
    }
    player.getTemporaryAttributtes().put("yellshade", Boolean.FALSE);
    } else if (player.getTemporaryAttributtes().get("yellprefix" ) == Boolean.TRUE) {
    String[] invalid = { "<euro", "<img", "<img=", "<col", "<col=",
    "<shad", "<shad=", "<str>", "<u>" };
    for (String s : invalid)
    if (value.contains(s)) {
    player.getPackets().sendGameMessage(
    "You cannot add additional code to the message.");
    return;
    }
    if(value.length() > 17) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The prefix cannot be more than 16 characters.");
    } else {
    player.setPrefix(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell prfix has been changed to "+player.getPrefix()+".");
    }
    player.getTemporaryAttributtes().put("yellprefix", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("entering_no te") == Boolean.TRUE) {
    player.getNotes().add(new Note(value, 1));
    player.getNotes().refresh();
    player.getTemporaryAttributtes().put("entering_not e", Boolean.FALSE);
    return;
    } else if (player.getTemporaryAttributtes().get("editing_not e") == Boolean.TRUE) {
    Note note = (Note) player.getTemporaryAttributtes().get("curNote");
    player.getNotes().getNotes().get(player.getNotes() .getNotes().indexOf(note));
    player.getNotes().refresh();
    player.getTemporaryAttributtes().put("editing_note ", Boolean.FALSE);
    } else if (player.getTemporaryAttributtes().get("view_name") == Boolean.TRUE) {
    player.getTemporaryAttributtes().remove("view_name ");
    Player other = World.getPlayerByDisplayName(value);
    if (other == null) {
    player.getPackets().sendGameMessage("Couldn't find player.");
    return;
    }
    ClanWars clan = other.getCurrentFriendChat() != null ? other.getCurrentFriendChat().getClanWars() : null;
    if (clan == null) {
    player.getPackets().sendGameMessage("This player's clan is not in war.");
    return;
    }
    if (clan.getSecondTeam().getOwnerDisplayName() != other.getCurrentFriendChat().getOwnerDisplayName() ) {
    player.getTemporaryAttributtes().put("view_prefix" , 1);
    }
    player.getTemporaryAttributtes().put("view_clan", clan);
    ClanWars.enter(player);
    } else if (player.getTemporaryAttributtes().remove("setdispl ay") != null) {
    if(Utils.invalidAccountName(Utils
    .formatPlayerNameForProtocol(value))) {
    player.getPackets().sendGameMessage("Invalid name!");
    return;
    }
    if(!DisplayNames.setDisplayName(player, value)) {
    player.getPackets().sendGameMessage("Name already in use!");
    return;
    }
    player.getPackets().sendGameMessage("Changed display name!");
    } else if (player.getTemporaryAttributtes().remove("checkvot einput") != null)
    Vote.checkVote(player, value);
    } else if (packetId == ENTER_STRING_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;
    String value = stream.readString();
    if (value.equals(""))
    return;

    } else if (packetId == ENTER_INTEGER_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;

    int value = stream.readInt();
    if ((player.getInterfaceManager().containsInterface(7 62) && player
    .getInterfaceManager().containsInterface(763))
    || player.getInterfaceManager().containsInterface(11) ) {
    if (value < 0)
    return;
    Integer bank_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("bank_item_X_Slo t");
    if (bank_item_X_Slot == null)
    return;
    player.getBank().setLastX(value);
    player.getBank().refreshLastX();
    if (player.getTemporaryAttributtes().remove("bank_isW ithdraw") != null)
    player.getBank().withdrawItem(bank_item_X_Slot, value);
    else
    player.getBank()
    .depositItem(
    bank_item_X_Slot,
    value,
    player.getInterfaceManager()
    .containsInterface(11) ? false
    : true);
    } else if (player.getTemporaryAttributtes().get("bank_pin") == Boolean.TRUE) {
    if (value < 0)
    return;
    player.setBankPin(value);
    player.hasBankPin = true;
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().startDialogue("SimpleM essage", "Your Bank Pin Is... <col=FF0000>"+player.getBankPin() + " </col>Remember it!");
    player.getTemporaryAttributtes().put("bank_pin", Boolean.FALSE);

    } else if (player.getTemporaryAttributtes().get("bank_pin1") == Boolean.TRUE) {
    if (value < 0)
    return;
    if(player.pin != value) {
    player.getDialogueManager().startDialogue("SimpleM essage", "Wrong Pin please try again.");
    } else {
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().startDialogue("SimpleM essage", "You have entered your bank pin, Thank You");
    player.hasEnteredPin = true;
    }
    player.getTemporaryAttributtes().put("bank_pin1", Boolean.FALSE);


    } else if (player.getInterfaceManager().containsInterface(20 6)
    && player.getInterfaceManager().containsInterface(207 )) {
    if (value < 0)
    return;
    Integer pc_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("pc_item_X_Slot" );
    if (pc_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("pc_isRem ove") != null)
    player.getPriceCheckManager().removeItem(pc_item_X _Slot,
    value);
    else
    player.getPriceCheckManager()
    .addItem(pc_item_X_Slot, value);
    } else if (player.getInterfaceManager().containsInterface(67 1)
    && player.getInterfaceManager().containsInterface(665 )) {
    if (player.getFamiliar() == null
    || player.getFamiliar().getBob() == null)
    return;
    if (value < 0)
    return;
    Integer bob_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("bob_item_X_Slot ");
    if (bob_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("bob_isRe move") != null)
    player.getFamiliar().getBob()
    .removeItem(bob_item_X_Slot, value);
    else
    player.getFamiliar().getBob()
    .addItem(bob_item_X_Slot, value);
    } else if (player.getInterfaceManager().containsInterface(33 5)
    && player.getInterfaceManager().containsInterface(336 )) {
    int playerIndex = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    Player p2 = World.getPlayers().get(playerIndex);
    if (value < 0)
    return;
    Integer trade_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("trade_item_X_Sl ot");
    if (trade_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("trade_is Remove") != null)
    player.getTrade().removeItem(trade_item_X_Slot, value);
    else
    player.getTrade().addItem(trade_item_X_Slot, value);
    } else if (player.getTemporaryAttributtes().get("skillId") != null) {
    if (player.getEquipment().wearingArmour()) {
    player.getDialogueManager().finishDialogue();
    player.getDialogueManager().startDialogue("SimpleM essage", "You cannot do this while having armour on!");
    return;
    }

    int skillId = (Integer) player.getTemporaryAttributtes()
    .remove("skillId");
    if (skillId == Skills.HITPOINTS && value <= 9)
    value = 10;
    else if (value < 1)
    value = 1;
    else if (value > 99)
    value = 99;
    player.getSkills().set(skillId, value);
    player.getSkills().setXp(skillId, Skills.getXPForLevel(value));
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().finishDialogue();
    }//

    else if (player.getTemporaryAttributtes().get("banning_sec urity") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */

    //PIN STAFF E OUTROS
    int Staffpin = 5555;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Staffpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasStaffPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_ayslan") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */
    //PIN HAKUREN
    int Hakurenpin = 8024;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Hakurenpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasHakurenPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity_hakuren", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_hakuren") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */
    //PIN AYSLAN
    int Ayslanpin =8024;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Ayslanpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasAyslanPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity_ayslan", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_titus") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */

    }

    else if (player.getTemporaryAttributtes().get("kilnX") != null) {
    int index = (Integer) player.getTemporaryAttributtes().get("scIndex");
    int componentId = (Integer) player.getTemporaryAttributtes().get("scComponentI d");
    int itemId = (Integer) player.getTemporaryAttributtes().get("scItemId");
    player.getTemporaryAttributtes().remove("kilnX");
    if (StealingCreation.proccessKilnItems(player, componentId, index, itemId, value))
    return;
    } else if (player.getInterfaceManager().containsInterface(54 8) ||
    player.getInterfaceManager().containsInterface(746 )) {
    if (value < 0)
    return;
    }
    Integer remove_X_money = (Integer) player.getTemporaryAttributtes().remove("remove_X_ money");
    if(remove_X_money == null) {
    return;
    }
    int amount = player.getInventory().getItems().getNumberOf(remov e_X_money);
    if(player.getTemporaryAttributtes().remove("remove _money") != null) {
    if (!player.getInventory().containsItem(995, 1) && !player.getInventory().hasFreeSlots()) {
    player.getPackets().sendGameMessage("You need at least 1 inventory space to withdraw your coins.");
    return;
    }
    if (player.money < 1) {
    player.getPackets().sendGameMessage("You don't have any coins on your money pouch.");
    return;
    }
    if(value <= player.money) {
    if(amount + value > 0) {
    player.getInventory().addItem(remove_X_money, value);
    player.getPackets().sendRunScript(5561, 0, value);
    player.money -= value;
    player.refreshMoneyPouch();
    } else {
    player.getPackets().sendGameMessage("You can't have more then 2,147,483,647 coins in your inventory.");
    }
    } else {
    if(amount + value > 0) {
    player.getInventory().addItem(remove_X_money, player.money);
    player.getPackets().sendRunScript(5561, 0, player.money);
    player.money -= player.money;
    player.refreshMoneyPouch();
    } else {
    player.getPackets().sendGameMessage("Please input a valid amount.");
    }
    }
    }
    } else if (packetId == SWITCH_INTERFACE_ITEM_PACKET) {
    stream.readShortLE128();
    int fromInterfaceHash = stream.readIntV1();
    int toInterfaceHash = stream.readInt();
    int fromSlot = stream.readUnsignedShort();
    int toSlot = stream.readUnsignedShortLE128();
    stream.readUnsignedShortLE();


    int toInterfaceId = toInterfaceHash >> 16;
    int toComponentId = toInterfaceHash - (toInterfaceId << 16);
    int fromInterfaceId = fromInterfaceHash >> 16;
    int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16);

    if (Utils.getInterfaceDefinitionsSize() <= fromInterfaceId
    || Utils.getInterfaceDefinitionsSize() <= toInterfaceId)
    return;
    if (!player.getInterfaceManager()
    .containsInterface(fromInterfaceId)
    || !player.getInterfaceManager().containsInterface(
    toInterfaceId))
    return;
    if (fromComponentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(fromIn terfaceId) <= fromComponentId)
    return;
    if (toComponentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(toInte rfaceId) <= toComponentId)
    return;
    if (fromInterfaceId == Inventory.INVENTORY_INTERFACE
    && fromComponentId == 0
    && toInterfaceId == Inventory.INVENTORY_INTERFACE
    && toComponentId == 0) {
    toSlot -= 28;
    if (toSlot < 0
    || toSlot >= player.getInventory()
    .getItemsContainerSize()
    || fromSlot >= player.getInventory()
    .getItemsContainerSize())
    return;
    player.getInventory().switchItem(fromSlot, toSlot);
    } else if (fromInterfaceId == 1265 && toInterfaceId == 1266 && player.getTemporaryAttributtes().get("shop_buying" ) != null) {
    if ((boolean) player.getTemporaryAttributtes().get("shop_buying" ) == true) {
    Shop shop = (Shop) player.getTemporaryAttributtes().get("Shop");
    if (shop == null)
    return;
    shop.buy(player, fromSlot, 1);
    }
    } else if (fromInterfaceId == 763 && fromComponentId == 0
    && toInterfaceId == 763 && toComponentId == 0) {
    if (toSlot >= player.getInventory().getItemsContainerSize()
    || fromSlot >= player.getInventory()
    .getItemsContainerSize())
    return;
    player.getInventory().switchItem(fromSlot, toSlot);
    } else if (fromInterfaceId == 762 && toInterfaceId == 762) {
    player.getBank().switchItem(fromSlot, toSlot, fromComponentId,
    toComponentId);
    }
    if (Settings.DEBUG)
    System.out.println("Switch item " + fromInterfaceId + ", "
    + fromSlot + ", " + toSlot);
    } else if (packetId == DONE_LOADING_REGION_PACKET) {
    /*
    * if(!player.clientHasLoadedMapRegion()) { //load objects and items
    * here player.setClientHasLoadedMapRegion(); }
    * //player.refreshSpawnedObjects(); //player.refreshSpawnedItems();
    */
    } else if (packetId == WALKING_PACKET
    || packetId == MINI_WALKING_PACKET
    || packetId == ITEM_TAKE_PACKET
    || packetId == PLAYER_OPTION_2_PACKET
    || packetId == PLAYER_OPTION_4_PACKET
    || packetId == PLAYER_OPTION_1_PACKET || packetId == ATTACK_NPC
    || packetId == PLAYER_OPTION_6_PACKET
    || packetId == INTERFACE_ON_PLAYER
    || packetId == INTERFACE_ON_NPC
    || packetId == NPC_CLICK1_PACKET
    || packetId == NPC_CLICK2_PACKET
    || packetId == NPC_CLICK3_PACKET
    || packetId == OBJECT_CLICK1_PACKET
    || packetId == SWITCH_INTERFACE_ITEM_PACKET
    || packetId == OBJECT_CLICK2_PACKET
    || packetId == OBJECT_CLICK3_PACKET
    || packetId == OBJECT_CLICK4_PACKET
    || packetId == OBJECT_CLICK5_PACKET
    || packetId == INTERFACE_ON_OBJECT)
    player.addLogicPacketToQueue(new LogicPacket(packetId, length,
    stream));
    else if (packetId == OBJECT_EXAMINE_PACKET) {
    ObjectHandler.handleOption(player, stream, -1);
    }else if (packetId == NPC_EXAMINE_PACKET) {
    NPCHandler.handleExamine(player, stream);
    } else if (packetId == JOIN_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    FriendChatsManager.joinChat(stream.readString(), player);
    } else if (packetId == KICK_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 1000); // avoids
    // message
    // appearing
    player.kickPlayerFromFriendsChannel(stream.readStr ing());
    } else if (packetId == CHANGE_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted()
    || !player.getInterfaceManager().containsInterface(11 08))
    return;
    player.getFriendsIgnores().changeRank(stream.readS tring(),
    stream.readUnsignedByte128());
    } else if (packetId == ADD_FRIEND_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().addFriend(stream.readSt ring());
    } else if (packetId == REMOVE_FRIEND_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().removeFriend(stream.rea dString());
    } else if (packetId == ADD_IGNORE_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().addIgnore(stream.readSt ring(), stream.readUnsignedByte() == 1);
    } else if (packetId == REMOVE_IGNORE_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().removeIgnore(stream.rea dString());
    } else if (packetId == SEND_FRIEND_MESSAGE_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getMuted() > Utils.currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You temporary muted. Recheck in 48 hours.");
    return;
    }
    String username = stream.readString();
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 == null)
    return;

    player.getFriendsIgnores().sendMessage(
    p2,
    Utils.fixChatMessage(Huffman.readEncryptedMessage( 150,
    stream)));
    } else if (packetId == SEND_FRIEND_QUICK_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    String username = stream.readString();
    int fileId = stream.readUnsignedShort();
    byte[] data = null;
    if (length > 3 + username.length()) {
    data = new byte[length - (3 + username.length())];
    stream.readBytes(data);
    }
    data = Utils.completeQuickMessage(player, fileId, data);
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 == null)
    return;
    player.getFriendsIgnores().sendQuickChatMessage(p2 ,
    new QuickChatMessage(fileId, data));
    } else if (packetId == PUBLIC_QUICK_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getLastPublicMessage() > Utils.currentTimeMillis())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 300);
    // just tells you which client script created packet
    @suppressWarnings("unused")
    boolean secondClientScript = stream.readByte() == 1;// script 5059
    // or 5061
    int fileId = stream.readUnsignedShort();
    byte[] data = null;
    if (length > 3) {
    data = new byte[length - 3];
    stream.readBytes(data);
    }
    data = Utils.completeQuickMessage(player, fileId, data);
    if (chatType == 0)
    player.sendPublicChatMessage(new QuickChatMessage(fileId, data));
    else if (chatType == 1)
    player.sendFriendsChannelQuickMessage(new QuickChatMessage(
    fileId, data));
    else if (Settings.DEBUG)
    Logger.log(this, "Unknown chat type: " + chatType);
    } else if (packetId == CHAT_TYPE_PACKET) {
    chatType = stream.readUnsignedByte();
    } else if (packetId == CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getLastPublicMessage() > Utils.currentTimeMillis())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 300);
    int colorEffect = stream.readUnsignedByte();
    int moveEffect = stream.readUnsignedByte();
    String message = Huffman.readEncryptedMessage(200, stream);
    if (message == null || message.replaceAll(" ", "").equals(""))
    return;
    if (message.startsWith("::") || message.startsWith(";;")) {
    // if command exists and processed wont send message as public
    // message
    Commands.processCommand(player, message.replace("::", "")
    .replace(";;", ""), false, false);
    return;
    }
    if (player.getMuted() > Utils.currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You temporary muted. Recheck in 48 hours.");
    return;
    }
    int effects = (colorEffect << 8) | (moveEffect & 0xff);
    if (chatType == 1)
    player.sendFriendsChannelMessage(Utils.fixChatMess age(message));
    else
    player.sendPublicChatMessage(new PublicChatMessage(Utils
    .fixChatMessage(message), effects));
    player.setLastMsg(message);
    if (Settings.DEBUG)
    Logger.log(this, "Chat type: " + chatType);
    } else if (packetId == COMMANDS_PACKET) {
    if (!player.isRunning())
    return;
    boolean clientCommand = stream.readUnsignedByte() == 1;
    @suppressWarnings("unused")
    boolean unknown = stream.readUnsignedByte() == 1;
    String command = stream.readString();
    if (!Commands.processCommand(player, command, true, clientCommand)
    && Settings.DEBUG)
    Logger.log(this, "Command: " + command);
    } else if (packetId == COLOR_ID_PACKET) {
    if (!player.hasStarted())
    return;
    int colorId = stream.readUnsignedShort();
    if (player.getTemporaryAttributtes().get("SkillcapeCu stomize") != null)
    SkillCapeCustomizer.handleSkillCapeCustomizerColor (player,
    colorId);
    }else if (packetId == REPORT_ABUSE_PACKET) {
    if (!player.hasStarted())
    return;
    @suppressWarnings("unused")
    String username = stream.readString();
    @suppressWarnings("unused")
    int type = stream.readUnsignedByte();
    @suppressWarnings("unused")
    boolean mute = stream.readUnsignedByte() == 1;
    @suppressWarnings("unused")
    String unknown2 = stream.readString();
    } else {
    if (Settings.DEBUG)
    Logger.log(this, "Missing packet " + packetId
    + ", expected size: " + length + ", actual size: "
    + PACKET_SIZES[packetId]);
    }
    }

    }

    Reply With Quote  
     

  2. #12  
    Registered Member
    Join Date
    Jun 2020
    Posts
    40
    Thanks given
    45
    Thanks received
    5
    Rep Power
    11
    Quote Originally Posted by Falling Sky View Post
    do you know how to fix this?

    Spoiler for worldpacketsencoder:

    package com.rs.net.encoders;

    import org.jboss.netty.channel.ChannelFuture;
    import org.jboss.netty.channel.ChannelFutureListener;

    import com.rs.Settings;
    import com.rs.cache.loaders.ObjectDefinitions;
    import com.rs.game.Animation;
    import com.rs.game.DynamicRegion;
    import com.rs.game.Entity;
    import com.rs.game.Graphics;
    import com.rs.game.Region;
    import com.rs.game.World;
    import com.rs.game.WorldObject;
    import com.rs.game.WorldTile;
    import com.rs.game.item.FloorItem;
    import com.rs.game.item.Item;
    import com.rs.game.item.ItemsContainer;
    import com.rs.game.npc.NPC;
    import com.rs.game.player.HintIcon;
    import com.rs.game.player.Player;
    import com.rs.game.player.PublicChatMessage;
    import com.rs.game.player.QuickChatMessage;
    import com.rs.game.player.content.FriendChatsManager;
    import com.rs.io.OutputStream;
    import com.rs.net.Session;
    import com.rs.utils.Logger;
    import com.rs.utils.MapArchiveKeys;
    import com.rs.utils.Utils;
    import com.rs.utils.huffman.Huffman;

    public class WorldPacketsEncoder extends Encoder {

    private Player player;

    public WorldPacketsEncoder(Session session, Player player) {
    super(session);
    this.player = player;
    }

    public Player getPlayer() {
    return player;
    }

    public void sendPlayerUnderNPCPriority(boolean priority) {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 6);
    stream.writeByteC(priority ? 1 : 0);
    session.write(stream);
    }

    public void sendHintIcon(HintIcon icon) {
    OutputStream stream = new OutputStream(15);
    stream.writePacket(player, 79);
    stream.writeByte((icon.getTargetType() & 0x1f) | (icon.getIndex() << 5));
    if (icon.getTargetType() == 0)
    stream.skip(13);
    else {
    stream.writeByte(icon.getArrowType());
    if (icon.getTargetType() == 1 || icon.getTargetType() == 10) {
    stream.writeShort(icon.getTargetIndex());
    stream.writeShort(2500); // how often the arrow flashes, 2500 ideal, 0 never
    stream.skip(4);
    } else if ((icon.getTargetType() >= 2 && icon.getTargetType() <= 6)) { // directions
    stream.writeByte(icon.getPlane()); // unknown
    stream.writeShort(icon.getCoordX());
    stream.writeShort(icon.getCoordY());
    stream.writeByte(icon.getDistanceFromFloor() * 4 >> 2);
    stream.writeShort(-1); //distance to start showing on minimap, 0 doesnt show, -1 infinite
    }
    stream.writeInt(icon.getModelId());
    }
    session.write(stream);

    }


    public void sendCameraShake(int slotId, int b, int c, int d, int e) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 44);
    stream.writeByte128(b);
    stream.writeByte128(slotId);
    stream.writeByte128;
    stream.writeByte128(c);
    stream.writeShortLE(e);
    session.write(stream);
    }

    public void sendStopCameraShake() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 131);
    session.write(stream);
    }

    public void sendIComponentModel(int interfaceId, int componentId,
    int modelId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 102);
    stream.writeIntV1(modelId);
    stream.writeIntV1(interfaceId << 16 | componentId);
    session.write(stream);
    }

    public void sendHideIComponent(int interfaceId, int componentId,
    boolean hidden) {
    OutputStream stream = new OutputStream(6);
    stream.writePacket(player, 112);
    stream.writeIntV2(interfaceId << 16 | componentId);
    stream.writeByte(hidden ? 1 : 0);
    session.write(stream);
    }

    public void sendRemoveGroundItem(FloorItem item) {
    OutputStream stream = createWorldTileStream(item.getTile());
    int localX = item.getTile().getLocalX(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int localY = item.getTile().getLocalY(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 108);
    stream.writeShortLE(item.getId());
    stream.write128Byte((offsetX << 4) | offsetY);
    session.write(stream);

    }


    public void sendGroundItem(FloorItem item) {
    OutputStream stream = createWorldTileStream(item.getTile());
    int localX = item.getTile().getLocalX(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int localY = item.getTile().getLocalY(
    player.getLastLoadedMapRegionTile(), player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 125);
    stream.writeByte128((offsetX << 4) | offsetY);
    stream.writeShortLE128(item.getAmount());
    stream.writeShortLE(item.getId());
    session.write(stream);
    }

    public void sendProjectile(Entity receiver, WorldTile startTile,
    WorldTile endTile, int gfxId, int startHeight, int endHeight,
    int speed, int delay, int curve, int startDistanceOffset,
    int creatorSize) {
    OutputStream stream = createWorldTileStream(startTile);
    stream.writePacket(player, 20);
    int localX = startTile.getLocalX(player.getLastLoadedMapRegionT ile(),
    player.getMapSize());
    int localY = startTile.getLocalY(player.getLastLoadedMapRegionT ile(),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writeByte((offsetX << 3) | offsetY);
    stream.writeByte(endTile.getX() - startTile.getX());
    stream.writeByte(endTile.getY() - startTile.getY());
    stream.writeShort(receiver == null ? 0
    : (receiver instanceof Player ? -(receiver.getIndex() + 1)
    : receiver.getIndex() + 1));
    stream.writeShort(gfxId);
    stream.writeByte(startHeight);
    stream.writeByte(endHeight);
    stream.writeShort(delay);
    int duration = (Utils.getDistance(startTile.getX(), startTile.getY(),
    endTile.getX(), endTile.getY()) * 30 / ((speed / 10) < 1 ? 1
    : (speed / 10)))
    + delay;
    stream.writeShort(duration);
    stream.writeByte(curve);
    stream.writeShort(creatorSize * 64 + startDistanceOffset * 64);
    session.write(stream);

    }

    public void sendUnlockIComponentOptionSlots(int interfaceId,
    int componentId, int fromSlot, int toSlot, int... optionsSlots) {
    int settingsHash = 0;
    for (int slot : optionsSlots)
    settingsHash |= 2 << slot;
    sendIComponentSettings(interfaceId, componentId, fromSlot, toSlot,
    settingsHash);
    }

    public void sendIComponentSettings(int interfaceId, int componentId,
    int fromSlot, int toSlot, int settingsHash) {
    OutputStream stream = new OutputStream(13);
    stream.writePacket(player, 40);
    stream.writeIntV2(settingsHash);
    stream.writeInt(interfaceId << 16 | componentId);
    stream.writeShort128(fromSlot);
    stream.writeShortLE(toSlot);
    session.write(stream);
    }

    public void sendInterFlashScript(int interfaceId,
    int componentId, int width, int height, int slot) {
    Object[] parameters = new Object[4];
    int index = 0;
    parameters[index++] = slot;
    parameters[index++] = height;
    parameters[index++] = width;
    parameters[index++] = interfaceId << 16 | componentId;
    sendRunScript(143, parameters);
    }

    public void sendInterSetItemsOptionsScript(int interfaceId,
    int componentId, int key, int width, int height, String... options) {
    sendInterSetItemsOptionsScript(interfaceId, componentId, key, false, width, height, options);
    }

    public void sendInterSetItemsOptionsScript(int interfaceId,
    int componentId, int key, boolean negativeKey, int width, int height, String... options) {
    Object[] parameters = new Object[6 + options.length];
    int index = 0;
    for (int count = options.length - 1; count >= 0; count--)
    parameters[index++] = options[count];
    parameters[index++] = -1; // dunno but always this
    parameters[index++] = 0;// dunno but always this, maybe startslot?
    parameters[index++] = height;
    parameters[index++] = width;
    parameters[index++] = key;
    parameters[index++] = interfaceId << 16 | componentId;
    sendRunScript(negativeKey ? 695 : 150, parameters); // scriptid 150 does that the method
    // name says*/
    }

    public void sendInputNameScript(String message) {
    sendRunScript(109, new Object[] { message });
    }

    public void sendInputIntegerScript(boolean integerEntryOnly, String message) {
    sendRunScript(108, new Object[] { message });
    }

    public void sendInputLongTextScript(String message) {
    sendRunScript(110, new Object[] { message });
    }


    public void sendRunScript(int scriptId, Object... params) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 119);
    String parameterTypes = "";
    if (params != null) {
    for (int count = params.length - 1; count >= 0; count--) {
    if (params[count] instanceof String)
    parameterTypes += "s"; // string
    else
    parameterTypes += "i"; // integer
    }
    }
    stream.writeString(parameterTypes);
    if (params != null) {
    int index = 0;
    for (int count = parameterTypes.length() - 1; count >= 0; count--) {
    if (parameterTypes.charAt(count) == 's')
    stream.writeString((String) params[index++]);
    else
    stream.writeInt((Integer) params[index++]);
    }
    }
    stream.writeInt(scriptId);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGlobalConfig(int id, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendGlobalConfig2(id, value);
    else
    sendGlobalConfig1(id, value);
    }

    public void sendGlobalConfig1(int id, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 154);
    stream.writeByteC(value);
    stream.writeShort128(id);
    session.write(stream);
    }

    public void sendGlobalConfig2(int id, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 63);
    stream.writeShort128(id);
    stream.writeInt(value);
    session.write(stream);
    }

    public void sendConfig(int id, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendConfig2(id, value);
    else
    sendConfig1(id, value);
    }

    public void sendConfigByFile(int fileId, int value) {
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE)
    sendConfigByFile2(fileId, value);
    else
    sendConfigByFile1(fileId, value);
    }

    public void sendConfig1(int id, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 110);
    stream.writeShortLE128(id);
    stream.writeByte128(value);
    session.write(stream);
    }

    public void sendConfig2(int id, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 56);
    stream.writeShort128(id);
    stream.writeIntLE(value);
    session.write(stream);
    }

    public void sendConfigByFile1(int fileId, int value) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 111);
    stream.writeShort128(fileId);
    stream.writeByteC(value);
    session.write(stream);
    }

    public void sendConfigByFile2(int fileId, int value) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 81);
    stream.writeIntV1(value);
    stream.writeShort128(fileId);
    session.write(stream);
    }

    public void sendRunEnergy() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 25);
    stream.writeByte(player.getRunEnergy());
    session.write(stream);
    }

    public void sendIComponentText(int interfaceId, int componentId, String text) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 135);
    stream.writeString(text);
    stream.writeInt(interfaceId << 16 | componentId);
    stream.endPacketVarShort();
    session.write(stream);

    }

    public void sendIComponentAnimation(int emoteId, int interfaceId,
    int componentId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 103);
    stream.writeIntV2(emoteId);
    stream.writeInt(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendItemOnIComponent(int interfaceid, int componentId, int id,
    int amount) {
    OutputStream stream = new OutputStream(11);
    stream.writePacket(player, 152);
    stream.writeShort128(id);
    stream.writeIntV1(amount);
    stream.writeIntV2(interfaceid << 16 | componentId);
    session.write(stream);

    }

    public void sendEntityOnIComponent(boolean isPlayer, int entityId,
    int interfaceId, int componentId) {
    if (isPlayer)
    sendPlayerOnIComponent(interfaceId, componentId);
    else
    sendNPCOnIComponent(interfaceId, componentId, entityId);
    }

    public void sendWorldTile(WorldTile tile) {
    session.write(createWorldTileStream(tile));
    }

    public OutputStream createWorldTileStream(WorldTile tile) {
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 158);
    stream.writeByte128(tile.getLocalY(player.getLastL oadedMapRegionTile(),
    player.getMapSize()) >> 3);
    stream.writeByteC(tile.getPlane());
    stream.write128Byte(tile.getLocalX(player.getLastL oadedMapRegionTile(),
    player.getMapSize()) >> 3);
    return stream;
    }

    public void sendObjectAnimation(WorldObject object, Animation animation) {
    OutputStream stream = new OutputStream(10);
    stream.writePacket(player, 76);
    stream.writeInt(animation.getIds()[0]);
    stream.writeByteC((object.getType() << 2)
    + (object.getRotation() & 0x3));
    stream.writeIntLE(object.getTileHash());
    session.write(stream);
    }

    public void sendTileMessage(String message, WorldTile tile, int color) {
    sendTileMessage(message, tile, 5000, 255, color);
    }

    public void sendTileMessage(String message, WorldTile tile, int delay,
    int height, int color) {
    OutputStream stream = createWorldTileStream(tile);
    stream.writePacketVarByte(player, 107);
    stream.skip(1);
    int localX = tile.getLocalX(player.getLastLoadedMapRegionTile() ,
    player.getMapSize());
    int localY = tile.getLocalY(player.getLastLoadedMapRegionTile() ,
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writeByte((offsetX << 4) | offsetY);
    stream.writeShort(delay / 30);
    stream.writeByte(height);
    stream.write24BitInteger(color);
    stream.writeString(message);
    stream.endPacketVarByte();
    session.write(stream);
    }
    public void sendSpawnedObject(WorldObject object) {
    int chunkRotation = World.getRotation(object.getPlane(), object.getX(), object.getY());
    if(chunkRotation == 1) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(0, - (defs.getSizeY() - 1), 0);
    }else if(chunkRotation == 2) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(- (defs.getSizeY() - 1), 0, 0);
    }
    OutputStream stream = createWorldTileStream(object);
    int localX = object.getLocalX(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int localY = object.getLocalY(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 120);
    stream.writeByte((offsetX << 4) | offsetY); // the hash
    // for
    // coords,
    // useless
    stream.writeByte((object.getType() << 2) + (object.getRotation() & 0x3));
    stream.writeIntLE(object.getId());
    session.write(stream);

    }

    public void sendDestroyObject(WorldObject object) {
    int chunkRotation = World.getRotation(object.getPlane(), object.getX(), object.getY());
    if(chunkRotation == 1) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(0, - (defs.getSizeY() - 1), 0);
    }else if(chunkRotation == 2) {
    object = new WorldObject(object);
    ObjectDefinitions defs = ObjectDefinitions
    .getObjectDefinitions(object.getId());
    object.moveLocation(- (defs.getSizeY() - 1), 0, 0);
    }
    OutputStream stream = createWorldTileStream(object);
    int localX = object.getLocalX(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int localY = object.getLocalY(player.getLastLoadedMapRegionTile (),
    player.getMapSize());
    int offsetX = localX - ((localX >> 3) << 3);
    int offsetY = localY - ((localY >> 3) << 3);
    stream.writePacket(player, 45);
    stream.writeByteC((object.getType() << 2) + (object.getRotation() & 0x3));
    stream.writeByte128((offsetX << 4) | offsetY); // the hash for coords,
    // useless
    session.write(stream);

    }

    public void sendPlayerOnIComponent(int interfaceId, int componentId) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 23);
    stream.writeIntV2(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendNPCOnIComponent(int interfaceId, int componentId, int npcId) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 31);
    stream.writeInt(npcId);
    stream.writeInt(interfaceId << 16 | componentId);
    session.write(stream);

    }

    public void sendRandomOnIComponent(int interfaceId, int componentId, int id) {
    /*
    * OutputStream stream = new OutputStream(); stream.writePacket(player, 235);
    * stream.writeShort(id); stream.writeIntV1(interfaceId << 16 |
    * componentId); stream.writeShort(interPacketsCount++);
    * session.write(stream);
    */
    }

    public void sendFaceOnIComponent(int interfaceId, int componentId,
    int look1, int look2, int look3) {
    /*
    * OutputStream stream = new OutputStream(); stream.writePacket(player, 192);
    * stream.writeIntV2(interfaceId << 16 | componentId);
    * stream.writeShortLE128(interPacketsCount++);
    * stream.writeShortLE128(look1); stream.writeShortLE128(look2);
    * stream.writeShort128(look2); session.write(stream);
    */
    }

    public void sendFriendsChatChannel() {
    FriendChatsManager manager = player.getCurrentFriendChat();
    OutputStream stream = new OutputStream(manager == null ? 3
    : manager.getDataBlock().length + 3);
    stream.writePacketVarShort(player, 117);
    if (manager != null)
    stream.writeBytes(manager.getDataBlock());
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriends() {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 2);
    for(String username : player.getFriendsIgnores().getFriends()) {
    String displayName;
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 != null)
    displayName = p2.getDisplayName();
    else
    displayName = Utils.formatPlayerNameForDisplay(username);
    player.getPackets().sendFriend(
    Utils.formatPlayerNameForDisplay(username), displayName, 1,
    p2 != null && player.getFriendsIgnores().isOnline(p2), false, stream);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriend(String username, String displayName, int world,
    boolean putOnline, boolean warnMessage) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 2);
    sendFriend(username, displayName, world, putOnline, warnMessage, stream);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendFriend(String username, String displayName, int world,
    boolean putOnline, boolean warnMessage, OutputStream stream) {
    stream.writeByte(warnMessage ? 0 : 1);
    stream.writeString(displayName);
    stream.writeString(displayName.equals(username) ? "" : username);
    stream.writeShort(putOnline ? world : 0);
    stream.writeByte(player.getFriendsIgnores().getRan k(
    Utils.formatPlayerNameForProtocol(username)));
    stream.writeByte(0);
    if (putOnline) {
    stream.writeString(Settings.SERVER_NAME);
    stream.writeByte(0);
    }
    }

    public void sendIgnores() {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 55);
    stream.writeByte(player.getFriendsIgnores().getIgn ores().size());
    for(String username : player.getFriendsIgnores().getIgnores()) {
    String display;
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 != null)
    display = p2.getDisplayName();
    else
    display = Utils.formatPlayerNameForDisplay(username);
    String name = Utils.formatPlayerNameForDisplay(username);
    stream.writeString(display.equals(name) ? name : display);
    stream.writeString("");
    stream.writeString(display.equals(name) ? "" : name);
    stream.writeString("");
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendIgnore(String name, String display, boolean updateName) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 128);
    stream.writeByte(0x2);
    stream.writeString(display.equals(name) ? name : display);
    stream.writeString("");
    stream.writeString(display.equals(name) ? "" : name);
    stream.writeString("");
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPrivateMessage(String username, String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 130);
    stream.writeString(username);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGameBarStages() {
    sendConfig(1054, player.getClanStatus());
    sendConfig(1055, player.getAssistStatus());
    sendConfig(1056, player.isFilterGame() ? 1 : 0);
    sendConfig(2159, player.getFriendsIgnores().getFriendsChatStatus()) ;
    sendOtherGameBarStages();
    sendPrivateGameBarStage();
    }

    public void sendOtherGameBarStages() {
    OutputStream stream = new OutputStream(3);
    stream.writePacket(player, 89);
    stream.write128Byte(player.getTradeStatus());
    stream.writeByte(player.getPublicStatus());
    session.write(stream);
    }

    public void sendPrivateGameBarStage() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 75);
    stream.writeByte(player.getFriendsIgnores().getPri vateStatus());
    session.write(stream);
    }

    public void receivePrivateMessage(String name, String display, int rights,
    String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 105);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarShort();
    session.write(stream);
    }

    // 131 clan chat quick message

    public void receivePrivateChatQuickMessage(String name, String display,
    int rights, QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 104);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPrivateQuickMessageMessage(String username,
    QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 30);
    stream.writeString(username);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void receiveFriendChatMessage(String name, String display,
    int rights, String chatName, String message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 139);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    stream.writeLong(Utils.stringToLong(chatName));
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    Huffman.sendEncryptMessage(stream, message);
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void receiveFriendChatQuickMessage(String name, String display,
    int rights, String chatName, QuickChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 32);
    stream.writeByte(name.equals(display) ? 0 : 1);
    stream.writeString(display);
    if (!name.equals(display))
    stream.writeString(name);
    stream.writeLong(Utils.stringToLong(chatName));
    for (int i = 0; i < 5; i++)
    stream.writeByte(Utils.getRandom(255));
    stream.writeByte(rights);
    stream.writeShort(message.getFileId());
    if (message.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    stream.endPacketVarByte();
    session.write(stream);
    }

    /*
    * useless, sending friends unlocks it
    */
    public void sendUnlockIgnoreList() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 18);
    session.write(stream);
    }

    /*
    * dynamic map region
    */
    public void sendDynamicMapRegion(boolean sendLswp) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 144);
    if (sendLswp)
    player.getLocalPlayerUpdate().init(stream);
    int regionX = player.getChunkX();
    int regionY = player.getChunkY();
    stream.write128Byte(2);
    stream.writeShortLE(regionY);
    stream.writeShortLE128(regionX);
    stream.write128Byte(player.isForceNextMapLoadRefre sh() ? 1 : 0);
    stream.writeByteC(player.getMapSize());
    stream.initBitAccess();
    int mapHash = Settings.MAP_SIZES[player.getMapSize()] >> 4;
    int[] realRegionIds = new int[4 * mapHash * mapHash];
    int realRegionIdsCount = 0;
    for (int plane = 0; plane < 4; plane++) {
    for (int thisRegionX = (regionX - mapHash); thisRegionX <= ((regionX + mapHash)); thisRegionX++) { // real
    // x
    // calcs
    for (int thisRegionY = (regionY - mapHash); thisRegionY <= ((regionY + mapHash)); thisRegionY++) { // real
    // y
    // calcs
    int regionId = (((thisRegionX / 8) << 8) + (thisRegionY / 8));
    Region region = World.getRegions().get(regionId);
    int realRegionX;
    int realRegionY;
    int realPlane;
    int rotation;
    if (region instanceof DynamicRegion) { // generated map
    DynamicRegion dynamicRegion = (DynamicRegion) region;
    int[] regionCoords = dynamicRegion.getRegionCoords()[plane][thisRegionX
    - ((thisRegionX / 8) * 8)][thisRegionY
    - ((thisRegionY / 8) * 8)];
    realRegionX = regionCoords[0];
    realRegionY = regionCoords[1];
    realPlane = regionCoords[2];
    rotation = regionCoords[3];
    } else { // real map
    // base region + difference * 8 so gets real region
    // coords
    realRegionX = thisRegionX;
    realRegionY = thisRegionY;
    realPlane = plane;
    rotation = 0;// no rotation
    }
    // invalid region, not built region
    if (realRegionX == 0 || realRegionY == 0)
    stream.writeBits(1, 0);
    else {
    stream.writeBits(1, 1);
    stream.writeBits(26, (rotation << 1)
    | (realPlane << 24) | (realRegionX << 14)
    | (realRegionY << 3));
    int realRegionId = (((realRegionX / 8) << 8) + (realRegionY / 8));
    boolean found = false;
    for (int index = 0; index < realRegionIdsCount; index++)
    if (realRegionIds[index] == realRegionId) {
    found = true;
    break;
    }
    if (!found)
    realRegionIds[realRegionIdsCount++] = realRegionId;
    }

    }
    }
    }
    stream.finishBitAccess();
    for (int index = 0; index < realRegionIdsCount; index++) {
    int[] xteas = MapArchiveKeys
    .getMapKeys(realRegionIds[index]);
    if (xteas == null)
    xteas = new int[4];
    for (int keyIndex = 0; keyIndex < 4; keyIndex++)
    stream.writeInt(xteas[keyIndex]);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    /*
    * normal map region
    */
    public void sendMapRegion(boolean sendLswp) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 42);
    if (sendLswp)
    player.getLocalPlayerUpdate().init(stream);
    stream.writeByteC(player.getMapSize());
    stream.writeByte(player.isForceNextMapLoadRefresh( ) ? 1 : 0);
    stream.writeShort(player.getChunkX());
    stream.writeShort(player.getChunkY());
    for (int regionId : player.getMapRegionsIds()) {
    int[] xteas = MapArchiveKeys.getMapKeys(regionId);
    if (xteas == null)
    xteas = new int[4];
    for (int index = 0; index < 4; index++)
    stream.writeInt(xteas[index]);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendCutscene(int id) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 142);
    stream.writeShort(id);
    stream.writeShort(20); // xteas count
    for (int count = 0; count < 20; count++)
    // xteas
    for (int i = 0; i < 4; i++)
    stream.writeInt(0);
    byte[] appearence = player.getAppearence().getAppeareanceData();
    stream.writeByte(appearence.length);
    stream.writeBytes(appearence);
    stream.endPacketVarShort();
    session.write(stream);
    }

    /*
    * sets the pane interface
    */
    public void sendWindowsPane(int id, int type) {
    int[] xteas = new int[4];
    player.getInterfaceManager().setWindowsPane(id);
    OutputStream stream = new OutputStream(4);
    stream.writePacket(player, 39);
    stream.write128Byte(type);
    stream.writeShort128(id);
    stream.writeIntLE(xteas[1]);
    stream.writeIntV2(xteas[0]);
    stream.writeInt(xteas[3]);
    stream.writeInt(xteas[2]);
    session.write(stream);
    }

    public void sendPlayerOption(String option, int slot, boolean top) {
    sendPlayerOption(option, slot, top, -1);
    }

    public void sendPublicMessage(Player p, PublicChatMessage message) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 106);
    stream.writeShort(p.getIndex());
    stream.writeShort(message.getEffects());
    stream.writeByte(p.getMessageIcon());
    if (message instanceof QuickChatMessage) {
    QuickChatMessage qcMessage = (QuickChatMessage) message;
    stream.writeShort(qcMessage.getFileId());
    if (qcMessage.getMessage() != null)
    stream.writeBytes(message.getMessage().getBytes()) ;
    } else {
    byte[] chatStr = new byte[250];
    chatStr[0] = (byte) message.getMessage().length();
    int offset = 1 + Huffman.encryptMessage(1, message.getMessage()
    .length(), chatStr, 0, message.getMessage().getBytes());
    stream.writeBytes(chatStr, 0, offset);
    }
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendPlayerOption(String option, int slot, boolean top,
    int cursor) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 118);
    stream.writeByte128(slot);
    stream.writeString(option);
    stream.writeShortLE128(cursor);
    stream.writeByteC(top ? 1 : 0);
    stream.endPacketVarByte();
    session.write(stream);
    }

    /*
    * sends local players update
    */
    public void sendLocalPlayersUpdate() {
    session.write(player.getLocalPlayerUpdate().create PacketAndProcess());
    }

    /*
    * sends local npcs update
    */
    public void sendLocalNPCsUpdate() {
    session.write(player.getLocalNPCUpdate().createPac ketAndProcess());
    }

    public void sendGraphics(Graphics graphics, Object target) {
    OutputStream stream = new OutputStream(13);
    int hash = 0;
    if (target instanceof Player) {
    Player p = (Player) target;
    hash = p.getIndex() & 0xffff | 1 << 28;
    } else if (target instanceof NPC) {
    NPC n = (NPC) target;
    hash = n.getIndex() & 0xffff | 1 << 29;
    } else {
    WorldTile tile = (WorldTile) target;
    hash = tile.getPlane() << 28 | tile.getX() << 14 | tile.getY()
    & 0x3fff | 1 << 30;
    }
    stream.writePacket(player, 90);
    stream.writeShort(graphics.getId());
    stream.writeByte128(0); // slot id used for entitys
    stream.writeShort(graphics.getSpeed());
    stream.writeByte128(graphics.getSettings2Hash());
    stream.writeShort(graphics.getHeight());
    stream.writeIntLE(hash);
    session.write(stream);
    }

    public void sendDelayedGraphics(Graphics graphics, int delay, WorldTile tile) {

    }

    public void closeInterface(int windowComponentId) {
    closeInterface(
    player.getInterfaceManager().getTabWindow(windowCo mponentId),
    windowComponentId);
    player.getInterfaceManager().removeTab(windowCompo nentId);
    }

    public void closeInterface(int windowId, int windowComponentId) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 5);
    stream.writeIntLE(windowId << 16 | windowComponentId);
    session.write(stream);
    }

    public void sendInterface(boolean nocliped, int windowId,
    int windowComponentId, int interfaceId) {
    // currently fixes the inter engine.. not ready for same component
    // ids(tabs), different inters
    if (!(windowId == 752 && (windowComponentId == 9 || windowComponentId == 12))) { // if
    // chatbox
    if (player.getInterfaceManager().containsInterface(
    windowComponentId, interfaceId))
    closeInterface(windowComponentId);
    if (!player.getInterfaceManager().addInterface(window Id,
    windowComponentId, interfaceId)) {
    Logger.log(this, "Error adding interface: " + windowId + " , "
    + windowComponentId + " , " + interfaceId);
    return;
    }
    }
    int[] xteas = new int[4];
    OutputStream stream = new OutputStream(24);
    stream.writePacket(player, 14);
    stream.writeShort(interfaceId);
    stream.writeInt(xteas[0]);
    stream.writeIntV2(xteas[1]);
    stream.writeIntV1(windowId << 16 | windowComponentId);
    stream.writeByte(nocliped ? 1 : 0);
    stream.writeIntV1(xteas[3]);
    stream.writeIntV2(xteas[2]);
    session.write(stream);
    }

    public void sendSystemUpdate(int delay) {
    OutputStream stream = new OutputStream(3);
    stream.writePacket(player, 141);
    stream.writeShort((int) (delay * 1.6));
    session.write(stream);
    }

    public void sendUpdateItems(int key, ItemsContainer<Item> items,
    int... slots) {
    sendUpdateItems(key, items.getItems(), slots);
    }

    public void sendUpdateItems(int key, Item[] items, int... slots) {
    sendUpdateItems(key, key < 0, items, slots);
    }

    public void sendUpdateItems(int key, boolean negativeKey, Item[] items,
    int... slots) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 138);
    stream.writeShort(key);
    stream.writeByte(negativeKey ? 1 : 0);
    for (int slotId : slots) {
    if (slotId >= items.length)
    continue;
    stream.writeSmart(slotId);
    int id = -1;
    int amount = 0;
    Item item = items[slotId];
    if (item != null) {
    id = item.getId();
    amount = item.getAmount();
    }
    stream.writeShort(id + 1);
    if (id != -1) {
    stream.writeByte(amount >= 255 ? 255 : amount);
    if (amount >= 255)
    stream.writeInt(amount);
    }
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendGlobalString(int id, String string) {
    OutputStream stream = new OutputStream();
    if(string.length() > 253) {
    stream.writePacketVarShort(player, 34);
    stream.writeString(string);
    stream.writeShort(id);
    stream.endPacketVarShort();
    }else{
    stream.writePacketVarByte(player, 134);
    stream.writeShort(id);
    stream.writeString(string);
    stream.endPacketVarByte();
    }
    session.write(stream);
    }

    public void sendItems(int key, ItemsContainer<Item> items) {
    sendItems(key, key < 0, items);
    }

    public void sendItems(int key, boolean negativeKey,
    ItemsContainer<Item> items) {
    sendItems(key, negativeKey, items.getItems());
    }

    public void sendItems(int key, Item[] items) {
    sendItems(key, key < 0, items);
    }


    public void resetItems(int key, boolean negativeKey, int size) {
    sendItems(key, negativeKey, new Item[size]);
    }

    public void sendItems(int key, boolean negativeKey, Item[] items) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 77);
    stream.writeShort(key); //negativeKey ? -key : key
    stream.writeByte(negativeKey ? 1 : 0);
    stream.writeShort(items.length);
    for (int index = 0; index < items.length; index++) {
    Item item = items[index];
    int id = -1;
    int amount = 0;
    if (item != null) {
    id = item.getId();
    amount = item.getAmount();
    }
    stream.writeShortLE128(id + 1);
    stream.writeByte128(amount >= 255 ? 255 : amount);
    if (amount >= 255)
    stream.writeIntV1(amount);
    }
    stream.endPacketVarShort();
    session.write(stream);
    }

    public void sendLogout(boolean lobby) {
    OutputStream stream = new OutputStream();
    stream.writePacket(player, lobby ? 59 : 60);
    ChannelFuture future = session.write(stream);
    if (future != null)
    future.addListener(ChannelFutureListener.CLOSE);
    else
    session.getChannel().close();
    }


    public void sendInventoryMessage(int border, int slotId, String message) {
    sendGameMessage(message);
    sendRunScript(948, border, slotId, message);
    }

    public void sendNPCMessage(int border, NPC npc, String message) {
    sendGameMessage(message);
    }

    public void sendGameMessage(String text) {
    sendGameMessage(text, false);
    }

    public void sendGameMessage(String text, boolean filter) {
    sendMessage(filter ? 109 : 0, text, null);
    }

    public void sendPanelBoxMessage(String text) {
    sendMessage(player.getRights() == 2 ? 99 : 0, text, null);
    }

    public void sendTradeRequestMessage(Player p) {
    sendMessage(100, "wishes to trade with you.", p);
    }

    public void sendClanWarsRequestMessage(Player p) {
    sendMessage(101, "wishes to challenge your clan to a clan war.", p);
    }

    public void sendDuelChallengeRequestMessage(Player p, boolean friendly) {
    sendMessage(101, "wishes to duel with you("
    + (friendly ? "friendly" : "stake") + ").", p);
    }

    public void sendMessage(int type, String text, Player p) {
    int maskData = 0;
    if (p != null) {
    maskData |= 0x1;
    if (p.hasDisplayName())
    maskData |= 0x2;
    }
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 136);
    stream.writeSmart(type);
    stream.writeInt(player.getTileHash()); // junk, not used by client
    stream.writeByte(maskData);
    if ((maskData & 0x1) != 0) {
    stream.writeString(p.getDisplayName());
    if (p.hasDisplayName())
    stream.writeString(Utils.formatPlayerNameForDispla y(p
    .getUsername()));
    }
    stream.writeString(text);
    stream.endPacketVarByte();
    session.write(stream);
    }

    // effect type 1 or 2(index4 or index14 format, index15 format unusused by
    // jagex for now)
    public void sendSound(int id, int delay, int effectType) {
    if (effectType == 1)
    sendIndex14Sound(id, delay);
    else if (effectType == 2)
    sendIndex15Sound(id, delay);
    }

    public void sendVoice(int id) {
    resetSounds();
    sendSound(id, 0, 2);
    }

    public void resetSounds() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 145);
    session.write(stream);
    }

    public void sendIndex14Sound(int id, int delay) {
    OutputStream stream = new OutputStream(9);
    stream.writePacket(player, 26);
    stream.writeShort(id);
    stream.writeByte(1);//repeated amount
    stream.writeShort(delay);
    stream.writeByte(255);
    stream.writeShort(256);
    session.write(stream);
    }

    public void sendIndex15Sound(int id, int delay) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 70);
    stream.writeShort(id);
    stream.writeByte(1); // amt of times it repeats
    stream.writeShort(delay);
    stream.writeByte(255); // volume
    session.write(stream);
    }

    public void sendMusicEffect(int id) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 9);
    stream.write128Byte(255); // volume
    stream.write24BitIntegerV2(0);
    stream.writeShort(id);
    session.write(stream);
    }

    public void sendMusic(int id) {
    sendMusic(id, 100, 255);
    }

    public void sendMusic(int id, int delay, int volume) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 129);
    stream.writeByte(delay);
    stream.writeShortLE128(id);
    stream.writeByte128(volume);
    session.write(stream);
    }

    public void sendSkillLevel(int skill) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 146);
    stream.write128Byte(skill);
    stream.writeInt((int) player.getSkills().getXp(skill));
    stream.writeByte128(player.getSkills().getLevel(sk ill));
    session.write(stream);
    }

    // CUTSCENE PACKETS START

    /**
    * This will blackout specified area.
    *
    * @Param byte area = area which will be blackout (0 = unblackout; 1 =
    * blackout orb; 2 = blackout map; 5 = blackout orb and map)
    */
    public void sendBlackOut(int area) {
    OutputStream out = new OutputStream(2);
    out.writePacket(player, 69);
    out.writeByte(area);
    session.write(out);
    }

    // instant
    public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ) {
    sendCameraLook(viewLocalX, viewLocalY, viewZ, -1, -1);
    }

    public void sendCameraLook(int viewLocalX, int viewLocalY, int viewZ,
    int speed1, int speed2) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 116);
    stream.writeByte128(viewLocalY);
    stream.writeByte(speed1);
    stream.writeByteC(viewLocalX);
    stream.writeByte(speed2);
    stream.writeShort128(viewZ >> 2);
    session.write(stream);
    }

    public void sendResetCamera() {
    OutputStream stream = new OutputStream(1);
    stream.writePacket(player, 95);
    session.write(stream);
    }

    public void sendCameraRotation(int unknown1, int unknown2) {
    OutputStream stream = new OutputStream(5);
    stream.writePacket(player, 123);
    stream.writeShort(unknown1);
    stream.writeShortLE(unknown1);
    session.write(stream);
    }

    public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ) {
    sendCameraPos(moveLocalX, moveLocalY, moveZ, -1, -1);
    }

    public void sendClientConsoleCommand(String command) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 61);
    stream.writeString(command);
    stream.endPacketVarByte();
    }

    public void sendOpenURL(String url) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarShort(player, 17);
    stream.writeByte(0);
    stream.writeString(url);
    stream.endPacketVarShort();
    session.write(stream);
    }



    public void sendSetMouse(String walkHereReplace, int cursor) {
    OutputStream stream = new OutputStream();
    stream.writePacketVarByte(player, 10);
    stream.writeString(walkHereReplace);
    stream.writeShort(cursor);
    stream.endPacketVarByte();
    session.write(stream);
    }

    public void sendItemsLook() {
    OutputStream stream = new OutputStream(2);
    stream.writePacket(player, 159);
    stream.writeByte(player.isOldItemsLook() ? 1 : 0);
    session.write(stream);
    }

    public void sendCameraPos(int moveLocalX, int moveLocalY, int moveZ,
    int speed1, int speed2) {
    OutputStream stream = new OutputStream(7);
    stream.writePacket(player, 74);
    stream.writeByte128(speed2);
    stream.writeByte128(speed1);
    stream.writeByte(moveLocalY);
    stream.writeShort(moveZ >> 2);
    stream.writeByte(moveLocalX);
    session.write(stream);
    }

    }



    Spoiler for worldspacketdecoder:


    package com.rs.net.decoders;

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;

    import com.rs.Settings;
    import com.rs.game.Animation;
    import com.rs.game.Graphics;
    import com.rs.game.World;
    import com.rs.game.WorldObject;
    import com.rs.game.WorldTile;
    import com.rs.game.item.FloorItem;
    import com.rs.game.item.Item;
    import com.rs.game.minigames.clanwars.ClanWars;
    import com.rs.game.minigames.creations.StealingCreation;
    import com.rs.game.npc.NPC;
    import com.rs.game.npc.familiar.Familiar;
    import com.rs.game.npc.familiar.Familiar.SpecialAttack;
    import com.rs.game.player.CoordsEvent;
    import com.rs.game.player.Inventory;
    import com.rs.game.player.LogicPacket;
    import com.rs.game.player.Player;
    import com.rs.game.player.PublicChatMessage;
    import com.rs.game.player.QuickChatMessage;
    import com.rs.game.player.Skills;
    import com.rs.game.player.actions.PlayerCombat;
    import com.rs.game.player.actions.PlayerFollow;
    import com.rs.game.player.actions.Summoning;
    import com.rs.game.player.content.Commands;
    import com.rs.game.player.content.FriendChatsManager;
    import com.rs.game.player.content.Magic;
    import com.rs.game.player.content.Notes.Note;
    import com.rs.game.player.content.Shop;
    import com.rs.game.player.content.SkillCapeCustomizer;
    import com.rs.game.player.content.Vote;
    import com.rs.io.InputStream;
    import com.rs.net.Session;
    import com.rs.net.decoders.handlers.ButtonHandler;
    import com.rs.net.decoders.handlers.InventoryOptionsHandl er;
    import com.rs.net.decoders.handlers.NPCHandler;
    import com.rs.net.decoders.handlers.ObjectHandler;
    import com.rs.utils.DisplayNames;
    import com.rs.utils.Logger;
    import com.rs.utils.Utils;
    import com.rs.utils.huffman.Huffman;

    public final class WorldPacketsDecoder extends Decoder {

    private static final byte[] PACKET_SIZES = new byte[104];

    private final static int WALKING_PACKET = 8;
    private final static int PLAYER_OPTION_6_PACKET = 49;
    private final static int MINI_WALKING_PACKET = 58;
    private final static int AFK_PACKET = -1;
    public final static int ACTION_BUTTON1_PACKET = 14;
    public final static int ACTION_BUTTON2_PACKET = 67;
    public final static int ACTION_BUTTON3_PACKET = 5;
    public final static int ACTION_BUTTON4_PACKET = 55;
    public final static int ACTION_BUTTON5_PACKET = 68;
    public final static int ACTION_BUTTON6_PACKET = 90;
    public final static int ACTION_BUTTON7_PACKET = 6;
    public final static int ACTION_BUTTON8_PACKET = 32;
    public final static int ACTION_BUTTON9_PACKET = 27;
    public final static int WORLD_MAP_CLICK = 38;
    public final static int ACTION_BUTTON10_PACKET = 96;
    public final static int RECEIVE_PACKET_COUNT_PACKET = 33;
    private final static int MAGIC_ON_ITEM_PACKET = -1;
    private final static int PLAYER_OPTION_4_PACKET = 17;
    private final static int MOVE_CAMERA_PACKET = 103;
    private final static int INTERFACE_ON_OBJECT = 37;
    private final static int CLICK_PACKET = -1;
    private final static int MOUVE_MOUSE_PACKET = -1;
    private final static int KEY_TYPED_PACKET = -1;
    private final static int CLOSE_INTERFACE_PACKET = 54;
    private final static int COMMANDS_PACKET = 60;
    private final static int ITEM_ON_ITEM_PACKET = 3;
    private final static int IN_OUT_SCREEN_PACKET = -1;
    private final static int DONE_LOADING_REGION_PACKET = 30;
    private final static int PING_PACKET = 21;
    private final static int SCREEN_PACKET = 98;
    private final static int CHAT_TYPE_PACKET = 83;
    private final static int CHAT_PACKET = 53;
    private final static int PUBLIC_QUICK_CHAT_PACKET = 86;
    private final static int ADD_FRIEND_PACKET = 89;
    private final static int ADD_IGNORE_PACKET = 4;
    private final static int REMOVE_IGNORE_PACKET = 73;
    private final static int JOIN_FRIEND_CHAT_PACKET = 36;
    private final static int CHANGE_FRIEND_CHAT_PACKET = 22;
    private final static int KICK_FRIEND_CHAT_PACKET = 74;
    private final static int REMOVE_FRIEND_PACKET = 24;
    private final static int SEND_FRIEND_MESSAGE_PACKET = 82;
    private final static int SEND_FRIEND_QUICK_CHAT_PACKET = 0;
    private final static int OBJECT_CLICK1_PACKET = 26;
    private final static int OBJECT_CLICK2_PACKET = 59;
    private final static int OBJECT_CLICK3_PACKET = 40;
    private final static int OBJECT_CLICK4_PACKET = 23;
    private final static int OBJECT_CLICK5_PACKET = 80;
    private final static int OBJECT_EXAMINE_PACKET = 25;
    private final static int NPC_CLICK1_PACKET = 31;
    private final static int NPC_CLICK2_PACKET = 101;
    private final static int NPC_CLICK3_PACKET = 34;
    private final static int ATTACK_NPC = 20;
    private final static int PLAYER_OPTION_1_PACKET = 42;
    private final static int PLAYER_OPTION_2_PACKET = 46;
    private final static int ITEM_TAKE_PACKET = 57;
    private final static int DIALOGUE_CONTINUE_PACKET = 72;
    private final static int ENTER_INTEGER_PACKET = 81;
    private final static int ENTER_NAME_PACKET = 29;
    private final static int ENTER_STRING_PACKET = -1;
    private final static int SWITCH_INTERFACE_ITEM_PACKET = 76;
    private final static int INTERFACE_ON_PLAYER = 50;
    private final static int INTERFACE_ON_NPC = 66;
    private final static int COLOR_ID_PACKET = 97;
    private static final int NPC_EXAMINE_PACKET = 9;
    private final static int REPORT_ABUSE_PACKET = -1;

    private static final int Hakurenpin = 0;

    static {
    loadPacketSizes();
    }

    public static void loadPacketSizes() {
    PACKET_SIZES[0] = -1;
    PACKET_SIZES[1] = -2;
    PACKET_SIZES[2] = -1;
    PACKET_SIZES[3] = 16;
    PACKET_SIZES[4] = -1;
    PACKET_SIZES[5] = 8;
    PACKET_SIZES[6] = 8;
    PACKET_SIZES[7] = 3;
    PACKET_SIZES[8] = -1;
    PACKET_SIZES[9] = 3;
    PACKET_SIZES[10] = -1;
    PACKET_SIZES[11] = -1;
    PACKET_SIZES[12] = -1;
    PACKET_SIZES[13] = 7;
    PACKET_SIZES[14] = 8;
    PACKET_SIZES[15] = 6;
    PACKET_SIZES[16] = 2;
    PACKET_SIZES[17] = 3;
    PACKET_SIZES[18] = -1;
    PACKET_SIZES[19] = -2;
    PACKET_SIZES[20] = 3;
    PACKET_SIZES[21] = 0;
    PACKET_SIZES[22] = -1;
    PACKET_SIZES[23] = 9;
    PACKET_SIZES[24] = -1;
    PACKET_SIZES[25] = 9;
    PACKET_SIZES[26] = 9;
    PACKET_SIZES[27] = 8;
    PACKET_SIZES[28] = 4;
    PACKET_SIZES[29] = -1;
    PACKET_SIZES[30] = 0;
    PACKET_SIZES[31] = 3;
    PACKET_SIZES[32] = 8;
    PACKET_SIZES[33] = 4;
    PACKET_SIZES[34] = 3;
    PACKET_SIZES[35] = -1;
    PACKET_SIZES[36] = -1;
    PACKET_SIZES[37] = 17;
    PACKET_SIZES[38] = 4;
    PACKET_SIZES[39] = 4;
    PACKET_SIZES[40] = 9;
    PACKET_SIZES[41] = -1;
    PACKET_SIZES[42] = 3;
    PACKET_SIZES[43] = 7;
    PACKET_SIZES[44] = -2;
    PACKET_SIZES[45] = 7;
    PACKET_SIZES[46] = 3;
    PACKET_SIZES[47] = 4;
    PACKET_SIZES[48] = -1;
    PACKET_SIZES[49] = 3;
    PACKET_SIZES[50] = 11;
    PACKET_SIZES[51] = 3;
    PACKET_SIZES[52] = -1;
    PACKET_SIZES[53] = -1;
    PACKET_SIZES[54] = 0;
    PACKET_SIZES[55] = 8;
    PACKET_SIZES[56] = 3;
    PACKET_SIZES[57] = 7;
    PACKET_SIZES[58] = -1;
    PACKET_SIZES[59] = 9;
    PACKET_SIZES[60] = -1;
    PACKET_SIZES[61] = 7;
    PACKET_SIZES[62] = 7;
    PACKET_SIZES[63] = 12;
    PACKET_SIZES[64] = 4;
    PACKET_SIZES[65] = 3;
    PACKET_SIZES[66] = 11;
    PACKET_SIZES[67] = 8;
    PACKET_SIZES[68] = 8;
    PACKET_SIZES[69] = 15;
    PACKET_SIZES[70] = 1;
    PACKET_SIZES[71] = 2;
    PACKET_SIZES[72] = 6;
    PACKET_SIZES[73] = -1;
    PACKET_SIZES[74] = -1;
    PACKET_SIZES[75] = -2;
    PACKET_SIZES[76] = 16;
    PACKET_SIZES[77] = 3;
    PACKET_SIZES[78] = 1;
    PACKET_SIZES[79] = 3;
    PACKET_SIZES[80] = 9;
    PACKET_SIZES[81] = 4;
    PACKET_SIZES[82] = -2;
    PACKET_SIZES[83] = 1;
    PACKET_SIZES[84] = 1;
    PACKET_SIZES[85] = 3;
    PACKET_SIZES[86] = -1;
    PACKET_SIZES[87] = 4;
    PACKET_SIZES[88] = 3;
    PACKET_SIZES[89] = -1;
    PACKET_SIZES[90] = 8;
    PACKET_SIZES[91] = -2;
    PACKET_SIZES[92] = -1;
    PACKET_SIZES[93] = -1;
    PACKET_SIZES[94] = 9;
    PACKET_SIZES[95] = -2;
    PACKET_SIZES[96] = 8;
    PACKET_SIZES[97] = 2;
    PACKET_SIZES[98] = 6;
    PACKET_SIZES[99] = 2;
    PACKET_SIZES[100] = -2;
    PACKET_SIZES[101] = 3;
    PACKET_SIZES[102] = 7;
    PACKET_SIZES[103] = 4;
    }

    private Player player;
    private int chatType;

    public WorldPacketsDecoder(Session session, Player player) {
    super(session);
    this.player = player;
    }

    @Override
    public void decode(InputStream stream) {
    while (stream.getRemaining() > 0 && session.getChannel().isConnected()
    && !player.hasFinished()) {
    int packetId = stream.readPacket(player);
    if (packetId >= PACKET_SIZES.length || packetId < 0) {
    if (Settings.DEBUG)
    System.out.println("PacketId " + packetId
    + " has fake packet id.");
    break;
    }
    int length = PACKET_SIZES[packetId];
    if (length == -1)
    length = stream.readUnsignedByte();
    else if (length == -2)
    length = stream.readUnsignedShort();
    else if (length == -3)
    length = stream.readInt();
    else if (length == -4) {
    length = stream.getRemaining();
    if (Settings.DEBUG)
    System.out.println("Invalid size for PacketId " + packetId
    + ". Size guessed to be " + length);
    }
    if (length > stream.getRemaining()) {
    length = stream.getRemaining();
    if (Settings.DEBUG)
    System.out.println("PacketId " + packetId
    + " has fake size. - expected size " + length);
    // break;

    }


    /*
    * System.out.println("PacketId " +packetId+
    * " has . - expected size " +length);
    */
    int startOffset = stream.getOffset();
    processPackets(packetId, stream, length);
    stream.setOffset(startOffset + length);
    }
    }

    public static void decodeLogicPacket(final Player player, LogicPacket packet) {
    int packetId = packet.getId();
    InputStream stream = new InputStream(packet.getData());
    if (packetId == WALKING_PACKET || packetId == MINI_WALKING_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() > currentTime)
    return;
    if (player.getFreezeDelay() >= currentTime) {
    player.getPackets().sendGameMessage(
    "A magical force prevents you from moving.");
    return;
    }
    int length = stream.getLength();
    /*if (packetId == MINI_WALKING_PACKET)
    length -= 13;*/
    int baseX = stream.readUnsignedShort128();
    boolean forceRun = stream.readUnsigned128Byte() == 1;
    int baseY = stream.readUnsignedShort128();
    int steps = (length - 5) / 2;
    if (steps > 25)
    steps = 25;
    player.stopAll();
    if(forceRun)
    player.setRun(forceRun);
    for (int step = 0; step < steps; step++)
    if (!player.addWalkSteps(baseX + stream.readUnsignedByte(),
    baseY + stream.readUnsignedByte(), 25,
    true))
    break;
    } else if (packetId == INTERFACE_ON_OBJECT) {
    boolean forceRun = stream.readByte128() == 1;
    int itemId = stream.readShortLE128();
    int y = stream.readShortLE128();
    int objectId = stream.readIntV2();
    int interfaceHash = stream.readInt();
    final int interfaceId = interfaceHash >> 16;
    int slot = stream.readShortLE();
    int x = stream.readShort128();
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() >= currentTime || player.getEmotesManager().getNextEmoteEnd() >= currentTime)
    return;
    final WorldTile tile = new WorldTile(x, y, player.getPlane());
    int regionId = tile.getRegionId();
    if (!player.getMapRegionsIds().contains(regionId))
    return;
    WorldObject mapObject = World.getRegion(regionId).getObject(objectId, tile);
    if (mapObject == null || mapObject.getId() != objectId)
    return;
    final WorldObject object = !player.isAtDynamicRegion() ? mapObject : new WorldObject(objectId, mapObject.getType(), mapObject.getRotation(), x, y, player.getPlane());
    final Item item = player.getInventory().getItem(slot);
    if (player.isDead() || Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (item == null || item.getId() != itemId)
    return;
    player.stopAll(false); // false
    if(forceRun)
    player.setRun(forceRun);
    switch (interfaceId) {
    case Inventory.INVENTORY_INTERFACE: // inventory
    ObjectHandler.handleItemOnObject(player, object, interfaceId, item);
    break;
    }
    } else if (packetId == PLAYER_OPTION_2_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerFollow(p2));

    } else if (packetId == PLAYER_OPTION_6_PACKET) {
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player other = World.getPlayers().get(playerIndex);
    if (other == null || other.isDead() || other.hasFinished()
    || !player.getMapRegionsIds().contains(other.getRegio nId()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    if (player.getInterfaceManager().containsScreenInter( )) {
    player.getPackets()
    .sendGameMessage("The other player is busy.");
    return;
    }
    if (!other.withinDistance(player, 14)) {
    player.getPackets().sendGameMessage(
    "Unable to find target " + other.getDisplayName());
    return;
    }
    if (player.getAttackedByDelay() + 10000 > Utils.currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "<col=B00000>You view "
    + other.getDisplayName()
    + " Stats's until 10 seconds after the end of combat.");
    return;
    }
    player.getInterfaceManager().sendInterface(1314);
    player.getPackets().sendIComponentText(1314, 91,
    "" + other.getDisplayName() + "'s stats");
    player.getPackets().sendIComponentText(1314, 90,
    ""+ other.getPrestige()+ " <col=00FF7F>FS - Prestige Points");
    player.getPackets().sendIComponentText(1314, 61,
    "" + other.getSkills().getLevel(0));
    player.getPackets().sendIComponentText(1314, 62,
    "" + other.getSkills().getLevel(2));
    player.getPackets().sendIComponentText(1314, 63,
    "" + other.getSkills().getLevel(1));
    player.getPackets().sendIComponentText(1314, 65,
    "" + other.getSkills().getLevel(4));
    player.getPackets().sendIComponentText(1314, 66,
    "" + other.getSkills().getLevel(5));
    player.getPackets().sendIComponentText(1314, 64,
    "" + other.getSkills().getLevel(6));
    player.getPackets().sendIComponentText(1314, 78,
    "" + other.getSkills().getLevel(20));
    player.getPackets().sendIComponentText(1314, 81,
    "" + other.getSkills().getLevel(22));
    player.getPackets().sendIComponentText(1314, 76,
    "" + other.getSkills().getLevel(24));
    player.getPackets().sendIComponentText(1314, 82,
    "" + other.getSkills().getLevel(3));
    player.getPackets().sendIComponentText(1314, 83,
    "" + other.getSkills().getLevel(16));
    player.getPackets().sendIComponentText(1314, 84,
    "" + other.getSkills().getLevel(15));
    player.getPackets().sendIComponentText(1314, 80,
    "" + other.getSkills().getLevel(17));
    player.getPackets().sendIComponentText(1314, 70,
    "" + other.getSkills().getLevel(12));
    player.getPackets().sendIComponentText(1314, 85,
    "" + other.getSkills().getLevel(9));
    player.getPackets().sendIComponentText(1314, 77,
    "" + other.getSkills().getLevel(18));
    player.getPackets().sendIComponentText(1314, 79,
    "" + other.getSkills().getLevel(21));
    player.getPackets().sendIComponentText(1314, 68,
    "" + other.getSkills().getLevel(14));
    player.getPackets().sendIComponentText(1314, 69,
    "" + other.getSkills().getLevel(13));
    player.getPackets().sendIComponentText(1314, 74,
    "" + other.getSkills().getLevel(10));
    player.getPackets().sendIComponentText(1314, 75,
    "" + other.getSkills().getLevel(7));
    player.getPackets().sendIComponentText(1314, 73,
    "" + other.getSkills().getLevel(11));
    player.getPackets().sendIComponentText(1314, 71,
    "" + other.getSkills().getLevel(8));
    player.getPackets().sendIComponentText(1314, 72,
    "" + other.getSkills().getLevel(19));
    player.getPackets().sendIComponentText(1314, 67,
    "" + other.getSkills().getLevel(23));
    player.getPackets().sendIComponentText(1314, 87,
    "" + other.getMaxHitpoints());
    player.getPackets().sendIComponentText(1314, 86,
    "" + other.getSkills().getCombatLevelWithSummoning());
    player.getPackets().sendIComponentText(1314, 88,
    "" + other.getSkills().getTotalLevel(other));
    player.getPackets().sendIComponentText(1314, 89,
    "" + other.getSkills().getTotalXp(other));
    player.getTemporaryAttributtes().put("finding_play er",
    Boolean.FALSE);
    } else if (packetId == PLAYER_OPTION_4_PACKET) {
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    player.stopAll(false);
    if(player.isCantTrade()) {
    player.getPackets().sendGameMessage("You are busy.");
    return;
    }
    if (p2.getInterfaceManager().containsScreenInter() || p2.isCantTrade()) {
    player.getPackets().sendGameMessage("The other player is busy.");
    return;
    }
    if (!p2.withinDistance(player, 14)) {
    player.getPackets().sendGameMessage(
    "Unable to find target "+p2.getDisplayName());
    return;
    }

    if (p2.getTemporaryAttributtes().get("TradeTarget") == player) {
    p2.getTemporaryAttributtes().remove("TradeTarget") ;
    player.getTrade().openTrade(p2);
    p2.getTrade().openTrade(player);
    return;
    }
    player.getTemporaryAttributtes().put("TradeTarget" , p2);
    player.getPackets().sendGameMessage("Sending " + p2.getDisplayName() + " a request...");
    p2.getPackets().sendTradeRequestMessage(player);
    //tradelogs
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE SENT] "+ player.getDisplayName()+" to "+p2.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } else if (packetId == PLAYER_OPTION_1_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int playerIndex = stream.readUnsignedShortLE128();
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis()
    || !player.getControlerManager().canPlayerOption1(p2) )
    return;
    if (!player.isCanPvp())
    return;
    if (!player.getControlerManager().canAttack(p2))
    return;

    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils.currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy to player,
    // player has priority over
    // npc on single areas
    } else {
    player.getPackets().sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerCombat(p2));
    } else if (packetId == ATTACK_NPC) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead()) {
    return;
    }
    if (player.getLockDelay() > Utils.currentTimeMillis()) {
    return;
    }
    int npcIndex = stream.readUnsignedShort128();
    boolean forceRun = stream.read128Byte() == 1;
    if(forceRun)
    player.setRun(forceRun);
    NPC npc = World.getNPCs().get(npcIndex);
    if (npc == null || npc.isDead() || npc.hasFinished()
    || !player.getMapRegionsIds().contains(npc.getRegionI d())
    || !npc.getDefinitions().hasAttackOption()) {
    return;
    }
    if (!player.getControlerManager().canAttack(npc)) {
    return;
    }
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.stopAll(false);
    player.getActionManager().setAction(new PlayerCombat(npc));
    } else if (packetId == INTERFACE_ON_PLAYER) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    @suppressWarnings("unused")
    int junk1 = stream.readUnsignedShort();
    int playerIndex = stream.readUnsignedShort();
    int interfaceHash = stream.readIntV2();
    @suppressWarnings("unused")
    int junk2 = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    boolean unknown = stream.read128Byte() == 1;
    int interfaceId = interfaceHash >> 16;
    int componentId = interfaceHash - (interfaceId << 16);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (componentId == 65535)
    componentId = -1;
    if (componentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
    return;
    Player p2 = World.getPlayers().get(playerIndex);
    if (p2 == null || p2.isDead() || p2.hasFinished()
    || !player.getMapRegionsIds().contains(p2.getRegionId ()))
    return;
    player.stopAll(false);
    switch (interfaceId) {
    case 662:
    case 747:
    if (player.getFamiliar() == null)
    return;
    player.resetWalkSteps();
    if ((interfaceId == 747 && componentId == 15)
    || (interfaceId == 662 && componentId == 65)
    || (interfaceId == 662 && componentId == 74)
    || interfaceId == 747 && componentId == 18) {
    if ((interfaceId == 662 && componentId == 74
    || interfaceId == 747 && componentId == 24 || interfaceId == 747
    && componentId == 18)) {
    if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
    return;
    }
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!player.getFamiliar().canAttack(p2)) {
    player.getPackets()
    .sendGameMessage(
    "You can only use your familiar in a multi-zone area.");
    return;
    } else {
    player.getFamiliar().setSpecial(
    interfaceId == 662 && componentId == 74
    || interfaceId == 747
    && componentId == 18);
    player.getFamiliar().setTarget(p2);
    }
    }
    break;
    case 193:
    switch (componentId) {
    case 28:
    case 32:
    case 24:
    case 20:
    case 30:
    case 34:
    case 26:
    case 22:
    case 29:
    case 33:
    case 25:
    case 21:
    case 31:
    case 35:
    case 27:
    case 23:
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(p2
    .getCoordFaceX(p2.getSize()), p2
    .getCoordFaceY(p2.getSize()), p2.getPlane()));
    if (!player.getControlerManager().canAttack(p2))
    return;
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "That "
    + (player
    .getAttackedBy() instanceof Player ? "player"
    : "npc")
    + " is already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy
    // to player,
    // player has
    // priority over
    // npc on single
    // areas
    } else {
    player.getPackets()
    .sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.getActionManager()
    .setAction(new PlayerCombat(p2));
    }
    break;
    }
    case 192:
    switch (componentId) {
    case 25: // air strike
    case 28: // water strike
    case 30: // earth strike
    case 32: // fire strike
    case 34: // air bolt
    case 39: // water bolt
    case 42: // earth bolt
    case 45: // fire bolt
    case 49: // air blast
    case 52: // water blast
    case 58: // earth blast
    case 63: // fire blast
    case 70: // air wave
    case 73: // water wave
    case 77: // earth wave
    case 80: // fire wave
    case 86: // teleblock
    case 84: // air surge
    case 87: // water surge
    case 89: // earth surge
    case 91: // fire surge
    case 99: // storm of armadyl
    case 36: // bind
    case 66: // Sara Strike
    case 67: // Guthix Claws
    case 68: // Flame of Zammy
    case 55: // snare
    case 81: // entangle
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(p2
    .getCoordFaceX(p2.getSize()), p2
    .getCoordFaceY(p2.getSize()), p2.getPlane()));
    if (!player.getControlerManager().canAttack(p2))
    return;
    if (!player.isCanPvp() || !p2.isCanPvp()) {
    player.getPackets()
    .sendGameMessage(
    "You can only attack players in a player-vs-player area.");
    return;
    }
    if (!p2.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != p2
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets()
    .sendGameMessage(
    "That "
    + (player
    .getAttackedBy() instanceof Player ? "player"
    : "npc")
    + " is already in combat.");
    return;
    }
    if (p2.getAttackedBy() != player
    && p2.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    if (p2.getAttackedBy() instanceof NPC) {
    p2.setAttackedBy(player); // changes enemy
    // to player,
    // player has
    // priority over
    // npc on single
    // areas
    } else {
    player.getPackets()
    .sendGameMessage(
    "That player is already in combat.");
    return;
    }
    }
    }
    player.getActionManager()
    .setAction(new PlayerCombat(p2));
    }
    break;
    }
    break;
    }
    if (Settings.DEBUG)
    System.out.println("Spell:" + componentId);
    } else if (packetId == INTERFACE_ON_NPC) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    if (player.getLockDelay() > Utils.currentTimeMillis())
    return;
    @suppressWarnings("unused")
    boolean unknown = stream.readByte() == 1;
    int interfaceHash = stream.readInt();
    int npcIndex = stream.readUnsignedShortLE();
    int interfaceSlot = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    int junk2 =stream.readUnsignedShortLE();
    int interfaceId = interfaceHash >> 16;
    int componentId = interfaceHash - (interfaceId << 16);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId)
    return;
    if (!player.getInterfaceManager().containsInterface(i nterfaceId))
    return;
    if (componentId == 65535)
    componentId = -1;
    if (componentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(interf aceId) <= componentId)
    return;
    NPC npc = World.getNPCs().get(npcIndex);
    if (npc == null || npc.isDead() || npc.hasFinished()
    || !player.getMapRegionsIds().contains(npc.getRegionI d()))
    return;
    player.stopAll(false);
    if (interfaceId != Inventory.INVENTORY_INTERFACE) {
    if (!npc.getDefinitions().hasAttackOption()) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    }
    switch (interfaceId) {
    case Inventory.INVENTORY_INTERFACE:
    Item item = player.getInventory().getItem(interfaceSlot);
    if (item == null || !player.getControlerManager().processItemOnNPC(npc , item))
    return;
    InventoryOptionsHandler.handleItemOnNPC(player, npc, item);
    break;
    case 1165:
    Summoning.attackDreadnipTarget(npc, player/*, stream*/);
    break;
    case 662:
    case 747:
    if (player.getFamiliar() == null)
    return;
    player.resetWalkSteps();
    if ((interfaceId == 747 && componentId == 15)
    || (interfaceId == 662 && componentId == 65)
    || (interfaceId == 662 && componentId == 74)
    || interfaceId == 747 && componentId == 18
    || interfaceId == 747 && componentId == 24) {
    if ((interfaceId == 662 && componentId == 74 || interfaceId == 747
    && componentId == 18)) {
    if (player.getFamiliar().getSpecialAttack() != SpecialAttack.ENTITY)
    return;
    }
    if(npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage("You can't attack your own familiar.");
    return;
    }
    if (!player.getFamiliar().canAttack(familiar.getOwner ())) {
    player.getPackets().sendGameMessage("You can only attack players in a player-vs-player area.");
    return;
    }
    }
    if (!player.getFamiliar().canAttack(npc)) {
    player.getPackets()
    .sendGameMessage(
    "You can only use your familiar in a multi-zone area.");
    return;
    } else {
    player.getFamiliar().setSpecial(
    interfaceId == 662 && componentId == 74
    || interfaceId == 747
    && componentId == 18);
    player.getFamiliar().setTarget(npc);
    }
    }
    break;
    case 193:
    switch (componentId) {
    case 28:
    case 32:
    case 24:
    case 20:
    case 30:
    case 34:
    case 26:
    case 22:
    case 29:
    case 33:
    case 25:
    case 21:
    case 31:
    case 35:
    case 27:
    case 23:
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(npc
    .getCoordFaceX(npc.getSize()), npc
    .getCoordFaceY(npc.getSize()), npc.getPlane()));
    if (!player.getControlerManager().canAttack(npc))
    return;
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.getActionManager().setAction(
    new PlayerCombat(npc));
    }
    break;
    }
    case 192:
    switch (componentId) {
    case 25: // air strike
    case 28: // water strike
    case 30: // earth strike
    case 32: // fire strike
    case 34: // air bolt
    case 39: // water bolt
    case 42: // earth bolt
    case 45: // fire bolt
    case 49: // air blast
    case 52: // water blast
    case 58: // earth blast
    case 63: // fire blast
    case 70: // air wave
    case 73: // water wave
    case 77: // earth wave
    case 80: // fire wave
    case 84: // air surge
    case 87: // water surge
    case 89: // earth surge
    case 66: // Sara Strike
    case 67: // Guthix Claws
    case 68: // Flame of Zammy
    case 93:
    case 91: // fire surge
    case 99: // storm of Armadyl
    case 36: // bind
    case 55: // snare
    case 81: // entangle
    if (Magic.checkCombatSpell(player, componentId, 1, false)) {
    player.setNextFaceWorldTile(new WorldTile(npc
    .getCoordFaceX(npc.getSize()), npc
    .getCoordFaceY(npc.getSize()), npc.getPlane()));
    if (!player.getControlerManager().canAttack(npc))
    return;
    if (npc instanceof Familiar) {
    Familiar familiar = (Familiar) npc;
    if (familiar == player.getFamiliar()) {
    player.getPackets().sendGameMessage(
    "You can't attack your own familiar.");
    return;
    }
    if (!familiar.canAttack(player)) {
    player.getPackets().sendGameMessage(
    "You can't attack this npc.");
    return;
    }
    } else if (!npc.isForceMultiAttacked()) {
    if (!npc.isAtMultiArea() || !player.isAtMultiArea()) {
    if (player.getAttackedBy() != npc
    && player.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You are already in combat.");
    return;
    }
    if (npc.getAttackedBy() != player
    && npc.getAttackedByDelay() > Utils
    .currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "This npc is already in combat.");
    return;
    }
    }
    }
    player.getActionManager().setAction(
    new PlayerCombat(npc));
    }
    break;
    }
    break;
    }
    if (Settings.DEBUG)
    System.out.println("Spell:" + componentId);
    } else if (packetId == NPC_CLICK1_PACKET)
    NPCHandler.handleOption1(player, stream);
    else if (packetId == NPC_CLICK2_PACKET)
    NPCHandler.handleOption2(player, stream);
    else if (packetId == NPC_CLICK3_PACKET)
    NPCHandler.handleOption3(player, stream);
    else if (packetId == OBJECT_CLICK1_PACKET)
    ObjectHandler.handleOption(player, stream, 1);
    else if (packetId == OBJECT_CLICK2_PACKET)
    ObjectHandler.handleOption(player, stream, 2);
    else if (packetId == OBJECT_CLICK3_PACKET)
    ObjectHandler.handleOption(player, stream, 3);
    else if (packetId == OBJECT_CLICK4_PACKET)
    ObjectHandler.handleOption(player, stream, 4);
    else if (packetId == OBJECT_CLICK5_PACKET)
    ObjectHandler.handleOption(player, stream, 5);
    else if (packetId == ITEM_TAKE_PACKET) {
    if (!player.hasStarted() || !player.clientHasLoadedMapRegion()
    || player.isDead())
    return;
    long currentTime = Utils.currentTimeMillis();
    if (player.getLockDelay() > currentTime)
    // || player.getFreezeDelay() >= currentTime)
    return;
    int y = stream.readUnsignedShort();
    int x = stream.readUnsignedShortLE();
    final int id = stream.readUnsignedShort();
    boolean forceRun = stream.read128Byte() == 1;
    final WorldTile tile = new WorldTile(x, y, player.getPlane());
    final int regionId = tile.getRegionId();
    if (!player.getMapRegionsIds().contains(regionId))
    return;
    final FloorItem item = World.getRegion(regionId).getGroundItem(id,
    tile, player);
    if (item == null)
    return;
    player.stopAll(false);
    if(forceRun)
    player.setRun(forceRun);
    player.setCoordsEvent(new CoordsEvent(tile, new Runnable() {
    @Override
    public void run() {
    final FloorItem item = World.getRegion(regionId)
    .getGroundItem(id, tile, player);
    if (item == null)
    return;
    /* if (player.getRights() > 0 || player.isSupporter())
    player.getPackets().sendGameMessage("This item was dropped by [Username] "+item.getOwner().getUsername()+ " [DiplayName] "+item.getOwner().getDisplayName());
    */ player.setNextFaceWorldTile(tile);
    player.addWalkSteps(tile.getX(), tile.getY(), 1);
    World.removeGroundItem(player, item);
    }
    }, 1, 1));
    }
    }

    public void processPackets(final int packetId, InputStream stream,
    int length) {
    player.setPacketsDecoderPing(Utils.currentTimeMill is());
    if (packetId == PING_PACKET) {
    // kk we ping
    } else if (packetId == MOUVE_MOUSE_PACKET) {
    // USELESS PACKET
    } else if (packetId == KEY_TYPED_PACKET) {
    // USELESS PACKET
    } else if (packetId == RECEIVE_PACKET_COUNT_PACKET) {
    // interface packets
    stream.readInt();
    } else if (packetId == ITEM_ON_ITEM_PACKET) {
    InventoryOptionsHandler.handleItemOnItem(player, stream);
    } else if (packetId == MAGIC_ON_ITEM_PACKET) {
    int inventoryInter = stream.readInt() >> 16;
    int itemId = stream.readShort128();
    @suppressWarnings("unused")
    int junk = stream.readShort();
    @suppressWarnings("unused")
    int itemSlot = stream.readShortLE();
    int interfaceSet = stream.readIntV1();
    int spellId = interfaceSet & 0xFFF;
    int magicInter = interfaceSet >> 16;
    if (inventoryInter == 149 && magicInter == 192) {
    switch (spellId) {
    case 59:// High Alch
    if (player.getSkills().getLevel(Skills.MAGIC) < 55) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required level to cast this spell.");
    return;
    }
    if (itemId == 995) {
    player.getPackets().sendGameMessage(
    "You can't alch this!");
    return;
    }
    if (player.getEquipment().getWeaponId() == 1401
    || player.getEquipment().getWeaponId() == 3054
    || player.getEquipment().getWeaponId() == 19323) {
    if (!player.getInventory().containsItem(561, 1)) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required runes to cast this spell.");
    return;
    }
    player.setNextAnimation(new Animation(9633));
    player.setNextGraphics(new Graphics(112));
    player.getInventory().deleteItem(561, 1);
    player.getInventory().deleteItem(itemId, 1);
    player.getInventory()
    .addItem(
    995,
    new Item(itemId, 1).getDefinitions()
    .getValue() >> 6);
    } else {
    if (!player.getInventory().containsItem(561, 1)
    || !player.getInventory().containsItem(554, 5)) {
    player.getPackets()
    .sendGameMessage(
    "You do not have the required runes to cast this spell.");
    return;
    }
    player.setNextAnimation(new Animation(713));
    player.setNextGraphics(new Graphics(113));
    player.getInventory().deleteItem(561, 1);
    player.getInventory().deleteItem(554, 5);
    player.getInventory().deleteItem(itemId, 1);
    player.getInventory()
    .addItem(
    995,
    new Item(itemId, 1).getDefinitions()
    .getValue() >> 6);
    }
    break;
    default:
    System.out.println("Spell:" + spellId + ", Item:" + itemId);
    }
    System.out.println("Spell:" + spellId + ", Item:" + itemId);
    }
    } else if (packetId == AFK_PACKET) {
    player.getSession().getChannel().close();
    } else if (packetId == CLOSE_INTERFACE_PACKET) {
    if (player.hasStarted() && !player.hasFinished() && !player.isRunning()) { //used for old welcome screen
    player.run();
    return;
    }
    player.stopAll();
    } else if (packetId == MOVE_CAMERA_PACKET) {
    // not using it atm
    stream.readUnsignedShort();
    stream.readUnsignedShort();
    } else if (packetId == IN_OUT_SCREEN_PACKET) {
    // not using this check because not 100% efficient
    @suppressWarnings("unused")
    boolean inScreen = stream.readByte() == 1;
    } else if (packetId == SCREEN_PACKET) {
    int displayMode = stream.readUnsignedByte();
    player.setScreenWidth(stream.readUnsignedShort());
    player.setScreenHeight(stream.readUnsignedShort()) ;
    @suppressWarnings("unused")
    boolean switchScreenMode = stream.readUnsignedByte() == 1;
    if (!player.hasStarted() || player.hasFinished()
    || displayMode == player.getDisplayMode()
    || !player.getInterfaceManager().containsInterface(74 2))
    return;
    player.setDisplayMode(displayMode);
    player.getInterfaceManager().removeAll();
    player.getInterfaceManager().sendInterfaces();
    player.getInterfaceManager().sendInterface(742);
    } else if (packetId == CLICK_PACKET) {
    int mouseHash = stream.readShortLE128();
    int mouseButton = mouseHash >> 15;
    int time = mouseHash - (mouseButton << 15); // time
    int positionHash = stream.readIntV1();
    int y = positionHash >> 16; // y;
    int x = positionHash - (y << 16); // x
    @suppressWarnings("unused")
    boolean clicked;
    // mass click or stupid autoclicker, lets stop lagg
    if (time <= 1 || x < 0 || x > player.getScreenWidth() || y < 0
    || y > player.getScreenHeight()) {
    // player.getSession().getChannel().close();
    clicked = false;
    return;
    }
    clicked = true;
    } else if (packetId == DIALOGUE_CONTINUE_PACKET) {
    int interfaceHash = stream.readInt();
    int junk = stream.readShort128();
    int interfaceId = interfaceHash >> 16;
    int buttonId = (interfaceHash & 0xFF);
    if (Utils.getInterfaceDefinitionsSize() <= interfaceId) {
    // hack, or server error or client error
    // player.getSession().getChannel().close();
    return;
    }
    if (!player.isRunning()
    || !player.getInterfaceManager().containsInterface(
    interfaceId))
    return;
    if(Settings.DEBUG)
    Logger.log(this, "Dialogue: "+interfaceId+", "+buttonId+", "+junk);
    int componentId = interfaceHash - (interfaceId << 16);
    player.getDialogueManager().continueDialogue(inter faceId,
    componentId);
    } else if (packetId == WORLD_MAP_CLICK) {
    int coordinateHash = stream.readInt();
    int x = coordinateHash >> 14;
    int y = coordinateHash & 0x3fff;
    int plane = coordinateHash >> 28;
    Integer hash = (Integer)player.getTemporaryAttributtes().get("wor ldHash");
    if (hash == null || coordinateHash != hash)
    player.getTemporaryAttributtes().put("worldHash", coordinateHash);
    else {
    player.getTemporaryAttributtes().remove("worldHash ");
    player.getHintIconsManager().addHintIcon(x, y, plane, 20, 0, 2, -1, true);
    player.getPackets().sendConfig(1159, coordinateHash);
    }
    } else if (packetId == ACTION_BUTTON1_PACKET
    || packetId == ACTION_BUTTON2_PACKET
    || packetId == ACTION_BUTTON4_PACKET
    || packetId == ACTION_BUTTON5_PACKET
    || packetId == ACTION_BUTTON6_PACKET
    || packetId == ACTION_BUTTON7_PACKET
    || packetId == ACTION_BUTTON8_PACKET
    || packetId == ACTION_BUTTON3_PACKET
    || packetId == ACTION_BUTTON9_PACKET
    || packetId == ACTION_BUTTON10_PACKET) {
    ButtonHandler.handleButtons(player, stream, packetId);
    } else if (packetId == ENTER_NAME_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;
    String value = stream.readString();
    if (value.equals(""))
    return;
    if (player.getInterfaceManager().containsInterface(11 08))
    player.getFriendsIgnores().setChatPrefix(value);
    else if (player.getTemporaryAttributtes().get("yellcolor") == Boolean.TRUE) {
    if(value.length() != 6) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell color you wanted to pick cannot be longer and shorter then 6.");
    } else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell color can only contain numeric and regular characters.");
    } else {
    player.setYellColor(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getYellColor()+">"+player.getYellCol or()+"</col>.");
    }
    player.getTemporaryAttributtes().put("yellcolor", Boolean.FALSE);


    } else if (player.getTemporaryAttributtes().get("yellshade") == Boolean.TRUE) {
    if(value.length() != 6) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The HEX yell shade you wanted to pick cannot be longer and shorter then 6.");
    } else if(Utils.containsInvalidCharacter(value) || value.contains("_")) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The requested yell shade can only contain numeric and regular characters.");
    } else {
    player.setYellShade(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell color has been changed to <col="+player.getShadColor()+">"+player.getShadCol or()+"</col>.");
    }
    player.getTemporaryAttributtes().put("yellshade", Boolean.FALSE);
    } else if (player.getTemporaryAttributtes().get("yellprefix" ) == Boolean.TRUE) {
    String[] invalid = { "<euro", "<img", "<img=", "<col", "<col=",
    "<shad", "<shad=", "<str>", "<u>" };
    for (String s : invalid)
    if (value.contains(s)) {
    player.getPackets().sendGameMessage(
    "You cannot add additional code to the message.");
    return;
    }
    if(value.length() > 17) {
    player.getDialogueManager().startDialogue("SimpleM essage", "The prefix cannot be more than 16 characters.");
    } else {
    player.setPrefix(value);
    player.getDialogueManager().startDialogue("SimpleM essage", "Your yell prfix has been changed to "+player.getPrefix()+".");
    }
    player.getTemporaryAttributtes().put("yellprefix", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("entering_no te") == Boolean.TRUE) {
    player.getNotes().add(new Note(value, 1));
    player.getNotes().refresh();
    player.getTemporaryAttributtes().put("entering_not e", Boolean.FALSE);
    return;
    } else if (player.getTemporaryAttributtes().get("editing_not e") == Boolean.TRUE) {
    Note note = (Note) player.getTemporaryAttributtes().get("curNote");
    player.getNotes().getNotes().get(player.getNotes() .getNotes().indexOf(note));
    player.getNotes().refresh();
    player.getTemporaryAttributtes().put("editing_note ", Boolean.FALSE);
    } else if (player.getTemporaryAttributtes().get("view_name") == Boolean.TRUE) {
    player.getTemporaryAttributtes().remove("view_name ");
    Player other = World.getPlayerByDisplayName(value);
    if (other == null) {
    player.getPackets().sendGameMessage("Couldn't find player.");
    return;
    }
    ClanWars clan = other.getCurrentFriendChat() != null ? other.getCurrentFriendChat().getClanWars() : null;
    if (clan == null) {
    player.getPackets().sendGameMessage("This player's clan is not in war.");
    return;
    }
    if (clan.getSecondTeam().getOwnerDisplayName() != other.getCurrentFriendChat().getOwnerDisplayName() ) {
    player.getTemporaryAttributtes().put("view_prefix" , 1);
    }
    player.getTemporaryAttributtes().put("view_clan", clan);
    ClanWars.enter(player);
    } else if (player.getTemporaryAttributtes().remove("setdispl ay") != null) {
    if(Utils.invalidAccountName(Utils
    .formatPlayerNameForProtocol(value))) {
    player.getPackets().sendGameMessage("Invalid name!");
    return;
    }
    if(!DisplayNames.setDisplayName(player, value)) {
    player.getPackets().sendGameMessage("Name already in use!");
    return;
    }
    player.getPackets().sendGameMessage("Changed display name!");
    } else if (player.getTemporaryAttributtes().remove("checkvot einput") != null)
    Vote.checkVote(player, value);
    } else if (packetId == ENTER_STRING_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;
    String value = stream.readString();
    if (value.equals(""))
    return;

    } else if (packetId == ENTER_INTEGER_PACKET) {
    if (!player.isRunning() || player.isDead())
    return;

    int value = stream.readInt();
    if ((player.getInterfaceManager().containsInterface(7 62) && player
    .getInterfaceManager().containsInterface(763))
    || player.getInterfaceManager().containsInterface(11) ) {
    if (value < 0)
    return;
    Integer bank_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("bank_item_X_Slo t");
    if (bank_item_X_Slot == null)
    return;
    player.getBank().setLastX(value);
    player.getBank().refreshLastX();
    if (player.getTemporaryAttributtes().remove("bank_isW ithdraw") != null)
    player.getBank().withdrawItem(bank_item_X_Slot, value);
    else
    player.getBank()
    .depositItem(
    bank_item_X_Slot,
    value,
    player.getInterfaceManager()
    .containsInterface(11) ? false
    : true);
    } else if (player.getTemporaryAttributtes().get("bank_pin") == Boolean.TRUE) {
    if (value < 0)
    return;
    player.setBankPin(value);
    player.hasBankPin = true;
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().startDialogue("SimpleM essage", "Your Bank Pin Is... <col=FF0000>"+player.getBankPin() + " </col>Remember it!");
    player.getTemporaryAttributtes().put("bank_pin", Boolean.FALSE);

    } else if (player.getTemporaryAttributtes().get("bank_pin1") == Boolean.TRUE) {
    if (value < 0)
    return;
    if(player.pin != value) {
    player.getDialogueManager().startDialogue("SimpleM essage", "Wrong Pin please try again.");
    } else {
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().startDialogue("SimpleM essage", "You have entered your bank pin, Thank You");
    player.hasEnteredPin = true;
    }
    player.getTemporaryAttributtes().put("bank_pin1", Boolean.FALSE);


    } else if (player.getInterfaceManager().containsInterface(20 6)
    && player.getInterfaceManager().containsInterface(207 )) {
    if (value < 0)
    return;
    Integer pc_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("pc_item_X_Slot" );
    if (pc_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("pc_isRem ove") != null)
    player.getPriceCheckManager().removeItem(pc_item_X _Slot,
    value);
    else
    player.getPriceCheckManager()
    .addItem(pc_item_X_Slot, value);
    } else if (player.getInterfaceManager().containsInterface(67 1)
    && player.getInterfaceManager().containsInterface(665 )) {
    if (player.getFamiliar() == null
    || player.getFamiliar().getBob() == null)
    return;
    if (value < 0)
    return;
    Integer bob_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("bob_item_X_Slot ");
    if (bob_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("bob_isRe move") != null)
    player.getFamiliar().getBob()
    .removeItem(bob_item_X_Slot, value);
    else
    player.getFamiliar().getBob()
    .addItem(bob_item_X_Slot, value);
    } else if (player.getInterfaceManager().containsInterface(33 5)
    && player.getInterfaceManager().containsInterface(336 )) {
    int playerIndex = stream.readUnsignedShortLE128();
    @suppressWarnings("unused")
    Player p2 = World.getPlayers().get(playerIndex);
    if (value < 0)
    return;
    Integer trade_item_X_Slot = (Integer) player
    .getTemporaryAttributtes().remove("trade_item_X_Sl ot");
    if (trade_item_X_Slot == null)
    return;
    if (player.getTemporaryAttributtes().remove("trade_is Remove") != null)
    player.getTrade().removeItem(trade_item_X_Slot, value);
    else
    player.getTrade().addItem(trade_item_X_Slot, value);
    } else if (player.getTemporaryAttributtes().get("skillId") != null) {
    if (player.getEquipment().wearingArmour()) {
    player.getDialogueManager().finishDialogue();
    player.getDialogueManager().startDialogue("SimpleM essage", "You cannot do this while having armour on!");
    return;
    }

    int skillId = (Integer) player.getTemporaryAttributtes()
    .remove("skillId");
    if (skillId == Skills.HITPOINTS && value <= 9)
    value = 10;
    else if (value < 1)
    value = 1;
    else if (value > 99)
    value = 99;
    player.getSkills().set(skillId, value);
    player.getSkills().setXp(skillId, Skills.getXPForLevel(value));
    player.getAppearence().generateAppearenceData();
    player.getDialogueManager().finishDialogue();
    }//

    else if (player.getTemporaryAttributtes().get("banning_sec urity") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */

    //PIN STAFF E OUTROS
    int Staffpin = 5555;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Staffpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasStaffPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_ayslan") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */
    //PIN HAKUREN
    int Hakurenpin = 8024;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Hakurenpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasHakurenPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity_hakuren", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_hakuren") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */
    //PIN AYSLAN
    int Ayslanpin =8024;
    /**
    * 2. Use math formula. (Advanced security)
    */
    if (value != Ayslanpin) {
    player.getDialogueManager().startDialogue("SimpleM essage",
    "Access denied, you have been logged out.");
    Logger.log("Security", "Unauthorized ban attempt by " + player.getDisplayName() + ".");
    player.forceLogout();
    } else {
    player.getDialogueManager().startDialogue("SimpleM essage", "Access granted for current session.");
    Logger.log("Security", "Authorized attempt by " + player.getDisplayName() + ".");
    player.unlock();
    player.hasAyslanPin = true;
    }
    player.getTemporaryAttributtes().put("banning_secu rity_ayslan", Boolean.FALSE);
    }
    else if (player.getTemporaryAttributtes().get("banning_sec urity_titus") == Boolean.TRUE) {
    if (value < 0)
    return;
    /**
    * 1. Set a normal integer.
    */

    }

    else if (player.getTemporaryAttributtes().get("kilnX") != null) {
    int index = (Integer) player.getTemporaryAttributtes().get("scIndex");
    int componentId = (Integer) player.getTemporaryAttributtes().get("scComponentI d");
    int itemId = (Integer) player.getTemporaryAttributtes().get("scItemId");
    player.getTemporaryAttributtes().remove("kilnX");
    if (StealingCreation.proccessKilnItems(player, componentId, index, itemId, value))
    return;
    } else if (player.getInterfaceManager().containsInterface(54 8) ||
    player.getInterfaceManager().containsInterface(746 )) {
    if (value < 0)
    return;
    }
    Integer remove_X_money = (Integer) player.getTemporaryAttributtes().remove("remove_X_ money");
    if(remove_X_money == null) {
    return;
    }
    int amount = player.getInventory().getItems().getNumberOf(remov e_X_money);
    if(player.getTemporaryAttributtes().remove("remove _money") != null) {
    if (!player.getInventory().containsItem(995, 1) && !player.getInventory().hasFreeSlots()) {
    player.getPackets().sendGameMessage("You need at least 1 inventory space to withdraw your coins.");
    return;
    }
    if (player.money < 1) {
    player.getPackets().sendGameMessage("You don't have any coins on your money pouch.");
    return;
    }
    if(value <= player.money) {
    if(amount + value > 0) {
    player.getInventory().addItem(remove_X_money, value);
    player.getPackets().sendRunScript(5561, 0, value);
    player.money -= value;
    player.refreshMoneyPouch();
    } else {
    player.getPackets().sendGameMessage("You can't have more then 2,147,483,647 coins in your inventory.");
    }
    } else {
    if(amount + value > 0) {
    player.getInventory().addItem(remove_X_money, player.money);
    player.getPackets().sendRunScript(5561, 0, player.money);
    player.money -= player.money;
    player.refreshMoneyPouch();
    } else {
    player.getPackets().sendGameMessage("Please input a valid amount.");
    }
    }
    }
    } else if (packetId == SWITCH_INTERFACE_ITEM_PACKET) {
    stream.readShortLE128();
    int fromInterfaceHash = stream.readIntV1();
    int toInterfaceHash = stream.readInt();
    int fromSlot = stream.readUnsignedShort();
    int toSlot = stream.readUnsignedShortLE128();
    stream.readUnsignedShortLE();


    int toInterfaceId = toInterfaceHash >> 16;
    int toComponentId = toInterfaceHash - (toInterfaceId << 16);
    int fromInterfaceId = fromInterfaceHash >> 16;
    int fromComponentId = fromInterfaceHash - (fromInterfaceId << 16);

    if (Utils.getInterfaceDefinitionsSize() <= fromInterfaceId
    || Utils.getInterfaceDefinitionsSize() <= toInterfaceId)
    return;
    if (!player.getInterfaceManager()
    .containsInterface(fromInterfaceId)
    || !player.getInterfaceManager().containsInterface(
    toInterfaceId))
    return;
    if (fromComponentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(fromIn terfaceId) <= fromComponentId)
    return;
    if (toComponentId != -1
    && Utils.getInterfaceDefinitionsComponentsSize(toInte rfaceId) <= toComponentId)
    return;
    if (fromInterfaceId == Inventory.INVENTORY_INTERFACE
    && fromComponentId == 0
    && toInterfaceId == Inventory.INVENTORY_INTERFACE
    && toComponentId == 0) {
    toSlot -= 28;
    if (toSlot < 0
    || toSlot >= player.getInventory()
    .getItemsContainerSize()
    || fromSlot >= player.getInventory()
    .getItemsContainerSize())
    return;
    player.getInventory().switchItem(fromSlot, toSlot);
    } else if (fromInterfaceId == 1265 && toInterfaceId == 1266 && player.getTemporaryAttributtes().get("shop_buying" ) != null) {
    if ((boolean) player.getTemporaryAttributtes().get("shop_buying" ) == true) {
    Shop shop = (Shop) player.getTemporaryAttributtes().get("Shop");
    if (shop == null)
    return;
    shop.buy(player, fromSlot, 1);
    }
    } else if (fromInterfaceId == 763 && fromComponentId == 0
    && toInterfaceId == 763 && toComponentId == 0) {
    if (toSlot >= player.getInventory().getItemsContainerSize()
    || fromSlot >= player.getInventory()
    .getItemsContainerSize())
    return;
    player.getInventory().switchItem(fromSlot, toSlot);
    } else if (fromInterfaceId == 762 && toInterfaceId == 762) {
    player.getBank().switchItem(fromSlot, toSlot, fromComponentId,
    toComponentId);
    }
    if (Settings.DEBUG)
    System.out.println("Switch item " + fromInterfaceId + ", "
    + fromSlot + ", " + toSlot);
    } else if (packetId == DONE_LOADING_REGION_PACKET) {
    /*
    * if(!player.clientHasLoadedMapRegion()) { //load objects and items
    * here player.setClientHasLoadedMapRegion(); }
    * //player.refreshSpawnedObjects(); //player.refreshSpawnedItems();
    */
    } else if (packetId == WALKING_PACKET
    || packetId == MINI_WALKING_PACKET
    || packetId == ITEM_TAKE_PACKET
    || packetId == PLAYER_OPTION_2_PACKET
    || packetId == PLAYER_OPTION_4_PACKET
    || packetId == PLAYER_OPTION_1_PACKET || packetId == ATTACK_NPC
    || packetId == PLAYER_OPTION_6_PACKET
    || packetId == INTERFACE_ON_PLAYER
    || packetId == INTERFACE_ON_NPC
    || packetId == NPC_CLICK1_PACKET
    || packetId == NPC_CLICK2_PACKET
    || packetId == NPC_CLICK3_PACKET
    || packetId == OBJECT_CLICK1_PACKET
    || packetId == SWITCH_INTERFACE_ITEM_PACKET
    || packetId == OBJECT_CLICK2_PACKET
    || packetId == OBJECT_CLICK3_PACKET
    || packetId == OBJECT_CLICK4_PACKET
    || packetId == OBJECT_CLICK5_PACKET
    || packetId == INTERFACE_ON_OBJECT)
    player.addLogicPacketToQueue(new LogicPacket(packetId, length,
    stream));
    else if (packetId == OBJECT_EXAMINE_PACKET) {
    ObjectHandler.handleOption(player, stream, -1);
    }else if (packetId == NPC_EXAMINE_PACKET) {
    NPCHandler.handleExamine(player, stream);
    } else if (packetId == JOIN_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    FriendChatsManager.joinChat(stream.readString(), player);
    } else if (packetId == KICK_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 1000); // avoids
    // message
    // appearing
    player.kickPlayerFromFriendsChannel(stream.readStr ing());
    } else if (packetId == CHANGE_FRIEND_CHAT_PACKET) {
    if (!player.hasStarted()
    || !player.getInterfaceManager().containsInterface(11 08))
    return;
    player.getFriendsIgnores().changeRank(stream.readS tring(),
    stream.readUnsignedByte128());
    } else if (packetId == ADD_FRIEND_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().addFriend(stream.readSt ring());
    } else if (packetId == REMOVE_FRIEND_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().removeFriend(stream.rea dString());
    } else if (packetId == ADD_IGNORE_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().addIgnore(stream.readSt ring(), stream.readUnsignedByte() == 1);
    } else if (packetId == REMOVE_IGNORE_PACKET) {
    if (!player.hasStarted())
    return;
    player.getFriendsIgnores().removeIgnore(stream.rea dString());
    } else if (packetId == SEND_FRIEND_MESSAGE_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getMuted() > Utils.currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You temporary muted. Recheck in 48 hours.");
    return;
    }
    String username = stream.readString();
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 == null)
    return;

    player.getFriendsIgnores().sendMessage(
    p2,
    Utils.fixChatMessage(Huffman.readEncryptedMessage( 150,
    stream)));
    } else if (packetId == SEND_FRIEND_QUICK_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    String username = stream.readString();
    int fileId = stream.readUnsignedShort();
    byte[] data = null;
    if (length > 3 + username.length()) {
    data = new byte[length - (3 + username.length())];
    stream.readBytes(data);
    }
    data = Utils.completeQuickMessage(player, fileId, data);
    Player p2 = World.getPlayerByDisplayName(username);
    if (p2 == null)
    return;
    player.getFriendsIgnores().sendQuickChatMessage(p2 ,
    new QuickChatMessage(fileId, data));
    } else if (packetId == PUBLIC_QUICK_CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getLastPublicMessage() > Utils.currentTimeMillis())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 300);
    // just tells you which client script created packet
    @suppressWarnings("unused")
    boolean secondClientScript = stream.readByte() == 1;// script 5059
    // or 5061
    int fileId = stream.readUnsignedShort();
    byte[] data = null;
    if (length > 3) {
    data = new byte[length - 3];
    stream.readBytes(data);
    }
    data = Utils.completeQuickMessage(player, fileId, data);
    if (chatType == 0)
    player.sendPublicChatMessage(new QuickChatMessage(fileId, data));
    else if (chatType == 1)
    player.sendFriendsChannelQuickMessage(new QuickChatMessage(
    fileId, data));
    else if (Settings.DEBUG)
    Logger.log(this, "Unknown chat type: " + chatType);
    } else if (packetId == CHAT_TYPE_PACKET) {
    chatType = stream.readUnsignedByte();
    } else if (packetId == CHAT_PACKET) {
    if (!player.hasStarted())
    return;
    if (player.getLastPublicMessage() > Utils.currentTimeMillis())
    return;
    player.setLastPublicMessage(Utils.currentTimeMilli s() + 300);
    int colorEffect = stream.readUnsignedByte();
    int moveEffect = stream.readUnsignedByte();
    String message = Huffman.readEncryptedMessage(200, stream);
    if (message == null || message.replaceAll(" ", "").equals(""))
    return;
    if (message.startsWith("::") || message.startsWith(";;")) {
    // if command exists and processed wont send message as public
    // message
    Commands.processCommand(player, message.replace("::", "")
    .replace(";;", ""), false, false);
    return;
    }
    if (player.getMuted() > Utils.currentTimeMillis()) {
    player.getPackets().sendGameMessage(
    "You temporary muted. Recheck in 48 hours.");
    return;
    }
    int effects = (colorEffect << 8) | (moveEffect & 0xff);
    if (chatType == 1)
    player.sendFriendsChannelMessage(Utils.fixChatMess age(message));
    else
    player.sendPublicChatMessage(new PublicChatMessage(Utils
    .fixChatMessage(message), effects));
    player.setLastMsg(message);
    if (Settings.DEBUG)
    Logger.log(this, "Chat type: " + chatType);
    } else if (packetId == COMMANDS_PACKET) {
    if (!player.isRunning())
    return;
    boolean clientCommand = stream.readUnsignedByte() == 1;
    @suppressWarnings("unused")
    boolean unknown = stream.readUnsignedByte() == 1;
    String command = stream.readString();
    if (!Commands.processCommand(player, command, true, clientCommand)
    && Settings.DEBUG)
    Logger.log(this, "Command: " + command);
    } else if (packetId == COLOR_ID_PACKET) {
    if (!player.hasStarted())
    return;
    int colorId = stream.readUnsignedShort();
    if (player.getTemporaryAttributtes().get("SkillcapeCu stomize") != null)
    SkillCapeCustomizer.handleSkillCapeCustomizerColor (player,
    colorId);
    }else if (packetId == REPORT_ABUSE_PACKET) {
    if (!player.hasStarted())
    return;
    @suppressWarnings("unused")
    String username = stream.readString();
    @suppressWarnings("unused")
    int type = stream.readUnsignedByte();
    @suppressWarnings("unused")
    boolean mute = stream.readUnsignedByte() == 1;
    @suppressWarnings("unused")
    String unknown2 = stream.readString();
    } else {
    if (Settings.DEBUG)
    Logger.log(this, "Missing packet " + packetId
    + ", expected size: " + length + ", actual size: "
    + PACKET_SIZES[packetId]);
    }
    }

    }

    Add-me on discord - > FAbrahams2#7064
    Reply With Quote  
     

  3. #13  
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    Quote Originally Posted by Abrahams2 View Post
    Add-me on discord - > FAbrahams2#7064
    I sent friend request
    Reply With Quote  
     

Page 2 of 2 FirstFirst 12

Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. [718]Trade Dupe Help?
    By Liam_ in forum Help
    Replies: 4
    Last Post: 12-14-2013, 06:09 PM
  2. [Dementhium 637] Trade Dupe Help
    By Crucify in forum Help
    Replies: 2
    Last Post: 02-14-2012, 02:04 AM
  3. [PI] Noted Item Trade dupe help [PI]
    By Integer in forum Help
    Replies: 6
    Last Post: 08-07-2010, 04:19 AM
  4. Delta Trade Dupe Fix? ++Rep For Help!
    By Affliction in forum Help
    Replies: 0
    Last Post: 02-09-2010, 05:53 PM
  5. Trade dupe..? Help me fix please?
    By Origin's Bitch in forum Help
    Replies: 0
    Last Post: 01-23-2010, 05:13 PM
Tags for this Thread

View Tag Cloud

Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •