private ItemStack[] getOutputs() {
    if (this.isCraftingMode()) {
      final ItemStack out = this.getAndUpdateOutput();

      if (out != null && out.stackSize > 0) {
        return new ItemStack[] {out};
      }
    } else {
      final List<ItemStack> list = new ArrayList<ItemStack>(3);
      boolean hasValue = false;

      for (final OptionalSlotFake outputSlot : this.outputSlots) {
        final ItemStack out = outputSlot.getStack();

        if (out != null && out.stackSize > 0) {
          list.add(out);
          hasValue = true;
        }
      }

      if (hasValue) {
        return list.toArray(new ItemStack[list.size()]);
      }
    }

    return null;
  }