@RPC(RPCSide.CLIENT)
  public void requestSelectedBlueprint() {
    if (isOutputConsistent()) {
      if (selected > -1 && selected < currentPage.size()) {
        BlueprintBase bpt = BuildCraftBuilders.clientDB.load(currentPage.get(selected));

        RPCHandler.rpcServer(this, "uploadBlueprintToServer", bpt.id, bpt.getData());
      } else {
        RPCHandler.rpcServer(this, "uploadBlueprintToServer", null, null);
      }
    }
  }
  @Override
  public void updateEntity() {
    super.updateEntity();

    if (worldObj.isRemote) {
      return;
    }

    if (progressIn > 0 && progressIn < PROGRESS_TIME) {
      progressIn++;
    }

    if (progressOut > 0 && progressOut < PROGRESS_TIME) {
      if (selected == -1) {
        progressOut++;
      } else {
        progressOut = 1;
      }
    }

    // On progress IN, we'll download the blueprint from the server to the
    // client, and then store it to the client.
    if (progressIn == 100 && getStackInSlot(1) == null) {
      setInventorySlotContents(1, getStackInSlot(0));
      setInventorySlotContents(0, null);

      BlueprintBase bpt = ItemBlueprint.loadBlueprint(getStackInSlot(1));

      if (bpt != null && uploadingPlayer != null) {
        RPCHandler.rpcPlayer(
            uploadingPlayer, this, "downloadBlueprintToClient", bpt.id, bpt.getData());
        uploadingPlayer = null;
      }
    }

    if (progressOut == 100 && getStackInSlot(3) == null) {
      RPCHandler.rpcPlayer(downloadingPlayer, this, "requestSelectedBlueprint");
      progressOut = 0;
    }
  }