@Override
  public void onReceivePacket(int packetID, ByteArrayDataInput dataStream) throws IOException {
    super.onReceivePacket(packetID, dataStream);

    if (packetID == TilePacketType.DESCRIPTION.ordinal()) {
      this.isInversed = dataStream.readBoolean();
      this.wattsReceived = dataStream.readDouble();
      // this.processTime = dataStream.readInt();
    } else if (packetID == TilePacketType.TOGGLE_MODE.ordinal()) {
      this.isInversed = !this.isInversed;
    }
  }
 @Override
 public void read(ByteArrayDataInput in) {
   playerName = in.readUTF();
   x = in.readInt();
   y = in.readInt();
   z = in.readInt();
   size = in.readInt();
   types = in.readInt();
   remove = in.readBoolean();
   upgrade = in.readChar();
   downgrade = in.readChar();
 }
 @Override
 public void handlePacketData(
     INetworkManager network,
     int type,
     Packet250CustomPayload packet,
     EntityPlayer player,
     ByteArrayDataInput dataStream) {
   int id = dataStream.readInt();
   switch (id) {
     case -1:
       this.sendPacketToClients = dataStream.readBoolean();
       break;
     case 1:
       this.grindingTicks = dataStream.readInt();
   }
 }
  private ClassPatch readPatch(JarEntry patchEntry, JarInputStream jis) throws IOException {
    log("\t%s", patchEntry.getName());
    ByteArrayDataInput input = ByteStreams.newDataInput(ByteStreams.toByteArray(jis));

    String name = input.readUTF();
    String sourceClassName = input.readUTF();
    String targetClassName = input.readUTF();
    boolean exists = input.readBoolean();
    int inputChecksum = 0;
    if (exists) {
      inputChecksum = input.readInt();
    }
    int patchLength = input.readInt();
    byte[] patchBytes = new byte[patchLength];
    input.readFully(patchBytes);

    return new ClassPatch(
        name, sourceClassName, targetClassName, exists, inputChecksum, patchBytes);
  }
  /**
   * this is a method for handling packets that were sent to the client.
   *
   * @param manager
   * @param packet
   * @param player
   * @param dat the data that it can read from
   * @param ID the packet ID
   */
  public void handleClientPacket(
      Packet packet, EntityPlayer player, ByteArrayDataInput dat, short ID) {
    EntityPlayer thePlayer = (EntityPlayer) player;
    World world = thePlayer.worldObj;

    if (world != null) {
      if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiAPressurePlate) {
        if (ID == 1) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            ((EntityPlayerSP) thePlayer).closeScreen();
          }

          return;
        }

        if (ID == 2) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          int allowedmobs = dat.readInt();

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            for (int var1 = 0; var1 < allowedmobs; var1++) {
              boolean bool = dat.readBoolean();
              GuiAPressurePlate.enabled[var1] = bool;
            }
          }

          return;
        }

        if (ID == 3) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            GuiAPressurePlate.tpp.allowedPlayers.clear();
            int allowedPlayers = dat.readInt();
            {
              for (int var1 = 0; var1 < allowedPlayers; var1++) {
                short nameLength = dat.readShort();
                String username = "";

                for (int var2 = 0; var2 < nameLength; var2++) {
                  username = new StringBuilder().append(username).append(dat.readChar()).toString();
                }

                boolean bool = dat.readBoolean();
                GuiAPressurePlate.tpp.addPlayer(username);
                GuiAPressurePlate.tpp.setEnabledForPlayer(username, bool);
              }

              GuiAPressurePlate.lineUp();
            }
          }

          return;
        }

        if (ID == 4) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          int index = dat.readInt();

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            GuiAPressurePlate.switchbutton(index);
          }

          return;
        }

        if (ID == 11) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            if (GuiAPressurePlate.tpp.settings == null) {
              GuiAPressurePlate.tpp.registerSettings();
            }

            int var2 = dat.readInt();

            for (int var3 = 0; var3 < var2; var3++) {
              if (var3 <= GuiAPressurePlate.tpp.settings.size()) {
                GuiAPressurePlate.tpp.setSetting(var3, dat.readBoolean());
              }
            }

            GuiAPressurePlate.LineUpSettings();
          }

          return;
        }

        if (ID == 10) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            int var2 = dat.readInt();

            if (GuiAPressurePlate.tpp.settings.size() >= var2) {
              GuiAPressurePlate.tpp.switchSetting(var2);
            }
          }

          return;
        }
      }

      if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiModifyPressurePlate) {
        if (ID == 1) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            ((EntityPlayerSP) thePlayer).closeScreen();
          }
        }

        if (ID == 3) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            GuiAPressurePlate.tpp.allowedPlayers.clear();
            int allowedPlayers = dat.readInt();
            {
              for (int var1 = 0; var1 < allowedPlayers; var1++) {
                short nameLength = dat.readShort();
                String username = "";

                for (int var2 = 0; var2 < nameLength; var2++) {
                  username = new StringBuilder().append(username).append(dat.readChar()).toString();
                }

                boolean bool = dat.readBoolean();
                GuiAPressurePlate.tpp.setEnabledForPlayer(username, bool);
              }

              GuiAPressurePlate.lineUp();
            }
          }

          return;
        }

        if (ID == 4) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          int index = dat.readInt();

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            GuiAPressurePlate.switchbutton(index);
          }

          return;
        }

        if (ID == 5) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            boolean bool = dat.readBoolean();
            int usernamelength = dat.readInt();
            String username = "";

            for (int var2 = 0; var2 < usernamelength; var2++) {
              char c = dat.readChar();
              username = new StringBuilder().append(username).append(c).toString();
            }

            if (thePlayer.getCommandSenderName().matches(username)) {
              if (bool) {
                GuiModifyPressurePlate.showText("Player added", 20);
              } else {
                GuiModifyPressurePlate.showText("Player is already in list", 20);
              }
            }
          }

          return;
        }

        if (ID == 6) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            boolean bool = dat.readBoolean();
            int usernamelength = dat.readInt();
            String username = "";

            for (int var2 = 0; var2 < usernamelength; var2++) {
              char c = dat.readChar();
              username = new StringBuilder().append(username).append(c).toString();
            }

            if (thePlayer.getCommandSenderName().matches(username)) {
              if (bool) {
                GuiModifyPressurePlate.showText("Player removed", 20);
              } else {
                GuiModifyPressurePlate.showText("Player is not in list", 20);
              }
            }
          }

          return;
        }

        if (ID == 10) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            int index = dat.readInt();

            if (GuiAPressurePlate.tpp.settings.size() >= index) {
              GuiAPressurePlate.tpp.switchSetting(index);
            }
          }

          return;
        }

        if (ID == 11) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          if (GuiAPressurePlate.tpp.xCoord == coords[0]
              && GuiAPressurePlate.tpp.yCoord == coords[1]
              && GuiAPressurePlate.tpp.zCoord == coords[2]) {
            if (GuiAPressurePlate.tpp.settings == null) {
              GuiAPressurePlate.tpp.registerSettings();
            }

            int var2 = dat.readInt();

            for (int var3 = 0; var3 < var2; var3++) {
              if (var3 <= GuiAPressurePlate.tpp.settings.size()) {
                GuiAPressurePlate.tpp.setSetting(var3, dat.readBoolean());
              }
            }

            GuiAPressurePlate.LineUpSettings();
          }

          return;
        }
      }

      if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiPassword) {
        if (ID == 12) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          int length = dat.readInt();
          StringBuilder sb = new StringBuilder();

          for (int var1 = 0; var1 < length; var1++) {
            sb.append(dat.readChar());
          }

          String name = sb.toString();

          if (((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp != null
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.xCoord
                  == coords[0]
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.yCoord
                  == coords[1]
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.zCoord
                  == coords[2]) {
            if (name.matches(thePlayer.getCommandSenderName())) {
              GuiPassword gui = (GuiPassword) FMLClientHandler.instance().getClient().currentScreen;
              gui.enterGui();
            }
          }

          return;
        }

        if (ID == 13) {
          int coords[] = new int[3];

          for (int var1 = 0; var1 < 3; var1++) {
            coords[var1] = dat.readInt();
          }

          boolean b = dat.readBoolean();

          if (((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp != null
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.xCoord
                  == coords[0]
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.yCoord
                  == coords[1]
              && ((GuiPassword) FMLClientHandler.instance().getClient().currentScreen).tpp.zCoord
                  == coords[2]) {
            GuiPassword gui = (GuiPassword) FMLClientHandler.instance().getClient().currentScreen;

            if (b) {
              gui.enterGui();
            } else {
              GuiPassword.showText("Wrong Password!!!", 20);
            }
          }

          return;
        }

        if (ID == 15) {
          return;
        }

        if (ID == 18) {
          int guiID = dat.readInt();

          if (FMLClientHandler.instance().getClient().currentScreen != null
              && FMLClientHandler.instance().getClient().currentScreen instanceof GuiPassword) {
            GuiPassword gui = (GuiPassword) FMLClientHandler.instance().getClient().currentScreen;
            gui.set = guiID;
          }

          return;
        }
      }

      if (ID == 7) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        TileEntityPressurePlate tpp = null;

        if (te != null || te instanceof TileEntityPressurePlate) {
          tpp = (TileEntityPressurePlate) te;
        }

        int itemId = dat.readInt();
        int stackSize = dat.readInt();
        int itemDamage = dat.readInt();
        int dimension = dat.readInt();

        if (!PPRegistry.getContainsPressurePlate(coords[0], coords[1], coords[2], dimension)) {
          PPRegistry.addPressurePlate(coords[0], coords[1], coords[2], dimension, false, null);
        }

        if (itemId == 0 && stackSize == 0 & itemDamage == 0) {
          if (tpp != null) {
            tpp.item[0] = null;
          }

          PPRegistry.setItem(coords[0], coords[1], coords[2], dimension, null);
          world.markBlockForUpdate(coords[0], coords[1], coords[2]);
        } else {
          if (tpp != null) {
            tpp.item[0] = new ItemStack(Item.getItemById(itemId), stackSize, itemDamage);
          }

          PPRegistry.setItem(
              coords[0],
              coords[1],
              coords[2],
              dimension,
              new ItemStack(Item.getItemById(itemId), stackSize, itemDamage));
          world.markBlockForUpdate(coords[0], coords[1], coords[2]);
        }

        return;
      }

      if (ID == 8) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        TileEntityPressurePlate tpp = null;

        if (te == null || !(te instanceof TileEntityPressurePlate)) {
          world.setTileEntity(coords[0], coords[1], coords[2], new TileEntityPressurePlate());
          tpp = (TileEntityPressurePlate) te;
        } else {
          tpp = (TileEntityPressurePlate) te;
        }

        if (tpp != null) {
          tpp.currentOutput = dat.readInt();
        }

        world.markBlockForUpdate(coords[0], coords[1], coords[2]);
        return;
      }

      if (ID == 9) {
        PPRegistry.sendToServer = true;
        return;
      }

      if (ID == 11) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        TileEntityPressurePlate tpp = null;

        if (te != null || te instanceof TileEntityPressurePlate) {
          tpp = (TileEntityPressurePlate) te;
        }

        if (tpp != null) {
          if (tpp.xCoord == coords[0] && tpp.yCoord == coords[1] && tpp.zCoord == coords[2]) {
            if (tpp.settings == null) {
              tpp.registerSettings();
            }

            int var2 = dat.readInt();

            for (int var3 = 0; var3 < var2; var3++) {
              if (var3 <= tpp.settings.size()) {
                tpp.setSetting(var3, dat.readBoolean());
              }
            }
          }
        }

        return;
      }

      if (ID == 12) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        int length = dat.readInt();
        StringBuilder sb = new StringBuilder();

        for (int var1 = 0; var1 < length; var1++) {
          sb.append(dat.readChar());
        }

        sb.toString();
        return;
      }

      if (ID == 14) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        if (te != null || te instanceof TileEntityPressurePlate) {}

        int dimension = dat.readInt();

        if (!PPRegistry.getContainsPressurePlate(coords[0], coords[1], coords[2], dimension)) {
          PPRegistry.addPressurePlate(coords[0], coords[1], coords[2], dimension, false, null);
        }

        PPRegistry.setUsesPassword(coords[0], coords[1], coords[2], dimension, dat.readBoolean());
        return;
      }

      if (ID == 16) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        TileEntityPressurePlate tpp = null;

        if (te != null || te instanceof TileEntityPressurePlate) {
          tpp = (TileEntityPressurePlate) te;
        }

        int dimension = dat.readInt();

        if (tpp != null) {
          PPRegistry.removePressurePlate(tpp, dimension);
        }

        return;
      }

      if (ID == 17) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        TileEntityPressurePlate tpp = null;

        if (te != null || te instanceof TileEntityPressurePlate) {
          tpp = (TileEntityPressurePlate) te;
        }

        int dimension = dat.readInt();

        if (tpp != null) {
          PPRegistry.addPressurePlate(tpp, dimension);
        }

        return;
      }
      if (ID == 19) {
        int coords[] = new int[3];

        for (int var1 = 0; var1 < 3; var1++) {
          coords[var1] = dat.readInt();
        }

        TileEntity te = world.getTileEntity(coords[0], coords[1], coords[2]);
        if (te instanceof TileEntityPressurePlate) {
          if (!(FMLClientHandler.instance().getClient().currentScreen
              instanceof GuiAPressurePlate)) {
            ((TileEntityPressurePlate) te).maxOutput = dat.readInt();
            ((TileEntityPressurePlate) te).itemsForMax = dat.readInt();
          } else if (GuiAPressurePlate.tpp != te || GuiAPressurePlate.hasData == false) {
            ((TileEntityPressurePlate) te).maxOutput = dat.readInt();
            ((TileEntityPressurePlate) te).itemsForMax = dat.readInt();
            GuiAPressurePlate.hasData = true;
          }
        }
      }
    }
  }